فهرست منبع

Merge remote-tracking branch 'origin/master'

lixiaolong 3 ماه پیش
والد
کامیت
3c120749ea

+ 2 - 1
authentication/src/main/java/com/jzg/config/SecurityConfig.java

@@ -94,7 +94,8 @@ public class SecurityConfig {
                         .requestMatchers("/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**", "/webjars/**", "/favicon.ico",
                                 "/auth/login","/auth/captchaById","/auth/register","/sendSmsCode","/appLogin","/smsCodeLogin","/auth/publicKeyExchange","/appAuth/smsCodeLogin","/send/sendSmsCode",
                                 "/appAuth/appLogin","/auth/sendSmsCode","/auth/forgotPassword","/appAuth/partnerAppLogin",
-                                "/supplementOrder/getOrderDetail","/dict/get", "/getAllButtons","/order/qrCode/**").permitAll()
+                                "/supplementOrder/getOrderDetail","/dict/get", "/getAllButtons","/order/qrCode/**","/appUser/userInfoGet",
+                                "/appUser/distributorInvite","/appUser/invitationRegister").permitAll()
                         .anyRequest().authenticated()  // 其他接口需认证
                 )
 //                .formLogin((form) -> form

+ 3 - 0
authentication/src/main/java/com/jzg/filter/TokenAuthenticationFilter.java

@@ -54,6 +54,9 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
         doList.add("/supplementOrder/getOrderDetail");
         doList.add("/dict/get");
         doList.add("/order/qrCode/index");
+        doList.add("/appUser/userInfoGet");
+        doList.add("/appUser/distributorInvite");
+        doList.add("/appUser/invitationRegister");
         String path = request.getRequestURI();
         for (String pattern : doList) {
             // 使用正则表达式匹配  .* 匹配所有以 pattern 开头的路径

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

@@ -66,7 +66,7 @@ public class BigDecimalUtil {
         return sum;
     }
 
-    public static BigDecimal toZero(String amount){
+    public static BigDecimal null2Zero(String amount){
         if(StrUtil.isEmpty(amount)){
             return BigDecimal.ZERO;
         }
@@ -176,7 +176,7 @@ public class BigDecimalUtil {
         return new BigDecimal(v);
     }
 
-    public static BigDecimal toZero(BigDecimal amount) {
+    public static BigDecimal null2Zero(BigDecimal amount) {
         if(amount == null){
             return BigDecimal.ZERO;
         }

+ 4 - 0
gateway/src/main/java/com/jzg/filter/AuthGlobalFilter.java

@@ -79,6 +79,10 @@ public class AuthGlobalFilter implements GlobalFilter {
         WHITELIST.add("/supplementOrder/getOrderDetail");
         WHITELIST.add("/dict/get");
 
+        WHITELIST.add("/appUser/userInfoGet");
+        WHITELIST.add("/appUser/distributorInvite");
+        WHITELIST.add("/appUser/invitationRegister");
+
         // 本地生活
         WHITELIST.add("/signIn/updateSignCompleteRuleIn");
     }

+ 33 - 3
tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/impl/RenBaoNewCrawlerRequestImpl.java

@@ -46,6 +46,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.UUID;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * 人保车险爬虫服务实现 * 
@@ -63,6 +65,8 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
     private final RenBaoNewCrawlerCacheComponent cacheComponent;
     private final RenBaoNewCrawlerProperties properties;
     private final RenBaoNewCrawlerRequestBuilder requestBuilder;
+    // 匹配PDAA、PDZA保单号正则
+    private static final Pattern POLICY_NO_PATTERN = Pattern.compile("(PDAA|PDZA)\\d+");
 
     /**
      * 登录方法
@@ -169,8 +173,8 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
                 String validate0 = response.getStatusText();
                 String validate1 = "/bizSave/caculatePremium";
                 log.error("检测到滑块: statusText={}, {}", validate0, JSONUtil.toJsonStr(response));
-                if (hkcs < 2) {
-                    while (hkcs < 2) {
+                if (hkcs < 3) {
+                    while (hkcs < 3) {
                         hkcs++;
                         passSpilderMainRes = passSpilderMain(headers, username, validate0, validate1);
                         if (passSpilderMainRes) {
@@ -758,9 +762,20 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
         resultsVo.setBiRiskInfoVo(biRisk);
 
         //获取转续保标识
-        resultsVo.getScoreVo().setJqRenewal("3");
+        String error = quoteResponse.getData().getError();
         resultsVo.getScoreVo().setSyRenewal("3");
+        resultsVo.getScoreVo().setJqRenewal("3");
+        if(error.contains("此单符合续保条件,已按照续保流程处理")){
+            List<String> policyNoList = extractPolicyNos(error);
+            for (String policyNo : policyNoList) {
+                if (policyNo.startsWith("PDAA")) {
+                    resultsVo.getScoreVo().setSyRenewal("2");
+                } else if (policyNo.startsWith("PDZA")) {
+                    resultsVo.getScoreVo().setJqRenewal("2");
+                }
+            }
 
+        }
 
         String proposalNoDAA = "";
         String proposalNoDZA = "";
@@ -922,6 +937,21 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
         return resultsVo;
     }
 
+    /**
+     * 提取所有上年保单号
+     */
+    public static List<String> extractPolicyNos(String text) {
+        List<String> list = new ArrayList<>();
+        if (text == null || text.isBlank()) {
+            return list;
+        }
+        Matcher matcher = POLICY_NO_PATTERN.matcher(text);
+        while (matcher.find()) {
+            list.add(matcher.group());
+        }
+        return list;
+    }
+
     /**
      * 核保方法
      *

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

@@ -301,6 +301,10 @@ public class QuoteVerificationAspect {
         // 7. 计算总应收、总应付、保存费用比例 入库
         saveRatio(insFeeOrders, agreementInfoVo, jqCostType, syCostType, jyCostType);
         calculateTotalPremium(insFeeOrders);
+
+        // 8. 计算分销费用
+        calculateDistributionFee(insOrdersCosts,insFeeOrders, insOrders);
+
         insFeeOrdersService.save(insFeeOrders);
         return insFeeOrders;
     }

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

@@ -105,26 +105,26 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
         InsFeeOrders insFeeOrders = insFeeOrdersMapper.selectById(insOrders.getId());
 
         // add by lipf, 2026年6月23日18:32:24 按照财务和田智沟通后的结果,当入口手续费比例大于入口比例的时候,强制设置入口手续费比例为入口比例。
-        BigDecimal jqInletRatio = insFeeOrders.getJqInletRatio();
-        BigDecimal syInletRatio = insFeeOrders.getSyInletRatio();
-        BigDecimal jyInletRatio = insFeeOrders.getJyInletRatio();
-
-        BigDecimal jqCommissionRatio = insFeeOrders.getJqCommissionRatio();
-        BigDecimal syCommissionRatio = insFeeOrders.getSyCommissionRatio();
-        BigDecimal jyCommissionRatio = insFeeOrders.getJyCommissionRatio();
-
-        if(BigDecimalUtil.subtract(jqCommissionRatio,jqInletRatio).compareTo(BigDecimal.ZERO)>0){
-            insFeeOrders.setJqCommissionRatio(jqInletRatio);
-            insFeeOrders.setJqFollowRatio(BigDecimal.ZERO);
-        }
-        if(BigDecimalUtil.subtract(syCommissionRatio,syInletRatio).compareTo(BigDecimal.ZERO)>0){
-            insFeeOrders.setSyCommissionRatio(syInletRatio);
-            insFeeOrders.setSyFollowRatio(BigDecimal.ZERO);
-        }
-        if(BigDecimalUtil.subtract(jyCommissionRatio,jyInletRatio).compareTo(BigDecimal.ZERO)>0){
-            insFeeOrders.setJyCommissionRatio(jyInletRatio);
-            insFeeOrders.setJyFollowRatio(BigDecimal.ZERO);
-        }
+//        BigDecimal jqInletRatio = insFeeOrders.getJqInletRatio();
+//        BigDecimal syInletRatio = insFeeOrders.getSyInletRatio();
+//        BigDecimal jyInletRatio = insFeeOrders.getJyInletRatio();
+//
+//        BigDecimal jqCommissionRatio = insFeeOrders.getJqCommissionRatio();
+//        BigDecimal syCommissionRatio = insFeeOrders.getSyCommissionRatio();
+//        BigDecimal jyCommissionRatio = insFeeOrders.getJyCommissionRatio();
+//
+//        if(BigDecimalUtil.subtract(jqCommissionRatio,jqInletRatio).compareTo(BigDecimal.ZERO)>0){
+//            insFeeOrders.setJqCommissionRatio(jqInletRatio);
+//            insFeeOrders.setJqFollowRatio(BigDecimal.ZERO);
+//        }
+//        if(BigDecimalUtil.subtract(syCommissionRatio,syInletRatio).compareTo(BigDecimal.ZERO)>0){
+//            insFeeOrders.setSyCommissionRatio(syInletRatio);
+//            insFeeOrders.setSyFollowRatio(BigDecimal.ZERO);
+//        }
+//        if(BigDecimalUtil.subtract(jyCommissionRatio,jyInletRatio).compareTo(BigDecimal.ZERO)>0){
+//            insFeeOrders.setJyCommissionRatio(jyInletRatio);
+//            insFeeOrders.setJyFollowRatio(BigDecimal.ZERO);
+//        }
 
         // 关键:获取是否含税标识
         Integer withTax = ptlAgreement.getWithTax(); // 0-否 1-是
@@ -166,9 +166,26 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
     }
 
     /**
-     * 【按你的规则统一计算费用】
-     * withTax=0 → 保费 /1.06
-     * withTax=1 → 直接用保费
+     * 按照规则统一计算保险费用,支持交强险、商业险、驾乘险三种类型
+     * 根据含税标识确定计算基数:不含税时保费需除以税费因子,含税时直接使用保费
+     * 各项费用计算规则:
+     * - 入口应收、手续费、跟单费基于基数乘以对应比例
+     * - 加投、出口、出口留点直接基于保费乘以对应比例
+     * - 留点金额 = 入口应收 + 加投 - 出口
+     *
+     * @param insFeeOrders 保险费用订单对象,用于存储计算结果
+     * @param type 险种类型标识,jq-交强险、sy-商业险、jy-驾乘险
+     * @param premium 保费金额
+     * @param commissionRatio 手续费比例
+     * @param inletRatio 入口比例
+     * @param followRatio 跟单比例(当前未使用)
+     * @param addThrowRatio 加投比例
+     * @param keepPointRatio 留点比例(当前未使用,留点通过金额计算)
+     * @param exportRatio 出口比例
+     * @param exportKeepPointRatio 出口留点比例
+     * @param withTax 含税标识,0-不含税(保费/1.06),1-含税(直接使用保费)
+     * @param taxRate 税费因子,通常为1.06
+     * @param scale 保留小数位数
      */
     private void calculatePremiumByRule(
             InsFeeOrders insFeeOrders, String type,
@@ -322,8 +339,6 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
         setField(feeOrders, clazz, prefix + "PayablePremium", export);
         setField(feeOrders, clazz, prefix + "ExportKeepPointPremium", exportKeepPoint);
     }
-// ... existing code ...
-
 
     // 反射设置字段值
     private void setField(InsFeeOrders obj, Class<?> clazz, String fieldName, BigDecimal value) throws ReflectiveOperationException {
@@ -332,7 +347,16 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
         setter.invoke(obj, value);
     }
 
-    // 保存比例
+    /**
+     * 保存保险费用订单的各项比例信息,包括手续费、入口、跟单、加投、出口及留点比例
+     * 根据含税标识计算税费因子,并按险种(交强险、商业险、驾乘险)分别设置各项比例
+     * 留点比例计算公式:入口比例/税费因子 + 加投比例 - 出口比例
+     *
+     * @param ptlAgreementCostRatioVo 协议成本比例VO对象,包含各险种的比例数据
+     * @param insFeeOrders 保险费用订单对象,用于存储计算后的比例值
+     * @param withTax 含税标识,0表示不含税(需除以1.06),1表示含税
+     * @return 税费因子,不含税时返回1.06,含税时返回1
+     */
     private BigDecimal copyRatio(PtlAgreementCostRatioVo ptlAgreementCostRatioVo, InsFeeOrders insFeeOrders, Integer withTax) {
         BigDecimal taxFactor = new BigDecimal("1");
         if (withTax == 0) {

+ 1 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java

@@ -1733,7 +1733,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
      */
     private PtlAgreementCostRatioVo calRatio(InsFeeOrders insFeeOrders, BatchModifyVo batchModifyVo, BigDecimal taxFactor) {
         log.info("batchModifyVo.转换百分比之前的数据=【{}】", JSONUtil.toJsonStr(batchModifyVo));
-        batchModifyVo.divide100();
+        // batchModifyVo.divide100();
         PtlAgreementCostRatioVo vo = new PtlAgreementCostRatioVo();
         vo.setOrderNo(insFeeOrders.getOrderNo());
 

+ 21 - 18
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -2320,7 +2320,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             jqCommissionRatio = batchModifyVo.getJqSuperviseCostsProportion();
             jqFollowRatio = BigDecimalUtil.subtract(jqInletRatio,jqCommissionRatio);
         }else if(batchModifyVo.getJqSuperviseCostsProportion() == null && batchModifyVo.getJqOtherCostsProportion() != null){
-            jqCommissionRatio = BigDecimalUtil.toZero(insPlyIncome.getJqSuperviseCostsProportion());
+            jqCommissionRatio = BigDecimalUtil.null2Zero(insPlyIncome.getJqSuperviseCostsProportion());
             jqFollowRatio = batchModifyVo.getJqOtherCostsProportion();
             jqInletRatio = BigDecimalUtil.add(jqCommissionRatio,jqFollowRatio);
         }else if(batchModifyVo.getJqSuperviseCostsProportion() != null && batchModifyVo.getJqOtherCostsProportion() != null){
@@ -2329,8 +2329,8 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             jqInletRatio = BigDecimalUtil.add(jqCommissionRatio,jqFollowRatio);
         }else if(batchModifyVo.getJqSuperviseCostsProportion() == null && batchModifyVo.getJqOtherCostsProportion() == null){
             jqInletRatio = insFeeOrders.getJqInletRatio();
-            jqCommissionRatio = BigDecimalUtil.toZero(insPlyIncome.getJqSuperviseCostsProportion());
-            jqFollowRatio = BigDecimalUtil.toZero(insPlyIncome.getJqOtherCostsProportion());
+            jqCommissionRatio = BigDecimalUtil.null2Zero(insPlyIncome.getJqSuperviseCostsProportion());
+            jqFollowRatio = BigDecimalUtil.null2Zero(insPlyIncome.getJqOtherCostsProportion());
         }
         vo.setJqInletRatio(jqInletRatio);
         vo.setJqCommissionRatio(jqCommissionRatio);
@@ -2345,7 +2345,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             syCommissionRatio = batchModifyVo.getSySuperviseCostsProportion();
             syFollowRatio = BigDecimalUtil.subtract(syInletRatio,syCommissionRatio);
         }else if(batchModifyVo.getSySuperviseCostsProportion() == null && null != batchModifyVo.getSyOtherCostsProportion()){
-            syCommissionRatio = BigDecimalUtil.toZero(insPlyIncome.getSySuperviseCostsProportion());
+            syCommissionRatio = BigDecimalUtil.null2Zero(insPlyIncome.getSySuperviseCostsProportion());
             syFollowRatio = batchModifyVo.getSyOtherCostsProportion();
             syInletRatio = BigDecimalUtil.add(syCommissionRatio,syFollowRatio);
         }else if(batchModifyVo.getSySuperviseCostsProportion() != null && batchModifyVo.getSyOtherCostsProportion() != null){
@@ -2354,8 +2354,8 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             syInletRatio = BigDecimalUtil.add(syCommissionRatio,syFollowRatio);
         }else if(batchModifyVo.getSySuperviseCostsProportion() == null && batchModifyVo.getSyOtherCostsProportion() == null){
             syInletRatio = insFeeOrders.getSyInletRatio();
-            syCommissionRatio = BigDecimalUtil.toZero(insPlyIncome.getSySuperviseCostsProportion());
-            syFollowRatio = BigDecimalUtil.toZero(insPlyIncome.getSyOtherCostsProportion());
+            syCommissionRatio = BigDecimalUtil.null2Zero(insPlyIncome.getSySuperviseCostsProportion());
+            syFollowRatio = BigDecimalUtil.null2Zero(insPlyIncome.getSyOtherCostsProportion());
         }
         vo.setSyInletRatio(syInletRatio);
         vo.setSyCommissionRatio(syCommissionRatio);
@@ -2370,7 +2370,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             jyCommissionRatio = batchModifyVo.getJySuperviseCostsProportion();
             jyFollowRatio = BigDecimalUtil.subtract(jyInletRatio,jyCommissionRatio);
         }else if(batchModifyVo.getJySuperviseCostsProportion() == null && batchModifyVo.getJyOtherCostsProportion() != null){
-            jyCommissionRatio = BigDecimalUtil.toZero(insPlyIncome.getJySuperviseCostsProportion());
+            jyCommissionRatio = BigDecimalUtil.null2Zero(insPlyIncome.getJySuperviseCostsProportion());
             jyFollowRatio = batchModifyVo.getJyOtherCostsProportion();
             jyInletRatio = BigDecimalUtil.add(jyCommissionRatio,jyFollowRatio);
         }else if(batchModifyVo.getJySuperviseCostsProportion() != null && batchModifyVo.getJyOtherCostsProportion() != null){
@@ -2379,8 +2379,8 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             jyInletRatio = BigDecimalUtil.add(jyCommissionRatio,jyFollowRatio);
         }else if(batchModifyVo.getJySuperviseCostsProportion() == null && batchModifyVo.getJyOtherCostsProportion() == null){
             jyInletRatio = insFeeOrders.getJyInletRatio();
-            jyCommissionRatio = BigDecimalUtil.toZero(insPlyIncome.getJySuperviseCostsProportion());
-            jyFollowRatio = BigDecimalUtil.toZero(insPlyIncome.getJyOtherCostsProportion());
+            jyCommissionRatio = BigDecimalUtil.null2Zero(insPlyIncome.getJySuperviseCostsProportion());
+            jyFollowRatio = BigDecimalUtil.null2Zero(insPlyIncome.getJyOtherCostsProportion());
         }
         vo.setJyInletRatio(jyInletRatio);
         vo.setJyCommissionRatio(jyCommissionRatio);
@@ -2478,6 +2478,9 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             BigDecimal taxRate = taxRateMap.getOrDefault(income.getOrderNo(), BigDecimal.ONE);
             InsPlyIncome updateIncome = new InsPlyIncome();
             updateIncome.setId(income.getId());
+            updateIncome.setJqPremium(income.getJqPremium());
+            updateIncome.setSyPremium(income.getSyPremium());
+            updateIncome.setJyPremium(income.getJyPremium());
             // 因为 实体对象的settlementStatus设置了初始默认值0, 为了避免已经结算的数据被调整未未结算, 这里将settlementStatus设置为null 2026-6-24 14:33:47
             updateIncome.setSettlementStatus(null);
             // 根据income的order_no查询inss_fee_order
@@ -2555,9 +2558,9 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     private void calPremium(InsPlyIncome updateIncome, PtlAgreementCostRatioVo ratioVo, BigDecimal taxRate) {
         log.info("根据入口比例等比例值计算对应的金额。 ptlAgreementCostRatioVo=[{}], updateIncome=[{}]", JSONUtil.toJsonStr(ratioVo), JSONUtil.toJsonStr(updateIncome));
 
-        BigDecimal jqPremium = BigDecimalUtil.toZero(updateIncome.getJqPremium());
-        BigDecimal syPremium = BigDecimalUtil.toZero(updateIncome.getSyPremium()) ;
-        BigDecimal jyPremium = BigDecimalUtil.toZero(updateIncome.getJyPremium());
+        BigDecimal jqPremium = BigDecimalUtil.null2Zero(updateIncome.getJqPremium());
+        BigDecimal syPremium = BigDecimalUtil.null2Zero(updateIncome.getSyPremium()) ;
+        BigDecimal jyPremium = BigDecimalUtil.null2Zero(updateIncome.getJyPremium());
 
 
         BigDecimal jqInletPremium = BigDecimalUtil.divide(BigDecimalUtil.multiply(jqPremium,ratioVo.getJqInletRatio()), taxRate);
@@ -2725,22 +2728,22 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         if (insFeeOrders != null) {
             switch (type) {
                 case "jqFollow":
-                    followPremium = BigDecimalUtil.toZero(insFeeOrders.getJqFollowPremium());
+                    followPremium = BigDecimalUtil.null2Zero(insFeeOrders.getJqFollowPremium());
                     break;
                 case "syFollow":
-                    followPremium = BigDecimalUtil.toZero(insFeeOrders.getSyFollowPremium());
+                    followPremium = BigDecimalUtil.null2Zero(insFeeOrders.getSyFollowPremium());
                     break;
                 case "jqCommission":
-                    followPremium = BigDecimalUtil.toZero(insFeeOrders.getJqCommissionPremium());
+                    followPremium = BigDecimalUtil.null2Zero(insFeeOrders.getJqCommissionPremium());
                     break;
                 case "syCommission":
-                    followPremium = BigDecimalUtil.toZero(insFeeOrders.getSyCommissionPremium());
+                    followPremium = BigDecimalUtil.null2Zero(insFeeOrders.getSyCommissionPremium());
                     break;
                 case "jyCommission":
-                    followPremium = BigDecimalUtil.toZero(insFeeOrders.getJyCommissionPremium());
+                    followPremium = BigDecimalUtil.null2Zero(insFeeOrders.getJyCommissionPremium());
                     break;
                 case "jyFollow":
-                    followPremium = BigDecimalUtil.toZero(insFeeOrders.getJyFollowPremium());
+                    followPremium = BigDecimalUtil.null2Zero(insFeeOrders.getJyFollowPremium());
                     break;
             }
         }