Commit 3e802284 by jianan

前端对接问题修复77

parent 74dda06b
......@@ -408,7 +408,7 @@ public class ApiFortuneController {
@Operation(summary = "更新保单发佣信息(检核操作)")
public Result<Boolean> updateFortune(@RequestBody FortuneUpdateRequest fortuneUpdateRequest) {
if (fortuneUpdateRequest == null || fortuneUpdateRequest.getFortuneBizId() == null) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), ErrorCode.PARAMS_ERROR.getMessage());
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), "fortuneBizId不能为空");
}
return Result.success(fortuneService.updateFortune(fortuneUpdateRequest));
}
......
......@@ -15,6 +15,7 @@ import com.yd.csf.service.service.CommissionExpectedService;
import com.yd.csf.service.service.CommissionService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -199,7 +200,7 @@ public class CommissionAsyncService {
} else {
paidRatio = paidRatio.add(item.getCurrentCommissionRatio());
}
paidAmount = paidAmount.add(item.getAmount());
paidAmount = paidAmount.add(item.getHkdAmount());
}
// 更新预计来佣已入账金额、已入账比例
......@@ -295,7 +296,7 @@ public class CommissionAsyncService {
String loginUserId = currentLoginUser.getId().toString();
// 计算比对状态
if (commission.getAmount().compareTo(commissionExpected.getAmount()) == 0) {
if (commission.getAmount().compareTo(commissionExpected.getAmount()) == 0 && ObjectUtils.equals(commission.getCurrency(), commissionExpected.getCurrency())) {
// 等于预计金额时,来佣设置为比对成功
commissionService.lambdaUpdate()
.set(Commission::getStatus, CommissionStatusEnum.COMPARE_SUCCESS.getItemValue())
......@@ -369,7 +370,7 @@ public class CommissionAsyncService {
BigDecimal paidAmount = BigDecimal.ZERO;
for (Commission item : existingCommissions) {
paidRatio = paidRatio.add(item.getCurrentCommissionRatio());
paidAmount = paidAmount.add(item.getAmount());
paidAmount = paidAmount.add(item.getHkdAmount());
}
// 更新预计来佣已入账金额、已入账比例
......
......@@ -89,7 +89,7 @@ public class CommissionUpdateRequest implements Serializable {
* 结算汇率
*/
@Schema(description = "结算汇率")
private String exchangeRate;
private BigDecimal exchangeRate;
/**
* 入账日期
......
......@@ -114,6 +114,11 @@ public class Commission implements Serializable {
private String exchangeRate;
/**
* 来佣金额(港币)
*/
private BigDecimal hkdAmount;
/**
* 当前来佣比例
*/
private BigDecimal currentCommissionRatio;
......
......@@ -134,6 +134,11 @@ public class Fortune implements Serializable {
private BigDecimal currentPaymentAmount;
/**
* 本期出账比例
*/
private BigDecimal currentPaymentRatio;
/**
* 佣金发放状态 0=待出账 1=可出账 2=已出账
*/
private String status;
......
......@@ -261,6 +261,9 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
for (CommissionExpectedAddDto addDto : addDtoList) {
CommissionExpected commissionExpected = new CommissionExpected();
BeanUtils.copyProperties(addDto, commissionExpected);
// 默认已入账金额为 0
commissionExpected.setPaidAmount(BigDecimal.ZERO);
commissionExpected.setPaidRatio(BigDecimal.ZERO);
// 校验参数
validCommissionExpected(commissionExpected, true);
// 结算汇率初始值为 1
......@@ -285,7 +288,10 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
commissionExpected.setInsuranceCompanyBizId(policy.getInsuranceCompanyBizId());
commissionExpected.setProductLaunchBizId(policy.getProductLaunchBizId());
} else {
commissionExpected.setExpectedAmount(addDto.getAmount());
BigDecimal expectedAmount = addDto.getAmount()
.multiply(commissionExpected.getDefaultExchangeRate())
.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP);
commissionExpected.setExpectedAmount(expectedAmount);
}
if (StringUtils.isBlank(addDto.getCommissionExpectedBizId())) {
......@@ -334,6 +340,11 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
if (StringUtils.isBlank(request.getCommissionName())) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "入账项目名称不能为空");
}
if ("R".equals(request.getCommissionBizType())) {
if (request.getCommissionRatio() == null) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "关联保单应收单,佣金比例不能为空");
}
}
}
}
......
......@@ -298,11 +298,8 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
}
}
BigDecimal amount;
BigDecimal requestAmount = commissionUpdateRequest.getAmount();
if ("R".equals(commissionUpdateRequest.getCommissionBizType())) {
amount = commission.getAmount();
// 关联应收单,计算当前来佣比例
BigDecimal currentCommissionRatio = this.calculateCurrentCommissionRatio(
commission.getPremium(),
......@@ -320,8 +317,12 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
if (commissionExpected == null) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "未找到预计来佣记录");
}
amount = commissionExpected.getAmount();
}
// 计算来佣金额(港币)
BigDecimal hkdAmount = requestAmount
.multiply(commissionUpdateRequest.getExchangeRate())
.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP);
commission.setHkdAmount(hkdAmount);
// 获取当前登录用户
AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser();
......@@ -337,25 +338,22 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
// 执行更新操作(这个方法将在当前事务中执行)
this.updateById(commission);
// 没改金额,则不比对
if (amount != null && amount.compareTo(requestAmount) != 0) {
// 2. 注册事务同步器,在主事务提交后执行比对
TransactionSynchronizationManager.registerSynchronization(
new TransactionSynchronization() {
@Override
public void afterCommit() {
try {
// 重新查询最新的数据,获取已提交的数据
commissionAsyncService.commissionCompare(commission);
} catch (Exception e) {
// 比对失败不影响主事务,记录日志即可
log.error("主事务提交后,比对操作执行失败,commissionBizId: {}",
commissionUpdateRequest.getCommissionBizId(), e);
}
// 2. 新事务,比对
TransactionSynchronizationManager.registerSynchronization(
new TransactionSynchronization() {
@Override
public void afterCommit() {
try {
// 重新查询最新的数据,获取已提交的数据
commissionAsyncService.commissionCompare(commission);
} catch (Exception e) {
// 比对失败不影响主事务,记录日志即可
log.error("主事务提交后,比对操作执行失败,commissionBizId: {}",
commissionUpdateRequest.getCommissionBizId(), e);
}
}
);
}
}
);
return true;
}
......@@ -366,14 +364,14 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
log.error("来佣业务id不能为空:{}", commissionUpdateRequest.getCommissionBizId());
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "来佣业务id不能为空");
}
// if (ObjectUtils.isEmpty(commissionUpdateRequest.getAmount())) {
// log.error("当前入账金额不能为空,来佣业务id:{}", commissionUpdateRequest.getCommissionBizId());
// throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "当前入账金额不能为空");
// }
// if (ObjectUtils.isEmpty(commissionUpdateRequest.getExchangeRate())) {
// log.error("当前结算汇率不能为空,来佣业务id:{}", commissionUpdateRequest.getCommissionBizId());
// throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "当前结算汇率不能为空");
// }
if (ObjectUtils.isEmpty(commissionUpdateRequest.getAmount())) {
log.error("当前入账金额不能为空,来佣业务id:{}", commissionUpdateRequest.getCommissionBizId());
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "入账金额不能为空");
}
if (ObjectUtils.isEmpty(commissionUpdateRequest.getExchangeRate())) {
log.error("当前结算汇率不能为空,来佣业务id:{}", commissionUpdateRequest.getCommissionBizId());
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "结算汇率不能为空");
}
}
......@@ -670,7 +668,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
return this.getOne(new QueryWrapper<Commission>().eq("commission_biz_id", commissionBizId));
}
public BigDecimal calculateCurrentCommissionRatio(String premium, BigDecimal amount, String exchangeRate) {
public BigDecimal calculateCurrentCommissionRatio(String premium, BigDecimal amount, BigDecimal exchangeRate) {
if (ObjectUtils.isEmpty(premium)) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "保单保费不能为空");
}
......@@ -682,7 +680,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
}
// 当前来佣比例=当前入账金额/结算汇率/保费 * 100
return amount.divide(new BigDecimal(premium), 4, RoundingMode.HALF_UP)
.divide(new BigDecimal(exchangeRate), 4, RoundingMode.HALF_UP)
.divide(exchangeRate, 4, RoundingMode.HALF_UP)
.multiply(new BigDecimal(100));
}
......
......@@ -215,7 +215,7 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
// 如果传入了金额
if (currentPaymentAmount != null) {
splitFortune(fortune, currentPaymentAmount, loginUserId, fortuneUpdateRequest);
splitFortune(fortune, currentPaymentAmount, expectedFortune, loginUserId, fortuneUpdateRequest);
} else {
// 如果未传入金额,仅更新预计出账状态为已出帐
expectedFortuneService.lambdaUpdate()
......@@ -239,7 +239,7 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
* 拆分发放(按本次发放金额拆)
*/
@Transactional(rollbackFor = Exception.class)
public void splitFortune(Fortune main, BigDecimal currentPaymentAmount, String loginUserId, FortuneUpdateRequest fortuneUpdateRequest) {
public void splitFortune(Fortune main, BigDecimal currentPaymentAmount,ExpectedFortune expectedFortune, String loginUserId, FortuneUpdateRequest fortuneUpdateRequest) {
if (currentPaymentAmount == null || currentPaymentAmount.compareTo(BigDecimal.ZERO) <= 0)
throw new BusinessException("本次发放金额必须大于0");
......@@ -252,6 +252,7 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
// 1. 更新主行 = 本次发放金额
main.setCurrentPaymentAmount(currentPaymentAmount);
main.setCurrentPaymentRatio(currentPaymentAmount.divide(expectedFortune.getAmount(), 4, RoundingMode.HALF_UP));
main.setStatus(FortuneStatusEnum.CHECKED.getItemValue());
main.setUpdaterId(loginUserId);
main.setUpdateTime(new Date());
......@@ -268,6 +269,7 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
BeanUtils.copyProperties(main, part, "id", "fortuneBizId", "currentPaymentAmount", "status", "isPart", "payoutDate");
part.setFortuneBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_FORTUNE.getCode()));
part.setCurrentPaymentAmount(leftAmount);
part.setCurrentPaymentRatio(leftAmount.divide(expectedFortune.getAmount(), 4, RoundingMode.HALF_UP));
part.setStatus(FortuneStatusEnum.WAIT.getItemValue());
part.setIsPart(1);
part.setPayoutDate(LocalDate.now().plusMonths(1)); // 次月
......
......@@ -250,11 +250,14 @@ public class CommissionExpectedVO implements Serializable {
commissionVO.setPaidAmount(paidAmount1);
commissionVO.setPendingAmount(commissionExpected.getExpectedAmount().subtract(paidAmount1));
}
} else if (commissionExpected.getAmount() != null) {
return commissionVO;
}
if (commissionExpected.getAmount() != null) {
commissionVO.setPaidAmount(paidAmount1);
commissionVO.setPendingAmount(commissionExpected.getAmount().subtract(paidAmount1));
}
return commissionVO;
}
return commissionVO;
}
}
......@@ -173,6 +173,12 @@ public class FortuneVO implements Serializable {
private BigDecimal currentPaymentAmount;
/**
* 本期出账比例
*/
@Schema(description = "本期出账比例")
private BigDecimal currentPaymentRatio;
/**
* 剩余出账比例 剩余出账金额/应出账金额
*/
@Schema(description = "剩余出账比例 剩余出账金额/应出账金额")
......
......@@ -25,6 +25,7 @@
<result property="amount" column="amount" />
<result property="currency" column="currency" />
<result property="commissionDate" column="commission_date" />
<result property="hkdAmount" column="hkd_amount" />
<result property="currentCommissionRatio" column="current_commission_ratio" />
<result property="commissionExpectedBizId" column="commission_expected_biz_id" />
<result property="status" column="status" />
......@@ -42,7 +43,7 @@
insurance_company_biz_id,product_launch_biz_id,
reconciliation_company,reconciliation_company_code,reconciliation_company_biz_id,commission_period,
total_period,commission_name,commission_type,exchange_rate,amount,currency,
commission_date,current_commission_ratio,commission_expected_biz_id,
commission_date,hkd_amount,current_commission_ratio,commission_expected_biz_id,
status,status_desc,remark,is_deleted,creator_id,
updater_id,create_time,update_time
</sql>
......
......@@ -26,6 +26,7 @@
<result property="amount" column="amount" />
<result property="currency" column="currency" />
<result property="currentPaymentAmount" column="current_payment_amount" />
<result property="currentPaymentRatio" column="current_payment_ratio" />
<result property="status" column="status" />
<result property="payoutDate" column="payout_date" />
<result property="actualPayoutDate" column="actual_payout_date" />
......@@ -48,7 +49,7 @@
id,fortune_biz_id,expected_fortune_biz_id,reconciliation_year_month,fortune_biz_type,batch_biz_id,
commission_biz_id,commission_expected_biz_id,policy_no,fortune_period,fortune_total_period,broker_biz_id,
team_biz_id,grade_commission_rate,share_rate,fortune_name,fortune_type,is_part,
amount,currency,current_payment_amount,status,payout_date,actual_payout_date,is_tax,
amount,currency,current_payment_amount,current_payment_ratio,status,payout_date,actual_payout_date,is_tax,
tax_amount,net_amount,salary_biz_id,base_rule_biz_id,settlement_biz_id,
calculation_formula,remark,is_deleted,creator_id,updater_id,
create_time,update_time
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment