Просмотр исходного кода

Merge branch 'master' into wrq_dev

wangrq 3 месяцев назад
Родитель
Сommit
aa4927eef4
26 измененных файлов с 832 добавлено и 301 удалено
  1. 2 1
      authentication/src/main/java/com/jzg/config/SecurityConfig.java
  2. 3 0
      authentication/src/main/java/com/jzg/filter/TokenAuthenticationFilter.java
  3. 2 0
      commons/src/main/java/com/jzg/commons/entity/finance/dto/CompanySuperviseSettlementReportDto.java
  4. 33 14
      commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncome.java
  5. 6 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/SettlementReportQueryVo.java
  6. 58 40
      commons/src/main/java/com/jzg/commons/entity/vo/PtlAgreementCostRatioVo.java
  7. 19 3
      commons/src/main/java/com/jzg/commons/util/BigDecimalUtil.java
  8. 4 0
      gateway/src/main/java/com/jzg/filter/AuthGlobalFilter.java
  9. 4 2
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/build/AnShengCrawlerQuoteResultsVoBuild.java
  10. 2 2
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/build/DaJiaCrawlerQuoteResultsVoBuild.java
  11. 10 8
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/build/HuaNongCrawlerQuoteResultsVoBuild.java
  12. 14 0
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerQuoteProcessServiceImpl.java
  13. 11 1
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/build/HuaTaiCrawlerQuoteResultsVoBuild.java
  14. 70 24
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/service/Impl/HuaTaiCrawlerRequestImpl.java
  15. 38 8
      tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/impl/RenBaoNewCrawlerRequestImpl.java
  16. 7 4
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java
  17. 72 43
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeOrdersServiceImpl.java
  18. 103 29
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  19. 7 7
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/build/TaiShanCrawlerQuoteResultsVoBuild.java
  20. 6 0
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/impl/TaiShanCrawlerQuoteProcessServiceImpl.java
  21. 7 18
      tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/build/YangGuangApiQuoteResultsVoBuild.java
  22. 11 2
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/build/ZhongAnCrawlerQuoteResultsVoBuild.java
  23. 4 2
      tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java
  24. 3 0
      tenant/organization/src/main/java/com/jzg/organization/entity/dto/CalRes.java
  25. 235 22
      tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java
  26. 101 71
      tenant/organization/src/main/resources/mapper/ReceivableMapper.xml

+ 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 - 0
commons/src/main/java/com/jzg/commons/entity/finance/dto/CompanySuperviseSettlementReportDto.java

@@ -69,6 +69,8 @@ public class CompanySuperviseSettlementReportDto implements Serializable {
     private String gdfSettledAmount;
     @Schema(description = "跟单费未结算金额")
     private String gdfUnSettledAmount;
+    @Schema(description = "虚增金额合计")
+    private String totalOverinflatedAmount;
 
     @Schema(description = "子保险公司数据")
     private List<CompanySuperviseSettlementReportDto> children;

+ 33 - 14
commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncome.java

@@ -27,11 +27,12 @@ public class InsPlyIncome extends BaseModel {
     private String orderNo;
 
     @Schema(description = "协议类型")
-    @ExcelProperty("协议类型")
+    @ExcelIgnore
     private String agreementType;
 
     @Schema(description = "机构")
     @ExcelProperty("机构id")
+    @ExcelIgnore
     private String deptId;
 
     @Schema(description = "机构名称")
@@ -40,31 +41,36 @@ public class InsPlyIncome extends BaseModel {
 
     @Schema(description = "产品id")
     @ExcelProperty("产品id")
+    @ExcelIgnore
     private String productId;
 
     @Schema(description = "产品名称")
-    @ExcelProperty("产品名称")
+    @ExcelProperty("险种")
     private String productName;
 
     @Schema(description = "险种")
     @ExcelProperty("险种")
+    @ExcelIgnore
     private String riskCode;
 
     @Schema(description = "签单时间")
     //@TableField(exist = false)
-    @ExcelProperty("签单时间")
+    @ExcelIgnore
     private LocalDateTime signingTime;
 
     @Schema(description = "签单年份")
     @TableField(exist = false)
+    @ExcelIgnore
     private String signYear;
 
     @Schema(description = "签单日期 yyyy-mm-dd 格式")
     @TableField(exist = false)
+    @ExcelIgnore
     private String signDate;
 
     @Schema(description = "保司ID")
     @ExcelProperty("保司ID")
+    @ExcelIgnore
     private String companyId;
 
     @Schema(description = "保司名称")
@@ -74,6 +80,7 @@ public class InsPlyIncome extends BaseModel {
 
     @Schema(description = "协议Id")
     @ExcelProperty("协议Id")
+    @ExcelIgnore
     private String agreementId;
 
     @Schema(description = "协议名称")
@@ -192,35 +199,35 @@ public class InsPlyIncome extends BaseModel {
     private String receivableAmount;
 
     @Schema(description = "手续费是否已经结算")
-    @ExcelProperty("手续费是否已经结算")
+    @ExcelIgnore
     private String superviseSettlement;
 
     @Schema(description = "跟单费是否已经结算")
-    @ExcelProperty("跟单费是否已经结算")
+    @ExcelIgnore
     private String otherSettlement;
 
     @Schema(description = "驾意险手续费是否已经结算")
-    @ExcelProperty("驾意险手续费是否已经结算")
+    @ExcelIgnore
     private String jySuperviseSettlement;
 
     @Schema(description = "驾意跟单位是否已经结算")
-    @ExcelProperty("驾意跟单位是否已经结算")
+    @ExcelIgnore
     private String jyOtherSettlement;
 
     @Schema(description = "平台协议车险应收是否已经结算  0 未结算  1 结算")
-    @ExcelProperty("平台协议车险应收是否已经结算")
+    @ExcelIgnore
     private String platformSuperviseSettlement;
 
     @Schema(description = "平台协议非车险应收是否已经结算  0 未结算  1 结算")
-    @ExcelProperty("平台协议非车险应收是否已经结算")
+    @ExcelIgnore
     private String platformOtherSettlement;
 
     @Schema(description = "维护人工号")
-    @ExcelProperty("维护人工号")
+    @ExcelIgnore
     private String leaderId;
 
     @Schema(description = "维护人名称")
-    @ExcelProperty("维护人名称")
+    @ExcelIgnore
     private String leaderName;
 
     @Schema(description = "对接人")
@@ -235,11 +242,11 @@ public class InsPlyIncome extends BaseModel {
     }
 
     @Schema(description = "系统code")
-    @ExcelProperty("系统code")
+    @ExcelIgnore
     private String systemCode;
 
     @Schema(description = "业务来源")
-    @ExcelProperty("业务来源")
+    @ExcelIgnore
     private String businessSource;
 
     @Schema(description = "结算时间")
@@ -256,7 +263,7 @@ public class InsPlyIncome extends BaseModel {
     private String settlementStatusName;
 
     @Schema(description = "增加类型")
-    @ExcelProperty("增加类型")
+    @ExcelIgnore
     private String addType;
 
     @TableField(exist = false)
@@ -276,50 +283,62 @@ public class InsPlyIncome extends BaseModel {
 
     @TableField(exist = false)
     @Schema(description = "订单类型(code)")
+    @ExcelIgnore
     private String entryStatus;
 
     @TableField(exist = false)
     @Schema(description = "业务员类型 团队/渠道/电销/个代 5:团队 6:个代 7:渠道 8 :电销")
+    @ExcelIgnore
     private String typeAttr;
 
     @TableField(exist = false)
     @Schema(description = "业务员类型 团队/渠道/电销/个代 5:团队 6:个代 7:渠道 8 :电销")
+    @ExcelIgnore
     private String typeAttrName;
 
     @TableField(exist = false)
     @Schema(description = "实际签单用户手机号2")
+    @ExcelIgnore
     private String realQuoteUserId;
 
     @TableField(exist = false)
     @Schema(description = "实际签单用户手机号")
+    @ExcelProperty("实际签单用户手机号")
     private String realQuoteUserName;
 
     @TableField(exist = false)
     @Schema(description = "订单费用表")
+    @ExcelIgnore
     private InsFeeOrders insFeeOrders;
 
     @TableField(exist = false)
     @Schema(description = "是否已经开票")
+    @ExcelIgnore
     private String invoiceStatusName;
 
     @TableField(exist = false)
     @Schema(description = "订单关联的发票信息")
+    @ExcelIgnore
     private String invoiceId;
 
     @TableField(exist = false)
     @Schema(description = "地区归属")
+    @ExcelIgnore
     private String companyNameSimple;
 
     @TableField(exist = false)
     @Schema(description = "交强总比例")
+    @ExcelIgnore
     private String jqTotalProportion;
 
     @TableField(exist = false)
     @Schema(description = "商业总比例")
+    @ExcelIgnore
     private String syTotalProportion;
 
     @TableField(exist = false)
     @Schema(description = "非车总比例")
+    @ExcelIgnore
     private String jyTotalProportion;
 
 

+ 6 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/SettlementReportQueryVo.java

@@ -54,4 +54,10 @@ public class SettlementReportQueryVo extends PageRequest {
 
     @Schema(description = "租户代码")
     private String systemCode;
+
+    @Schema(description = "签单开始时间")
+    private String signingStartTime;
+
+    @Schema(description = "签单结束时间")
+    private String signingEndTime;
 }

+ 58 - 40
commons/src/main/java/com/jzg/commons/entity/vo/PtlAgreementCostRatioVo.java

@@ -22,66 +22,84 @@ public class PtlAgreementCostRatioVo {
 
     @Schema(description = "交强险手续费比例")
     private BigDecimal jqCommissionRatio;
-
-    @Schema(description = "商业险手续费比例")
-    private BigDecimal syCommissionRatio;
-
-    @Schema(description = "驾意险手续费比例")
-    private BigDecimal jyCommissionRatio;
-
     @Schema(description = "交强险跟单费比例")
     private BigDecimal jqFollowRatio;
-
-    @Schema(description = "商业险跟单费比例")
-    private BigDecimal syFollowRatio;
-
-    @Schema(description = "驾意险跟单费比例")
-    private BigDecimal jyFollowRatio;
-
     @Schema(description = "交强险加投费比例")
     private BigDecimal jqAdditionalRatio;
-
-    @Schema(description = "商业险加投费比例")
-    private BigDecimal syAdditionalRatio;
-
-    @Schema(description = "驾意险加投费比例")
-    private BigDecimal jyAdditionalRatio;
-
     @Schema(description = "交强险出口比例")
     private BigDecimal jqExportRatio;
-
-    @Schema(description = "商业险出口比例")
-    private BigDecimal syExportRatio;
-
-    @Schema(description = "驾意险出口比例")
-    private BigDecimal jyExportRatio;
-
     @Schema(description = "交强险入口比例")
     private BigDecimal jqInletRatio;
+    @Schema(description = "交强险留点比例")
+    private BigDecimal jqKeepPointRatio;
+    @Schema(description = "交强险出口留点比例")
+    private BigDecimal jqExportKeepPointRatio;
 
+    @Schema(description = "商业险手续费比例")
+    private BigDecimal syCommissionRatio;
+    @Schema(description = "商业险跟单费比例")
+    private BigDecimal syFollowRatio;
+    @Schema(description = "商业险加投费比例")
+    private BigDecimal syAdditionalRatio;
+    @Schema(description = "商业险出口比例")
+    private BigDecimal syExportRatio;
     @Schema(description = "商业险入口比例")
     private BigDecimal syInletRatio;
+    @Schema(description = "商业险留点比例")
+    private BigDecimal syKeepPointRatio;
+    @Schema(description = "商业险出口留点比例")
+    private BigDecimal syExportKeepPointRatio;
 
+    @Schema(description = "驾意险手续费比例")
+    private BigDecimal jyCommissionRatio;
+    @Schema(description = "驾意险跟单费比例")
+    private BigDecimal jyFollowRatio;
+    @Schema(description = "驾意险加投费比例")
+    private BigDecimal jyAdditionalRatio;
+    @Schema(description = "驾意险出口比例")
+    private BigDecimal jyExportRatio;
     @Schema(description = "驾意险入口比例")
     private BigDecimal jyInletRatio;
+    @Schema(description = "非车险留点比例")
+    private BigDecimal jyKeepPointRatio;
+    @Schema(description = "驾意险出口留点比例")
+    private BigDecimal jyExportKeepPointRatio;
 
-    @Schema(description = "交强险留点比例")
-    private BigDecimal jqKeepPointRatio;
 
-    @Schema(description = "商业险留点比例")
-    private BigDecimal syKeepPointRatio;
+    // 建议放在类内部作为私有方法,方便复用
+    private BigDecimal multiplyBy100(BigDecimal value) {
+        return value != null ? value.multiply(new BigDecimal("100")) : BigDecimal.ZERO;
+    }
 
-    @Schema(description = "非车险留点比例")
-    private BigDecimal jyKeepPointRatio;
+    public void multiply100() {
+        // 交强险比例
+        this.jqCommissionRatio = multiplyBy100(this.jqCommissionRatio);
+        this.jqFollowRatio = multiplyBy100(this.jqFollowRatio);
+        this.jqAdditionalRatio = multiplyBy100(this.jqAdditionalRatio);
+        this.jqExportRatio = multiplyBy100(this.jqExportRatio);
+        this.jqInletRatio = multiplyBy100(this.jqInletRatio);
+        this.jqKeepPointRatio = multiplyBy100(this.jqKeepPointRatio);
+        this.jqExportKeepPointRatio = multiplyBy100(this.jqExportKeepPointRatio);
 
-    @Schema(description = "交强险出口留点比例")
-    private BigDecimal jqExportKeepPointRatio;
+        // 商业险比例
+        this.syCommissionRatio = multiplyBy100(this.syCommissionRatio);
+        this.syFollowRatio = multiplyBy100(this.syFollowRatio);
+        this.syAdditionalRatio = multiplyBy100(this.syAdditionalRatio);
+        this.syExportRatio = multiplyBy100(this.syExportRatio);
+        this.syInletRatio = multiplyBy100(this.syInletRatio);
+        this.syKeepPointRatio = multiplyBy100(this.syKeepPointRatio);
+        this.syExportKeepPointRatio = multiplyBy100(this.syExportKeepPointRatio);
 
-    @Schema(description = "商业险出口留点比例")
-    private BigDecimal syExportKeepPointRatio;
+        // 驾意险比例
+        this.jyCommissionRatio = multiplyBy100(this.jyCommissionRatio);
+        this.jyFollowRatio = multiplyBy100(this.jyFollowRatio);
+        this.jyAdditionalRatio = multiplyBy100(this.jyAdditionalRatio);
+        this.jyExportRatio = multiplyBy100(this.jyExportRatio);
+        this.jyInletRatio = multiplyBy100(this.jyInletRatio);
+        this.jyKeepPointRatio = multiplyBy100(this.jyKeepPointRatio);
+        this.jyExportKeepPointRatio = multiplyBy100(this.jyExportKeepPointRatio);
+    }
 
-    @Schema(description = "驾意险出口留点比例")
-    private BigDecimal jyExportKeepPointRatio;
     public PtlAgreementCostRatioVo(List<PtlAgreementCostTypeVo> ptlAgreementCostTypeList, PtlAgreement ptlAgreement) {
         ptlAgreementCostTypeList.forEach(ptlAgreementCostType -> {
             switch (ptlAgreementCostType.getCostType()) {

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

@@ -1,6 +1,7 @@
 package com.jzg.commons.util;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -13,9 +14,9 @@ import java.util.List;
 public class BigDecimalUtil {
 
     /** 默认除法运算精度(保留小数点后几位) */
-    private static final int DEF_DIV_SCALE = 2;
+    private static final int DEF_DIV_SCALE = 5;
     /** 默认舍入模式:四舍五入 */
-    private static final RoundingMode DEF_ROUNDING_MODE = RoundingMode.HALF_UP;
+    private static final RoundingMode DEF_ROUNDING_MODE = RoundingMode.HALF_EVEN;
 
     // 私有构造器,防止被实例化
     private BigDecimalUtil() {}
@@ -65,6 +66,21 @@ public class BigDecimalUtil {
         return sum;
     }
 
+    public static BigDecimal null2Zero(String amount){
+        if(StrUtil.isEmpty(amount)){
+            return BigDecimal.ZERO;
+        }
+        return new BigDecimal(amount);
+
+    }
+
+    public static String toString(BigDecimal amount){
+        if(amount != null){
+            return amount.toString();
+        }
+        return null;
+    }
+
     /**
      * 提供精确的减法运算
      * @param v1 被减数
@@ -160,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");
     }

+ 4 - 2
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/build/AnShengCrawlerQuoteResultsVoBuild.java

@@ -65,7 +65,9 @@ public final class AnShengCrawlerQuoteResultsVoBuild {
                 quoteResultsVo.setBiRiskInfoVo(buildBiRiskInfoVo(contract.getPolicyBase()));
                 buildRiskInfoVo(quoteVo.getBiRiskInfoVo(), contract.getPolicyBase());
                 // 商业险信息
-                buildKindInfo(quoteResultsVo.getKindInfoVo(), contract.getPolicyCoverages());
+                List<KindInfoVo> kindInfoVo = quoteVo.getKindInfoVo();
+                buildKindInfo(kindInfoVo, contract.getPolicyCoverages());
+                quoteResultsVo.setKindInfoVo(kindInfoVo);
             }
         });
         QuoteResultsVo.CostsVo costs = quoteResultsVo.getCosts();
@@ -175,7 +177,7 @@ public final class AnShengCrawlerQuoteResultsVoBuild {
                 kindInfoVo,
                 coverage,
                 AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO.PolicyCoveragesDTO::getDutyCode,
-                AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO.PolicyCoveragesDTO::getTotalStandardPremium
+                AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO.PolicyCoveragesDTO::getTotalAgreePremium
         );
     }
 

+ 2 - 2
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/build/DaJiaCrawlerQuoteResultsVoBuild.java

@@ -188,7 +188,7 @@ public final class DaJiaCrawlerQuoteResultsVoBuild {
         JSONArray scoreArray = new JSONArray();
         scoreArray.add(new JSONObject()
                 .fluentPut("scoreName","交强类型评分")
-                .fluentPut("scoreKey","pubScores")
+                .fluentPut("scoreKey","jqPubScores")
                 .fluentPut("score",compulsoryInsurance.getCoefficientInfo().getPubScores()));
         scoreArray.add(new JSONObject()
                 .fluentPut("scoreName","违章评分")
@@ -229,7 +229,7 @@ public final class DaJiaCrawlerQuoteResultsVoBuild {
             scoreVo.setScoreJson(scoreArray);
             scoreArray.add(new JSONObject()
                     .fluentPut("scoreName","商业类型评分")
-                    .fluentPut("scoreKey","pubScores")
+                    .fluentPut("scoreKey","syPubScores")
                     .fluentPut("score",coefficientInfo1.getPubScores()));
             scoreVo.setScoreJson(scoreArray);
          }

+ 10 - 8
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/build/HuaNongCrawlerQuoteResultsVoBuild.java

@@ -65,6 +65,11 @@ public final class HuaNongCrawlerQuoteResultsVoBuild {
                 quoteResultsVo.getScoreVo().setCiClaims(contractDTO.getPlatFormMessage().getClaimTimes());
                 // 交强转续保标识(按RenewalEnum映射)
                 quoteResultsVo.getScoreVo().setJqRenewal(convertRenewalFlag(contractDTO.getContractMain().getRenewalFlag()));
+                RiskInfoVo ciRiskInfoVo  = quoteVo.getCiRiskInfoVo();
+                ciRiskInfoVo.setStartDate(contractDTO.getCoverage().get(0).getValidDate());
+                ciRiskInfoVo.setEndDate(contractDTO.getCoverage().get(0).getExpiryDate());
+                quoteResultsVo.setCiRiskInfoVo(ciRiskInfoVo);
+
             } else {
                 // 设置商业险各项金额
                 buildKindInfo(quoteVo.getKindInfoVo(), contractDTO.getCoverage());
@@ -76,6 +81,11 @@ public final class HuaNongCrawlerQuoteResultsVoBuild {
                 quoteResultsVo.getScoreVo().setBiClaims(contractDTO.getPlatFormMessage().getClaimTimes());
                 // 商业转续保标识(按RenewalEnum映射)
                 quoteResultsVo.getScoreVo().setSyRenewal(convertRenewalFlag(contractDTO.getContractMain().getRenewalFlag()));
+
+                RiskInfoVo biRiskInfoVo  = quoteVo.getBiRiskInfoVo();
+                biRiskInfoVo.setStartDate(contractDTO.getCoverage().get(0).getValidDate());
+                biRiskInfoVo.setEndDate(contractDTO.getCoverage().get(0).getExpiryDate());
+                quoteResultsVo.setBiRiskInfoVo(biRiskInfoVo);
             }
         });
         // 计算总保费 = 交强险 + 商业险 + 驾意险 + 车船税
@@ -90,14 +100,6 @@ public final class HuaNongCrawlerQuoteResultsVoBuild {
         //设置评分
         quoteResultsVo.setScoreVo(buildScoreVo(quoteResultsVo.getScoreVo(),huaNongCrawlerQuotedPriceResponse));
         quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.WAIT_AUDIT);
-        quoteResultsVo.setCiRiskInfoVo(quoteVo.getCiRiskInfoVo());
-        RiskInfoVo biRiskInfo = quoteVo.getBiRiskInfoVo();
-        if(biRiskInfo != null && quoteVo.getCiRiskInfoVo() != null){
-            biRiskInfo.setStartDate(quoteVo.getCiRiskInfoVo().getStartDate());
-            biRiskInfo.setEndDate(quoteVo.getCiRiskInfoVo().getEndDate());
-        }
-
-        quoteResultsVo.setBiRiskInfoVo(biRiskInfo);
         return quoteResultsVo;
     }
 

+ 14 - 0
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerQuoteProcessServiceImpl.java

@@ -379,6 +379,20 @@ public class HuaNongCrawlerQuoteProcessServiceImpl implements HuaNongCrawlerQuot
 
         Map<String, List<HuaNongCrawlerCatalogQueryResponse.DataDTO.TreeDataDTO.PagesDTO>> uploadDataMap = new HashMap<>();
         String finalAccessToken = accessToken;
+
+        // 如果图片只有两张,重复上传两次(每张各上传2次,共4张)
+        long totalImageCount = imageVoList.stream()
+                .flatMap(vo -> vo.getImageBase64List().stream())
+                .count();
+        if (totalImageCount == 2) {
+            imageVoList.forEach(vo -> {
+                List<InsuranceImageVo.ImageDTO> base64List = vo.getImageBase64List();
+                if (!base64List.isEmpty()) {
+                    base64List.addAll(new ArrayList<>(base64List));
+                }
+            });
+        }
+
         imageVoList.forEach(insuranceImageVo -> {
             String imageCode = insuranceImageVo.getInsuranceImageCode();
             if (!uploadDataMap.containsKey(imageCode)) {

+ 11 - 1
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/build/HuaTaiCrawlerQuoteResultsVoBuild.java

@@ -30,6 +30,8 @@ public class HuaTaiCrawlerQuoteResultsVoBuild {
         quoteResultsVo.setCiRiskInfoVo(buildCiRiskInfoVo(quoteResponseData, quoteVo));
         // 商业险
         quoteResultsVo.setBiRiskInfoVo(buildBiRiskInfoVo(quoteResponseData, quoteVo));
+        // 商业险种的详细保费
+        quoteResultsVo.setKindInfoVo(quoteVo.getKindInfoVo());
         // 商业险险种信息
         if(quoteResponseData.getCoveragedtolist() !=  null) {
             List<HtCrawlerQuoteResponse.DataDTO.CoverageDTOList.CoverageDTO> coverageDTOList = quoteResponseData.getCoveragedtolist().getCoveragedto();
@@ -37,7 +39,7 @@ public class HuaTaiCrawlerQuoteResultsVoBuild {
             quoteResultsVo.setKindInfoVo(kindInfoVo);
         }
 
-        // 交强保费 车船税 商业保费
+        // 交强保费 车船税 商业保费  非车险费niPremium
         buildPremium(quoteResultsVo, quoteResponseData, niPremium);
         // 评分
         JSONArray scoreJson = new JSONArray();
@@ -130,6 +132,14 @@ public class HuaTaiCrawlerQuoteResultsVoBuild {
         quoteResultsVo.getCosts().setBiPremium(StringUtils.isBlank(getBiPremium(quoteResponseData)) ? "" : getBiPremium(quoteResponseData));
         // 设置非车险(驾意险)保费,报价返回数据中不存在
         quoteResultsVo.getCosts().setNiPremium(StringUtils.isBlank(niPremium) ? "" : niPremium);
+        // 计算总保费 = 交强险 + 商业险 + 驾意险 + 车船税
+        QuoteResultsVo.CostsVo costs = quoteResultsVo.getCosts();
+        double sumPremium = 0.0;
+        if (StringUtils.isNotBlank(costs.getCiPremium())) sumPremium += Double.parseDouble(costs.getCiPremium());
+        if (StringUtils.isNotBlank(costs.getBiPremium())) sumPremium += Double.parseDouble(costs.getBiPremium());
+        if (StringUtils.isNotBlank(costs.getNiPremium())) sumPremium += Double.parseDouble(costs.getNiPremium());
+        if (StringUtils.isNotBlank(costs.getVvTax())) sumPremium += Double.parseDouble(costs.getVvTax());
+        costs.setSumPremium(String.valueOf(sumPremium));
     }
 
     /**

+ 70 - 24
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/service/Impl/HuaTaiCrawlerRequestImpl.java

@@ -110,6 +110,7 @@ public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
     private static final Pattern LIMIT_AMOUNT = Pattern.compile("value=\"(.*?)\" id=\"js_actualvalue\"");
     private static final Pattern TRANSFER_FLAG = Pattern.compile("\"erroeType\":\"(.*?)\"");
     private static final Pattern PAT_END_DATE = Pattern.compile("终保日期\\s*([^;]+)");
+    private static final Pattern PAT_END_DATE2 = Pattern.compile("终保日期:\\s*([^;]+)");
     private static final Pattern RESPONSE_ERR = Pattern.compile("(\"infoName\"\\s*:\\s*\"([^\"]*)\",\\s*\"infomsg\"\\s*:\\s*\"([^\"]*)\"|\"erroeInfo\"\\s*:\\s*\"([^\"]*)\")",Pattern.DOTALL);
 
     private static final Set<String> SPECIAL_USERS = Set.of(
@@ -250,7 +251,7 @@ public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
         //带重试的获取报价编号、车型型号
         Map<String, Object> xbResult = retry(() -> {
             try { return xbQuery(dto.getUsername(), cookie, car); }
-            catch (Exception e) { refreshLogin(dto); throw new SystemException(e.getMessage()); }
+            catch (Exception e) { refreshLogin(dto); throw new Exception(e); }
         }, MAX_RETRIES, RETRY_DELAY_MS, "预报价获取登录信息");
 
         String quotationNo = str(xbResult, "quotationNo");
@@ -631,14 +632,14 @@ public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
 
     private HtCrawlerQuoteResponse.DataDTO resolveQuoteResponse(DuplQuoteResult duplQuoteResult, String decryptData, String mealid, String limitAmount,
                                                                 HttpHeaders h, String personalInsuredJSON) {
+        log.info("报价结果: {}", decryptData);
         log.info("报价结果: {}", convertResponseMsg(decryptData));
         if (decryptData.contains("未传送车辆过户标志")) {
             log.error("报价失败: {}", convertResponseMsg(decryptData));
             throw new SystemException(ERR_PREFIX + convertResponseMsg(decryptData)+(decryptData.contains("1251BI") ? ",请勾选'商业险是否过户'选项" : ""));
         }
-        if (!decryptData.contains("录入的校验码有误") && decryptData.contains("erroeInfo") && !duplQuoteResult.dupl()) {
-            log.error("报价失败: {}", convertResponseMsg(decryptData));
-            throw new SystemException(ERR_PREFIX + convertResponseMsg(decryptData));
+        if (decryptData.contains("errrorFlag") && decryptData.contains("carChange")) {
+            throw new SystemException(decryptData);
         }
         //车损险保额过高  limitAmount
         if (decryptData.contains("车损险保额不能高于")) {
@@ -648,20 +649,13 @@ public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
             decryptData = req.quote(new HtCrawlerQuoteRequest(duplQuoteResult.q(), mealid, limitAmount, "", personalInsuredJSON), h);
             return resolveQuoteResponse(duplQuoteResult, decryptData, mealid, limitAmount, h, personalInsuredJSON);
         }
-        if (decryptData.contains("传送了车辆过户标志,请确认")) {
-            Pattern pattern = Pattern.compile(TRANSFER_FLAG.pattern());
-            Matcher matcher = pattern.matcher(decryptData);
-            String transferFlag =  "";
-            if (matcher.find()) transferFlag = matcher.group(1);
-            decryptData = req.quote(new HtCrawlerQuoteRequest(duplQuoteResult.q(), mealid, limitAmount+","+transferFlag, "", personalInsuredJSON), h);
-            return resolveQuoteResponse(duplQuoteResult, decryptData, mealid, limitAmount, h, personalInsuredJSON);
-        }
         if (decryptData.contains("TRANS_MESSAGE") && decryptData.contains("终保日期")) {
             Map<String, String> map = JSONObject.parseObject(decryptData, Map.class);
             if (map.containsKey("TRANS_MESSAGE") && map.get("TRANS_MESSAGE").contains("交强")) {
-                Matcher m = PAT_END_DATE.matcher(decryptData);
-                if (!m.find()) {
+                Matcher m = PAT_END_DATE2.matcher(decryptData);
+                if (m.find()) {
                     String jiaoqiang_startDate = m.group(1);
+                    log.info("报价响应结果CI,终保日期{}", jiaoqiang_startDate);
                     duplQuoteResult.q().getCiRiskInfoVo().setStartDate(jiaoqiang_startDate + ":00");
                     LocalDateTime dt = LocalDateTime.parse(jiaoqiang_startDate.replace(" ", "T"), DateTimeFormatter.ofPattern(DATE_FMT_T));
                     String newEnd = dt.plusYears(1).format(DateTimeFormatter.ofPattern(DATE_FMT));
@@ -671,20 +665,36 @@ public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
                 }
             }
             if (map.containsKey("TRANS_MESSAGE") && map.get("TRANS_MESSAGE").contains("商业")) {
-                Matcher m = PAT_END_DATE.matcher(decryptData);
-                if (!m.find()) {
+                Matcher m = PAT_END_DATE2.matcher(decryptData);
+                if (m.find()) {
                     String chesun_startDate = m.group(1);
+                    log.info("报价响应结果BI,终保日期{}", chesun_startDate);
                     duplQuoteResult.q().getBiRiskInfoVo().setStartDate(chesun_startDate);
+                    duplQuoteResult.q().getCiRiskInfoVo().setStartDate(chesun_startDate);
                     LocalDateTime dt = LocalDateTime.parse(chesun_startDate.replace(" ", "T"), DateTimeFormatter.ofPattern(DATE_FMT_T));
                     String newEnd = dt.plusYears(1).format(DateTimeFormatter.ofPattern(DATE_FMT));
                     duplQuoteResult.q().getBiRiskInfoVo().setEndDate(newEnd);
+                    duplQuoteResult.q().getCiRiskInfoVo().setEndDate(newEnd);
                     decryptData = req.quote(new HtCrawlerQuoteRequest(duplQuoteResult.q(), mealid, limitAmount, "", personalInsuredJSON), h);
                     return resolveQuoteResponse(duplQuoteResult, decryptData, mealid, limitAmount, h, personalInsuredJSON);
                 }
             }
         }
-        if (decryptData.contains("errrorFlag") && decryptData.contains("carChange")) {
-            throw new SystemException(decryptData);
+        if (decryptData.contains("传送了车辆过户标志,请确认")) {
+            //HtCrawlerQuoteResponse.DataDTO dataDTO = JSONObject.parseObject(decryptData, HtCrawlerQuoteResponse.DataDTO.class);
+            //List<HtCrawlerQuoteResponse.DataDTO.BasePartDTOListDTO.BasePartDTO> basePartDTO =
+            //        dataDTO.getBasepartdtolist() != null ? dataDTO.getBasepartdtolist().getBasepartdto() : null;
+            //String basePartJSON = buildBasePartJSON(basePartDTO==null?new ArrayList<>():basePartDTO);
+            Pattern pattern = Pattern.compile(TRANSFER_FLAG.pattern());
+            Matcher matcher = pattern.matcher(decryptData);
+            String transferFlag =  "";
+            if (matcher.find()) transferFlag = matcher.group(1);
+            decryptData = req.quote(new HtCrawlerQuoteRequest(duplQuoteResult.q(), mealid, limitAmount+","+transferFlag, "", personalInsuredJSON), h);
+            return resolveQuoteResponse(duplQuoteResult, decryptData, mealid, limitAmount, h, personalInsuredJSON);
+        }
+        if (!decryptData.contains("录入的校验码有误") && decryptData.contains("erroeInfo") && !duplQuoteResult.dupl()) {
+            log.error("报价失败: {}", convertResponseMsg(decryptData));
+            throw new SystemException(ERR_PREFIX + convertResponseMsg(decryptData));
         }
         HtCrawlerQuoteResponse.DataDTO data = null;
         data = JSONObject.parseObject(decryptData, HtCrawlerQuoteResponse.DataDTO.class);
@@ -700,6 +710,38 @@ public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
             decryptData = req.quote(new HtCrawlerQuoteRequest(duplQuoteResult.q(), mealid, limitAmount, basePartJSON, personalInsuredJSON), h);
             log.info("resolveQuoteResponse attempt {}/{}: {}", i + 1, MAX_RETRIES, decryptData);
 
+            if (decryptData.contains("TRANS_MESSAGE") && decryptData.contains("终保日期")) {
+                Map<String, String> map = JSONObject.parseObject(decryptData, Map.class);
+                if (map.containsKey("TRANS_MESSAGE") && map.get("TRANS_MESSAGE").contains("交强")) {
+                    Matcher m = PAT_END_DATE2.matcher(decryptData);
+                    if (m.find()) {
+                        String jiaoqiang_startDate = m.group(1);
+                        log.info("报价响应结果CI,终保日期{}", jiaoqiang_startDate);
+                        duplQuoteResult.q().getCiRiskInfoVo().setStartDate(jiaoqiang_startDate + ":00");
+                        LocalDateTime dt = LocalDateTime.parse(jiaoqiang_startDate.replace(" ", "T"), DateTimeFormatter.ofPattern(DATE_FMT_T));
+                        String newEnd = dt.plusYears(1).format(DateTimeFormatter.ofPattern(DATE_FMT));
+                        duplQuoteResult.q().getCiRiskInfoVo().setEndDate(newEnd);
+                        decryptData = req.quote(new HtCrawlerQuoteRequest(duplQuoteResult.q(), mealid, limitAmount, "", personalInsuredJSON), h);
+                        return resolveQuoteResponse(duplQuoteResult, decryptData, mealid, limitAmount, h, personalInsuredJSON);
+                    }
+                }
+                if (map.containsKey("TRANS_MESSAGE") && map.get("TRANS_MESSAGE").contains("商业")) {
+                    Matcher m = PAT_END_DATE2.matcher(decryptData);
+                    if (m.find()) {
+                        String chesun_startDate = m.group(1);
+                        log.info("报价响应结果BI,终保日期{}", chesun_startDate);
+                        duplQuoteResult.q().getBiRiskInfoVo().setStartDate(chesun_startDate);
+                        duplQuoteResult.q().getCiRiskInfoVo().setStartDate(chesun_startDate);
+                        LocalDateTime dt = LocalDateTime.parse(chesun_startDate.replace(" ", "T"), DateTimeFormatter.ofPattern(DATE_FMT_T));
+                        String newEnd = dt.plusYears(1).format(DateTimeFormatter.ofPattern(DATE_FMT));
+                        duplQuoteResult.q().getBiRiskInfoVo().setEndDate(newEnd);
+                        duplQuoteResult.q().getCiRiskInfoVo().setEndDate(newEnd);
+                        decryptData = req.quote(new HtCrawlerQuoteRequest(duplQuoteResult.q(), mealid, limitAmount, "", personalInsuredJSON), h);
+                        return resolveQuoteResponse(duplQuoteResult, decryptData, mealid, limitAmount, h, personalInsuredJSON);
+                    }
+                }
+            }
+
             HtCrawlerQuoteResponse.DataDTO result = null;
             try {
                 result = JSONObject.parseObject(decryptData, HtCrawlerQuoteResponse.DataDTO.class);
@@ -782,23 +824,27 @@ public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
         vo.getOrder().setQuoteNo(order.getQuotationRelaNo());
 
         HtCrawlerSubmitRequest submit = new HtCrawlerSubmitRequest(vo, params, order.getCiCategory(), order.getBiCategory());
+        log.info("提交核保参数: {}", JSONObject.toJSONString(submit));
         String res = req.submit2(submit, req.getHeaders());
         log.info("提交核保结果: {}", res);
 
+        if(res.contains("<html>")) throw new SystemException("核保失败, 服务器繁忙, 请稍后重试");
+
+        if (res.contains("起保时间不正确")) {
+            throw new SystemException("起保时间不正确-------即时起保分钟数必须为00/15/30/45\n请重新选择起保时间!");
+        }
+
         Map<String, Object> map = new HashMap<>();
         try {
             map = MAPPER.readValue(res, Map.class);
         } catch (JsonProcessingException e) {
-            throw new SystemException("核保失败,未知异常, {}", convertResponseMsg(res));
+            throw new SystemException("核保失败, {}", convertResponseMsg(res));
         }
 
-        if (!"1,2,3,4".contains(order.getCiCategory()) || "Y".equals(str(map, "isOver"))
-                || "重新计算保费".equals(str(map, "MSG")) || res.contains("下发修改意见") || res.contains("转人工意见")) {
+        if (!"1,2,3,4".contains(order.getCiCategory()) || "Y".equals(str(map, "isOver")) || "Y".equals(str(map, "isOver1"))
+                || "重新计算保费".equals(str(map, "MSG")) || (res.contains("下发修改意见") && !res.contains("isPassHB")) || res.contains("转人工意见")) {
             throw new SystemException("核保失败-------" + convertResponseMsg(res));
         }
-        if (res.contains("起保时间不正确")) {
-            throw new SystemException("起保时间不正确-------即时起保分钟数必须为00/15/30/45\n请重新选择起保时间!");
-        }
         if (res.contains("转人工")) return handleManualUnderwriting(order, params);
         if (res.contains("已通过核保未实收") || "Y".equals(str(map, "isPassHB"))) return handlePassedUnderwriting(order, params, vo);
 

+ 38 - 8
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) {
@@ -744,23 +748,34 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
             }
         }
         RiskInfoVo biRisk = quoteVo.getBiRiskInfoVo() != null ?quoteVo.getBiRiskInfoVo() : new RiskInfoVo();
-        if(quoteRequest.getPrpCmain().get("startDate") != null && quoteRequest.getPrpCmainCI().get("endDate") != null){
-            biRisk.setStartDate(quoteRequest.getPrpCmainCI().get("startDate")+"");
+        if(quoteRequest.getPrpCmain().get("startDate") != null && quoteRequest.getPrpCmain().get("endDate") != null){
+            biRisk.setStartDate(quoteRequest.getPrpCmain().get("startDate")+"");
             if(biRisk.getStartDate().length()<11){
-                biRisk.setStartDate(quoteRequest.getPrpCmainCI().get("startDate")+" 00:00:00");
+                biRisk.setStartDate(quoteRequest.getPrpCmain().get("startDate")+" 00:00:00");
             }
-            biRisk.setEndDate(quoteRequest.getPrpCmainCI().get("endDate")+"");
+            biRisk.setEndDate(quoteRequest.getPrpCmain().get("endDate")+"");
             if(biRisk.getEndDate().length()<11){
-                biRisk.setEndDate(quoteRequest.getPrpCmainCI().get("endDate")+" 24:00:00");
+                biRisk.setEndDate(quoteRequest.getPrpCmain().get("endDate")+" 24:00:00");
             }
         }
         resultsVo.setCiRiskInfoVo(ciRisk);
         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;
+    }
+
     /**
      * 核保方法
      *

+ 7 - 4
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;
     }
@@ -369,8 +373,7 @@ public class QuoteVerificationAspect {
             BiConsumer<InsFeeOrders, BigDecimal> setFollow,
             BiConsumer<InsFeeOrders, BigDecimal> setAdditional,
             BiConsumer<InsFeeOrders, BigDecimal> keepPointRate,
-            BiConsumer<InsFeeOrders, BigDecimal> keepPointPremium
-    ) {
+            BiConsumer<InsFeeOrders, BigDecimal> keepPointPremium) {
         // 若险种配置为空,默认应收应付为0
         if (costType == null || premium == null) {
             setReceivable.accept(insFeeOrders, BigDecimal.ZERO);
@@ -404,8 +407,8 @@ public class QuoteVerificationAspect {
         receivable = receivable.setScale(5, RoundingMode.HALF_EVEN);
         setReceivable.accept(insFeeOrders, receivable);
 
-        // 设置留点比例 入口比例+加投比例-出口比例
-        BigDecimal keepPointRateCal  = BigDecimalUtil.subtract(BigDecimalUtil.add(BigDecimalUtil.multiply(inletPercent,taxFactor),addThrowPercent),exportPercent)
+        // 设置留点比例 入口比例/taxFactor+加投比例-出口比例
+        BigDecimal keepPointRateCal  = BigDecimalUtil.subtract(BigDecimalUtil.add(BigDecimalUtil.divide(inletPercent,taxFactor),addThrowPercent),exportPercent)
                 .setScale(5,RoundingMode.HALF_EVEN);
         keepPointRate.accept(insFeeOrders, keepPointRateCal);
         // 设置留点比例和留点费用

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

@@ -31,7 +31,6 @@ import org.springframework.stereotype.Service;
 import java.lang.reflect.Method;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -78,8 +77,14 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
     }
 
 
+    /**
+     *
+     * @author lipf
+     * @date 2026/6/24 9:46
+     */
     @Override
     public InsFeeOrders calcCosts(PtlAgreementCostRatioVo ptlAgreementCostRatioVo) {
+        log.info("调整费用。不同费用的比例信息是:[{}]", JSONUtil.toJsonStr(ptlAgreementCostRatioVo));
         InsFeeOrders insFeeOrders = getInsFeeOrders(ptlAgreementCostRatioVo);
         log.info("调整后费用.参数[{}]真实结果是[{}]", JSONUtil.toJsonStr(ptlAgreementCostRatioVo), JSONUtil.toJsonStr(insFeeOrders));
         // 保存比例
@@ -100,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-是
@@ -161,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,
@@ -185,7 +207,7 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
         // ===================== 按比例计算各项费用 =====================
         BigDecimal inlet = base.multiply(inletRatio).setScale(scale, RoundingMode.HALF_EVEN);
         BigDecimal commission = base.multiply(commissionRatio).setScale(scale, RoundingMode.HALF_EVEN);
-        BigDecimal follow = base.multiply(followRatio).setScale(scale, RoundingMode.HALF_EVEN);
+        BigDecimal follow = BigDecimalUtil.subtract(inlet,commission); //BigDecimal follow = base.multiply(followRatio).setScale(scale, RoundingMode.HALF_EVEN);
 
         // 加投直接乘
         BigDecimal addThrow = premium.multiply(addThrowRatio).setScale(scale, RoundingMode.HALF_EVEN);
@@ -209,11 +231,11 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
             insFeeOrders.setJqPayablePremium(export);
 
             // add by lipf, 2026年6月23日10:42:36  更新具体某个险种的出口费用的时候,同步更新总的出口费用
-            List<BigDecimal> exportAmount = new ArrayList<>();
-            exportAmount.add(insFeeOrders.getJqExportPremium());
-            exportAmount.add(insFeeOrders.getSyExportPremium());
-            exportAmount.add(insFeeOrders.getJyExportPremium());
-            insFeeOrders.setTotalPayablePremium(BigDecimalUtil.add(exportAmount));
+//            List<BigDecimal> exportAmount = new ArrayList<>();
+//            exportAmount.add(inlet);
+//            exportAmount.add(insFeeOrders.getSyExportPremium());
+//            exportAmount.add(insFeeOrders.getJyExportPremium());
+//            insFeeOrders.setTotalPayablePremium(BigDecimalUtil.add(exportAmount));
         } else if ("sy".equals(type)) {
             insFeeOrders.setSyCommissionPremium(commission);
             insFeeOrders.setSyReceivablePremium(inlet);
@@ -225,11 +247,11 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
             insFeeOrders.setSyPayablePremium(export);
 
             // add by lipf, 2026年6月23日10:42:36  更新具体某个险种的出口费用的时候,同步更新总的出口费用
-            List<BigDecimal> exportAmount = new ArrayList<>();
-            exportAmount.add(insFeeOrders.getJqExportPremium());
-            exportAmount.add(insFeeOrders.getSyExportPremium());
-            exportAmount.add(insFeeOrders.getJyExportPremium());
-            insFeeOrders.setTotalPayablePremium(BigDecimalUtil.add(exportAmount));
+//            List<BigDecimal> exportAmount = new ArrayList<>();
+//            exportAmount.add(insFeeOrders.getJqExportPremium());
+//            exportAmount.add(insFeeOrders.getSyExportPremium());
+//            exportAmount.add(insFeeOrders.getJyExportPremium());
+//            insFeeOrders.setTotalPayablePremium(BigDecimalUtil.add(exportAmount));
         } else if ("jy".equals(type)) {
             insFeeOrders.setJyCommissionPremium(commission);
             insFeeOrders.setJyReceivablePremium(inlet);
@@ -241,11 +263,11 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
             insFeeOrders.setJyPayablePremium(export);
 
             // add by lipf, 2026年6月23日10:42:36  更新具体某个险种的出口费用的时候,同步更新总的出口费用
-            List<BigDecimal> exportAmount = new ArrayList<>();
-            exportAmount.add(insFeeOrders.getJqExportPremium());
-            exportAmount.add(insFeeOrders.getSyExportPremium());
-            exportAmount.add(insFeeOrders.getJyExportPremium());
-            insFeeOrders.setTotalPayablePremium(BigDecimalUtil.add(exportAmount));
+//            List<BigDecimal> exportAmount = new ArrayList<>();
+//            exportAmount.add(insFeeOrders.getJqExportPremium());
+//            exportAmount.add(insFeeOrders.getSyExportPremium());
+//            exportAmount.add(insFeeOrders.getJyExportPremium());
+//            insFeeOrders.setTotalPayablePremium(BigDecimalUtil.add(exportAmount));
         }
     }
 
@@ -317,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 {
@@ -327,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) {

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

@@ -61,7 +61,6 @@ import io.seata.spring.annotation.GlobalTransactional;
 import jakarta.servlet.http.HttpServletRequest;
 import lombok.RequiredArgsConstructor;
 import lombok.Setter;
-import org.apache.commons.beanutils.BeanUtils;
 import org.apache.http.util.TextUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -73,7 +72,6 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
-import java.lang.reflect.InvocationTargetException;
 import java.math.BigDecimal;
 import java.net.URL;
 import java.time.Instant;
@@ -1678,7 +1676,6 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     @Override
     public HttpResult<String> updateOrdersBatch(BatchModifyVo batchModifyVo) {
         log.info("批量修改车险订单的费用比例,联系人等信息. batchModifyVo=[{}]", JSONUtil.toJsonStr(batchModifyVo));
-
         List<String> orderNos = batchModifyVo.getOrderNos();
         if(CollUtil.isEmpty(orderNos)){
             return HttpResult.error("批量修改时,请指定订单编号");
@@ -1692,9 +1689,11 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
                 continue;
             }
             // add by lipf, 进行费用的修改
-            if(this.rationIsNotNull(batchModifyVo)){
+            if(this.rationIsNotAllNull(batchModifyVo)){
                 log.info("费用比例不为空,同步调整费用。batchModifyVo=[{}]", JSONUtil.toJsonStr(batchModifyVo));
-                PtlAgreementCostRatioVo param = this.calRatio(insFeeOrders,batchModifyVo);
+                BigDecimal taxFactor = this.obtainTaxRate(orderNo);
+                PtlAgreementCostRatioVo param = this.calRatio(insFeeOrders,batchModifyVo, taxFactor);
+                param.multiply100();
                 insFeeAuditService.saveCostInfo(param);
             }
             log.info("车险订单[{}]对应的订单明细是[{}]", orderNo, JSONUtil.toJsonStr(oldInsOrders));
@@ -1726,17 +1725,15 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     /**
      * 结合原有的费用比例,计算更新后的费用比例
      *
-     * @param insFeeOrders 订单的费用信息
+     * @param insFeeOrders  订单的费用信息
      * @param batchModifyVo 批量修改的费用比例
-     *
+     * @param taxFactor 税率 1或者1.06
      * @author lipf
      * @date 2026/6/23 16:35
      */
-    private PtlAgreementCostRatioVo calRatio(InsFeeOrders insFeeOrders, BatchModifyVo batchModifyVo) {
+    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());
 
@@ -1745,20 +1742,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         vo.setSyAdditionalRatio(insFeeOrders.getSyAdditionalRatio());
         vo.setJyAdditionalRatio(insFeeOrders.getJyAdditionalRatio());
 
-        // 手续费比例
-        vo.setJqCommissionRatio(batchModifyVo.getJqSuperviseCostsProportion() != null ? batchModifyVo.getJqSuperviseCostsProportion(): insFeeOrders.getJqCommissionRatio());
-        vo.setSyCommissionRatio(batchModifyVo.getSySuperviseCostsProportion() != null ? batchModifyVo.getSySuperviseCostsProportion(): insFeeOrders.getSyCommissionRatio());
-        vo.setJyCommissionRatio(batchModifyVo.getJySuperviseCostsProportion() != null ? batchModifyVo.getJySuperviseCostsProportion(): insFeeOrders.getJyCommissionRatio());
-
-        // 跟单费比例
-        vo.setJqFollowRatio(batchModifyVo.getJqOtherCostsProportion() != null ? batchModifyVo.getJqOtherCostsProportion(): insFeeOrders.getJqFollowRatio());
-        vo.setSyFollowRatio(batchModifyVo.getSyOtherCostsProportion() != null ? batchModifyVo.getSyOtherCostsProportion(): insFeeOrders.getSyFollowRatio());
-        vo.setJyFollowRatio(batchModifyVo.getJyOtherCostsProportion() != null ? batchModifyVo.getJyOtherCostsProportion(): insFeeOrders.getJyFollowRatio());
-
-        // 入口比例
-        vo.setJqInletRatio(BigDecimalUtil.add(vo.getJqCommissionRatio(), vo.getJqFollowRatio()));
-        vo.setSyInletRatio(BigDecimalUtil.add(vo.getSyCommissionRatio(), vo.getSyFollowRatio()));
-        vo.setJyInletRatio(BigDecimalUtil.add(vo.getJyCommissionRatio(), vo.getJyFollowRatio()));
+        this.calCommissionAndFollowAndInlet( vo, batchModifyVo, insFeeOrders);
 
         // 出口比例
         vo.setJqExportRatio(insFeeOrders.getJqExportRatio());
@@ -1766,9 +1750,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         vo.setJyExportRatio(insFeeOrders.getJyExportRatio());
 
         // 留点比例
-        vo.setJqKeepPointRatio(BigDecimalUtil.subtract(BigDecimalUtil.add(vo.getJqInletRatio(), vo.getJqAdditionalRatio()),vo.getJqExportRatio()));
-        vo.setSyKeepPointRatio(BigDecimalUtil.subtract(BigDecimalUtil.add(vo.getSyInletRatio(), vo.getSyAdditionalRatio()),vo.getSyExportRatio()));
-        vo.setJyKeepPointRatio(BigDecimalUtil.subtract(BigDecimalUtil.add(vo.getJyInletRatio(), vo.getJyAdditionalRatio()),vo.getJyExportRatio()));
+        vo.setJqKeepPointRatio(BigDecimalUtil.subtract(BigDecimalUtil.add(BigDecimalUtil.divide(vo.getJqInletRatio(),taxFactor) , vo.getJqAdditionalRatio()),vo.getJqExportRatio()));
+        vo.setSyKeepPointRatio(BigDecimalUtil.subtract(BigDecimalUtil.add(BigDecimalUtil.divide(vo.getSyInletRatio(),taxFactor), vo.getSyAdditionalRatio()),vo.getSyExportRatio()));
+        vo.setJyKeepPointRatio(BigDecimalUtil.subtract(BigDecimalUtil.add(BigDecimalUtil.divide(vo.getJyInletRatio(),taxFactor), vo.getJyAdditionalRatio()),vo.getJyExportRatio()));
 
         // 出口留点比例
         vo.setJqExportKeepPointRatio(insFeeOrders.getJqExportKeepPointRatio());
@@ -1779,6 +1763,96 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         return vo;
     }
 
+    /**
+     * 根据不同场景计算入口比例,手续费比例和跟单费比例
+     *
+     * 手续费 (只变手续费)                 入口-手续费 = 跟单
+     * 跟单变  (只变跟单费)                 手续费+跟单 = 入口
+     * 手续费+ 跟单费(手续费和跟单费都变)      手续费+跟单 = 入口
+     *
+     * @author lipf
+     * @date 2026/6/24 15:53
+     */
+    private void calCommissionAndFollowAndInlet(PtlAgreementCostRatioVo vo, BatchModifyVo batchModifyVo, InsFeeOrders insFeeOrders) {
+
+        // 设置交强险
+        BigDecimal jqInletRatio = BigDecimal.ZERO;
+        BigDecimal jqCommissionRatio = BigDecimal.ZERO;
+        BigDecimal jqFollowRatio = BigDecimal.ZERO;
+        if(batchModifyVo.getJqSuperviseCostsProportion() != null && batchModifyVo.getJqOtherCostsProportion() == null){
+            jqInletRatio = insFeeOrders.getJqInletRatio();
+            jqCommissionRatio = batchModifyVo.getJqSuperviseCostsProportion();
+            jqFollowRatio = BigDecimalUtil.subtract(jqInletRatio,jqCommissionRatio);
+        }else if(batchModifyVo.getJqSuperviseCostsProportion() == null && batchModifyVo.getJqOtherCostsProportion() != null){
+             jqCommissionRatio = insFeeOrders.getJqCommissionRatio();
+             jqFollowRatio = batchModifyVo.getJqOtherCostsProportion();
+             jqInletRatio = BigDecimalUtil.add(jqCommissionRatio,jqFollowRatio);
+        }else if(batchModifyVo.getJqSuperviseCostsProportion() != null && batchModifyVo.getJqOtherCostsProportion() != null){
+             jqCommissionRatio = batchModifyVo.getJqSuperviseCostsProportion();
+             jqFollowRatio = batchModifyVo.getJqOtherCostsProportion();
+             jqInletRatio = BigDecimalUtil.add(jqCommissionRatio,jqFollowRatio);
+        }else if(batchModifyVo.getJqSuperviseCostsProportion() == null && batchModifyVo.getJqOtherCostsProportion() == null){
+            jqInletRatio = insFeeOrders.getJqInletRatio();
+            jqCommissionRatio = insFeeOrders.getJqCommissionRatio();
+            jqFollowRatio = insFeeOrders.getJqFollowRatio();
+        }
+        vo.setJqInletRatio(jqInletRatio);
+        vo.setJqCommissionRatio(jqCommissionRatio);
+        vo.setJqFollowRatio(jqFollowRatio);
+
+        // 设置商业险的比例
+        BigDecimal syInletRatio = BigDecimal.ZERO;
+        BigDecimal syCommissionRatio = BigDecimal.ZERO;
+        BigDecimal syFollowRatio = BigDecimal.ZERO;
+        if(batchModifyVo.getSySuperviseCostsProportion() != null && batchModifyVo.getSyOtherCostsProportion() == null){
+            syInletRatio = insFeeOrders.getSyInletRatio();
+            syCommissionRatio = batchModifyVo.getSySuperviseCostsProportion();
+            syFollowRatio = BigDecimalUtil.subtract(syInletRatio,syCommissionRatio);
+        }else if(batchModifyVo.getSySuperviseCostsProportion() == null && null != batchModifyVo.getSyOtherCostsProportion()){
+            syCommissionRatio = insFeeOrders.getSyCommissionRatio();
+            syFollowRatio = batchModifyVo.getSyOtherCostsProportion();
+            syInletRatio = BigDecimalUtil.add(syCommissionRatio,syFollowRatio);
+        }else if(batchModifyVo.getSySuperviseCostsProportion() != null && batchModifyVo.getSyOtherCostsProportion() != null){
+            syCommissionRatio = batchModifyVo.getSySuperviseCostsProportion();
+            syFollowRatio = batchModifyVo.getSyOtherCostsProportion();
+            syInletRatio = BigDecimalUtil.add(syCommissionRatio,syFollowRatio);
+        }else if(batchModifyVo.getSySuperviseCostsProportion() == null && batchModifyVo.getSyOtherCostsProportion() == null){
+            syInletRatio = insFeeOrders.getSyInletRatio();
+            syCommissionRatio = insFeeOrders.getSyCommissionRatio();
+            syFollowRatio = insFeeOrders.getSyFollowRatio();
+        }
+        vo.setSyInletRatio(syInletRatio);
+        vo.setSyCommissionRatio(syCommissionRatio);
+        vo.setSyFollowRatio(syFollowRatio);
+
+        // 设置驾意险
+        BigDecimal jyInletRatio = BigDecimal.ZERO;
+        BigDecimal jyCommissionRatio = BigDecimal.ZERO;
+        BigDecimal jyFollowRatio = BigDecimal.ZERO;
+        if(batchModifyVo.getJySuperviseCostsProportion() != null && batchModifyVo.getJyOtherCostsProportion() == null){
+            jyInletRatio = insFeeOrders.getJyInletRatio();
+            jyCommissionRatio = batchModifyVo.getJySuperviseCostsProportion();
+            jyFollowRatio = BigDecimalUtil.subtract(jyInletRatio,jyCommissionRatio);
+        }else if(batchModifyVo.getJySuperviseCostsProportion() == null && batchModifyVo.getJyOtherCostsProportion() != null){
+            jyCommissionRatio = insFeeOrders.getJyCommissionRatio();
+            jyFollowRatio = batchModifyVo.getJyOtherCostsProportion();
+            jyInletRatio = BigDecimalUtil.add(jyCommissionRatio,jyFollowRatio);
+        }else if(batchModifyVo.getJySuperviseCostsProportion() != null && batchModifyVo.getJyOtherCostsProportion() != null){
+            jyCommissionRatio = batchModifyVo.getJySuperviseCostsProportion();
+            jyFollowRatio = batchModifyVo.getJyOtherCostsProportion();
+            jyInletRatio = BigDecimalUtil.add(jyCommissionRatio,jyFollowRatio);
+        }else if(batchModifyVo.getJySuperviseCostsProportion() == null && batchModifyVo.getJyOtherCostsProportion() == null){
+            jyInletRatio = insFeeOrders.getJyInletRatio();
+            jyCommissionRatio = insFeeOrders.getJyCommissionRatio();
+            jyFollowRatio = insFeeOrders.getJyFollowRatio();
+        }
+        vo.setJyInletRatio(jyInletRatio);
+        vo.setJyCommissionRatio(jyCommissionRatio);
+        vo.setJyFollowRatio(jyFollowRatio);
+
+        log.info("入口比例,手续费比例,跟单比例处理后的结果是:vo=[{}]", JSONUtil.toJsonStr(vo));
+    }
+
     /**
      * 存在是否不为空的费用比例
      *      所有费用比例都为空,返回false, 有任意一个不为空,返回true
@@ -1786,7 +1860,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
      * @author lipf
      * @date 2026/6/23 16:34
      */
-    private boolean rationIsNotNull(BatchModifyVo vo) {
+    private boolean rationIsNotAllNull(BatchModifyVo vo) {
         boolean hasSuperviseOrOtherCosts = vo.getJqSuperviseCostsProportion() != null
                 || vo.getSySuperviseCostsProportion() != null
                 || vo.getJySuperviseCostsProportion() != null

+ 7 - 7
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/build/TaiShanCrawlerQuoteResultsVoBuild.java

@@ -92,34 +92,34 @@ public class TaiShanCrawlerQuoteResultsVoBuild {
             scoreJson.add(new JSONObject()
                     .fluentPut("scoreName","泰山分")
                     .fluentPut("scoreKey","ctsScore")
-                    .fluentPut("ctsScore", riskResponse.getResult().getCtsScore()));
+                    .fluentPut("score", riskResponse.getResult().getCtsScore()));
 
             scoreJson.add(new JSONObject()
                     .fluentPut("scoreName","续保客户价值分类")
                     .fluentPut("scoreKey","renewalClass")
-                    .fluentPut("renewalClass", riskResponse.getResult().getRenewalClass()));
+                    .fluentPut("score", riskResponse.getResult().getRenewalClass()));
 
             scoreJson.add(new JSONObject()
                     .fluentPut("scoreName","整单预期赔付率(GQ)")
                     .fluentPut("scoreKey","exRatio")
-                    .fluentPut("exRatio", riskResponse.getResult().getExRatio()));
+                    .fluentPut("score", riskResponse.getResult().getExRatio()));
             scoreJson.add(new JSONObject()
                     .fluentPut("scoreName","风险评级(G)")
                     .fluentPut("scoreKey","pvalue")
-                    .fluentPut("pvalue", riskResponse.getResult().getPvalue()));
+                    .fluentPut("score", riskResponse.getResult().getPvalue()));
 
             scoreJson.add(new JSONObject()
                     .fluentPut("scoreName","平台评分")
                     .fluentPut("scoreKey","ptScore")
-                    .fluentPut("ptScore", riskResponse.getResult().getPtScore()));
+                    .fluentPut("score", riskResponse.getResult().getPtScore()));
             scoreJson.add(new JSONObject()
                     .fluentPut("scoreName","商业综合评分")
                     .fluentPut("scoreKey","comPoints")
-                    .fluentPut("comPoints", riskResponse.getResult().getComPoints()));
+                    .fluentPut("score", riskResponse.getResult().getComPoints()));
             scoreJson.add(new JSONObject()
                     .fluentPut("scoreName","整体精算折扣")
                     .fluentPut("scoreKey","entireActuaryDiscount")
-                    .fluentPut("entireActuaryDiscount", riskResponse.getResult().getEntireActuaryDiscount()));
+                    .fluentPut("score", riskResponse.getResult().getEntireActuaryDiscount()));
         }
 
         quoteResultsVo.getScoreVo().setScoreJson(scoreJson);

+ 6 - 0
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/impl/TaiShanCrawlerQuoteProcessServiceImpl.java

@@ -300,6 +300,12 @@ public class TaiShanCrawlerQuoteProcessServiceImpl implements TaiShanCrawlerQuot
         //String authorization = "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1ODI0MjEiLCJhdXRoIjoiUk9MRV9CVVNJTkVTUyIsInBhc3N3b3JkX2V4cGlyZSI6MTIsImV4cCI6MTc4MTk0MDMyMX0.rsR8yMmSsB5iOstJSToswargqTCFB5He37UydrlK_lKFsHVqtBL-EOAgls4YL4nKWvRtbSxxY6HZRczHFG0iRw";
         String authorization = "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1ODI0MjEiLCJhdXRoIjoiUk9MRV9CVVNJTkVTUyIsInBhc3N3b3JkX2V4cGlyZSI6NjIsImV4cCI6MTc4NDc2NzY0N30.6JLD1Cc4_Vhuh5qSJ-lnEQ5MsNskbn6MzFbgUXRyCwSZzVHCI7-jpU04Mo7kLq2rc8E2LVhWHgmjyYD0rYCIiQ";
 
+        // 修复后:从缓存获取
+        String token = taiShanCrawlerCacheComponent.getAuthorization(username);
+//        String authorization = "Bearer " + token;
+        log.info("TaiShan-token:{}", token);
+        log.info("TaiShan-authorization:{}", authorization);
+
         HttpHeaders httpHeaders = new HttpHeaders();
         
         httpHeaders.set("Accept", "application/json, text/plain, */*");

+ 7 - 18
tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/build/YangGuangApiQuoteResultsVoBuild.java

@@ -8,6 +8,7 @@ import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.commons.constants.quote.enums.quote.KindCode;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.quotation.commons.constant.enums.quote.RenewalEnum;
 import com.jzg.quotation.yangguang.api.entity.response.YangGuangAccuracyCalculateResponse;
 
 import java.math.BigDecimal;
@@ -185,28 +186,16 @@ public final class YangGuangApiQuoteResultsVoBuild {
 
         if (yangGuangAccuracyCalculateResponse.getNewAndRenewalFlagCI() != null) {
             switch (yangGuangAccuracyCalculateResponse.getNewAndRenewalFlagCI()) {
-                case "1":
-                case "3":
-                    scoreVo.setJqRenewal("0");
-                    break;
-                case "2":
-                case "4":
-                case "5":
-                    scoreVo.setJqRenewal("1");
-                    break;
+                case "1" -> scoreVo.setJqRenewal(String.valueOf(RenewalEnum.New.getCode()));
+                case "2", "4", "5" -> scoreVo.setJqRenewal(String.valueOf(RenewalEnum.Renewal.getCode()));
+                case "3" -> scoreVo.setJqRenewal(String.valueOf(RenewalEnum.Transfer.getCode()));
             }
         }
         if (yangGuangAccuracyCalculateResponse.getNewAndRenewalFlagBI() != null) {
             switch (yangGuangAccuracyCalculateResponse.getNewAndRenewalFlagBI()) {
-                case "1":
-                case "3":
-                    scoreVo.setSyRenewal("0");
-                    break;
-                case "2":
-                case "4":
-                case "5":
-                    scoreVo.setSyRenewal("1");
-                    break;
+                case "1" -> scoreVo.setSyRenewal(String.valueOf(RenewalEnum.New.getCode()));
+                case "2", "4", "5" -> scoreVo.setSyRenewal(String.valueOf(RenewalEnum.Renewal.getCode()));
+                case "3" -> scoreVo.setSyRenewal(String.valueOf(RenewalEnum.Transfer.getCode()));
             }
         }
         return scoreVo;

+ 11 - 2
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/build/ZhongAnCrawlerQuoteResultsVoBuild.java

@@ -9,6 +9,7 @@ import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.base.OrderBase;
+import com.jzg.quotation.commons.constant.enums.quote.RenewalEnum;
 import com.jzg.quotation.zhongan.crawler.entity.response.ZhongAnCrawlerQuoteResponse;
 import com.jzg.quotation.zhongan.crawler.entity.response.ZhongAnCrawlerUploadInitDateResponse;
 
@@ -98,8 +99,16 @@ public class ZhongAnCrawlerQuoteResultsVoBuild {
         QuoteResultsVo.ScoreVo scoreVo = new QuoteResultsVo.ScoreVo();
         scoreVo.setJqAdjustRate(dataDTO.getCompelDiscount());
         scoreVo.setSyAdjustRate(dataDTO.getBusinessDiscount());
-        scoreVo.setJqRenewal("ZA".equals(dataDTO.getForceRenewalFlag()) ? "1" : "0");
-        scoreVo.setSyRenewal("ZA".equals(dataDTO.getBizRenewalFlag()) ? "1" : "0");
+        switch (dataDTO.getForceRenewalFlag()) {
+            case "PA": scoreVo.setJqRenewal(String.valueOf(RenewalEnum.Transfer.getCode()));
+            case "ZA": scoreVo.setJqRenewal(String.valueOf(RenewalEnum.Renewal.getCode()));
+            default: scoreVo.setJqRenewal(String.valueOf(RenewalEnum.New.getCode()));
+        }
+        switch (dataDTO.getBizRenewalFlag()) {
+            case "PA": scoreVo.setSyRenewal(String.valueOf(RenewalEnum.Transfer.getCode()));
+            case "ZA": scoreVo.setSyRenewal(String.valueOf(RenewalEnum.Renewal.getCode()));
+            default: scoreVo.setSyRenewal(String.valueOf(RenewalEnum.New.getCode()));
+        }
         JSONArray scoreJson = new JSONArray();
         scoreJson.add(new JSONObject()
                 .fluentPut("scoreName", "评分")

+ 4 - 2
tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java

@@ -443,10 +443,12 @@ public class ReceivableController {
         Page<InsPlyIncome> data = receivableService.getPlatFormReceivableList(receivableQueryVo);
         List<InsPlyIncomeOrder> receivablePageIds = receivableService.getReceivablePageIds(receivableQueryVo);
         //满足条件的的总的应收
-        BigDecimal totalReceivablePremium = null;
+        BigDecimal totalReceivablePremium = BigDecimal.ZERO;
         try{
             List<String> orderNos = receivablePageIds.stream().map(InsPlyIncomeOrder::getOrderNo).distinct().toList();
-            totalReceivablePremium = receivableService.queryAllTotalReceivablePremium(orderNos);
+            if(CollUtil.isNotEmpty(orderNos)){
+                totalReceivablePremium = receivableService.queryAllTotalReceivablePremium(orderNos);
+            }
             totalReceivablePremium = totalReceivablePremium.setScale(5, RoundingMode.HALF_DOWN);
         }catch (Exception e){
             log.error("统计总的应收异常",e);

+ 3 - 0
tenant/organization/src/main/java/com/jzg/organization/entity/dto/CalRes.java

@@ -25,5 +25,8 @@ public class CalRes implements Serializable {
     @Schema(description = "结算金额")
     private BigDecimal settlement;
 
+    @Schema(description = "虚增金额")
+    private BigDecimal overinflatedAmount;
+
 
 }

+ 235 - 22
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -29,6 +29,7 @@ import com.jzg.commons.entity.po.InsFeeOrders;
 import com.jzg.commons.entity.po.PtlAgreement;
 import com.jzg.commons.entity.po.SysUploadFiles;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
+import com.jzg.commons.entity.vo.PtlAgreementCostRatioVo;
 import com.jzg.commons.exception.ServiceException;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.*;
@@ -2298,6 +2299,138 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         throw new ServiceException(result.getMsg());
     }
 
+    /**
+     * 根据不同场景计算入口比例,手续费比例和跟单费比例
+     *
+     * 手续费 (只变手续费)                 入口-手续费 = 跟单
+     * 跟单变  (只变跟单费)                 手续费+跟单 = 入口
+     * 手续费+ 跟单费(手续费和跟单费都变)      手续费+跟单 = 入口
+     *
+     * @author lipf
+     * @date 2026/6/24 15:53
+     */
+    private void calCommissionAndFollowAndInlet(PtlAgreementCostRatioVo vo, BatchModifyVo batchModifyVo, InsPlyIncome insPlyIncome) {
+        InsFeeOrders insFeeOrders = insPlyIncome.getInsFeeOrders();
+        // 设置交强险
+        BigDecimal jqInletRatio = BigDecimal.ZERO;
+        BigDecimal jqCommissionRatio = BigDecimal.ZERO;
+        BigDecimal jqFollowRatio = BigDecimal.ZERO;
+        if(batchModifyVo.getJqSuperviseCostsProportion() != null && batchModifyVo.getJqOtherCostsProportion() == null){
+            jqInletRatio = insFeeOrders .getJqInletRatio();
+            jqCommissionRatio = batchModifyVo.getJqSuperviseCostsProportion();
+            jqFollowRatio = BigDecimalUtil.subtract(jqInletRatio,jqCommissionRatio);
+        }else if(batchModifyVo.getJqSuperviseCostsProportion() == null && batchModifyVo.getJqOtherCostsProportion() != null){
+            jqCommissionRatio = BigDecimalUtil.null2Zero(insPlyIncome.getJqSuperviseCostsProportion());
+            jqFollowRatio = batchModifyVo.getJqOtherCostsProportion();
+            jqInletRatio = BigDecimalUtil.add(jqCommissionRatio,jqFollowRatio);
+        }else if(batchModifyVo.getJqSuperviseCostsProportion() != null && batchModifyVo.getJqOtherCostsProportion() != null){
+            jqCommissionRatio = batchModifyVo.getJqSuperviseCostsProportion();
+            jqFollowRatio = batchModifyVo.getJqOtherCostsProportion();
+            jqInletRatio = BigDecimalUtil.add(jqCommissionRatio,jqFollowRatio);
+        }else if(batchModifyVo.getJqSuperviseCostsProportion() == null && batchModifyVo.getJqOtherCostsProportion() == null){
+            jqInletRatio = insFeeOrders.getJqInletRatio();
+            jqCommissionRatio = BigDecimalUtil.null2Zero(insPlyIncome.getJqSuperviseCostsProportion());
+            jqFollowRatio = BigDecimalUtil.null2Zero(insPlyIncome.getJqOtherCostsProportion());
+        }
+        vo.setJqInletRatio(jqInletRatio);
+        vo.setJqCommissionRatio(jqCommissionRatio);
+        vo.setJqFollowRatio(jqFollowRatio);
+
+        // 设置商业险的比例
+        BigDecimal syInletRatio = BigDecimal.ZERO;
+        BigDecimal syCommissionRatio = BigDecimal.ZERO;
+        BigDecimal syFollowRatio = BigDecimal.ZERO;
+        if(batchModifyVo.getSySuperviseCostsProportion() != null && batchModifyVo.getSyOtherCostsProportion() == null){
+            syInletRatio = insFeeOrders.getSyInletRatio();
+            syCommissionRatio = batchModifyVo.getSySuperviseCostsProportion();
+            syFollowRatio = BigDecimalUtil.subtract(syInletRatio,syCommissionRatio);
+        }else if(batchModifyVo.getSySuperviseCostsProportion() == null && null != batchModifyVo.getSyOtherCostsProportion()){
+            syCommissionRatio = BigDecimalUtil.null2Zero(insPlyIncome.getSySuperviseCostsProportion());
+            syFollowRatio = batchModifyVo.getSyOtherCostsProportion();
+            syInletRatio = BigDecimalUtil.add(syCommissionRatio,syFollowRatio);
+        }else if(batchModifyVo.getSySuperviseCostsProportion() != null && batchModifyVo.getSyOtherCostsProportion() != null){
+            syCommissionRatio = batchModifyVo.getSySuperviseCostsProportion();
+            syFollowRatio = batchModifyVo.getSyOtherCostsProportion();
+            syInletRatio = BigDecimalUtil.add(syCommissionRatio,syFollowRatio);
+        }else if(batchModifyVo.getSySuperviseCostsProportion() == null && batchModifyVo.getSyOtherCostsProportion() == null){
+            syInletRatio = insFeeOrders.getSyInletRatio();
+            syCommissionRatio = BigDecimalUtil.null2Zero(insPlyIncome.getSySuperviseCostsProportion());
+            syFollowRatio = BigDecimalUtil.null2Zero(insPlyIncome.getSyOtherCostsProportion());
+        }
+        vo.setSyInletRatio(syInletRatio);
+        vo.setSyCommissionRatio(syCommissionRatio);
+        vo.setSyFollowRatio(syFollowRatio);
+
+        // 设置驾意险
+        BigDecimal jyInletRatio = BigDecimal.ZERO;
+        BigDecimal jyCommissionRatio = BigDecimal.ZERO;
+        BigDecimal jyFollowRatio = BigDecimal.ZERO;
+        if(batchModifyVo.getJySuperviseCostsProportion() != null && batchModifyVo.getJyOtherCostsProportion() == null){
+            jyInletRatio = insFeeOrders.getJyInletRatio();
+            jyCommissionRatio = batchModifyVo.getJySuperviseCostsProportion();
+            jyFollowRatio = BigDecimalUtil.subtract(jyInletRatio,jyCommissionRatio);
+        }else if(batchModifyVo.getJySuperviseCostsProportion() == null && batchModifyVo.getJyOtherCostsProportion() != null){
+            jyCommissionRatio = BigDecimalUtil.null2Zero(insPlyIncome.getJySuperviseCostsProportion());
+            jyFollowRatio = batchModifyVo.getJyOtherCostsProportion();
+            jyInletRatio = BigDecimalUtil.add(jyCommissionRatio,jyFollowRatio);
+        }else if(batchModifyVo.getJySuperviseCostsProportion() != null && batchModifyVo.getJyOtherCostsProportion() != null){
+            jyCommissionRatio = batchModifyVo.getJySuperviseCostsProportion();
+            jyFollowRatio = batchModifyVo.getJyOtherCostsProportion();
+            jyInletRatio = BigDecimalUtil.add(jyCommissionRatio,jyFollowRatio);
+        }else if(batchModifyVo.getJySuperviseCostsProportion() == null && batchModifyVo.getJyOtherCostsProportion() == null){
+            jyInletRatio = insFeeOrders.getJyInletRatio();
+            jyCommissionRatio = BigDecimalUtil.null2Zero(insPlyIncome.getJySuperviseCostsProportion());
+            jyFollowRatio = BigDecimalUtil.null2Zero(insPlyIncome.getJyOtherCostsProportion());
+        }
+        vo.setJyInletRatio(jyInletRatio);
+        vo.setJyCommissionRatio(jyCommissionRatio);
+        vo.setJyFollowRatio(jyFollowRatio);
+
+        log.info("入口比例,手续费比例,跟单比例处理后的结果是:vo=[{}]", JSONUtil.toJsonStr(vo));
+    }
+
+
+    /**
+     * 结合原有的费用比例,计算更新后的费用比例
+     *
+     * @param insPlyIncome  订单的费用信息
+     * @param batchModifyVo 批量修改的费用比例
+     * @author lipf
+     * @date 2026/6/23 16:35
+     */
+    private PtlAgreementCostRatioVo calRatio(InsPlyIncome insPlyIncome, BatchModifyVo batchModifyVo) {
+        log.info("batchModifyVo.转换百分比之前的数据=【{}】", JSONUtil.toJsonStr(batchModifyVo));
+        batchModifyVo.divide100();
+        PtlAgreementCostRatioVo vo = new PtlAgreementCostRatioVo();
+        vo.setOrderNo(insPlyIncome.getOrderNo());
+
+        // 加投费比例
+//        vo.setJqAdditionalRatio(insPlyIncome.getJqAdditionalRatio());
+//        vo.setSyAdditionalRatio(insPlyIncome.getSyAdditionalRatio());
+//        vo.setJyAdditionalRatio(insPlyIncome.getJyAdditionalRatio());
+
+        this.calCommissionAndFollowAndInlet(vo, batchModifyVo, insPlyIncome);
+
+        // 出口比例
+//        vo.setJqExportRatio(insPlyIncome.getJqExportRatio());
+//        vo.setSyExportRatio(insPlyIncome.getSyExportRatio());
+//        vo.setJyExportRatio(insPlyIncome.getJyExportRatio());
+
+        // 留点比例
+//        vo.setJqKeepPointRatio(BigDecimalUtil.subtract(BigDecimalUtil.add(BigDecimalUtil.divide(vo.getJqInletRatio(),taxFactor) , vo.getJqAdditionalRatio()),vo.getJqExportRatio()));
+//        vo.setSyKeepPointRatio(BigDecimalUtil.subtract(BigDecimalUtil.add(BigDecimalUtil.divide(vo.getSyInletRatio(),taxFactor), vo.getSyAdditionalRatio()),vo.getSyExportRatio()));
+//        vo.setJyKeepPointRatio(BigDecimalUtil.subtract(BigDecimalUtil.add(BigDecimalUtil.divide(vo.getJyInletRatio(),taxFactor), vo.getJyAdditionalRatio()),vo.getJyExportRatio()));
+
+        // 出口留点比例
+//        vo.setJqExportKeepPointRatio(insPlyIncome.getJqExportKeepPointRatio());
+//        vo.setSyExportKeepPointRatio(insPlyIncome.getSyExportKeepPointRatio());
+//        vo.setJyExportKeepPointRatio(insPlyIncome.getJyExportKeepPointRatio());
+        log.info("insPlyIncome调整前的比例:fee=[{}]", JSONUtil.toJsonStr(insPlyIncome));
+        log.info("insPlyIncome调整后的比例信息:vo=[{}]", JSONUtil.toJsonStr(vo));
+        return vo;
+    }
+
+
     /**
      * 私有协议批量修改
      *      修改手续费比例(商业险手续费比例, 交强险手续费比例)
@@ -2319,6 +2452,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         // 一次性查询所有需要修改的记录
         List<InsPlyIncome> incomeList = baseMapper.selectBatchIds(incomeIds);
         if (CollUtil.isEmpty(incomeList)) {
+            log.info("未找到需要修改的应收订单. incomeList=[{}]", JSONUtil.toJsonStr(incomeList));
             throw new ServiceException("未找到需要修改的应收订单");
         }
 
@@ -2344,27 +2478,44 @@ 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
+            List<InsFeeOrders> insFeeOrderByOrderNo = insFeeOrdersClient.getInsFeeOrderByOrderNo(income.getOrderNo());
+            if (CollUtil.isNotEmpty(insFeeOrderByOrderNo)){
+                InsFeeOrders insFeeOrders = CollUtil.getFirst(insFeeOrderByOrderNo);
+                income.setInsFeeOrders(insFeeOrders);
+            }
 
             boolean hasUpdate = false;
             String updateFlag = batchModifyVo.getUpdateFlag();
 
             // 根据 updateFlag 处理不同的更新逻辑
-            if ("1".equals(updateFlag)) {
-                // 修改手续费
-                hasUpdate = handleSuperviseCosts(updateIncome, income, batchModifyVo, taxRate);
-            } else if ("2".equals(updateFlag)) {
-                // 修改跟单费
-                hasUpdate = handleOtherCosts(updateIncome, income, batchModifyVo, taxRate);
-            } else if ("3".equals(updateFlag)) {
-                // 修改驾意险费用
-                hasUpdate = handleJyCosts(updateIncome, income, batchModifyVo, taxRate);
-            } else if ("4".equals(updateFlag)) {
-                // 修改所有
-                boolean superviseUpdated = handleSuperviseCosts(updateIncome, income, batchModifyVo, taxRate);
-                boolean otherUpdated = handleOtherCosts(updateIncome, income, batchModifyVo, taxRate);
-                boolean jyUpdated = handleJyCosts(updateIncome, income, batchModifyVo, taxRate);
-                hasUpdate = superviseUpdated || otherUpdated || jyUpdated;
-            }
+//            if ("1".equals(updateFlag)) {
+//                // 修改手续费
+//                hasUpdate = handleSuperviseCosts(updateIncome, income, batchModifyVo, taxRate);
+//            } else if ("2".equals(updateFlag)) {
+//                // 修改跟单费
+//                hasUpdate = handleOtherCosts(updateIncome, income, batchModifyVo, taxRate);
+//            } else if ("3".equals(updateFlag)) {
+//                // 修改驾意险费用
+//                hasUpdate = handleJyCosts(updateIncome, income, batchModifyVo, taxRate);
+//            } else if ("4".equals(updateFlag)) {
+//                // 修改所有
+//                boolean superviseUpdated = handleSuperviseCosts(updateIncome, income, batchModifyVo, taxRate);
+//                boolean otherUpdated = handleOtherCosts(updateIncome, income, batchModifyVo, taxRate);
+//                boolean jyUpdated = handleJyCosts(updateIncome, income, batchModifyVo, taxRate);
+//                hasUpdate = superviseUpdated || otherUpdated || jyUpdated;
+//            }
+
+            // 计算比例
+            PtlAgreementCostRatioVo ptlAgreementCostRatioVo = this.calRatio(income, batchModifyVo);
+            // 根据比例计算金额
+            this.calPremium(updateIncome,ptlAgreementCostRatioVo, taxRate);
+            hasUpdate = true;
 
             // 处理公共字段更新
             if (batchModifyVo.getSigningTime() != null) {
@@ -2398,6 +2549,60 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         return true;
     }
 
+    /**
+     * 根据比例计算入口费用,入口手续费,入口跟单费
+     *
+     * @author lipf
+     * @date 2026/6/24 16:36
+     */
+    private void calPremium(InsPlyIncome updateIncome, PtlAgreementCostRatioVo ratioVo, BigDecimal taxRate) {
+        log.info("根据入口比例等比例值计算对应的金额。 ptlAgreementCostRatioVo=[{}], updateIncome=[{}]", JSONUtil.toJsonStr(ratioVo), JSONUtil.toJsonStr(updateIncome));
+
+        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);
+        BigDecimal syInletPremium = BigDecimalUtil.divide(BigDecimalUtil.multiply(syPremium,ratioVo.getSyInletRatio()), taxRate);
+        BigDecimal jyInletPremium = BigDecimalUtil.divide(BigDecimalUtil.multiply(jyPremium,ratioVo.getJyInletRatio()), taxRate);
+
+        BigDecimal jqCommissionPremium = BigDecimalUtil.divide(BigDecimalUtil.multiply(jqPremium,ratioVo.getJqCommissionRatio()), taxRate);
+        BigDecimal syCommissionPremium = BigDecimalUtil.divide(BigDecimalUtil.multiply(syPremium,ratioVo.getSyCommissionRatio()), taxRate);
+        BigDecimal jyCommissionPremium = BigDecimalUtil.divide(BigDecimalUtil.multiply(jyPremium,ratioVo.getJyCommissionRatio()), taxRate);
+
+        BigDecimal jqOtherPremium = BigDecimalUtil.subtract(jqInletPremium,jqCommissionPremium);
+        BigDecimal syOtherPremium = BigDecimalUtil.subtract(syInletPremium,syCommissionPremium);
+        BigDecimal jyOtherPremium = BigDecimalUtil.subtract(jyInletPremium,jyCommissionPremium);
+
+        // 设置应收
+        updateIncome.setJqReceivablePremium(jqInletPremium.toString());
+        updateIncome.setSyReceivablePremium(syInletPremium.toString());
+        updateIncome.setJyReceivablePremium(jyPremium.toString());
+
+        // 设置手续费比例
+        updateIncome.setJqSuperviseCostsProportion(BigDecimalUtil.toString(ratioVo.getJqCommissionRatio()));
+        updateIncome.setSySuperviseCostsProportion(BigDecimalUtil.toString(ratioVo.getSyCommissionRatio()));
+        updateIncome.setJySuperviseCostsProportion(BigDecimalUtil.toString(ratioVo.getJyCommissionRatio()));
+
+        // 设置手续费
+        updateIncome.setJqSuperviseCostsPremiums(BigDecimalUtil.toString(jqCommissionPremium));
+        updateIncome.setSySuperviseCostsPremiums(BigDecimalUtil.toString(syCommissionPremium));
+        updateIncome.setJySuperviseCostsPremiums(BigDecimalUtil.toString(jyCommissionPremium));
+
+        // 设置跟单费比例
+        updateIncome.setJqOtherCostsProportion(BigDecimalUtil.toString(ratioVo.getJqFollowRatio()));
+        updateIncome.setSyOtherCostsProportion(BigDecimalUtil.toString(ratioVo.getSyFollowRatio()));
+        updateIncome.setJyOtherCostsProportion(BigDecimalUtil.toString(ratioVo.getJyFollowRatio()));
+
+        // 设置跟单费
+        updateIncome.setJqOtherCostsPremiums(BigDecimalUtil.toString(jqOtherPremium));
+        updateIncome.setSyOtherCostsPremiums(BigDecimalUtil.toString(syOtherPremium));
+        updateIncome.setJyOtherCostsPremiums(BigDecimalUtil.toString(jyOtherPremium));
+        log.info("根据比例计算得到的金额:updateIncome=[{}]", JSONUtil.toJsonStr(updateIncome));
+
+    }
+
     /**
      * 处理手续费更新
      */
@@ -2523,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;
             }
         }
@@ -3298,7 +3503,9 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     @Override
     public String exportPlatFormReceivable(ReceivableQueryVo receivableQueryVo) {
         receivableQueryVo.setSystemCode(baseController.getSystemCode());
+
         List<InsPlyIncome> receivableList = baseMapper.getReceivableList(receivableQueryVo);
+        receivableList = this.fillOtherInfo(receivableList);
 
         // 调用动态导出
         return exportBaseService.upLoadFile(
@@ -3630,6 +3837,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         List<CalRes> calRes;
         calRes = baseMapper.queryInvoicedAmount(systemCode, List.of(1, 3), queryVo.getInvoiceStartTime(), queryVo.getInvoiceEndTime(), queryVo.getAgreementType());
         Map<String, BigDecimal> sxfInvoicedAmountMap = calRes.stream().collect(Collectors.toMap(CalRes::getCompanyId, CalRes::getAmount, (o1,o2)->o1));
+        Map<String, BigDecimal> sxfOverinflatedAmountMap = calRes.stream().collect(Collectors.toMap(CalRes::getCompanyId, CalRes::getOverinflatedAmount, (o1,o2)->o1));
         calRes = baseMapper.queryInvoicedAmount(systemCode, List.of(2, 4), queryVo.getInvoiceStartTime(), queryVo.getInvoiceEndTime(), queryVo.getAgreementType());
         Map<String, BigDecimal> gdfInvoicedAmountMap = calRes.stream().collect(Collectors.toMap(CalRes::getCompanyId, CalRes::getAmount, (o1,o2)->o1));
 
@@ -3645,6 +3853,8 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             CompanySuperviseSettlementReportDto companySuperviseSettlementReportDto = companyMap.get(companyId);
             BigDecimal sxf = sxfInvoicedAmountMap.getOrDefault(companyId, BigDecimal.ZERO);
             companySuperviseSettlementReportDto.setSxfInvoicedAmount(Objects.toString(sxf,BigDecimal.ZERO+""));
+            BigDecimal sxfOverinflatedAmount = sxfOverinflatedAmountMap.getOrDefault(companyId, BigDecimal.ZERO);
+            companySuperviseSettlementReportDto.setTotalOverinflatedAmount(Objects.toString(sxfOverinflatedAmount,BigDecimal.ZERO+""));
             BigDecimal gdf = gdfInvoicedAmountMap.getOrDefault(companyId, BigDecimal.ZERO);
             companySuperviseSettlementReportDto.setGdfInvoicedAmount(Objects.toString(gdf,BigDecimal.ZERO+""));
             // 平台就没有未结算的,只要结算就是已结算的
@@ -3658,8 +3868,10 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
 
             BigDecimal sxfS = sxfSettledAmountMap.getOrDefault(companyId, BigDecimal.ZERO);
             BigDecimal gdfS = gdfSettledAmountMap.getOrDefault(companyId, BigDecimal.ZERO);
+            BigDecimal overinflatedAmount = sxfOverinflatedAmountMap.getOrDefault(companyId, BigDecimal.ZERO);
             companySuperviseSettlementReportDto.setSxfSettledAmount(Objects.toString(sxfS, BigDecimal.ZERO+""));
             companySuperviseSettlementReportDto.setSxfUnSettledAmount(BigDecimalUtil.subtract(sxf,sxfS).toString());
+            companySuperviseSettlementReportDto.setTotalOverinflatedAmount(Objects.toString(overinflatedAmount, BigDecimal.ZERO+""));
 
             companySuperviseSettlementReportDto.setGdfSettledAmount(Objects.toString(gdfS, BigDecimal.ZERO+""));
             companySuperviseSettlementReportDto.setGdfUnSettledAmount(BigDecimalUtil.subtract(gdf,gdfS).toString());
@@ -3781,6 +3993,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             tree.putExtra("sxfUnSettledAmount",dto.getSxfUnSettledAmount());
             tree.putExtra("gdfSettledAmount",dto.getGdfSettledAmount());
             tree.putExtra("gdfUnSettledAmount",dto.getGdfUnSettledAmount());
+            tree.putExtra("totalOverinflatedAmount",dto.getTotalOverinflatedAmount());
         });
         log.info("树形结构构建:一级数据[{}]个", CollUtil.size(build));
         return build;

+ 101 - 71
tenant/organization/src/main/resources/mapper/ReceivableMapper.xml

@@ -405,79 +405,101 @@
         ORDER BY ipi.create_time DESC
     </select>
 
-
     <select id="getReceivableList" resultType="com.jzg.commons.entity.finance.po.InsPlyIncome">
-        SELECT
-        *,
-        (COALESCE(ipi.jq_receivable_premium,0)  + COALESCE(ipi.sy_receivable_premium,0)  + COALESCE(ipi.jy_receivable_premium,0) ) as receivableAmount,  -- 总应收金额
-        (COALESCE(ipi.jq_supervise_costs_premiums,0)  + COALESCE(ipi.sy_supervise_costs_premiums,0)  + COALESCE(ipi.jy_supervise_costs_premiums,0)) as superviseCostsPremiums, -- 总应收手续费
-        iocui.name AS insuredPerson,
-        ior1.start_date as jqStartDate,
-        ior2.start_date as syStartDate,
-        io.product_name AS productName,
-        iop.jq_policy_no,
-        iop.sy_policy_no,
-        iop.jy_policy_no
-        FROM
-        ins_ply_income ipi
-        LEFT JOIN ins_orders io ON ipi.order_no = io.id AND io.is_delete = 0
-        LEFT JOIN ins_orders_car_user_info iocui ON ipi.order_no = iocui.order_no and iocui.policy_person_type = '3' AND iocui.is_delete = 0
-        LEFT JOIN ins_orders_risk ior1 ON ipi.order_no = ior1.order_no and ior1.risk_code = '0507' AND ior1.is_delete = 0
-        LEFT JOIN ins_orders_risk ior2 ON ipi.order_no = ior2.order_no and ior2.risk_code = '0510' AND ior2.is_delete = 0
-        LEFT JOIN ins_orders_policy iop ON ipi.order_no = iop.order_no AND iop.is_delete = 0
-        <where>
-            ipi.is_delete  = 0
-            AND ipi.settlement_status = '0'
-            AND ipi.system_code = #{receivableQueryVo.systemCode}
-            <if test="receivableQueryVo.queryType != null and receivableQueryVo.queryType == 1">
-                AND ipi.supervise_settlement = 0
-            </if>
-            <if test="receivableQueryVo.queryType!= null and receivableQueryVo.queryType == 2">
-                AND ipi.other_settlement = 1
-            </if>
-            <if test="receivableQueryVo.queryType!= null and (receivableQueryVo.queryType == 3 or receivableQueryVo.queryType == 4)">
-                AND ipi.jy_premium != 0
-            </if>
-            <if test="receivableQueryVo.licenseNo != null and receivableQueryVo.licenseNo != ''">
-                AND ipi.license_no LIKE CONCAT('%', #{receivableQueryVo.licenseNo}, '%')
-            </if>
-            <if test="receivableQueryVo.companyId != null and receivableQueryVo.companyId != ''">
-                AND ipi.company_id = #{receivableQueryVo.companyId}
-            </if>
-            <if test="receivableQueryVo.orderNo != null and receivableQueryVo.orderNo != ''">
-                AND ipi.order_no = #{receivableQueryVo.orderNo}
-            </if>
-            <if test="receivableQueryVo.ids != null and receivableQueryVo.ids != ''">
-                AND ipi.id IN
-                <foreach collection="receivableQueryVo.ids" item="id" open="(" separator="," close=")">
-                    #{id}
-                </foreach>
-            </if>
-            <if test="receivableQueryVo.orderNos != null and receivableQueryVo.orderNos != ''">
-                AND ipi.order_no IN
-                <foreach collection="receivableQueryVo.orderNos" item="orderNo" open="(" separator="," close=")">
-                    #{orderNo}
-                </foreach>
-            </if>
-            <if test="receivableQueryVo.agreementId != null and receivableQueryVo.agreementId != ''">
-                AND ipi.agreement_id = #{receivableQueryVo.agreementId}
-            </if>
-            <if test="receivableQueryVo.deptId != null and receivableQueryVo.deptId != ''">
-                AND ipi.dept_id = #{receivableQueryVo.deptId}
-            </if>
-            <if test="receivableQueryVo.productId!= null and receivableQueryVo.productId!= ''">
-                AND ipi.product_id = #{receivableQueryVo.productId}
-            </if>
-            <if test="receivableQueryVo.signingTimeStart != null and receivableQueryVo.signingTimeStart != ''">
-                AND ipi.signing_time between #{receivableQueryVo.signingTimeStart} and  #{receivableQueryVo.signingTimeEnd}
-            </if>
-            <if test="receivableQueryVo.agreementType != null and receivableQueryVo.agreementType != ''">
-                AND ipi.agreement_type = #{receivableQueryVo.agreementType}
-            </if>
-        </where>
+        <include refid="query"/>
+        and ipi.system_code = #{receivableQueryVo.systemCode}
+        <if test="receivableQueryVo.invoiceId != null and receivableQueryVo.invoiceId != ''" >
+            AND ipi.id  in (
+            select ipiil.income_id  from ins_ply_income_invoice_link ipiil where ipiil.invoice_id  = #{receivableQueryVo.invoiceId} and ipiil.is_delete = 0
+            )
+        </if>
+        <if test="receivableQueryVo.typeAttr != null and receivableQueryVo.typeAttr != ''">
+            AND io.real_quote_user_id  in (select su.username  from sys_user_jzg_info_salesman sujis
+            left join sys_user_jzg_info suji on sujis.sys_user_jzg_info_id = suji.id and suji.is_delete = 0
+            left join sys_user su on su.id = suji.user_id and su.is_delete = 0
+            where sujis.type_attr =#{receivableQueryVo.typeAttr})
+        </if>
+        <if test = "receivableQueryVo.agreementType != null and receivableQueryVo.agreementType != ''">
+            AND ipi.agreement_type = #{receivableQueryVo.agreementType}
+        </if>
+        <if test = "receivableQueryVo.ids != null and receivableQueryVo.ids.size > 0">
+            AND ipi.id in
+            <foreach collection="receivableQueryVo.ids" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
+        <if test="receivableQueryVo.queryType != null and receivableQueryVo.queryType == 1">
+            AND ipi.supervise_settlement = 0
+        </if>
+        <if test="receivableQueryVo.queryType!= null and receivableQueryVo.queryType == 2">
+            AND ipi.other_settlement = 0
+        </if>
+        <if test="receivableQueryVo.queryType!= null and (receivableQueryVo.queryType == 3 or receivableQueryVo.queryType == 4)">
+            AND ipi.jy_premium != 0
+            AND ipi.jy_supervise_settlement = 0
+            AND ipi.jy_other_settlement = 0
+        </if>
+        <if test="receivableQueryVo.licenseNo != null and receivableQueryVo.licenseNo != ''">
+            AND ipi.license_no LIKE CONCAT('%', #{receivableQueryVo.licenseNo}, '%')
+        </if>
+        <if test="receivableQueryVo.companyId != null and receivableQueryVo.companyId != ''">
+            AND ipi.company_id = #{receivableQueryVo.companyId}
+        </if>
+        <if test="receivableQueryVo.businessSource != null and receivableQueryVo.businessSource != ''">
+            AND ipi.business_source = #{receivableQueryVo.businessSource}
+        </if>
+        <if test="receivableQueryVo.settlementStatus != null and receivableQueryVo.settlementStatus != ''">
+            AND ipi.settlement_status = #{receivableQueryVo.settlementStatus}
+        </if>
+        <if test="receivableQueryVo.addType != null and receivableQueryVo.addType != ''">
+            AND ipi.add_type = #{receivableQueryVo.addType}
+        </if>
+        <if test="receivableQueryVo.orderNo != null and receivableQueryVo.orderNo != ''">
+            AND ipi.order_no = #{receivableQueryVo.orderNo}
+        </if>
+        <if test="receivableQueryVo.agreementId != null and receivableQueryVo.agreementId != ''">
+            AND ipi.agreement_id = #{receivableQueryVo.agreementId}
+        </if>
+        <if test="receivableQueryVo.deptId != null and receivableQueryVo.deptId != ''">
+            AND ipi.dept_id = #{receivableQueryVo.deptId}
+        </if>
+        <if test="receivableQueryVo.productId!= null and receivableQueryVo.productId!= ''">
+            AND ipi.product_id = #{receivableQueryVo.productId}
+        </if>
+        <if test="receivableQueryVo.signingTimeStart != null and receivableQueryVo.signingTimeStart != ''">
+            AND ipi.signing_time between #{receivableQueryVo.signingTimeStart} and  #{receivableQueryVo.signingTimeEnd}
+        </if>
+        <if test="receivableQueryVo.insuredName != null and receivableQueryVo.insuredName != ''">
+            AND iocui.name = #{receivableQueryVo.insuredName}
+        </if>
+        <if test="receivableQueryVo.orderType != null and receivableQueryVo.orderType != ''">
+            AND io.entry_status = #{receivableQueryVo.orderType}
+        </if>
+        <if test="receivableQueryVo.productName != null and receivableQueryVo.productName != ''">
+            AND io.product_name = #{receivableQueryVo.productName}
+        </if>
+        <if test="receivableQueryVo.jqPolicyNo != null and receivableQueryVo.jqPolicyNo != ''">
+            AND iop.jq_policy_no = #{receivableQueryVo.jqPolicyNo}
+        </if>
+        <if test="receivableQueryVo.syPolicyNo != null and receivableQueryVo.syPolicyNo != ''">
+            AND iop.sy_policy_no = #{receivableQueryVo.syPolicyNo}
+        </if>
+        <if test="receivableQueryVo.jyPolicyNo != null and receivableQueryVo.jyPolicyNo != ''">
+            AND iop.jy_policy_no = #{receivableQueryVo.jyPolicyNo}
+        </if>
+        <if test="receivableQueryVo.dockingPerson != null and receivableQueryVo.dockingPerson != ''">
+            AND io.docking_person = #{receivableQueryVo.dockingPerson}
+        </if>
+        <if test="receivableQueryVo.jqStartDate != null and receivableQueryVo.jqStartDate != ''">
+            AND ior1.start_date between #{receivableQueryVo.jqStartDate} and  #{receivableQueryVo.jqEndDate}
+        </if>
+        <if test="receivableQueryVo.syStartDate != null and receivableQueryVo.syStartDate != ''">
+            AND ior2.start_date between #{receivableQueryVo.syStartDate} and  #{receivableQueryVo.syStartDate}
+        </if>
         ORDER BY ipi.create_time DESC
     </select>
 
+
     <select id="getSuperviseJyExcelDtos" resultType="com.jzg.commons.entity.finance.dto.ExportSuperviseJyExcelDto">
         SELECT
         ipi.signing_time as signingTime,
@@ -1693,6 +1715,12 @@
             <if test="vo.agreementType != null and vo.agreementType != ''">
                 AND ipi.agreement_type = #{vo.agreementType}
             </if>
+            <if test="vo.signingStartTime != null and vo.signingStartTime != '' and vo.signingEndTime != null and vo.signingEndTime != ''">
+                AND DATE(ipi.signing_time) between #{vo.signingStartTime} and #{vo.signingEndTime}
+            </if>
+            <if test="vo.startTime != null and vo.startTime != '' and vo.endTime != null and vo.endTime != ''">
+                AND DATE(ipi.create_time) between #{vo.startTime} and #{vo.endTime}
+            </if>
         </where>
         group by
         eic.parent_id,
@@ -1704,12 +1732,14 @@
     <select id="queryInvoicedAmount" resultType="com.jzg.organization.entity.dto.CalRes">
         select
         a.company_id as companyId,
-        sum(a.amount) as amount
+        sum(a.amount) as amount,
+        sum(a.overinflatedAmount) as overinflatedAmount
         from
         (
         select
         ipii.company_id,
-        COALESCE(ipii.receivable_supervise_premium) as amount
+        COALESCE(ipii.receivable_supervise_premium) as amount,
+        COALESCE(ipii.overinflated_amount) as overinflatedAmount
         from
         ins_ply_income_invoice ipii
         where