Commit 5298150d by zhangxingmin

Merge remote-tracking branch 'origin/test' into test_zxm_lengjingqi

parents 565a0e7c ae0022b3
...@@ -1324,16 +1324,14 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -1324,16 +1324,14 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
ExpectedFortune updateExpectedFortune = new ExpectedFortune(); ExpectedFortune updateExpectedFortune = new ExpectedFortune();
BeanUtils.copyProperties(request, updateExpectedFortune); BeanUtils.copyProperties(request, updateExpectedFortune);
updateExpectedFortune.setId(expectedFortune.getId()); updateExpectedFortune.setId(expectedFortune.getId());
// 默认结算汇率
updateExpectedFortune.setDefaultExchangeRate( // 如果金额变更,则需要重新计算港币金额和待出账金额
queryExchangeRateByFeign( if (ObjectUtils.notEqual(expectedFortune.getHkdAmount(), request.getHkdAmount())) {
updateExpectedFortune.getCurrency(),
"HKD"
));
// 计算港币金额 // 计算港币金额
updateExpectedFortune.setHkdAmount(updateExpectedFortune.getAmount().multiply(updateExpectedFortune.getDefaultExchangeRate())); updateExpectedFortune.setHkdAmount(request.getHkdAmount());
// 更新待出账金额 // 更新待出账金额
updateExpectedFortune.setUnpaidAmount(updateExpectedFortune.getHkdAmount()); updateExpectedFortune.setUnpaidAmount(request.getHkdAmount());
}
// 获取当前登录用户 // 获取当前登录用户
AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser(); AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser();
String loginUserId = currentLoginUser.getId().toString(); String loginUserId = currentLoginUser.getId().toString();
......
...@@ -36,10 +36,10 @@ public class ExpectedFortuneUpdateRequest { ...@@ -36,10 +36,10 @@ public class ExpectedFortuneUpdateRequest {
private LocalDate actualPayoutDate; private LocalDate actualPayoutDate;
/** /**
* 出账金额 * 港币出账金额
*/ */
@Schema(description = "出账金额") @Schema(description = "港币出账金额")
private BigDecimal amount; private BigDecimal hkdAmount;
/** /**
* 出账状态 * 出账状态
......
...@@ -79,10 +79,10 @@ public class SpeciesConditionMatcher { ...@@ -79,10 +79,10 @@ public class SpeciesConditionMatcher {
BigDecimal min = new BigDecimal(left); BigDecimal min = new BigDecimal(left);
return actual.compareTo(min) > 0; return actual.compareTo(min) > 0;
} else { } else {
// "0-10" 表示 (0, 10] // "0-10" 表示 [0, 10]
BigDecimal min = new BigDecimal(left); BigDecimal min = new BigDecimal(left);
BigDecimal max = new BigDecimal(right); BigDecimal max = new BigDecimal(right);
return actual.compareTo(min) > 0 && actual.compareTo(max) <= 0; return actual.compareTo(min) >= 0 && actual.compareTo(max) <= 0;
} }
} catch (Exception e) { } catch (Exception e) {
return false; return false;
......
...@@ -682,7 +682,7 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte ...@@ -682,7 +682,7 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
commissionExpected.setCommissionRatio(item.getCommissionRate()); commissionExpected.setCommissionRatio(item.getCommissionRate());
commissionExpected.setAmount(null); commissionExpected.setAmount(null);
commissionExpected.setCurrency(item.getCurrency()); commissionExpected.setCurrency(item.getCurrency());
commissionExpected.setCommissionDate(calculateCommissionDate(i, coolingOffEndDate)); commissionExpected.setCommissionDate(calculateCommissionDate(i, effectiveDate));
commissionExpected.setStatus(CommissionExpectedStatusEnum.PENDING.getItemValue()); commissionExpected.setStatus(CommissionExpectedStatusEnum.PENDING.getItemValue());
commissionExpected.setStatusDesc(null); commissionExpected.setStatusDesc(null);
commissionExpected.setDefaultExchangeRate(queryExchangeRateByFeign(policy.getCurrency(), item.getCurrency())); commissionExpected.setDefaultExchangeRate(queryExchangeRateByFeign(policy.getCurrency(), item.getCurrency()));
......
...@@ -280,6 +280,16 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -280,6 +280,16 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commission.setReconciliationCompany(policy.getReconciliationCompany()); commission.setReconciliationCompany(policy.getReconciliationCompany());
commission.setReconciliationCompanyCode(policy.getReconciliationCompanyCode()); commission.setReconciliationCompanyCode(policy.getReconciliationCompanyCode());
commission.setReconciliationCompanyBizId(policy.getReconciliationCompanyBizId()); commission.setReconciliationCompanyBizId(policy.getReconciliationCompanyBizId());
// 本次入账比例
commission.setCurrentCommissionRatio(
calculateCurrentCommissionRatio(
commission.getPremium(),
commission.getAmount(),
commission.getCurrency(),
commission.getExchangeRate(),
commission.getPolicyCurrency()
)
);
} }
// 匹配预计来佣记录 // 匹配预计来佣记录
CommissionExpected expected = findExpectedFromList(commission, commissionExpectedList); CommissionExpected expected = findExpectedFromList(commission, commissionExpectedList);
...@@ -287,9 +297,6 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -287,9 +297,6 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commission.setCommissionExpectedBizId(expected.getCommissionExpectedBizId()); commission.setCommissionExpectedBizId(expected.getCommissionExpectedBizId());
commission.setReceivableNo(expected.getReceivableNo()); commission.setReceivableNo(expected.getReceivableNo());
commission.setTotalPeriod(expected.getTotalPeriod()); commission.setTotalPeriod(expected.getTotalPeriod());
// 本次入账比例
commission.setCurrentCommissionRatio(calculateCurrentCommissionRatio(
commission.getPremium(), commission.getAmount(), commission.getCurrency(), commission.getExchangeRate(), expected));
} else { } else {
commission.setRemark("未查询到预计来佣记录"); commission.setRemark("未查询到预计来佣记录");
commission.setStatus(CommissionStatusEnum.MATCH_FAILED.getItemValue()); commission.setStatus(CommissionStatusEnum.MATCH_FAILED.getItemValue());
...@@ -399,7 +406,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -399,7 +406,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
requestAmount, requestAmount,
commissionUpdateRequest.getCurrency(), commissionUpdateRequest.getCurrency(),
commissionUpdateRequest.getExchangeRate(), commissionUpdateRequest.getExchangeRate(),
commissionExpected); commission.getPolicyCurrency());
commission.setCurrentCommissionRatio(currentCommissionRatio); commission.setCurrentCommissionRatio(currentCommissionRatio);
} }
} }
...@@ -750,7 +757,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -750,7 +757,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
return this.getOne(new QueryWrapper<Commission>().eq("commission_biz_id", commissionBizId)); return this.getOne(new QueryWrapper<Commission>().eq("commission_biz_id", commissionBizId));
} }
public BigDecimal calculateCurrentCommissionRatio(String premium, BigDecimal amount, String currentCurrency, BigDecimal exchangeRate, CommissionExpected commissionExpected) { public BigDecimal calculateCurrentCommissionRatio(String premium, BigDecimal amount, String currentCurrency, BigDecimal exchangeRate, String policyCurrency) {
if (ObjectUtils.isEmpty(premium)) { if (ObjectUtils.isEmpty(premium)) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "保单保费不能为空"); throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "保单保费不能为空");
} }
...@@ -760,11 +767,9 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -760,11 +767,9 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
if (ObjectUtils.isEmpty(exchangeRate)) { if (ObjectUtils.isEmpty(exchangeRate)) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "当前结算汇率不能为空"); throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "当前结算汇率不能为空");
} }
// 获取保单币种
String currency = commissionExpected.getPolicyCurrency();
// 如果当前入账币种等于保单币种,直接计算来佣比例 // 如果当前入账币种等于保单币种,直接计算来佣比例
if (StringUtils.equalsIgnoreCase(currentCurrency, currency)) { if (StringUtils.equalsIgnoreCase(currentCurrency, policyCurrency)) {
return amount.divide(new BigDecimal(premium), 4, RoundingMode.HALF_UP) return amount.divide(new BigDecimal(premium), 4, RoundingMode.HALF_UP)
.multiply(new BigDecimal(100)); .multiply(new BigDecimal(100));
} else { } else {
...@@ -853,6 +858,14 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -853,6 +858,14 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commission.setInsuranceCompanyBizId(policy.getInsuranceCompanyBizId()); commission.setInsuranceCompanyBizId(policy.getInsuranceCompanyBizId());
commission.setPremium(Convert.toStr(policy.getPaymentPremium())); commission.setPremium(Convert.toStr(policy.getPaymentPremium()));
commission.setPolicyCurrency(policy.getCurrency()); commission.setPolicyCurrency(policy.getCurrency());
// 本次入账比例
commission.setCurrentCommissionRatio(calculateCurrentCommissionRatio(
commission.getPremium(),
commission.getAmount(),
commission.getCurrency(),
commission.getExchangeRate(),
commission.getPolicyCurrency())
);
} else { } else {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "保单不存在, policyNo: " + request.getPolicyNo()); throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "保单不存在, policyNo: " + request.getPolicyNo());
} }
...@@ -862,10 +875,10 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -862,10 +875,10 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
} }
// 关联预计来佣信息 // 关联预计来佣信息
CommissionExpected expected = getCommissionExpectedBizIdBatch(request, policyNoSet, commission); CommissionExpected expected = getCommissionExpectedBizIdBatch(request, policyNoSet, commission);
if (expected != null && "R".equals(expected.getCommissionBizType())) { if (expected != null) {
// 本次入账比例 commission.setCommissionExpectedBizId(expected.getCommissionExpectedBizId());
commission.setCurrentCommissionRatio(calculateCurrentCommissionRatio( commission.setReceivableNo(expected.getReceivableNo());
commission.getPremium(), commission.getAmount(), commission.getCurrency(), commission.getExchangeRate(), expected)); commission.setTotalPeriod(expected.getTotalPeriod());
} }
commissionList.add(commission); commissionList.add(commission);
...@@ -978,11 +991,6 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -978,11 +991,6 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "来佣记录不存在"); throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "来佣记录不存在");
} }
CommissionExpected commissionExpected = commissionExpectedService.getByBizId(commission.getCommissionExpectedBizId());
if (commissionExpected != null) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "预计来佣已存在");
}
// 获取当前登录用户 // 获取当前登录用户
AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser(); AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser();
String loginUserId = currentLoginUser.getId().toString(); String loginUserId = currentLoginUser.getId().toString();
...@@ -990,25 +998,18 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -990,25 +998,18 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
CommissionExpected expected = new CommissionExpected(); CommissionExpected expected = new CommissionExpected();
BeanUtils.copyProperties(commission, expected, "id", "remark"); BeanUtils.copyProperties(commission, expected, "id", "remark");
expected.setCommissionExpectedBizId(RandomStringGenerator.generateBizId16("commission_expected")); expected.setCommissionExpectedBizId(RandomStringGenerator.generateBizId16("commission_expected"));
expected.setPremium(new BigDecimal(commission.getPremium()));
if (ObjectUtils.isEmpty(commission.getReconciliationCompanyCode())) {
if (ObjectUtils.isEmpty(commission.getReconciliationCompanyBizId())) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "来佣记录未关联对账公司");
}
// 调用对账公司 feignclient,查询对账公司编码
String reconciliationCompanyCode = policyFollowService.queryReconciliationCompanyByFeign(commission.getReconciliationCompanyBizId());
expected.setReconciliationCompanyCode(reconciliationCompanyCode);
commission.setReconciliationCompanyCode(reconciliationCompanyCode);
}
// 生成应收单编号 // 生成应收单编号
expected.setReceivableNo(receivableService.generateReceivableNo( expected.setReceivableNo(receivableService.generateReceivableNo(
commission.getCommissionBizType(), commission.getCommissionBizType(),
commission.getReconciliationCompanyCode(), commission.getReconciliationCompanyCode(),
commission.getReconciliationCompany())); commission.getReconciliationCompany()));
// 设置预计入账金额、已来佣金额、待入账金额 // 设置预计入账金额、已来佣金额、待入账金额
expected.setCommissionRatio(commission.getCurrentCommissionRatio());
expected.setExpectedAmount(commission.getHkdAmount()); expected.setExpectedAmount(commission.getHkdAmount());
expected.setPaidAmount(commission.getHkdAmount()); expected.setPaidAmount(commission.getHkdAmount());
expected.setPaidRatio(null); expected.setPaidRatio(commission.getCurrentCommissionRatio());
expected.setDefaultExchangeRate(commission.getExchangeRate()); expected.setDefaultExchangeRate(commission.getExchangeRate());
expected.setCommissionDate(commission.getCommissionDate()); expected.setCommissionDate(commission.getCommissionDate());
expected.setStatus(CommissionExpectedStatusEnum.COMPARED.getItemValue()); expected.setStatus(CommissionExpectedStatusEnum.COMPARED.getItemValue());
......
...@@ -222,10 +222,10 @@ public class FortuneVO implements Serializable { ...@@ -222,10 +222,10 @@ public class FortuneVO implements Serializable {
private String status; private String status;
/** /**
* 出账日(估) * 出账日(估) / 预计发佣月
*/ */
@Schema(description = "出账日(估)") @Schema(description = "出账日(估) / 预计发佣月")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
private LocalDate payoutDate; private LocalDate payoutDate;
/** /**
...@@ -233,7 +233,7 @@ public class FortuneVO implements Serializable { ...@@ -233,7 +233,7 @@ public class FortuneVO implements Serializable {
*/ */
@Schema(description = "出账日(实)") @Schema(description = "出账日(实)")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date actualPayoutDate; private LocalDate actualPayoutDate;
/** /**
* 是否含税 0=No, 1=Yes * 是否含税 0=No, 1=Yes
...@@ -330,13 +330,15 @@ public class FortuneVO implements Serializable { ...@@ -330,13 +330,15 @@ public class FortuneVO implements Serializable {
FortuneVO fortuneVO = new FortuneVO(); FortuneVO fortuneVO = new FortuneVO();
BeanUtils.copyProperties(fortune, fortuneVO); BeanUtils.copyProperties(fortune, fortuneVO);
// 计算已出账金额和待出账金额 // 计算已出账金额和待出账金额
fortuneVO.setFortunePaidAmount(fortune.getCurrentPaymentHkdAmount()); BigDecimal currentPaymentHkdAmount = "2".equals(fortune.getStatus()) ? fortune.getCurrentPaymentHkdAmount() : BigDecimal.ZERO;
fortuneVO.setFortuneUnpaidAmount(NumberUtil.sub(fortune.getHkdAmount(), fortune.getCurrentPaymentHkdAmount())); fortuneVO.setFortunePaidAmount(currentPaymentHkdAmount);
// 计算待出账比例 fortuneVO.setFortuneUnpaidAmount(NumberUtil.sub(fortune.getHkdAmount(), currentPaymentHkdAmount));
// 计算已出账比例
BigDecimal currentPaymentRatio = NumberUtil BigDecimal currentPaymentRatio = NumberUtil
.div(fortune.getCurrentPaymentHkdAmount(), fortune.getHkdAmount(), 4) .div(currentPaymentHkdAmount, fortune.getHkdAmount(), 4)
.multiply(BigDecimal.valueOf(100)); .multiply(BigDecimal.valueOf(100));
fortuneVO.setCurrentPaymentRatio(currentPaymentRatio); fortuneVO.setCurrentPaymentRatio(currentPaymentRatio);
// 计算剩余出账比例
fortuneVO.setFortuneUnpaidRatio(BigDecimal.valueOf(100).subtract(currentPaymentRatio)); fortuneVO.setFortuneUnpaidRatio(BigDecimal.valueOf(100).subtract(currentPaymentRatio));
fortuneVO.setCurrency(CurrencyEnum.toLabel(fortune.getCurrency())); fortuneVO.setCurrency(CurrencyEnum.toLabel(fortune.getCurrency()));
......
...@@ -51,10 +51,10 @@ public class PayableReportVO { ...@@ -51,10 +51,10 @@ public class PayableReportVO {
private Integer fortuneTotalPeriod; private Integer fortuneTotalPeriod;
/** /**
* 出账日 * 出账日 / 预计发佣月
*/ */
@Schema(description = "出账日 (保单日+2个月)") @Schema(description = "出账日 (保单生效日+2个月) / 预计发佣月")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
private LocalDate payoutDate; private LocalDate payoutDate;
/** /**
......
...@@ -55,10 +55,10 @@ public class ReceivableReportVO { ...@@ -55,10 +55,10 @@ public class ReceivableReportVO {
private Integer totalPeriod; private Integer totalPeriod;
/** /**
* 入账日(估) * 入账日(估)/ 预计来佣月
*/ */
@Schema(description = "入账日(估)(保单生效日+2个月+(期数-1)年)") @Schema(description = "入账日(估)(保单生效日+1个月)")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
private LocalDate commissionDate; private LocalDate commissionDate;
/** /**
......
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