瀏覽代碼

调整差额的问题。

785834757 2 月之前
父節點
當前提交
40f2f149c0

+ 66 - 35
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java

@@ -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,27 @@ public class QuoteVerificationAspect {
         insFeeOrders.setTotalPayablePremium(totalPayable);
 
         // 计算出口费用 = (出口比列 * 保费)- 分销费
-        BigDecimal firstDistributionFee = insFeeOrders.getFirstDistributionFee();
-        BigDecimal secondDistributionFee = insFeeOrders.getSecondDistributionFee();
-        BigDecimal thirdDistributionFee = insFeeOrders.getThirdDistributionFee();
+//        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);
-        }
+//        if (jqExportPremium.compareTo(BigDecimal.ZERO) > 0) {
+//            jqExportPremium = jqExportPremium.subtract(firstDistributionFee).subtract(secondDistributionFee).subtract(thirdDistributionFee);
+//        }
         insFeeOrders.setJqExportPremium(jqExportPremium);
 
         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);
-        }
+//        if (syExportPremium.compareTo(BigDecimal.ZERO) > 0) {
+//            syExportPremium = syExportPremium.subtract(firstDistributionFee).subtract(secondDistributionFee).subtract(thirdDistributionFee);
+//        }
         insFeeOrders.setSyExportPremium(syExportPremium);
         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);
-        }
+        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位时,截断的所有金额
@@ -479,6 +482,8 @@ public class QuoteVerificationAspect {
         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));
 
         // 计算出口留点费用
@@ -605,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();
         // 获取当前租户信息
@@ -622,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) {
@@ -659,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);
@@ -674,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) {
@@ -683,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);
@@ -697,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) {
@@ -706,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)")