Jelajahi Sumber

费用调整和调整手续费比例的时候,计算留点比例的时候,将分销的部分也计算上

lipf 3 bulan lalu
induk
melakukan
d7b6bfc6d0

+ 12 - 0
commons/src/main/java/com/jzg/commons/entity/po/InsFeeOrders.java

@@ -165,12 +165,24 @@ public class InsFeeOrders {
     @Schema(description = "交强出口比例")
     private BigDecimal jqExportRatio;
 
+    @TableField(exist = false)
+    @Schema(description = "交强出口比例(含分销比例)")
+    private BigDecimal jqExportRatioContainDistribution;
+
     @Schema(description = "商业险出口比例")
     private BigDecimal syExportRatio;
 
+    @TableField(exist = false)
+    @Schema(description = "商业险出口比例(含分销比例)")
+    private BigDecimal syExportRatioContainDistribution;
+
     @Schema(description = "驾意险出口比例")
     private BigDecimal jyExportRatio;
 
+    @TableField(exist = false)
+    @Schema(description = "驾意险出口比例(含分销比例)")
+    private BigDecimal jyExportRatioContainDistribution;
+
     @Schema(description = "交强出口费用")
     private BigDecimal jqExportPremium;
 

+ 19 - 0
commons/src/main/java/com/jzg/commons/util/BigDecimalUtil.java

@@ -36,6 +36,25 @@ public class BigDecimalUtil {
         return val.negate();
     }
 
+    /**
+     *
+     * @author lipf
+     * @date 2026/7/1 14:58
+     */
+    public static BigDecimal add(BigDecimal ... v1s){
+        if (v1s == null || v1s.length == 0) {
+            return BigDecimal.ZERO;
+        }
+        BigDecimal sum = BigDecimal.ZERO;
+        for (BigDecimal v1 : v1s) {
+            if(v1 == null){
+                v1 = BigDecimal.ZERO;
+            }
+            sum = BigDecimalUtil.add(sum,v1);
+        }
+        return sum;
+    }
+
     /**
      * 提供精确的加法运算
      * @param v1 被加数

+ 23 - 10
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeOrdersServiceImpl.java

@@ -153,19 +153,19 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
         // 1. 交强险
         calculatePremiumByRule(insFeeOrders, "jq", jqPremium,
                 insFeeOrders.getJqCommissionRatio(), insFeeOrders.getJqInletRatio(), insFeeOrders.getJqFollowRatio(),
-                insFeeOrders.getJqAdditionalRatio(), insFeeOrders.getJqKeepPointRatio(), insFeeOrders.getJqExportRatio(), insFeeOrders.getJqExportKeepPointRatio(),
+                insFeeOrders.getJqAdditionalRatio(), insFeeOrders.getJqKeepPointRatio(), insFeeOrders.getJqExportRatio(), insFeeOrders.getJqExportKeepPointRatio(),insFeeOrders.getJqExportRatioContainDistribution(),
                 withTax, taxRate, SCALE);
 
         // 2. 商业险
         calculatePremiumByRule(insFeeOrders, "sy", syPremium,
                 insFeeOrders.getSyCommissionRatio(), insFeeOrders.getSyInletRatio(), insFeeOrders.getSyFollowRatio(),
-                insFeeOrders.getSyAdditionalRatio(), insFeeOrders.getSyKeepPointRatio(), insFeeOrders.getSyExportRatio(), insFeeOrders.getSyExportKeepPointRatio(),
+                insFeeOrders.getSyAdditionalRatio(), insFeeOrders.getSyKeepPointRatio(), insFeeOrders.getSyExportRatio(), insFeeOrders.getSyExportKeepPointRatio(),insFeeOrders.getSyExportRatioContainDistribution(),
                 withTax, taxRate, SCALE);
 
         // 3. 驾乘险
         calculatePremiumByRule(insFeeOrders, "jy", jyPremium,
                 insFeeOrders.getJyCommissionRatio(), insFeeOrders.getJyInletRatio(), insFeeOrders.getJyFollowRatio(),
-                insFeeOrders.getJyAdditionalRatio(), insFeeOrders.getJyKeepPointRatio(), insFeeOrders.getJyExportRatio(), insFeeOrders.getJyExportKeepPointRatio(),
+                insFeeOrders.getJyAdditionalRatio(), insFeeOrders.getJyKeepPointRatio(), insFeeOrders.getJyExportRatio(), insFeeOrders.getJyExportKeepPointRatio(),insFeeOrders.getJyExportRatioContainDistribution(),
                 withTax, taxRate, SCALE);
 
         // 重新统计总应收、总应付
@@ -203,7 +203,7 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
             InsFeeOrders insFeeOrders, String type,
             BigDecimal premium,
             BigDecimal commissionRatio, BigDecimal inletRatio, BigDecimal followRatio,
-            BigDecimal addThrowRatio, BigDecimal keepPointRatio, BigDecimal exportRatio, BigDecimal exportKeepPointRatio,
+            BigDecimal addThrowRatio, BigDecimal keepPointRatio, BigDecimal exportRatio, BigDecimal exportKeepPointRatio, BigDecimal exportRatioContainDistribution,
             Integer withTax, BigDecimal taxRate, int scale) {
 
         // 计算基数
@@ -224,12 +224,19 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
         // 加投直接乘
         BigDecimal addThrow = premium.multiply(addThrowRatio).setScale(scale, RoundingMode.HALF_EVEN);
         // 出口直接乘
-        BigDecimal export = premium.multiply(exportRatio).setScale(scale, RoundingMode.HALF_EVEN);
+        BigDecimal export = premium.multiply(exportRatio).setScale(scale, RoundingMode.HALF_DOWN);
         BigDecimal exportKeepPoint = premium.multiply(exportKeepPointRatio).setScale(scale, RoundingMode.HALF_EVEN);
         // 留点比例直接乘, modify by lipf ,留点比例在infFeeOrder中计算得到。这里直接使用 2026年6月16日17:32:09, 为了保持金额一致,留点比例不适用百分比乘积,而是使用金额相减
         // BigDecimal keepPoint = premium.multiply(keepPointRatio).setScale(scale, RoundingMode.HALF_EVEN);
-        BigDecimal keepPoint = BigDecimalUtil.subtract(BigDecimalUtil.add(inlet,addThrow),export);
-        log.info("计算留点:inlet=[{}],addThrow=[{}].export=[{}]", inlet, addThrow, export);
+        //BigDecimal keepPoint = BigDecimalUtil.subtract(BigDecimalUtil.add(inlet,addThrow),export);
+        // modify by lipf 2026年7月1日10:07:18 计算留点的时候,将分销费用移除
+//        BigDecimal distributionFee = BigDecimalUtil.add(insFeeOrders.getFirstDistributionFee(), insFeeOrders.getSecondDistributionFee(), insFeeOrders.getThirdDistributionFee());
+//        log.info("分销总费用:distributionFee=【{}】",distributionFee);
+//        BigDecimal keepPoint = BigDecimalUtil.subtract(BigDecimalUtil.add(inlet,addThrow),BigDecimalUtil.add(export, distributionFee));
+//        log.info("留点费用:inlet=[{}],addThrow=[{}],export=[{}], distributionFee=[{}]mkeepPoint=[{}]", inlet, addThrow, export, distributionFee, keepPoint);
+        BigDecimal exportContainDistribute = premium.multiply(exportRatioContainDistribution).setScale(scale, RoundingMode.HALF_DOWN);
+        BigDecimal keepPoint = BigDecimalUtil.subtract(BigDecimalUtil.add(inlet,addThrow),exportContainDistribute);
+        log.info("计算留点:inlet=[{}],addThrow=[{}].exportContainDistribute=[{}]", inlet, addThrow, exportContainDistribute);
 
         // 赋值到实体(自动匹配 jq / sy / jy)
         if ("jq".equals(type)) {
@@ -432,9 +439,15 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
         insFeeOrders.setSyExportRatio(syExportRatio);
         insFeeOrders.setJyExportRatio(jyExportRatio);
         // 需求:入口 + 加投 - 出口 = 留点
-        BigDecimal jqKeepPointRatio = (jqInletRatio.divide(taxFactor, 5, RoundingMode.HALF_EVEN)).add(jqAdditionalRatio).subtract(jqExportRatio);
-        BigDecimal syKeepPointRatio = (syInletRatio.divide(taxFactor, 5, RoundingMode.HALF_EVEN)).add(syAdditionalRatio).subtract(syExportRatio);
-        BigDecimal jyKeepPointRatio = (jyInletRatio.divide(taxFactor, 5, RoundingMode.HALF_EVEN)).add(jyAdditionalRatio).subtract(jyExportRatio);
+        BigDecimal distributionRatio = BigDecimalUtil.divide(BigDecimalUtil.add(insFeeOrders.getFirstDistributionRatio(), insFeeOrders.getSecondDistributionRatio(), insFeeOrders.getThirdDistributionRatio()),new BigDecimal(100));
+        insFeeOrders.setJqExportRatioContainDistribution(BigDecimalUtil.add(jqExportRatio,distributionRatio));
+        insFeeOrders.setSyExportRatioContainDistribution(BigDecimalUtil.add(syExportRatio,distributionRatio) );
+        insFeeOrders.setJyExportRatioContainDistribution(BigDecimalUtil.add(jyExportRatio,distributionRatio) );
+        BigDecimal jqKeepPointRatio = (jqInletRatio.divide(taxFactor, 5, RoundingMode.HALF_EVEN)).add(jqAdditionalRatio).subtract(BigDecimalUtil.add(jqExportRatio,distributionRatio));
+        log.info("计算留点比例。 distributionRatio=[{}],jqInletRatio=[{}],jqAdditionalRatio=[{}],jqExportRatio=[{}]", distributionRatio,jqInletRatio,jqAdditionalRatio,jqExportRatio);
+
+        BigDecimal syKeepPointRatio = (syInletRatio.divide(taxFactor, 5, RoundingMode.HALF_EVEN)).add(syAdditionalRatio).subtract(BigDecimalUtil.add(jqExportRatio,syExportRatio));
+        BigDecimal jyKeepPointRatio = (jyInletRatio.divide(taxFactor, 5, RoundingMode.HALF_EVEN)).add(jyAdditionalRatio).subtract(BigDecimalUtil.add(jqExportRatio,jyExportRatio));
         // 留点比例
         insFeeOrders.setJqKeepPointRatio(jqKeepPointRatio);
         insFeeOrders.setSyKeepPointRatio(syKeepPointRatio);