Przeglądaj źródła

Merge remote-tracking branch 'origin/master'

liub 3 miesięcy temu
rodzic
commit
912e71b3e1
21 zmienionych plików z 437 dodań i 161 usunięć
  1. 2 1
      commons/src/main/java/com/jzg/commons/util/BuildDescUtils.java
  2. 67 41
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/build/AnShengCrawlerQuoteResultsVoBuild.java
  3. 2 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/build/ChengTaiAPIQuoteResultsVoBuild.java
  4. 23 2
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/component/HuaNongCrawlerRequestComponent.java
  5. 7 0
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/constant/enums/JiaYiXianProduct.java
  6. 35 1
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerDocumentsPrintRequestRequest.java
  7. 4 3
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerFindBusinessesRequestRequest.java
  8. 1 0
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerFtpDownloadRequestRequest.java
  9. 4 0
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/response/HuaNongCrawlerFindBusinessesResponse.java
  10. 35 8
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerRequestImpl.java
  11. 173 34
      tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/impl/RenBaoNewCrawlerRequestImpl.java
  12. 1 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/OrderOperationLogAspect.java
  13. 3 3
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  14. 8 0
      tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/build/TkCrawlerQuoteResultsBuild.java
  15. 32 27
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/impl/TaiShanCrawlerRequestImpl.java
  16. 1 1
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/build/ZiJinCrawlerQuoteResultsVoBuild.java
  17. 1 1
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/component/ZiJinCrawlerRequestComponent.java
  18. 10 0
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/entity/ZiJinCrawlerConfigureParameters.java
  19. 2 6
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/service/impl/ZiJinCrawlerQuoteProcessServiceImpl.java
  20. 16 24
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/service/impl/ZiJinCrawlerRequestImpl.java
  21. 10 8
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementCostServiceImpl.java

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

@@ -13,9 +13,10 @@ import java.util.stream.Collectors;
 public class BuildDescUtils {
 public class BuildDescUtils {
 
 
 
 
-    public static String buildDesc(List<PtlAgreementUndwrtRulesAttr> linkList, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList) {
+    public static String buildDesc(String companyId, List<PtlAgreementUndwrtRulesAttr> linkList, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList) {
         StringBuilder desc = new StringBuilder();
         StringBuilder desc = new StringBuilder();
         Map<String, PtlAgreementUndwrtRulesAttr> attrMap = undwrtRulesAttrList.stream()
         Map<String, PtlAgreementUndwrtRulesAttr> attrMap = undwrtRulesAttrList.stream()
+                .filter(attr -> "all".equals(attr.getCompanyIds()) || attr.getCompanyIds().equals(companyId))
                 .collect(Collectors.toMap(PtlAgreementUndwrtRulesAttr::getAttrCode, Function.identity()));
                 .collect(Collectors.toMap(PtlAgreementUndwrtRulesAttr::getAttrCode, Function.identity()));
 
 
         for (PtlAgreementUndwrtRulesAttr link : linkList) {
         for (PtlAgreementUndwrtRulesAttr link : linkList) {

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

@@ -2,7 +2,7 @@ package com.jzg.quotation.ansheng.crawler.build;
 
 
 
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSONObject;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
@@ -15,7 +15,11 @@ import com.jzg.quotation.commons.component.ConversionOfQuoteInformation;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.Optional;
+import java.util.function.Function;
 
 
 
 
 @Slf4j
 @Slf4j
@@ -52,7 +56,7 @@ public final class AnShengCrawlerQuoteResultsVoBuild {
                 quoteResultsVo.setCiRiskInfoVo(buildCiRiskInfoVo(contract.getPolicyBase()));
                 quoteResultsVo.setCiRiskInfoVo(buildCiRiskInfoVo(contract.getPolicyBase()));
                 buildRiskInfoVo(quoteVo.getCiRiskInfoVo(), contract.getPolicyBase());
                 buildRiskInfoVo(quoteVo.getCiRiskInfoVo(), contract.getPolicyBase());
                 quoteResultsVo.getCosts().setCiPremium(String.valueOf(contract.getPolicyBase().getTotalActualPremium()));
                 quoteResultsVo.getCosts().setCiPremium(String.valueOf(contract.getPolicyBase().getTotalActualPremium()));
-                quoteResultsVo.getCosts().setVvTax(String.valueOf(contract.getTargets().get(0).getVehicleTax().getVehicleTaxAmount()));
+                quoteResultsVo.getCosts().setVvTax(getVvTax(contract));
             // 商业险
             // 商业险
             } else if (DepartmentPlanCode.PLAN_109.getCode()
             } else if (DepartmentPlanCode.PLAN_109.getCode()
                     .equals(contract.getPolicyBase().getPlanCode()) || DepartmentPlanCode.PLAN_113.getCode()
                     .equals(contract.getPolicyBase().getPlanCode()) || DepartmentPlanCode.PLAN_113.getCode()
@@ -76,55 +80,77 @@ public final class AnShengCrawlerQuoteResultsVoBuild {
         return quoteResultsVo;
         return quoteResultsVo;
     }
     }
 
 
+    public static String getVvTax(AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO contract) {
+        BigDecimal total = Optional.ofNullable(contract)
+                .map(c -> Optional.ofNullable(c.getTargets()).filter(list -> !list.isEmpty()).map(list -> list.get(0)))
+                .flatMap(targetOpt -> targetOpt)
+                .map(target -> Optional.ofNullable(target.getVehicleTax()))
+                .flatMap(taxOpt -> taxOpt)
+                .map(tax -> {
+                    BigDecimal taxAmt = tax.getVehicleTaxAmount() == null ? BigDecimal.ZERO : BigDecimal.valueOf(tax.getVehicleTaxAmount());
+                    BigDecimal lateAmt = tax.getLateFeeAmount() == null ? BigDecimal.ZERO : BigDecimal.valueOf(tax.getLateFeeAmount());
+                    return taxAmt.add(lateAmt);
+                })
+                .orElse(BigDecimal.ZERO)
+                .setScale(2, RoundingMode.HALF_UP);
+        return total.toPlainString();
+    }
+
 
 
-    private static QuoteResultsVo.ScoreVo buildScoreVo( AnShengCrawlerCalculatePremiumApplyResponse calculatePremiumApply) {
+
+    /**
+     * 组装打分ScoreVo
+     */
+    private static QuoteResultsVo.ScoreVo buildScoreVo(AnShengCrawlerCalculatePremiumApplyResponse calculatePremiumApply) {
         QuoteResultsVo.ScoreVo scoreVo = new QuoteResultsVo.ScoreVo();
         QuoteResultsVo.ScoreVo scoreVo = new QuoteResultsVo.ScoreVo();
         JSONArray scoreArray = new JSONArray();
         JSONArray scoreArray = new JSONArray();
         AnShengCrawlerCalculatePremiumApplyResponse.DataDTO data = calculatePremiumApply.getData();
         AnShengCrawlerCalculatePremiumApplyResponse.DataDTO data = calculatePremiumApply.getData();
-        String basicstring = data.getBasicstring();
-        if (StringUtils.isNotEmpty(basicstring)){
-            String[] parts = basicstring.split(":");
-            scoreArray.add(new JSONObject()
-                    .fluentPut("scoreName",parts.length > 0 ? parts[0].trim() : "")
-                    .fluentPut("scoreKey","basicstring")
-                    .fluentPut("score",parts.length > 1 ? parts[1].trim() : ""));
-        }
-        String blackDivisor = data.getBlackDivisor();
-        if (StringUtils.isNotEmpty(blackDivisor)){
-            String[] black = blackDivisor.split(":");
-            scoreArray.add(new JSONObject()
-                    .fluentPut("scoreName",black.length > 0 ? black[0].trim() : "")
-                    .fluentPut("scoreKey","blackDivisor")
-                    .fluentPut("score",black.length > 0 ? black[1].trim() : ""));
-        }
-        String comprehensiveScoreStr = data.getComprehensiveScoreStr();
-        if (StringUtils.isNotEmpty(comprehensiveScoreStr)){
-            String[] comprehensiveScore = comprehensiveScoreStr.split(":");
-            scoreArray.add(new JSONObject()
-                    .fluentPut("scoreName",comprehensiveScore.length > 0 ? comprehensiveScore[0].trim() : "")
-                    .fluentPut("scoreKey","comprehensiveScoreStr")
-                    .fluentPut("score",comprehensiveScore.length > 0 ? comprehensiveScore[1].trim() : ""));
-        }
-        String riskScore = data.getRiskScore();
-        if (StringUtils.isNotEmpty(riskScore)){
-            String[] riskScoreStr = riskScore.split(":");
-            scoreArray.add(new JSONObject()
-                    .fluentPut("scoreName",riskScoreStr.length > 0 ? riskScoreStr[0].trim() : "")
-                    .fluentPut("scoreKey","riskScore")
-                    .fluentPut("score",riskScoreStr.length > 0 ? riskScoreStr[1].trim() : ""));
+        if (data == null) {
+            scoreVo.setScoreJson(scoreArray);
+            return scoreVo;
         }
         }
-        String unifiedScore = data.getUnifiedScore();
-        if (StringUtils.isNotEmpty(unifiedScore)){
-            String[] unifiedScoreStr = unifiedScore.split(":");
-            scoreArray.add(new JSONObject()
-                    .fluentPut("scoreName",unifiedScoreStr.length > 0 ? unifiedScoreStr[0].trim() : "")
-                    .fluentPut("scoreKey","unifiedScore")
-                    .fluentPut("score",unifiedScoreStr.length > 0 ? unifiedScoreStr[1].trim() : ""));
+        // 1. 统一配置:字段key + 取值函数
+        record ScoreItem(String scoreKey, Function<AnShengCrawlerCalculatePremiumApplyResponse.DataDTO, String> valueFunc) {}
+        List<ScoreItem> itemList = new ArrayList<>();
+        itemList.add(new ScoreItem("basicstring", AnShengCrawlerCalculatePremiumApplyResponse.DataDTO::getBasicstring));
+        itemList.add(new ScoreItem("blackDivisor", AnShengCrawlerCalculatePremiumApplyResponse.DataDTO::getBlackDivisor));
+        itemList.add(new ScoreItem("comprehensiveScoreStr", AnShengCrawlerCalculatePremiumApplyResponse.DataDTO::getComprehensiveScoreStr));
+        itemList.add(new ScoreItem("riskScore", AnShengCrawlerCalculatePremiumApplyResponse.DataDTO::getRiskScore));
+        itemList.add(new ScoreItem("unifiedScore", AnShengCrawlerCalculatePremiumApplyResponse.DataDTO::getUnifiedScore));
+
+        final String splitChar = ":";
+        for (ScoreItem item : itemList) {
+            String sourceStr = item.valueFunc().apply(data);
+            fillScoreItem(scoreArray, splitChar, item.scoreKey(), sourceStr);
         }
         }
+
         scoreVo.setScoreJson(scoreArray);
         scoreVo.setScoreJson(scoreArray);
         return scoreVo;
         return scoreVo;
     }
     }
 
 
+    /**
+     * 通用填充单个打分JSON对象,消除重复逻辑 + 规避下标越界
+     * @param scoreArray 外层JSON数组
+     * @param splitChar 分隔符
+     * @param scoreKey 唯一标识key
+     * @param sourceStr 原始待分割字符串
+     */
+    private static void fillScoreItem(JSONArray scoreArray, String splitChar, String scoreKey, String sourceStr) {
+        if (StringUtils.isEmpty(sourceStr)) {
+            return;
+        }
+        String[] parts = sourceStr.split(splitChar, 2);
+        String scoreName = parts.length >= 1 ? parts[0].trim() : "";
+        String scoreVal = parts.length >= 2 ? parts[1].trim() : "";
+
+        JSONObject jsonObj = JSONObject.of(
+                "scoreName", scoreName,
+                "scoreKey", scoreKey,
+                "score", scoreVal
+        );
+        scoreArray.add(jsonObj);
+    }
+
 
 
 
 
     /**
     /**

+ 2 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/build/ChengTaiAPIQuoteResultsVoBuild.java

@@ -100,6 +100,7 @@ public final class ChengTaiAPIQuoteResultsVoBuild {
             scoreVo.setCiClaims(premiumCalculationResponse.getCompRisk().getBasePart().getClaimsNum());
             scoreVo.setCiClaims(premiumCalculationResponse.getCompRisk().getBasePart().getClaimsNum());
             if (null != premiumCalculationResponse.getCompRisk().getBasePart().getDiscount()) {
             if (null != premiumCalculationResponse.getCompRisk().getBasePart().getDiscount()) {
                 scoreVo.setJqAdjustRate(premiumCalculationResponse.getCompRisk().getBasePart().getDiscount().toString());
                 scoreVo.setJqAdjustRate(premiumCalculationResponse.getCompRisk().getBasePart().getDiscount().toString());
+                scoreVo.setCiClaims(premiumCalculationResponse.getCompRisk().getBasePart().getClaimsNum());
             }
             }
         }
         }
         if (null != premiumCalculationResponse.getCommRisk() && null != premiumCalculationResponse.getCommRisk().getBasePart()) {
         if (null != premiumCalculationResponse.getCommRisk() && null != premiumCalculationResponse.getCommRisk().getBasePart()) {
@@ -107,6 +108,7 @@ public final class ChengTaiAPIQuoteResultsVoBuild {
             scoreVo.setSyRenewal(premiumCalculationResponse.getCommRisk().getBasePart().getRenewalFlag());
             scoreVo.setSyRenewal(premiumCalculationResponse.getCommRisk().getBasePart().getRenewalFlag());
             if (null != premiumCalculationResponse.getCommRisk().getBasePart().getDiscount()){
             if (null != premiumCalculationResponse.getCommRisk().getBasePart().getDiscount()){
                 scoreVo.setSyAdjustRate(premiumCalculationResponse.getCommRisk().getBasePart().getDiscount().toString());
                 scoreVo.setSyAdjustRate(premiumCalculationResponse.getCommRisk().getBasePart().getDiscount().toString());
+                scoreVo.setBiClaims(premiumCalculationResponse.getCommRisk().getBasePart().getClaimsNum());
             }
             }
         }
         }
         scoreVo.setLossRation(premiumCalculationResponse.getYztScore().getCentile().toString());
         scoreVo.setLossRation(premiumCalculationResponse.getYztScore().getCentile().toString());

+ 23 - 2
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/component/HuaNongCrawlerRequestComponent.java

@@ -25,9 +25,13 @@ import org.springframework.web.reactive.function.BodyInserters;
 
 
 import java.io.IOException;
 import java.io.IOException;
 import java.net.URI;
 import java.net.URI;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Path;
 import java.util.*;
 import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 
 import static com.jzg.quotation.huanong.crawler.constant.enums.RequestUrl.*;
 import static com.jzg.quotation.huanong.crawler.constant.enums.RequestUrl.*;
 
 
@@ -401,7 +405,14 @@ public class HuaNongCrawlerRequestComponent {
      */
      */
     public String ftpDownload(HuaNongCrawlerFtpDownloadRequestRequest request, HttpHeaders headers) {
     public String ftpDownload(HuaNongCrawlerFtpDownloadRequestRequest request, HttpHeaders headers) {
         HuaNongCrawlerFtpDownloadResponse response = post(FTP_DOWNLOAD, request, HuaNongCrawlerFtpDownloadResponse.class, headers);
         HuaNongCrawlerFtpDownloadResponse response = post(FTP_DOWNLOAD, request, HuaNongCrawlerFtpDownloadResponse.class, headers);
-        return response.getDowloadURL().get(0).getDowloadURL();
+        String fileUrl = response.getDowloadURL().get(0).getDowloadURL();
+        // URL编码 on= 参数值(中文文件名需编码,否则后续下载时报400)
+        Matcher matcher = Pattern.compile("on=(.*?)\\.pdf").matcher(fileUrl);
+        if (matcher.find()) {
+            String matched = matcher.group(1);
+            fileUrl = fileUrl.replace(matched, URLEncoder.encode(matched, StandardCharsets.UTF_8));
+        }
+        return fileUrl;
     }
     }
 
 
     /**
     /**
@@ -414,7 +425,17 @@ public class HuaNongCrawlerRequestComponent {
     public String documentsPrint(HuaNongCrawlerDocumentsPrintRequestRequest request, HttpHeaders headers) {
     public String documentsPrint(HuaNongCrawlerDocumentsPrintRequestRequest request, HttpHeaders headers) {
         HuaNongCrawlerDocumentsPrintResponse response = post(DOCUMENTS_PRINT, request, HuaNongCrawlerDocumentsPrintResponse.class, headers);
         HuaNongCrawlerDocumentsPrintResponse response = post(DOCUMENTS_PRINT, request, HuaNongCrawlerDocumentsPrintResponse.class, headers);
         String fileUrl = response.getFileUrl();
         String fileUrl = response.getFileUrl();
-        return fileUrl.replace(properties.getDocumentsPrintUrl(), properties.getFtpDownloadUrl());
+        return fileUrl;
+    }
+
+    /**
+     * CI交强险 DocumentsPrint 前置调用(与Python一致,下载交强保单前需先调用)
+     *
+     * @param request 交强险DocumentsPrint请求
+     * @param headers 请求头
+     */
+    public void documentsPrintForCi(HuaNongCrawlerDocumentsPrintRequestRequest request, HttpHeaders headers) {
+        post(DOCUMENTS_PRINT, request, HuaNongCrawlerDocumentsPrintResponse.class, headers);
     }
     }
 
 
     /**
     /**

+ 7 - 0
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/constant/enums/JiaYiXianProduct.java

@@ -44,6 +44,13 @@ public enum JiaYiXianProduct {
             new CoverageConfig("F27047-5", "附加辅助金保险条款", "0094", "家庭辅助金", 0.02, "10", "20000", "2.0万元/座", true),
             new CoverageConfig("F27047-5", "附加辅助金保险条款", "0094", "家庭辅助金", 0.02, "10", "20000", "2.0万元/座", true),
             new CoverageConfig("F27048-6", "附加救护车车费保险条款", "0095", "救护车费用", 0.1, "10", "2000", "0.2万元/座", true)
             new CoverageConfig("F27048-6", "附加救护车车费保险条款", "0095", "救护车费用", 0.1, "10", "2000", "0.2万元/座", true)
     )),
     )),
+    ANXIANG_50("091", "好运连连(50)", true, Arrays.asList(
+            new CoverageConfig("Z27096-1", "交通出行团体意外伤害保险C款条款", "0955", "必选责任:意外伤害身故保险责任", 0.06, "30000", "3.0万元/座", " ", false),
+            new CoverageConfig("Z27096-2", "交通出行团体意外伤害保险C款条款", "0956", "可选责任:意外伤害伤残保险责任", 0.04, "30000", "3.0万元/座", " ", false),
+            new CoverageConfig("F27002", "附加团体意外伤害医疗保险条款", "0008", "意外伤害医疗保险责任", 0.24, "1000", "0.1万元/座", "每次事故免赔300后80%比例赔付", false),
+            new CoverageConfig("F27001", "附加团体意外伤害住院津贴保险条款", "0032", "意外伤害住院津贴保险责任", 0.2, "10", "0.001万元/座", "10元/天/座", true)
+
+    )),
     ANXIANG_240("092", "好运连连(240)", true, Arrays.asList(
     ANXIANG_240("092", "好运连连(240)", true, Arrays.asList(
             new CoverageConfig("Z27096-1", "交通出行团体意外伤害保险C款条款", "0955", "必选责任:意外伤害身故保险责任", 0.06, "30000", "3.0万元/座", " ", false),
             new CoverageConfig("Z27096-1", "交通出行团体意外伤害保险C款条款", "0955", "必选责任:意外伤害身故保险责任", 0.06, "30000", "3.0万元/座", " ", false),
             new CoverageConfig("Z27096-2", "交通出行团体意外伤害保险C款条款", "0956", "可选责任:意外伤害伤残保险责任", 0.04, "30000", "3.0万元/座", " ", false),
             new CoverageConfig("Z27096-2", "交通出行团体意外伤害保险C款条款", "0956", "可选责任:意外伤害伤残保险责任", 0.04, "30000", "3.0万元/座", " ", false),

+ 35 - 1
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerDocumentsPrintRequestRequest.java

@@ -79,7 +79,7 @@ public class HuaNongCrawlerDocumentsPrintRequestRequest implements HuaNongHeadRe
         this.printType = "";
         this.printType = "";
         this.returnFlag = "0";
         this.returnFlag = "0";
         this.startNo = "";
         this.startNo = "";
-        this.visaCode = "";
+        this.visaCode = "BB05550A2019E";
         this.endNo = "";
         this.endNo = "";
         this.accountInfo = "";
         this.accountInfo = "";
         this.currency = "RMB";
         this.currency = "RMB";
@@ -91,8 +91,42 @@ public class HuaNongCrawlerDocumentsPrintRequestRequest implements HuaNongHeadRe
         this.ip = "";
         this.ip = "";
         this.visaType = "";
         this.visaType = "";
         this.isPreview = "0";
         this.isPreview = "0";
+        this.useNature = "8A";
         this.isMotoDownload = "0";
         this.isMotoDownload = "0";
         this.isImg = 0;
         this.isImg = 0;
     }
     }
 
 
+    /**
+     * CI交强险 DocumentsPrint 前置调用构造(与Python hn_bddownload.py get_orderNo 一致)
+     *
+     * @param token         登录token
+     * @param contractNo    交强险保单号
+     * @param username      用户名
+     * @param loginComCode  登录机构代码
+     * @param businessType  业务类型(交强险传 "3")
+     * @param visaCode      签证代码(交强险传 "AB05016A32015A")
+     */
+    public HuaNongCrawlerDocumentsPrintRequestRequest(String token, String contractNo, String username, String loginComCode, String businessType, String visaCode) {
+        this.head = new HuaNongCrawlerRequestBaseHead(token);
+        this.policyType = "1";
+        this.printNoBegin = "";
+        this.printNoEnd = "";
+        this.businessType = businessType;
+        this.contractNo = List.of(contractNo);
+        this.printType = "";
+        this.returnFlag = "0";
+        this.startNo = "";
+        this.visaCode = visaCode;
+        this.endNo = "";
+        this.accountInfo = "";
+        this.currency = "RMB";
+        this.producerCode = "";
+        this.comCode = loginComCode;
+        this.userCode = username;
+        this.loginCom = loginComCode;
+        this.electronicPolicy = false;
+        this.ip = "";
+        this.isPreview = "0";
+    }
+
 }
 }

+ 4 - 3
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerFindBusinessesRequestRequest.java

@@ -6,6 +6,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.NoArgsConstructor;
 
 
 import java.io.Serial;
 import java.io.Serial;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -134,11 +135,11 @@ public class HuaNongCrawlerFindBusinessesRequestRequest implements HuaNongHeadRe
          * 投保单 2
          * 投保单 2
          * 保单 4
          * 保单 4
          */
          */
-        this.businessType = "2";
+        this.businessType = "4";
         this.policyNo = "";
         this.policyNo = "";
         this.endorseNo = "";
         this.endorseNo = "";
         this.insuredName = "";
         this.insuredName = "";
-        this.queryStatus = List.of("0");
+        this.queryStatus = new ArrayList<>();
         this.agreementNo = "";
         this.agreementNo = "";
         this.handlerCode = "";
         this.handlerCode = "";
         this.agentName = "";
         this.agentName = "";
@@ -161,7 +162,7 @@ public class HuaNongCrawlerFindBusinessesRequestRequest implements HuaNongHeadRe
                 "0515", "0507", "0520", "0521", "0522", "0523", "0509", "0506", "0510",
                 "0515", "0507", "0520", "0521", "0522", "0523", "0509", "0506", "0510",
                 "0511", "0512", "0513", "2801", "0311", "0301", "1727", "1703", "0109",
                 "0511", "0512", "0513", "2801", "0311", "0301", "1727", "1703", "0109",
                 "2742", "0306", "4001", "2780", "2781", "2784", "2782", "2783", "1980",
                 "2742", "0306", "4001", "2780", "2781", "2784", "2782", "2783", "1980",
-                "1981", "2609", "2785", "2680"
+                "1981", "2609", "2785", "2680","0911"
         );
         );
         this.hasSubFlag = true;
         this.hasSubFlag = true;
         this.endorType = "";
         this.endorType = "";

+ 1 - 0
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerFtpDownloadRequestRequest.java

@@ -60,6 +60,7 @@ public class HuaNongCrawlerFtpDownloadRequestRequest implements HuaNongHeadReque
 
 
         public FtpDowloadListDTO() {
         public FtpDowloadListDTO() {
             this.isMotoDownload = "0";
             this.isMotoDownload = "0";
+            this.useNature = "8A";
             this.isVPN = "0";
             this.isVPN = "0";
             this.isBZDown = "0";
             this.isBZDown = "0";
             this.isRelate = "0";
             this.isRelate = "0";

+ 4 - 0
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/response/HuaNongCrawlerFindBusinessesResponse.java

@@ -53,8 +53,12 @@ public class HuaNongCrawlerFindBusinessesResponse implements HuaNongHeadResponse
         private String comCode;
         private String comCode;
         @JsonProperty("contractNo1")
         @JsonProperty("contractNo1")
         private String contractNo1;
         private String contractNo1;
+        @JsonProperty("contractNo2")
+        private String contractNo2;
         @JsonProperty("contractNo3")
         @JsonProperty("contractNo3")
         private String contractNo3;
         private String contractNo3;
+        @JsonProperty("contractNo4")
+        private String contractNo4;
         @JsonProperty("contractNo5")
         @JsonProperty("contractNo5")
         private String contractNo5;
         private String contractNo5;
         @JsonProperty("contractNo6")
         @JsonProperty("contractNo6")

+ 35 - 8
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerRequestImpl.java

@@ -880,37 +880,64 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
         HuaNongCrawlerFtpDownloadRequestRequest huaNongCrawlerFtpDownloadRequest = new HuaNongCrawlerFtpDownloadRequestRequest(loginInfoDto.getToken());
         HuaNongCrawlerFtpDownloadRequestRequest huaNongCrawlerFtpDownloadRequest = new HuaNongCrawlerFtpDownloadRequestRequest(loginInfoDto.getToken());
         HuaNongCrawlerFtpDownloadRequestRequest.FtpDowloadListDTO ftpDowloadListDTO = new HuaNongCrawlerFtpDownloadRequestRequest.FtpDowloadListDTO();
         HuaNongCrawlerFtpDownloadRequestRequest.FtpDowloadListDTO ftpDowloadListDTO = new HuaNongCrawlerFtpDownloadRequestRequest.FtpDowloadListDTO();
         huaNongCrawlerFtpDownloadRequest.setFtpDowloadList(List.of(ftpDowloadListDTO));
         huaNongCrawlerFtpDownloadRequest.setFtpDowloadList(List.of(ftpDowloadListDTO));
+
+        // 投保单号获取保单号
+        String policyNo = StringUtils.hasText(order.getBiPolicyNumber()) ? order.getBiPolicyNumber() : order.getCiPolicyNumber();
+        HuaNongCrawlerFindBusinessesRequestRequest huaNongCrawlerFindBusinessesRequest
+                = new HuaNongCrawlerFindBusinessesRequestRequest(loginInfoDto.getToken(), loginInfoDto.getLoginComCode(), policyNo, order.getRecordingTime());
+        HuaNongCrawlerFindBusinessesResponse businesses = huaNongCrawlerRequestComponent.findBusinesses(huaNongCrawlerFindBusinessesRequest, httpHeaders);
+        // 与Python hn_state.py一致:遍历business按riskCode匹配contractNo字段
+        String ciNo = businesses.getBusiness().get(0).getContractNo6();
+        String biNo = businesses.getBusiness().get(0).getContractNo1();
+
         // 交强保单 标志
         // 交强保单 标志
-        Optional.ofNullable(order.getCiPolicyNo())
+        Optional.ofNullable(order.getCiPolicyNumber())
                 .filter(s -> !s.isEmpty())
                 .filter(s -> !s.isEmpty())
                 .ifPresent(ciPolicyNo -> {
                 .ifPresent(ciPolicyNo -> {
+
+                    // DocumentsPrint 前置调用
+                    HuaNongCrawlerDocumentsPrintRequestRequest ciDocumentsPrintRequest =
+                            new HuaNongCrawlerDocumentsPrintRequestRequest(loginInfoDto.getToken(), ciNo, attributionInformationVo.getUsername(), loginInfoDto.getLoginComCode(), "3", "AB05016A32015A");
+                    huaNongCrawlerRequestComponent.documentsPrintForCi(ciDocumentsPrintRequest, httpHeaders);
+
                     // 交强保单
                     // 交强保单
-                    ftpDowloadListDTO.setBiztype("4");
-                    ftpDowloadListDTO.setBusinessNo(ciPolicyNo);
+                    ftpDowloadListDTO.setBiztype("3");
+                    ftpDowloadListDTO.setBusinessNo(ciNo);
                     ftpDowloadListDTO.setRiskCode(Risk.RISK_0507.getRiskCode());
                     ftpDowloadListDTO.setRiskCode(Risk.RISK_0507.getRiskCode());
                     String ciPolicyUrl = huaNongCrawlerRequestComponent.ftpDownload(huaNongCrawlerFtpDownloadRequest, httpHeaders);
                     String ciPolicyUrl = huaNongCrawlerRequestComponent.ftpDownload(huaNongCrawlerFtpDownloadRequest, httpHeaders);
                     downloadPolicyResultVo.setJqUrl(ciPolicyUrl);
                     downloadPolicyResultVo.setJqUrl(ciPolicyUrl);
+                    // 交强险标志
                     ftpDowloadListDTO.setIsBZDown("1");
                     ftpDowloadListDTO.setIsBZDown("1");
-                    // 商业标志
                     String ciSignUrl = huaNongCrawlerRequestComponent.ftpDownload(huaNongCrawlerFtpDownloadRequest, httpHeaders);
                     String ciSignUrl = huaNongCrawlerRequestComponent.ftpDownload(huaNongCrawlerFtpDownloadRequest, httpHeaders);
                     downloadPolicyResultVo.setJqFlagUrl(ciSignUrl);
                     downloadPolicyResultVo.setJqFlagUrl(ciSignUrl);
 
 
                 });
                 });
         // 商业保单
         // 商业保单
-        Optional.ofNullable(order.getBiPolicyNo())
+        Optional.ofNullable(order.getBiPolicyNumber())
                 .filter(s -> !s.isEmpty())
                 .filter(s -> !s.isEmpty())
                 .ifPresent(biPolicyNo -> {
                 .ifPresent(biPolicyNo -> {
                     // 商业保单
                     // 商业保单
                     ftpDowloadListDTO.setIsBZDown("0");
                     ftpDowloadListDTO.setIsBZDown("0");
-                    ftpDowloadListDTO.setBusinessNo(biPolicyNo);
+                    ftpDowloadListDTO.setBiztype("3");
+                    ftpDowloadListDTO.setBusinessNo(biNo);
+                    ftpDowloadListDTO.setRiskCode(Risk.RISK_0515.getRiskCode());
                     String biPolicyUrl = huaNongCrawlerRequestComponent.ftpDownload(huaNongCrawlerFtpDownloadRequest, httpHeaders);
                     String biPolicyUrl = huaNongCrawlerRequestComponent.ftpDownload(huaNongCrawlerFtpDownloadRequest, httpHeaders);
                     downloadPolicyResultVo.setSyUrl(biPolicyUrl);
                     downloadPolicyResultVo.setSyUrl(biPolicyUrl);
                 });
                 });
 
 
         // 非车险
         // 非车险
         order.getNiInfos().forEach(niInfo -> {
         order.getNiInfos().forEach(niInfo -> {
-            Optional.ofNullable(niInfo.getNiPolicyNo()).ifPresent(niPolicyNo -> {
-                HuaNongCrawlerDocumentsPrintRequestRequest huaNongCrawlerDocumentsPrintRequest = new HuaNongCrawlerDocumentsPrintRequestRequest(loginInfoDto.getToken(), niPolicyNo, attributionInformationVo.getUsername(), loginInfoDto.getLoginComCode());
+            Optional.ofNullable(niInfo.getNiPolicyNumber()).ifPresent(niPolicyNo -> {
+                HuaNongCrawlerFindBusinessesRequestRequest niFindBusinessesRequest
+                        = new HuaNongCrawlerFindBusinessesRequestRequest(loginInfoDto.getToken(), loginInfoDto.getLoginComCode(), niPolicyNo, order.getRecordingTime());
+                HuaNongCrawlerFindBusinessesResponse niBusinesses = huaNongCrawlerRequestComponent.findBusinesses(niFindBusinessesRequest, httpHeaders);
+                // 与Python hn_state.py一致:NI(非0507/0510/0515)使用contractNo4
+                String niContractNo = Optional.ofNullable(niBusinesses.getBusiness())
+                        .filter(list -> !list.isEmpty())
+                        .map(list -> list.get(0).getContractNo4())
+                        .orElse(niPolicyNo);
+
+                HuaNongCrawlerDocumentsPrintRequestRequest huaNongCrawlerDocumentsPrintRequest = new HuaNongCrawlerDocumentsPrintRequestRequest(loginInfoDto.getToken(), niContractNo, attributionInformationVo.getUsername(), loginInfoDto.getLoginComCode());
                 String niPolicyUrl = huaNongCrawlerRequestComponent.documentsPrint(huaNongCrawlerDocumentsPrintRequest, httpHeaders);
                 String niPolicyUrl = huaNongCrawlerRequestComponent.documentsPrint(huaNongCrawlerDocumentsPrintRequest, httpHeaders);
                 downloadPolicyResultVo.setJyUrl(niPolicyUrl);
                 downloadPolicyResultVo.setJyUrl(niPolicyUrl);
             });
             });

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

@@ -1518,50 +1518,189 @@ public class RenBaoNewCrawlerRequestImpl implements RenBaoNewCrawlerRequest {
                 headers
                 headers
         );
         );
 
 
-        OrderStatusResultVo resultVo = new OrderStatusResultVo();
-
-        // 解析订单状态
-        String status = parseOrderStatus(checkResult);
-        resultVo.setOrderStatusStr(status);
-
-        // 解析投保单号和保单号
-        parsePolicyNumbers(checkResult, resultVo);
-
-        return resultVo;
-    }
-
-    /**
-     * 解析订单状态
-     */
-    private String parseOrderStatus(Map<String, Object> checkResult) {
-        if (checkResult == null || !checkResult.containsKey("data")) {
-            return "UNKNOWN";
+        // 校验查询结果
+        if (checkResult == null || !"Success".equals(checkResult.get("message"))) {
+            String errorMsg = checkResult != null ? (String) checkResult.get("statusText") : "查询订单响应为空";
+            throw new SystemException("查询订单异常: " + errorMsg);
         }
         }
 
 
         Map<String, Object> data = (Map<String, Object>) checkResult.get("data");
         Map<String, Object> data = (Map<String, Object>) checkResult.get("data");
         if (data == null || !data.containsKey("result")) {
         if (data == null || !data.containsKey("result")) {
-            return "UNKNOWN";
+            throw new SystemException("查询订单异常: 未查询到订单");
         }
         }
 
 
         List<Map<String, Object>> itemList = (List<Map<String, Object>>) data.get("result");
         List<Map<String, Object>> itemList = (List<Map<String, Object>>) data.get("result");
         if (itemList == null || itemList.isEmpty()) {
         if (itemList == null || itemList.isEmpty()) {
-            return "NOT_FOUND";
+            throw new SystemException("未查询到订单");
+        }
+        if (itemList.size() > 2) {
+            throw new SystemException("查询订单异常");
         }
         }
 
 
-        // 获取第一个订单的状态
-        Map<String, Object> firstItem = itemList.get(0);
-        String underWriteFlag = (String) firstItem.get("underWriteFlag");
-
-        // 状态映射:0-初始值, 1-通过, 2-不通过, 3-自动核保通过, 4-见费出单待缴费, 5-见费出单待缴费,
-        // 6-待同步, 7-自动待同步, 9-待核保, A-送见费失败, B-送见费失败, C-待取消, D-自动核保待转保单,
-        // E-人工核保待转保单, F-预核保转人工
-        return switch (underWriteFlag) {
-            case "1", "3" -> "APPROVED";
-            case "2" -> "REJECTED";
-            case "4", "5" -> "PAYMENT_PENDING";
-            case "9" -> "UNDERWRITING";
-            default -> "PROCESSING";
-        };
+        // 2. 提取交强/商业单号及驾意险单号(对应Python逻辑)
+        Map<String, Object> orderInfo = itemList.get(0);
+        String jqApplication = "";
+        String syApplication = "";
+        List<String> documentnolist = new ArrayList<>();
+        List<String> jyxBusinessNoList = new ArrayList<>();
+
+        for (Map<String, Object> item : itemList) {
+            String bNo = (String) item.get("businessNo");
+            if (bNo != null) {
+                if (bNo.contains("DZA")) {
+                    jqApplication = bNo;
+                    documentnolist.add(bNo);
+                } else if (bNo.contains("DAA")) {
+                    syApplication = bNo;
+                    documentnolist.add(bNo);
+                }
+            }
+        }
+
+        // 提取驾意险关联单号
+        if (orderInfo.containsKey("relationUPolicyInfolist")) {
+            List<Map<String, Object>> relationList = (List<Map<String, Object>>) orderInfo.get("relationUPolicyInfolist");
+            if (relationList != null) {
+                for (Map<String, Object> relItem : relationList) {
+                    String connectProposalNo = (String) relItem.get("connectProposalNo");
+                    if (connectProposalNo != null && !connectProposalNo.isEmpty()) {
+                        documentnolist.add(connectProposalNo);
+                        jyxBusinessNoList.add(connectProposalNo);
+                    }
+                }
+            }
+        }
+
+        // 3. 获取核保状态
+        String underWriteFlag = (String) orderInfo.get("underWriteFlag");
+        log.info("订单状态 underWriteFlag={}, jq={}, sy={}, jyx={}", underWriteFlag, jqApplication, syApplication, jyxBusinessNoList);
+
+        // 4. 根据状态处理
+        OrderStatusResultVo resultVo = new OrderStatusResultVo();
+        resultVo.setJqApplyNo(jqApplication);
+        resultVo.setSyApplyNo(syApplication);
+        resultVo.setJyApplyNo(jyxBusinessNoList.isEmpty() ? "" : String.join(",", jyxBusinessNoList));
+
+        // 状态为4或5:核保通过待缴费 → 获取支付链接
+        if ("4".equals(underWriteFlag) || "5".equals(underWriteFlag)) {
+            log.info("订单核保通过,获取支付链接");
+            // 构建支付请求
+            RenBaoNewCrawlerPayRequest payRequest = new RenBaoNewCrawlerPayRequest();
+            payRequest.setDocumentnolist(documentnolist);
+            payRequest.setUserCode(loginInfo.getUserCode());
+            payRequest.setComCode(loginInfo.getComCode());
+            payRequest.setPayType("");
+            payRequest.setPayFee("");
+            payRequest.setCurrency("");
+            payRequest.setLinkurlflag("1");
+            payRequest.setBrowseWay("");
+
+            // 带重试获取支付链接(对应Python的while循环)
+            int retryCount = 0;
+            while (true) {
+                RenBaoNewCrawlerPayResponse payResponse = requestComponent.getPayUrl(payRequest, headers);
+                if (payResponse != null && "Success".equals(payResponse.getMessage())) {
+                    String qrcodeimg = payResponse.getData() != null ? payResponse.getData().getQrcodeimg() : null;
+                    if (qrcodeimg == null || qrcodeimg.isEmpty()) {
+                        retryCount++;
+                        if (retryCount > 3) {
+                            String errMsg = payResponse.getData() != null ? payResponse.getData().getErrorMessage() : "支付二维码为空";
+                            throw new SystemException("提取支付异常," + errMsg);
+                        }
+                        log.info("支付二维码为空,重试 {}/3", retryCount);
+                        try {
+                            Thread.sleep(1000);
+                        } catch (InterruptedException e) {
+                            Thread.currentThread().interrupt();
+                        }
+                        continue;
+                    }
+                    // 成功获取支付链接
+                    resultVo.setPaymentLink(qrcodeimg);
+                    resultVo.setOrderStatus(InsOrderStatusEnum.PAY_PENDING);
+                    resultVo.setOrderStatusStr("待支付");
+                    log.info("获取支付链接成功");
+                } else {
+                    String errorMsg = payResponse != null ? payResponse.getStatusText() : "支付响应为空";
+                    throw new SystemException("提取支付异常," + errorMsg);
+                }
+                break;
+            }
+        }
+        // 状态为9:待核保
+        else if ("9".equals(underWriteFlag)) {
+            Map<String, Object> processInfo = requestComponent.getUndwrtProcessInfo(businessNo, headers);
+            if (processInfo != null && processInfo.containsKey("data")) {
+                Map<String, Object> processData = (Map<String, Object>) processInfo.get("data");
+                if (processData != null && processData.containsKey("underwritingInfos")) {
+                    List<Map<String, Object>> infos = (List<Map<String, Object>>) processData.get("underwritingInfos");
+                    if (infos != null && !infos.isEmpty()) {
+                        String msg = (String) infos.get(0).get("msg");
+                        resultVo.setErrorMsg(msg);
+                    }
+                }
+            }
+            resultVo.setOrderStatus(InsOrderStatusEnum.STAFF_PROCESS);
+            resultVo.setOrderStatusStr("待核保");
+        }
+        // 状态为2:不通过
+        else if ("2".equals(underWriteFlag)) {
+            StringBuilder errorMsg = new StringBuilder();
+            if (!jqApplication.isEmpty()) {
+                Map<String, Object> viewResult = requestComponent.viewUndwrt(jqApplication, loginInfo.getUserCode(), headers);
+                if (viewResult != null && viewResult.containsKey("data")) {
+                    List<Map<String, Object>> dataList = (List<Map<String, Object>>) viewResult.get("data");
+                    if (dataList != null && !dataList.isEmpty()) {
+                        String handleText = (String) dataList.get(0).get("handleText");
+                        errorMsg.append("交强返回:").append(handleText).append("; ");
+                    }
+                }
+            }
+            if (!syApplication.isEmpty()) {
+                Map<String, Object> viewResult = requestComponent.viewUndwrt(syApplication, loginInfo.getUserCode(), headers);
+                if (viewResult != null && viewResult.containsKey("data")) {
+                    List<Map<String, Object>> dataList = (List<Map<String, Object>>) viewResult.get("data");
+                    if (dataList != null && !dataList.isEmpty()) {
+                        String handleText = (String) dataList.get(0).get("handleText");
+                        errorMsg.append("商业返回:").append(handleText);
+                    }
+                }
+            }
+            resultVo.setErrorMsg(errorMsg.toString());
+            resultVo.setOrderStatus(InsOrderStatusEnum.AUDIT_FAIL);
+            resultVo.setOrderStatusStr("核保不通过");
+        }
+        // 状态为1或3:已通过
+        else if ("1".equals(underWriteFlag) || "3".equals(underWriteFlag)) {
+            resultVo.setOrderStatus(InsOrderStatusEnum.UNDERWRITED);
+            resultVo.setOrderStatusStr("已支付");
+        }
+        // 其他状态
+        else {
+            // 解析状态文本
+            String[][] statusMap = {
+                    {"0", "初始值"}, {"1", "通过"}, {"2", "不通过"}, {"3", "自动核保通过"},
+                    {"4", "见费出单待缴费"}, {"5", "见费出单待缴费"}, {"6", "待同步"},
+                    {"7", "自动待同步"}, {"9", "待核保"}, {"A", "送见费失败"},
+                    {"B", "送见费失败"}, {"C", "待取消"}, {"D", "自动核保待转保单"},
+                    {"E", "人工核保待转保单"}, {"F", "预核保转人工"}
+            };
+            String statusTxt = underWriteFlag;
+            for (String[] entry : statusMap) {
+                if (entry[0].equals(underWriteFlag)) {
+                    statusTxt = entry[1];
+                    break;
+                }
+            }
+            log.info("订单状态: {}", statusTxt);
+            resultVo.setOrderStatus(InsOrderStatusEnum.AUDIT_ING);
+            resultVo.setOrderStatusStr(statusTxt);
+        }
+
+        // 解析保单号(如果已有)
+        parsePolicyNumbers(checkResult, resultVo);
+
+        return resultVo;
     }
     }
 
 
     /**
     /**

+ 1 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/OrderOperationLogAspect.java

@@ -109,7 +109,7 @@ public class OrderOperationLogAspect {
                 // 通过 SpEL 提取 入参
                 // 通过 SpEL 提取 入参
                 DownloadPolicyVo downloadPolicyVo = parser.parseExpression(log.orderSpEl()).getValue(context, DownloadPolicyVo.class);
                 DownloadPolicyVo downloadPolicyVo = parser.parseExpression(log.orderSpEl()).getValue(context, DownloadPolicyVo.class);
                 result = joinPoint.proceed();
                 result = joinPoint.proceed();
-                this.downloadLog("1988155511437271040",result,log);
+                this.downloadLog(downloadPolicyVo.getOrder().getOrdersNo(),result,log);
                 break;
                 break;
             // 同步订单
             // 同步订单
             case 9:
             case 9:

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

@@ -802,9 +802,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
                 ordersOther = new InsOrdersOther();
                 ordersOther = new InsOrdersOther();
                 ordersOther.setOrderNo(ordersNo);
                 ordersOther.setOrderNo(ordersNo);
                 // 赔付率
                 // 赔付率
-                ordersOther.setLossRation(new BigDecimal(quoteResponse.getScoreVo().getLossRation() != null ? quoteResponse.getScoreVo().getLossRation() : "0"));
-                ordersOther.setJqLossRation(new BigDecimal(quoteResponse.getScoreVo().getJqLossRation() != null ? quoteResponse.getScoreVo().getJqLossRation() : "0"));
-                ordersOther.setSyLossRation(new BigDecimal(quoteResponse.getScoreVo().getSyLossRation() != null ? quoteResponse.getScoreVo().getSyLossRation() : "0"));
+                ordersOther.setLossRation(new BigDecimal(StringUtils.isNotEmpty(quoteResponse.getScoreVo().getLossRation())  ? quoteResponse.getScoreVo().getLossRation() : "0"));
+                ordersOther.setJqLossRation(new BigDecimal(StringUtils.isNotEmpty(quoteResponse.getScoreVo().getJqLossRation()) ? quoteResponse.getScoreVo().getJqLossRation() : "0"));
+                ordersOther.setSyLossRation(new BigDecimal(StringUtils.isNotEmpty(quoteResponse.getScoreVo().getSyLossRation()) ? quoteResponse.getScoreVo().getSyLossRation() : "0"));
                 // 续保
                 // 续保
                 ordersOther.setJqRenewal(quoteResponse.getScoreVo().getJqRenewal() != null ? Integer.parseInt(quoteResponse.getScoreVo().getJqRenewal()) : null);
                 ordersOther.setJqRenewal(quoteResponse.getScoreVo().getJqRenewal() != null ? Integer.parseInt(quoteResponse.getScoreVo().getJqRenewal()) : null);
                 ordersOther.setSyRenewal(quoteResponse.getScoreVo().getSyRenewal() != null ? Integer.parseInt(quoteResponse.getScoreVo().getSyRenewal()) : null);
                 ordersOther.setSyRenewal(quoteResponse.getScoreVo().getSyRenewal() != null ? Integer.parseInt(quoteResponse.getScoreVo().getSyRenewal()) : null);

+ 8 - 0
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/build/TkCrawlerQuoteResultsBuild.java

@@ -21,6 +21,7 @@ import com.jzg.quotation.taikang.crawler.model.entity.TKPremium;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
@@ -128,6 +129,13 @@ public class TkCrawlerQuoteResultsBuild {
         quoteResultsVo.getCosts().setVvTax(preciseInitResult.getCarTax().getSumPayment().toString());
         quoteResultsVo.getCosts().setVvTax(preciseInitResult.getCarTax().getSumPayment().toString());
         // 设置非车险(驾意险)保费
         // 设置非车险(驾意险)保费
         quoteResultsVo.getCosts().setNiPremium(premium.getJyxPremium().toString());
         quoteResultsVo.getCosts().setNiPremium(premium.getJyxPremium().toString());
+        // 设置总费用
+        BigDecimal ci = premium.getJqPremium() == null ? BigDecimal.ZERO : premium.getJqPremium();
+        BigDecimal bi = premium.getSyPremium() == null ? BigDecimal.ZERO : premium.getSyPremium();
+        BigDecimal vv = preciseInitResult.getCarTax().getSumPayment() == null ? BigDecimal.ZERO : preciseInitResult.getCarTax().getSumPayment();
+        BigDecimal total = ci.add(bi).add(vv);
+        quoteResultsVo.getCosts().setSumPremium(total.toPlainString());
+        // 设置订单状态
         quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.WAIT_AUDIT);
         quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.WAIT_AUDIT);
         // 缓存报价书据数据
         // 缓存报价书据数据
         redisCacheUtil.setPreciseInitResult(preciseInitResult, quoteResultsVo.getOrdersNo());
         redisCacheUtil.setPreciseInitResult(preciseInitResult, quoteResultsVo.getOrdersNo());

+ 32 - 27
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/impl/TaiShanCrawlerRequestImpl.java

@@ -364,35 +364,40 @@ public class TaiShanCrawlerRequestImpl implements TaiShanCrawlerRequest {
      */
      */
     @Override
     @Override
     public void uploadImage(InsuranceUploadImageVo insuranceUploadImageVo) {
     public void uploadImage(InsuranceUploadImageVo insuranceUploadImageVo) {
-        //获取归属信息
-        AttributionInformationVo attributionInformationVo = insuranceUploadImageVo.getOrder().getAttributionInformationVo();
-        TaiShanCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(TaiShanCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
-        HttpHeaders headers = taiShanCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), parameters.getComCode());
-        TaiShanCrawlerOrder taiShanCrawlerOrder = taiShanCrawlerOrderService.getByOrdersNo(insuranceUploadImageVo.getOrder().getOrdersNo());
-        // 上传影像文件请求参数
-        TaiShanCrawlerImageUploadRequest taiShanCrawlerImageUploadRequest = new TaiShanCrawlerImageUploadRequest();
-        taiShanCrawlerImageUploadRequest.setBiProposalNo(taiShanCrawlerOrder.getSyApplyNo());
-        taiShanCrawlerImageUploadRequest.setCiProposalNo(taiShanCrawlerOrder.getCiApplyNo());
-        taiShanCrawlerImageUploadRequest.setCompanyCode(parameters.getComCode());
-
-        List<TaiShanCrawlerImageUploadRequest.ImageNode> imageNodes = new LinkedList<>();
-        for (InsuranceImageVo imageVo : insuranceUploadImageVo.getImageVoList()) {
-            TaiShanCrawlerImageUploadRequest.ImageNode imageNode = new TaiShanCrawlerImageUploadRequest.ImageNode();
-            imageNode.setType(getImageType(imageVo.getImageCode()));
-            List<TaiShanCrawlerImageUploadRequest.ImageInfo> images = new ArrayList<>();
-            for (InsuranceImageVo.ImageDTO imageDTO : imageVo.getImageBase64List()) {
-                images.add(new TaiShanCrawlerImageUploadRequest.ImageInfo(imageDTO.getImageName(), imageDTO.getImageBase64Str()));
+        try {
+            //获取归属信息
+            AttributionInformationVo attributionInformationVo = insuranceUploadImageVo.getOrder().getAttributionInformationVo();
+            TaiShanCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(TaiShanCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
+            HttpHeaders headers = taiShanCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), parameters.getComCode());
+            TaiShanCrawlerOrder taiShanCrawlerOrder = taiShanCrawlerOrderService.getByOrdersNo(insuranceUploadImageVo.getOrder().getOrdersNo());
+            // 上传影像文件请求参数
+            TaiShanCrawlerImageUploadRequest taiShanCrawlerImageUploadRequest = new TaiShanCrawlerImageUploadRequest();
+            taiShanCrawlerImageUploadRequest.setBiProposalNo(taiShanCrawlerOrder.getSyApplyNo());
+            taiShanCrawlerImageUploadRequest.setCiProposalNo(taiShanCrawlerOrder.getCiApplyNo());
+            taiShanCrawlerImageUploadRequest.setCompanyCode(parameters.getComCode());
+
+            List<TaiShanCrawlerImageUploadRequest.ImageNode> imageNodes = new LinkedList<>();
+            for (InsuranceImageVo imageVo : insuranceUploadImageVo.getImageVoList()) {
+                TaiShanCrawlerImageUploadRequest.ImageNode imageNode = new TaiShanCrawlerImageUploadRequest.ImageNode();
+                imageNode.setType(getImageType(imageVo.getImageCode()));
+                List<TaiShanCrawlerImageUploadRequest.ImageInfo> images = new ArrayList<>();
+                for (InsuranceImageVo.ImageDTO imageDTO : imageVo.getImageBase64List()) {
+                    images.add(new TaiShanCrawlerImageUploadRequest.ImageInfo(imageDTO.getImageName(), imageDTO.getImageBase64Str()));
+                }
+                imageNode.setImages(images);
+                imageNodes.add(imageNode);
             }
             }
-            imageNode.setImages(images);
-            imageNodes.add(imageNode);
+            taiShanCrawlerImageUploadRequest.setImageNodes(imageNodes);
+            taiShanCrawlerImageUploadRequest.setOperatorCode(parameters.getSaleCode());
+            taiShanCrawlerImageUploadRequest.setOperatorName(parameters.getSaleName());
+            taiShanCrawlerImageUploadRequest.setOrderNo(taiShanCrawlerOrder.getOrderNo());
+            taiShanCrawlerImageUploadRequest.setUploadFlag("D");
+            TaiShanCrawlerImageUploadResponse taiShanCrawlerImageUploadResponse = taiShanCrawlerRequestComponent.uploadImage(taiShanCrawlerImageUploadRequest, headers);
+            log.info("taiShanCrawlerImageUploadResponse对象的值:{}", JSON.toJSONString(taiShanCrawlerImageUploadResponse));
+        } catch (Exception e) {
+            log.error("泰山影像上传失败", e);
+            throw new RuntimeException("泰山影像上传失败: " + e.getMessage(), e);
         }
         }
-        taiShanCrawlerImageUploadRequest.setImageNodes(imageNodes);
-        taiShanCrawlerImageUploadRequest.setOperatorCode(parameters.getSaleCode());
-        taiShanCrawlerImageUploadRequest.setOperatorName(parameters.getSaleName());
-        taiShanCrawlerImageUploadRequest.setOrderNo(taiShanCrawlerOrder.getOrderNo());
-        taiShanCrawlerImageUploadRequest.setUploadFlag("D");
-        TaiShanCrawlerImageUploadResponse taiShanCrawlerImageUploadResponse = taiShanCrawlerRequestComponent.uploadImage(taiShanCrawlerImageUploadRequest, headers);
-        log.info("taiShanCrawlerImageUploadResponse对象的值:{}", JSON.toJSONString(taiShanCrawlerImageUploadResponse));
     }
     }
 
 
 
 

+ 1 - 1
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/build/ZiJinCrawlerQuoteResultsVoBuild.java

@@ -205,7 +205,7 @@ public class ZiJinCrawlerQuoteResultsVoBuild {
         }
         }
 
 
         // 计算总保费
         // 计算总保费
-        // calculateSumPremium(quoteResultsVo);
+        calculateSumPremium(quoteResultsVo);
     }
     }
 
 
     /**
     /**

+ 1 - 1
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/component/ZiJinCrawlerRequestComponent.java

@@ -113,12 +113,12 @@ public class ZiJinCrawlerRequestComponent {
      */
      */
     public ZiJinCrawlerCheckCaptchaResponse checkCaptchaAndGetToken(ZiJinCrawlerCheckCaptchaRequest ziJinCrawlerCheckCaptchaRequest, String token) throws IOException {
     public ZiJinCrawlerCheckCaptchaResponse checkCaptchaAndGetToken(ZiJinCrawlerCheckCaptchaRequest ziJinCrawlerCheckCaptchaRequest, String token) throws IOException {
         log.info("ziJinCrawlerCheckCaptchaRequest请求参数的值:{}", JSON.toJSONString(ziJinCrawlerCheckCaptchaRequest));
         log.info("ziJinCrawlerCheckCaptchaRequest请求参数的值:{}", JSON.toJSONString(ziJinCrawlerCheckCaptchaRequest));
-
         HttpHeaders httpHeaders = setHttpHeaders();
         HttpHeaders httpHeaders = setHttpHeaders();
         httpHeaders.setContentLength(289);
         httpHeaders.setContentLength(289);
         // 需要单独设置这个
         // 需要单独设置这个
         httpHeaders.set("Authorization", token);
         httpHeaders.set("Authorization", token);
         httpHeaders.set("loginToken", token);
         httpHeaders.set("loginToken", token);
+
         String jsonString = JSON.toJSONString(ziJinCrawlerCheckCaptchaRequest);
         String jsonString = JSON.toJSONString(ziJinCrawlerCheckCaptchaRequest);
         ResponseEntity<ZiJinCrawlerCheckCaptchaResponse> responseEntity = requestComponent.post(RequestUrl.CHECKCAPTCHAANDGETTOKEN.getRequestUrl(ziJinCrawlerProperties.getBaseUrl()), jsonString, ZiJinCrawlerCheckCaptchaResponse.class, httpHeaders);
         ResponseEntity<ZiJinCrawlerCheckCaptchaResponse> responseEntity = requestComponent.post(RequestUrl.CHECKCAPTCHAANDGETTOKEN.getRequestUrl(ziJinCrawlerProperties.getBaseUrl()), jsonString, ZiJinCrawlerCheckCaptchaResponse.class, httpHeaders);
         return responseEntity.getBody();
         return responseEntity.getBody();

+ 10 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/entity/ZiJinCrawlerConfigureParameters.java

@@ -36,4 +36,14 @@ public class ZiJinCrawlerConfigureParameters implements ConfigureParameters {
      */
      */
     private String comName;
     private String comName;
 
 
+    /**
+     * 代理code
+     */
+    private String 代理code;
+
+    /**
+     * 渠道: 比如 个人代理
+     */
+    private String businessNatureName;
+
 }
 }

+ 2 - 6
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/service/impl/ZiJinCrawlerQuoteProcessServiceImpl.java

@@ -40,9 +40,6 @@ public class ZiJinCrawlerQuoteProcessServiceImpl implements ZiJinCrawlerQuotePro
     // 登陆次数
     // 登陆次数
     public static final int LOGINS_NUMBER = 3;
     public static final int LOGINS_NUMBER = 3;
 
 
-    private final String USER_NAME = "214003053";
-    private final String PASSWORD = "Jieke896.";
-
     /**
     /**
      * 登录
      * 登录
      *
      *
@@ -138,9 +135,8 @@ public class ZiJinCrawlerQuoteProcessServiceImpl implements ZiJinCrawlerQuotePro
         String authorization = ziJinCrawlerCacheComponent.getAuthorization(username);
         String authorization = ziJinCrawlerCacheComponent.getAuthorization(username);
         log.info("authorization:{}", authorization);
         log.info("authorization:{}", authorization);
         if (authorization == null) {
         if (authorization == null) {
-            // TODO: 暂时硬编码,后续调整
-            login(USER_NAME, PASSWORD);
-            authorization = ziJinCrawlerCacheComponent.getAuthorization(USER_NAME);
+            login(username, password);
+            authorization = ziJinCrawlerCacheComponent.getAuthorization(username);
         }
         }
 
 
         try {
         try {

+ 16 - 24
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/service/impl/ZiJinCrawlerRequestImpl.java

@@ -118,22 +118,15 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
         HttpHeaders headers = ziJinCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
         HttpHeaders headers = ziJinCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
         log.info("headers参数的值:{}", JSON.toJSONString(headers));
         log.info("headers参数的值:{}", JSON.toJSONString(headers));
 
 
-        String userCode = ziJinCrawlerCacheComponent.getUserCode(attributionInformationVo.getUsername());
-        log.info("userCode:{}", userCode);
-
         // 1.1 解析配置参数
         // 1.1 解析配置参数
         ZiJinCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ZiJinCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
         ZiJinCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ZiJinCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
         log.info("parameters参数的值:{}", JSON.toJSONString(parameters));
         log.info("parameters参数的值:{}", JSON.toJSONString(parameters));
 
 
-        // 1.2 构建归属信息(机构、套餐、渠道信息)
-        // ProposalInfoDTO proposalInfoDTO = boHaiBuildingAttributionInformation.build(parameters, userCode, headers);
         try {
         try {
-            String comCode = "2140000601";
-
             // 查询车辆信息
             // 查询车辆信息
             ZiJinCrawlerCarRequest ziJinCrawlerCarRequest = new ZiJinCrawlerCarRequest();
             ZiJinCrawlerCarRequest ziJinCrawlerCarRequest = new ZiJinCrawlerCarRequest();
             ziJinCrawlerCarRequest.setChannelCode("KSCD_PROD");
             ziJinCrawlerCarRequest.setChannelCode("KSCD_PROD");
-            ziJinCrawlerCarRequest.setComCode(comCode);
+            ziJinCrawlerCarRequest.setComCode(parameters.getComCode());
             ziJinCrawlerCarRequest.setLicenseNo(quoteVo.getCarInfoVo().getLicenseNo());
             ziJinCrawlerCarRequest.setLicenseNo(quoteVo.getCarInfoVo().getLicenseNo());
             ziJinCrawlerCarRequest.setVin(quoteVo.getCarInfoVo().getVinNo());
             ziJinCrawlerCarRequest.setVin(quoteVo.getCarInfoVo().getVinNo());
             ZiJinCrawlerCarResponse ziJinCrawlerCarResponse = ziJinCrawlerRequestComponent.car(ziJinCrawlerCarRequest, headers);
             ZiJinCrawlerCarResponse ziJinCrawlerCarResponse = ziJinCrawlerRequestComponent.car(ziJinCrawlerCarRequest, headers);
@@ -156,7 +149,7 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
             //  报价接口
             //  报价接口
             ZiJinCrawlerQuotationRequest ziJinCrawlerQuotationRequest = new ZiJinCrawlerQuotationRequest();
             ZiJinCrawlerQuotationRequest ziJinCrawlerQuotationRequest = new ZiJinCrawlerQuotationRequest();
             // 设置基础信息
             // 设置基础信息
-            ziJinCrawlerQuotationRequest.setBaseInfo(buildBaseInfo(quoteVo));
+            ziJinCrawlerQuotationRequest.setBaseInfo(buildBaseInfo(quoteVo, parameters, attributionInformationVo.getUsername()));
 
 
             // 设置车主信息
             // 设置车主信息
             ZiJinCrawlerQuotationRequest.CarOwnerInfo carOwnerInfo = buildCarOwnerInfo(quoteVo);
             ZiJinCrawlerQuotationRequest.CarOwnerInfo carOwnerInfo = buildCarOwnerInfo(quoteVo);
@@ -180,8 +173,7 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
             ziJinCrawlerQuotationRequest.setProductName("机动车保险");
             ziJinCrawlerQuotationRequest.setProductName("机动车保险");
 
 
             // 设置减税信息
             // 设置减税信息
-            ziJinCrawlerQuotationRequest.setTaxRelifInfo(buildTaxRelifInfo(quoteVo, carOwnerInfo, comCode, headers));
-
+            ziJinCrawlerQuotationRequest.setTaxRelifInfo(buildTaxRelifInfo(quoteVo, carOwnerInfo, parameters.getComCode(), headers));
             // 设置险种列表
             // 设置险种列表
             Double actualValue = null;
             Double actualValue = null;
             if (ziJinCrawlerGetCarActualValueResponse != null && StringUtils.hasLength(ziJinCrawlerGetCarActualValueResponse.getActualValue())) {
             if (ziJinCrawlerGetCarActualValueResponse != null && StringUtils.hasLength(ziJinCrawlerGetCarActualValueResponse.getActualValue())) {
@@ -801,16 +793,16 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
      *
      *
      * @return ZiJinCrawlerQuotationRequest.BaseInfo
      * @return ZiJinCrawlerQuotationRequest.BaseInfo
      */
      */
-    private ZiJinCrawlerQuotationRequest.BaseInfo buildBaseInfo(QuoteVo quoteVo) {
+    private ZiJinCrawlerQuotationRequest.BaseInfo buildBaseInfo(QuoteVo quoteVo, ZiJinCrawlerConfigureParameters parameters, String operatorCode) {
         ZiJinCrawlerQuotationRequest.BaseInfo baseInfo = new ZiJinCrawlerQuotationRequest.BaseInfo();
         ZiJinCrawlerQuotationRequest.BaseInfo baseInfo = new ZiJinCrawlerQuotationRequest.BaseInfo();
-        baseInfo.setAgentCode("P214001000622");
-        baseInfo.setAgreementNo("P214001000622-01");
+        baseInfo.setAgentCode(parameters.get代理code());
+        baseInfo.setAgreementNo(parameters.get代理code()+"-01");
         baseInfo.setBusinessNature("1");
         baseInfo.setBusinessNature("1");
-        baseInfo.setComCode("2140105601");
-        baseInfo.setComName("山西太原综改支公司直销业务一部");
-        baseInfo.setHandler1Code("214003263");
-        baseInfo.setHandler1Name("程涛");
-        baseInfo.setOperatorCode("214003053");
+        baseInfo.setComCode(parameters.getComCode());
+        baseInfo.setComName(parameters.getComName());
+        baseInfo.setHandler1Code(parameters.getUserCode());
+        baseInfo.setHandler1Name(parameters.getUserName());
+        baseInfo.setOperatorCode(operatorCode);
         baseInfo.setStartDate(quoteVo.getCiRiskInfoVo().getStartDate().substring(0, 10));
         baseInfo.setStartDate(quoteVo.getCiRiskInfoVo().getStartDate().substring(0, 10));
         baseInfo.setStartDateCI(quoteVo.getCiRiskInfoVo().getStartDate().substring(0, 10));
         baseInfo.setStartDateCI(quoteVo.getCiRiskInfoVo().getStartDate().substring(0, 10));
         baseInfo.setStartHour("00");
         baseInfo.setStartHour("00");
@@ -827,13 +819,13 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
         baseInfo.setXbFlag(quoteVo.getBiRiskInfoVo() == null ? "0" : null);
         baseInfo.setXbFlag(quoteVo.getBiRiskInfoVo() == null ? "0" : null);
         baseInfo.setXbFlagCI(quoteVo.getBiRiskInfoVo() == null ? "0" : null);
         baseInfo.setXbFlagCI(quoteVo.getBiRiskInfoVo() == null ? "0" : null);
         baseInfo.setGoalInsuredFlag("0");
         baseInfo.setGoalInsuredFlag("0");
-        baseInfo.setConfigName("天勤");
+        baseInfo.setConfigName("");
         baseInfo.setId("1dec8ac2ced74973842a5b098669813a");
         baseInfo.setId("1dec8ac2ced74973842a5b098669813a");
-        baseInfo.setBusinessName("个人代理");
+        baseInfo.setBusinessName(parameters.getBusinessNatureName());
         baseInfo.setIdMongo("1dec8ac2ced74973842a5b098669813a");
         baseInfo.setIdMongo("1dec8ac2ced74973842a5b098669813a");
-        baseInfo.setDesc("天勤");
-        baseInfo.setHanderCode("214003263");
-        baseInfo.setHanderName("程涛");
+        baseInfo.setDesc("");
+        baseInfo.setHanderCode(parameters.getUserCode());
+        baseInfo.setHanderName(parameters.getUserName());
         baseInfo.setDemandNo("01ZKIC140026051910017933666448");
         baseInfo.setDemandNo("01ZKIC140026051910017933666448");
         if (quoteVo.getBiRiskInfoVo() != null) {
         if (quoteVo.getBiRiskInfoVo() != null) {
             baseInfo.setDemandNoCI("01ZKIC140026051910017933666448");// 这个先放开看行不
             baseInfo.setDemandNoCI("01ZKIC140026051910017933666448");// 这个先放开看行不

+ 10 - 8
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementCostServiceImpl.java

@@ -26,10 +26,7 @@ import com.jzg.commons.util.idgen.IdGenerate;
 import com.jzg.organization.mapper.PtlAgreementCostMapper;
 import com.jzg.organization.mapper.PtlAgreementCostMapper;
 import com.jzg.organization.mapper.PtlAgreementCostRuleMapper;
 import com.jzg.organization.mapper.PtlAgreementCostRuleMapper;
 import com.jzg.organization.mapper.PtlAgreementCostTypeMapper;
 import com.jzg.organization.mapper.PtlAgreementCostTypeMapper;
-import com.jzg.organization.service.PtlAgreementCostRuleService;
-import com.jzg.organization.service.PtlAgreementCostService;
-import com.jzg.organization.service.PtlAgreementCostTypeService;
-import com.jzg.organization.service.PtlAgreementUndwrtRulesAttrService;
+import com.jzg.organization.service.*;
 import com.jzg.organization.state.CostState;
 import com.jzg.organization.state.CostState;
 import com.jzg.organization.state.listener.CostStateListener;
 import com.jzg.organization.state.listener.CostStateListener;
 import io.seata.spring.annotation.GlobalTransactional;
 import io.seata.spring.annotation.GlobalTransactional;
@@ -89,6 +86,9 @@ public class PtlAgreementCostServiceImpl extends ServiceImpl<PtlAgreementCostMap
     @Autowired
     @Autowired
     private PtlAgreementCostRuleMapper ptlAgreementCostRuleMapper;
     private PtlAgreementCostRuleMapper ptlAgreementCostRuleMapper;
 
 
+    @Autowired
+    private PtlAgreementService ptlAgreementService;
+
     /**
     /**
      * 报价配置/费用管理/新增费用
      * 报价配置/费用管理/新增费用
      *
      *
@@ -117,6 +117,7 @@ public class PtlAgreementCostServiceImpl extends ServiceImpl<PtlAgreementCostMap
                     log.info("新增费用的时候,需要指定关联的协议信息。ptlAgreemenCostAdd=[{}]", JSONUtil.toJsonStr(ptlAgreemenCostAdd));
                     log.info("新增费用的时候,需要指定关联的协议信息。ptlAgreemenCostAdd=[{}]", JSONUtil.toJsonStr(ptlAgreemenCostAdd));
                     return HttpResult.error("新增费用的时候,需要指定关联的协议信息");
                     return HttpResult.error("新增费用的时候,需要指定关联的协议信息");
                 }
                 }
+                PtlAgreement agreement = ptlAgreementService.getById(costAdd.getPtlAgreementId());
                 ptlAgreementCostAdd.setPtlAgreementId(costAdd.getPtlAgreementId());
                 ptlAgreementCostAdd.setPtlAgreementId(costAdd.getPtlAgreementId());
                 ptlAgreementCostAdd.setProductId(costAdd.getProductId());
                 ptlAgreementCostAdd.setProductId(costAdd.getProductId());
                 ptlAgreementCostAdd.setProductName(costAdd.getProductName());
                 ptlAgreementCostAdd.setProductName(costAdd.getProductName());
@@ -127,7 +128,7 @@ public class PtlAgreementCostServiceImpl extends ServiceImpl<PtlAgreementCostMap
 //                    throw new SystemException("已存在相同且有效的费用规则,请检查");
 //                    throw new SystemException("已存在相同且有效的费用规则,请检查");
 //                }
 //                }
                 PtlAgreementCost ptlAgreementCost = BeanUtil.copyProperties(ptlAgreementCostAdd, PtlAgreementCost.class);
                 PtlAgreementCost ptlAgreementCost = BeanUtil.copyProperties(ptlAgreementCostAdd, PtlAgreementCost.class);
-                ptlAgreementCost.setCostRules(buildDescString(ptlAgreementCostAdd.getRuleConditions()));
+                ptlAgreementCost.setCostRules(buildDescString(agreement.getCompanyId(), ptlAgreementCostAdd.getRuleConditions()));
                 if (baseMapper.insert(ptlAgreementCost) <= 0) {
                 if (baseMapper.insert(ptlAgreementCost) <= 0) {
                     log.error("插入操作失败");
                     log.error("插入操作失败");
                     throw new RuntimeException(ReturnInformation.FAILURE_MESSAGE);
                     throw new RuntimeException(ReturnInformation.FAILURE_MESSAGE);
@@ -167,10 +168,11 @@ public class PtlAgreementCostServiceImpl extends ServiceImpl<PtlAgreementCostMap
                 }
                 }
             }
             }
         }
         }
+        PtlAgreement agreement = ptlAgreementService.getById(ptlAgreementCostEnd.getPtlAgreementId());
         PtlAgreementCost ptlAgreementCost = BeanUtil.copyProperties(ptlAgreementCostEnd, PtlAgreementCost.class);
         PtlAgreementCost ptlAgreementCost = BeanUtil.copyProperties(ptlAgreementCostEnd, PtlAgreementCost.class);
         // modify by lipf, 2026年5月22日11:28:34 设置为待审核状态
         // modify by lipf, 2026年5月22日11:28:34 设置为待审核状态
         ptlAgreementCost.setApproved(0);
         ptlAgreementCost.setApproved(0);
-        ptlAgreementCost.setCostRules(buildDescString(ptlAgreementCostEnd.getRuleConditions()));
+        ptlAgreementCost.setCostRules(buildDescString(agreement.getCompanyId(), ptlAgreementCostEnd.getRuleConditions()));
         if (baseMapper.updateById(ptlAgreementCost) <= 0) {
         if (baseMapper.updateById(ptlAgreementCost) <= 0) {
             throw new RuntimeException(ReturnInformation.UPDATE_FAILED);
             throw new RuntimeException(ReturnInformation.UPDATE_FAILED);
         }
         }
@@ -196,11 +198,11 @@ public class PtlAgreementCostServiceImpl extends ServiceImpl<PtlAgreementCostMap
     }
     }
 
 
 
 
-    public String buildDescString(List<?> list){
+    public String buildDescString(String companyId, List<?> list){
         if (CollectionUtils.isEmpty(list)){
         if (CollectionUtils.isEmpty(list)){
             return null;
             return null;
         }
         }
-        return BuildDescUtils.buildDesc(BeanUtil.copyToList(list, PtlAgreementUndwrtRulesAttr.class), agreementUndwrtRulesAttrService.getUndwrtRulesAttrList());
+        return BuildDescUtils.buildDesc(companyId, BeanUtil.copyToList(list, PtlAgreementUndwrtRulesAttr.class), agreementUndwrtRulesAttrService.getUndwrtRulesAttrList());
     }
     }
 
 
     public boolean verify(PtlAgreementCostAdd ptlAgreementCostAdd){
     public boolean verify(PtlAgreementCostAdd ptlAgreementCostAdd){