|
|
@@ -251,6 +251,7 @@ public class QuoteVerificationAspect {
|
|
|
BigDecimal jqInlet = BigDecimalUtil.divide(jqCostType.getInlet(), new BigDecimal(100));
|
|
|
if (BigDecimalUtil.subtract(jqEntranceFeeRatio, jqInlet).compareTo(BigDecimal.ZERO) > 0) {
|
|
|
jqEntranceFeeRatio = jqInlet;
|
|
|
+ agreementInfoVo.getAgreement().setJqEntranceFeeRatio(jqEntranceFeeRatio);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -259,6 +260,7 @@ public class QuoteVerificationAspect {
|
|
|
BigDecimal syInlet = BigDecimalUtil.divide(syCostType.getInlet(), new BigDecimal(100));
|
|
|
if (BigDecimalUtil.subtract(syEntranceFeeRatio, syInlet).compareTo(BigDecimal.ZERO) > 0) {
|
|
|
syEntranceFeeRatio = syInlet;
|
|
|
+ agreementInfoVo.getAgreement().setSyEntranceFeeRatio(syEntranceFeeRatio);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -266,6 +268,7 @@ public class QuoteVerificationAspect {
|
|
|
BigDecimal jyInlet = BigDecimalUtil.divide(jyCostType.getInlet(), new BigDecimal(100));
|
|
|
if (BigDecimalUtil.subtract(jyEntranceFeeRatio, jyInlet).compareTo(BigDecimal.ZERO) > 0) {
|
|
|
jyEntranceFeeRatio = jyInlet;
|
|
|
+ agreementInfoVo.getAgreement().setJyEntranceFeeRatio(jyEntranceFeeRatio);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -302,12 +305,12 @@ public class QuoteVerificationAspect {
|
|
|
InsFeeOrders::setJyCommissionPremium, InsFeeOrders::setJyFollowPremium, InsFeeOrders::setJyAdditionalPremium,
|
|
|
InsFeeOrders::setJyKeepPointRatio,InsFeeOrders::setJyKeepPointPremium);
|
|
|
|
|
|
- // 7. 计算分销费用
|
|
|
- calculateDistributionFee(insOrdersCosts,insFeeOrders, insOrders);
|
|
|
+ // 7. 计算分销费用 返回分销的差值
|
|
|
+ BigDecimal distributionDiff = calculateDistributionFee(insOrdersCosts,insFeeOrders, insOrders);
|
|
|
|
|
|
// 8. 计算总应收、总应付、保存费用比例 入库
|
|
|
saveRatio(insFeeOrders, agreementInfoVo, jqCostType, syCostType, jyCostType);
|
|
|
- calculateTotalPremium(insFeeOrders);
|
|
|
+ calculateTotalPremium(insFeeOrders, distributionDiff);
|
|
|
|
|
|
|
|
|
|
|
|
@@ -434,7 +437,7 @@ public class QuoteVerificationAspect {
|
|
|
/**
|
|
|
* 计算总应收和总应付金额
|
|
|
*/
|
|
|
- private void calculateTotalPremium(InsFeeOrders insFeeOrders) {
|
|
|
+ private void calculateTotalPremium(InsFeeOrders insFeeOrders, BigDecimal distributionDiff) {
|
|
|
// 总应收 = 交强险应收 + 商业险应收 + 驾意险应收
|
|
|
BigDecimal totalReceivable = insFeeOrders.getJqReceivablePremium()
|
|
|
.add(insFeeOrders.getSyReceivablePremium())
|
|
|
@@ -451,27 +454,38 @@ public class QuoteVerificationAspect {
|
|
|
insFeeOrders.setTotalPayablePremium(totalPayable);
|
|
|
|
|
|
// 计算出口费用 = (出口比列 * 保费)- 分销费
|
|
|
- BigDecimal firstDistributionFee = insFeeOrders.getFirstDistributionFee();
|
|
|
- BigDecimal secondDistributionFee = insFeeOrders.getSecondDistributionFee();
|
|
|
- BigDecimal thirdDistributionFee = insFeeOrders.getThirdDistributionFee();
|
|
|
- BigDecimal jqExportPremium = insFeeOrders.getJqExportRatio().multiply(insFeeOrders.getJqPremium()).setScale(2,RoundingMode.DOWN);
|
|
|
- if (jqExportPremium.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- jqExportPremium = jqExportPremium.subtract(firstDistributionFee).subtract(secondDistributionFee).subtract(thirdDistributionFee);
|
|
|
- }
|
|
|
+// BigDecimal firstDistributionFee = insFeeOrders.getFirstDistributionFee();
|
|
|
+// BigDecimal secondDistributionFee = insFeeOrders.getSecondDistributionFee();
|
|
|
+// BigDecimal thirdDistributionFee = insFeeOrders.getThirdDistributionFee();
|
|
|
+ BigDecimal jqExportPremiumOrigin = insFeeOrders.getJqExportRatio().multiply(insFeeOrders.getJqPremium());
|
|
|
+ BigDecimal jqExportPremium = jqExportPremiumOrigin.setScale(2,RoundingMode.DOWN);
|
|
|
+// if (jqExportPremium.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+// jqExportPremium = jqExportPremium.subtract(firstDistributionFee).subtract(secondDistributionFee).subtract(thirdDistributionFee);
|
|
|
+// }
|
|
|
insFeeOrders.setJqExportPremium(jqExportPremium);
|
|
|
|
|
|
- BigDecimal syExportPremium = insFeeOrders.getSyExportRatio().multiply(insFeeOrders.getSyPremium()).setScale(2, RoundingMode.DOWN);
|
|
|
- if (syExportPremium.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- syExportPremium = syExportPremium.subtract(firstDistributionFee).subtract(secondDistributionFee).subtract(thirdDistributionFee);
|
|
|
- }
|
|
|
+ BigDecimal syExportPremiumOrigin = insFeeOrders.getSyExportRatio().multiply(insFeeOrders.getSyPremium());
|
|
|
+ BigDecimal syExportPremium = syExportPremiumOrigin.setScale(2, RoundingMode.DOWN);
|
|
|
+// if (syExportPremium.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+// syExportPremium = syExportPremium.subtract(firstDistributionFee).subtract(secondDistributionFee).subtract(thirdDistributionFee);
|
|
|
+// }
|
|
|
insFeeOrders.setSyExportPremium(syExportPremium);
|
|
|
-
|
|
|
- BigDecimal jyExportPremium = insFeeOrders.getJyExportRatio().multiply(insFeeOrders.getJyPremium()).setScale(2, RoundingMode.DOWN);;
|
|
|
- if (jyExportPremium.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- jyExportPremium = jyExportPremium.subtract(firstDistributionFee).subtract(secondDistributionFee).subtract(thirdDistributionFee);
|
|
|
- }
|
|
|
+ BigDecimal jyExportPremiumOrigin = insFeeOrders.getJyExportRatio().multiply(insFeeOrders.getJyPremium());
|
|
|
+ BigDecimal jyExportPremium = jyExportPremiumOrigin.setScale(2, RoundingMode.DOWN);
|
|
|
+// if (jyExportPremium.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+// jyExportPremium = jyExportPremium.subtract(firstDistributionFee).subtract(secondDistributionFee).subtract(thirdDistributionFee);
|
|
|
+// }
|
|
|
insFeeOrders.setJyExportPremium(jyExportPremium);
|
|
|
|
|
|
+ // add by lipf, 2026年6月27日15:45:20 计算总的出口金额由5位调整为2位时,截断的所有金额
|
|
|
+ List<BigDecimal> diffs = new ArrayList<>();
|
|
|
+ diffs.add(BigDecimalUtil.subtract(jqExportPremiumOrigin,jqExportPremium));
|
|
|
+ diffs.add(BigDecimalUtil.subtract(syExportPremiumOrigin,syExportPremium));
|
|
|
+ diffs.add(BigDecimalUtil.subtract(jyExportPremiumOrigin,jyExportPremium));
|
|
|
+ // 分销差值
|
|
|
+ diffs.add(distributionDiff);
|
|
|
+ insFeeOrders.setTotalExportDiffAmount(BigDecimalUtil.add(diffs));
|
|
|
+
|
|
|
// 计算出口留点费用
|
|
|
BigDecimal jqExportKeepRatioPremium = insFeeOrders.getJqExportKeepPointRatio().multiply(insFeeOrders.getJqPremium());
|
|
|
insFeeOrders.setJqExportKeepPointPremium(jqExportKeepRatioPremium);
|
|
|
@@ -596,7 +610,7 @@ public class QuoteVerificationAspect {
|
|
|
/**
|
|
|
* 计算分销费
|
|
|
*/
|
|
|
- private void calculateDistributionFee(InsOrdersCosts insOrdersCosts, InsFeeOrders insFeeOrders,InsOrders insOrders){
|
|
|
+ private BigDecimal calculateDistributionFee(InsOrdersCosts insOrdersCosts, InsFeeOrders insFeeOrders,InsOrders insOrders){
|
|
|
// 总保费
|
|
|
BigDecimal totalPremium = insOrdersCosts.getSumPremium();
|
|
|
// 获取当前租户信息
|
|
|
@@ -613,35 +627,47 @@ public class QuoteVerificationAspect {
|
|
|
if (sysDept.getData() != null && sysDept.getData().getIsDistribution().equals("1")) {
|
|
|
// 获取租户分销设置为几级分销
|
|
|
String level = sysDistributionSetting.getDistributionMode();
|
|
|
+ BigDecimal diffAmount = BigDecimal.ZERO;
|
|
|
switch (level) {
|
|
|
case "1":
|
|
|
- calculateLevel1Distribution(insFeeOrders, totalPremium, currentUser.getUserId(), sysDistributionSetting);
|
|
|
+ Map<String,Object> map = calculateLevel1Distribution(insFeeOrders, totalPremium, currentUser.getUserId(), sysDistributionSetting);
|
|
|
+ if(Objects.nonNull(map)){
|
|
|
+ diffAmount = new BigDecimal(map.get("diffAmount").toString());
|
|
|
+ }
|
|
|
break;
|
|
|
case "2":
|
|
|
- String firstDistributorId = calculateLevel1Distribution(insFeeOrders, totalPremium, currentUser.getUserId(), sysDistributionSetting);
|
|
|
- if (firstDistributorId != null) {
|
|
|
- calculateLevel2Distribution(insFeeOrders, totalPremium, firstDistributorId, sysDistributionSetting);
|
|
|
+
|
|
|
+ Map<String,Object> firstDistributor = calculateLevel1Distribution(insFeeOrders, totalPremium, currentUser.getUserId(), sysDistributionSetting);
|
|
|
+ if (firstDistributor != null) {
|
|
|
+ Map<String,Object> level2map = calculateLevel2Distribution(insFeeOrders, totalPremium, firstDistributor.get("id").toString(), sysDistributionSetting);
|
|
|
+ if(Objects.nonNull(level2map)){
|
|
|
+ diffAmount = new BigDecimal(level2map.get("diffAmount").toString());
|
|
|
+ }
|
|
|
+ diffAmount = diffAmount.add(new BigDecimal(firstDistributor.get("diffAmount").toString()));
|
|
|
}
|
|
|
break;
|
|
|
case "3":
|
|
|
- String level1Id = calculateLevel1Distribution(insFeeOrders, totalPremium, currentUser.getId(), sysDistributionSetting);
|
|
|
- if (level1Id != null) {
|
|
|
- String level2Id = calculateLevel2Distribution(insFeeOrders, totalPremium, level1Id, sysDistributionSetting);
|
|
|
- if (level2Id != null) {
|
|
|
- calculateLevel3Distribution(insFeeOrders, totalPremium, level2Id, sysDistributionSetting);
|
|
|
+ Map<String,Object> level1 = calculateLevel1Distribution(insFeeOrders, totalPremium, currentUser.getId(), sysDistributionSetting);
|
|
|
+ if (level1 != null) {
|
|
|
+ Map<String,Object> level2 = calculateLevel2Distribution(insFeeOrders, totalPremium, level1.get("id").toString(), sysDistributionSetting);
|
|
|
+ if (level2 != null) {
|
|
|
+ diffAmount = calculateLevel3Distribution(insFeeOrders, totalPremium, level2.get("id").toString(), sysDistributionSetting);
|
|
|
}
|
|
|
+ diffAmount = diffAmount.add(new BigDecimal(level2.get("diffAmount").toString())).add(new BigDecimal(level1.get("diffAmount").toString()));
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
+ return diffAmount;
|
|
|
}
|
|
|
}
|
|
|
+ return BigDecimal.ZERO;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 计算一级分销费
|
|
|
* @return 一级分销员ID,若不存在则返回null
|
|
|
*/
|
|
|
- private String calculateLevel1Distribution(InsFeeOrders insFeeOrders, BigDecimal totalPremium,
|
|
|
+ private Map<String,Object> calculateLevel1Distribution(InsFeeOrders insFeeOrders, BigDecimal totalPremium,
|
|
|
String userId, SysDistributionSetting setting) {
|
|
|
HttpResult<EsmUserReferrer> referrerResult = orgClient.getReferrer(userId);
|
|
|
if (referrerResult.getData() != null) {
|
|
|
@@ -650,9 +676,14 @@ public class QuoteVerificationAspect {
|
|
|
if (referrerInfoResult.getData() != null && "1".equals(referrerInfoResult.getData().getIsDistribution())) {
|
|
|
String distributorId = referrer.getReferrerId();
|
|
|
insFeeOrders.setFirstDistributorId(distributorId);
|
|
|
- insFeeOrders.setFirstDistributionFee(totalPremium.multiply(setting.getCommissionRatioLevel1()));
|
|
|
+ BigDecimal fee_5 = (totalPremium.multiply(setting.getCommissionRatioLevel1()).setScale(5,RoundingMode.DOWN));
|
|
|
+ insFeeOrders.setFirstDistributionFee(totalPremium.multiply(setting.getCommissionRatioLevel1()).setScale(2,RoundingMode.DOWN));
|
|
|
insFeeOrders.setFirstDistributionRatio(setting.getCommissionRatioLevel1());
|
|
|
- return distributorId;
|
|
|
+ BigDecimal diffAmount = fee_5.subtract(insFeeOrders.getFirstDistributionFee());
|
|
|
+ Map map = new HashMap();
|
|
|
+ map.put("id",distributorId);
|
|
|
+ map.put("diffAmount",diffAmount);
|
|
|
+ return map;
|
|
|
} else {
|
|
|
insFeeOrders.setFirstDistributionFee(BigDecimal.ZERO);
|
|
|
insFeeOrders.setFirstDistributionRatio(BigDecimal.ZERO);
|
|
|
@@ -665,7 +696,7 @@ public class QuoteVerificationAspect {
|
|
|
* 计算二级分销费
|
|
|
* @return 二级分销员ID,若不存在则返回null
|
|
|
*/
|
|
|
- private String calculateLevel2Distribution(InsFeeOrders insFeeOrders, BigDecimal totalPremium,
|
|
|
+ private Map<String,Object> calculateLevel2Distribution(InsFeeOrders insFeeOrders, BigDecimal totalPremium,
|
|
|
String upperDistributorId, SysDistributionSetting setting) {
|
|
|
HttpResult<EsmUserReferrer> referrerResult = orgClient.getReferrer(upperDistributorId);
|
|
|
if (referrerResult.getData() != null) {
|
|
|
@@ -674,9 +705,14 @@ public class QuoteVerificationAspect {
|
|
|
if (referrerInfoResult.getData() != null && "1".equals(referrerInfoResult.getData().getIsDistribution())) {
|
|
|
String distributorId = referrer.getReferrerId();
|
|
|
insFeeOrders.setSecondDistributorId(distributorId);
|
|
|
- insFeeOrders.setSecondDistributionFee(totalPremium.multiply(setting.getCommissionRatioLevel2()));
|
|
|
+ BigDecimal fee_5 = (totalPremium.multiply(setting.getCommissionRatioLevel2()).setScale(5,RoundingMode.DOWN));
|
|
|
+ insFeeOrders.setSecondDistributionFee(totalPremium.multiply(setting.getCommissionRatioLevel2()).setScale(2,RoundingMode.DOWN));
|
|
|
insFeeOrders.setSecondDistributionRatio(setting.getCommissionRatioLevel2());
|
|
|
- return distributorId;
|
|
|
+ BigDecimal diffAmount = fee_5.subtract(insFeeOrders.getSecondDistributionFee());
|
|
|
+ Map map = new HashMap();
|
|
|
+ map.put("id",distributorId);
|
|
|
+ map.put("diffAmount",diffAmount);
|
|
|
+ return map;
|
|
|
} else {
|
|
|
insFeeOrders.setSecondDistributionFee(BigDecimal.ZERO);
|
|
|
insFeeOrders.setSecondDistributionRatio(BigDecimal.ZERO);
|
|
|
@@ -688,7 +724,7 @@ public class QuoteVerificationAspect {
|
|
|
/**
|
|
|
* 计算三级分销费
|
|
|
*/
|
|
|
- private void calculateLevel3Distribution(InsFeeOrders insFeeOrders, BigDecimal totalPremium,
|
|
|
+ private BigDecimal calculateLevel3Distribution(InsFeeOrders insFeeOrders, BigDecimal totalPremium,
|
|
|
String upperDistributorId, SysDistributionSetting setting) {
|
|
|
HttpResult<EsmUserReferrer> referrerResult = orgClient.getReferrer(upperDistributorId);
|
|
|
if (referrerResult.getData() != null) {
|
|
|
@@ -697,13 +733,17 @@ public class QuoteVerificationAspect {
|
|
|
if (referrerInfoResult.getData() != null
|
|
|
&& "1".equals(referrerInfoResult.getData().getIsDistribution())) {
|
|
|
insFeeOrders.setThirdDistributorId(referrer.getReferrerId());
|
|
|
- insFeeOrders.setThirdDistributionFee(totalPremium.multiply(setting.getCommissionRatioLevel3()));
|
|
|
+ BigDecimal fee_5 = (totalPremium.multiply(setting.getCommissionRatioLevel3()).setScale(5,RoundingMode.DOWN));
|
|
|
+ insFeeOrders.setThirdDistributionFee(totalPremium.multiply(setting.getCommissionRatioLevel3()).setScale(2,RoundingMode.DOWN));
|
|
|
insFeeOrders.setThirdDistributionRatio(setting.getCommissionRatioLevel3());
|
|
|
+ BigDecimal diffAmount = fee_5.subtract(insFeeOrders.getThirdDistributionFee());
|
|
|
+ return diffAmount;
|
|
|
} else {
|
|
|
insFeeOrders.setThirdDistributionFee(BigDecimal.ZERO);
|
|
|
insFeeOrders.setThirdDistributionRatio(BigDecimal.ZERO);
|
|
|
}
|
|
|
}
|
|
|
+ return BigDecimal.ZERO;
|
|
|
}
|
|
|
|
|
|
@Before("@annotation(com.jzg.quotation.summary.aop.QuoteVerification)")
|