Browse Source

紫金影像上传,核保

wangrq 3 months ago
parent
commit
2fed00a13d
13 changed files with 424 additions and 200 deletions
  1. 63 0
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/build/ZiJinCrawlerQuoteRequestBuild.java
  2. 74 19
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/build/ZiJinCrawlerQuoteResultsVoBuild.java
  3. 115 37
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/build/ZiJinCrawlerSaveQuoteInfoRequestBuild.java
  4. 2 1
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/component/ZiJinCrawlerCacheComponent.java
  5. 19 1
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/component/ZiJinCrawlerRequestComponent.java
  6. 7 0
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/entity/request/ZiJinCrawlerQueryOrderStatusRequest.java
  7. 1 1
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/entity/request/ZiJinCrawlerQuotationRequest.java
  8. 54 0
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/entity/request/ZiJinCrawlerUploadImageInfoListRequest.java
  9. 37 0
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/entity/response/ZiJinCrawlerImageUploadInfoListResponse.java
  10. 3 2
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/enums/RequestUrl.java
  11. 2 1
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/service/ZiJinCrawlerOrderService.java
  12. 11 12
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/service/impl/ZiJinCrawlerOrderServiceImpl.java
  13. 36 126
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/service/impl/ZiJinCrawlerRequestImpl.java

+ 63 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/build/ZiJinCrawlerQuoteRequestBuild.java

@@ -0,0 +1,63 @@
+package com.jzg.quotation.zijin.crawler.build;
+
+import com.jzg.commons.util.StringUtils;
+import com.jzg.quotation.zijin.crawler.entity.request.ZiJinCrawlerQuotationRequest;
+import com.jzg.quotation.zijin.crawler.entity.request.ZiJinCrawlerRecognizeCodesRequest;
+import com.jzg.quotation.zijin.crawler.entity.response.ZiJinCrawlerQuotationResponse;
+import com.jzg.quotation.zijin.crawler.entity.response.ZiJinCrawlerRecognizeCodesResponse;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @description: 紫金财险爬虫报价“转保标志”再次报价构建器
+ * @author: wangrq
+ * @date: 2026/6/6 16:05
+ **/
+@Slf4j
+public class ZiJinCrawlerQuoteRequestBuild {
+
+    /**
+     * 构建识别码请求
+     *
+     * @param ziJinCrawlerQuotationResponse
+     * @return
+     */
+    public static ArrayList<ZiJinCrawlerRecognizeCodesRequest> buildRecognizeCodesRequests(ZiJinCrawlerQuotationResponse ziJinCrawlerQuotationResponse) {
+        ArrayList<ZiJinCrawlerRecognizeCodesRequest> ziJinCrawlerRecognizeCodesRequests = new ArrayList<>();
+        if (StringUtils.isNotEmpty(ziJinCrawlerQuotationResponse.getBasePart().getQuestion())) {
+            ZiJinCrawlerRecognizeCodesRequest ziJinCrawlerRecognizeCodesRequest = new ZiJinCrawlerRecognizeCodesRequest();
+            ziJinCrawlerRecognizeCodesRequest.setBase64(ziJinCrawlerQuotationResponse.getBasePart().getQuestion());
+            ziJinCrawlerRecognizeCodesRequest.setSerialNo("question");
+            ziJinCrawlerRecognizeCodesRequests.add(ziJinCrawlerRecognizeCodesRequest);
+        }
+        if (StringUtils.isNotEmpty(ziJinCrawlerQuotationResponse.getBasePart().getQuestionCI())) {
+            ZiJinCrawlerRecognizeCodesRequest ziJinCrawlerRecognizeCodesRequest = new ZiJinCrawlerRecognizeCodesRequest();
+            ziJinCrawlerRecognizeCodesRequest.setBase64(ziJinCrawlerQuotationResponse.getBasePart().getQuestionCI());
+            ziJinCrawlerRecognizeCodesRequest.setSerialNo("questionCI");
+            ziJinCrawlerRecognizeCodesRequests.add(ziJinCrawlerRecognizeCodesRequest);
+        }
+        return ziJinCrawlerRecognizeCodesRequests;
+    }
+
+    /**
+     * 重新报价
+     * @param ziJinCrawlerRecognizeCodesResponse
+     * @param ziJinCrawlerQuotationRequest
+     */
+    public static void buildReQuote(ZiJinCrawlerQuotationResponse ziJinCrawlerQuotationResponse, ZiJinCrawlerRecognizeCodesResponse ziJinCrawlerRecognizeCodesResponse, ZiJinCrawlerQuotationRequest ziJinCrawlerQuotationRequest) {
+        List<ZiJinCrawlerRecognizeCodesResponse.Results> results = ziJinCrawlerRecognizeCodesResponse.getResults();
+        for (ZiJinCrawlerRecognizeCodesResponse.Results result : results) {
+            if ("question".equals(result.getSerialNo())) {
+                ziJinCrawlerQuotationRequest.getBaseInfo().setAnswer(result.getResult());
+                ziJinCrawlerQuotationRequest.getBaseInfo().setDemandNo(ziJinCrawlerQuotationResponse.getBasePart().getDemandNo());
+            }
+            if ("questionCI".equals(result.getSerialNo())) {
+                ziJinCrawlerQuotationRequest.getBaseInfo().setAnswerCI(result.getResult());
+                ziJinCrawlerQuotationRequest.getBaseInfo().setDemandNoCI(ziJinCrawlerQuotationResponse.getBasePart().getDemandNoCI());
+            }
+        }
+    }
+
+}

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

@@ -259,20 +259,68 @@ public class ZiJinCrawlerQuoteResultsVoBuild {
             return scoreVo;
         }
         ZiJinCrawlerQuotationResponse.PriceInfoList priceInfo = priceInfoList.get(0);
-        JSONArray scoreArray = new JSONArray();
+        ZiJinCrawlerQuotationResponse.CiProfitDetailData ciProfitDetailData = ziJinCrawlerQuotationResponse.getCiProfitDetailData();
 
         scoreVo.setJqLossRation(priceInfo.getLrRecomAdjust());
         scoreVo.setSyLossRation(priceInfo.getLrRecom());
 
+        JSONArray scoreArray = new JSONArray();
+        // 商业险定价信息
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName", "自主定价系数")
+                .fluentPut("scoreKey", "uwRel")
+                .fluentPut("score", priceInfo.getUwRel()));
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName", "交通违法系数")
+                .fluentPut("scoreKey", "chanRel")
+                .fluentPut("score", priceInfo.getChanRel()));
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName", "无赔款优惠系数")
+                .fluentPut("scoreKey", "nonclaimAdjuct")
+                .fluentPut("score", ciProfitDetailData != null ? ciProfitDetailData.getNonclaimAdjuct() : ""));
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName", "无赔款优待等级")
+                .fluentPut("scoreKey", "claimAdjustLevel")
+                .fluentPut("score", ciProfitDetailData != null ? ciProfitDetailData.getClaimAdjustLevel() : ""));
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName", "连续承保年数")
+                .fluentPut("scoreKey", "insureYears")
+                .fluentPut("score", ciProfitDetailData != null ? ciProfitDetailData.getInsureYears() : null));
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName", "连续承保期间出险次数")
+                .fluentPut("scoreKey", "claimTimes")
+                .fluentPut("score", ciProfitDetailData  != null ? ciProfitDetailData.getClaimTimes() : null));
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName", "总折扣")
+                .fluentPut("scoreKey", "initialELR")
+                .fluentPut("score", priceInfo.getInitialELR()));
+        scoreVo.setScoreJson(scoreArray);
+
         // 定价评分
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName", "标费含NCD预期赔付率")
+                .fluentPut("scoreKey", "ncdBpremELR")
+                .fluentPut("score", priceInfo.getNcdBpremELR()));
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName", "商业险赔付率")
+                .fluentPut("scoreKey", "lrRecom")
+                .fluentPut("score", priceInfo.getLrRecom()));
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName", "交强险赔付率")
+                .fluentPut("scoreKey", "lrRecomAdjust")
+                .fluentPut("score", priceInfo.getLrRecomAdjust()));
         scoreArray.add(new JSONObject()
                 .fluentPut("scoreName", "交强险预测评分")
                 .fluentPut("scoreKey", "revPredScoreAdjust")
                 .fluentPut("score", priceInfo.getRevPredScoreAdjust()));
         scoreArray.add(new JSONObject()
-                .fluentPut("scoreName", "商业险预测评分")
+                .fluentPut("scoreName", "交强险预测评分")
+                .fluentPut("scoreKey", "revPredScoreAdjust")
+                .fluentPut("score", priceInfo.getRevPredScoreAdjust()));
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName", "交强险不浮动原因")
                 .fluentPut("scoreKey", "revPredScore")
-                .fluentPut("score", priceInfo.getRevPredScore()));
+                .fluentPut("score", null));
         scoreArray.add(new JSONObject()
                 .fluentPut("scoreName", "车辆核保分")
                 .fluentPut("scoreKey", "underwrite01")
@@ -281,22 +329,6 @@ public class ZiJinCrawlerQuoteResultsVoBuild {
                 .fluentPut("scoreName", "律商新能源评分")
                 .fluentPut("scoreKey", "evScore")
                 .fluentPut("score", priceInfo.getEvScore()));
-        scoreArray.add(new JSONObject()
-                .fluentPut("scoreName", "标费含NCD预期赔付率")
-                .fluentPut("scoreKey", "ncdBpremELR")
-                .fluentPut("score", priceInfo.getNcdBpremELR()));
-        scoreArray.add(new JSONObject()
-                .fluentPut("scoreName", "交强险赔付率")
-                .fluentPut("scoreKey", "lrRecomAdjust")
-                .fluentPut("score", priceInfo.getLrRecomAdjust()));
-        scoreArray.add(new JSONObject()
-                .fluentPut("scoreName", "商业险赔付率")
-                .fluentPut("scoreKey", "lrRecom")
-                .fluentPut("score", priceInfo.getLrRecom()));
-        scoreArray.add(new JSONObject()
-                .fluentPut("scoreName", "商业险手续费")
-                .fluentPut("scoreKey", "handFeeBi")
-                .fluentPut("score", priceInfo.getUwRel()));
         scoreVo.setScoreJson(scoreArray);
 
         // 车慧达定价信息
@@ -325,6 +357,29 @@ public class ZiJinCrawlerQuoteResultsVoBuild {
                 .fluentPut("scoreKey", "carLoadTranche")
                 .fluentPut("score", priceInfo.getCarLoadTranche()));
         scoreVo.setScoreJson(scoreArray);
+
+        // 影响因子
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName", "NCD")// 升费因子名称
+                .fluentPut("scoreKey", "effectValueUPOne")
+                .fluentPut("score", priceInfo.getEffectValueUPOne()));// 因子比例
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName", "性别年龄")
+                .fluentPut("scoreKey", "effectValueUPTwo")
+                .fluentPut("score", priceInfo.getEffectValueUPTwo()));
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName", "车牌")
+                .fluentPut("scoreKey", "effectValueUPThree")
+                .fluentPut("score", priceInfo.getEffectValueUPThree()));
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName", "是否投保医保外用药")
+                .fluentPut("scoreKey", "effectValueDownFour")
+                .fluentPut("score", priceInfo.getEffectValueDownFour()));
+        scoreArray.add(new JSONObject()
+                .fluentPut("scoreName", "平台分")
+                .fluentPut("scoreKey", "effectValueDownFive")
+                .fluentPut("score", priceInfo.getEffectValueDownFive()));
+        scoreVo.setScoreJson(scoreArray);
         return scoreVo;
     }
 }

+ 115 - 37
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/build/ZiJinCrawlerSaveQuoteInfoRequestBuild.java

@@ -2,15 +2,15 @@ package com.jzg.quotation.zijin.crawler.build;
 
 import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
-import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.zijin.api.constant.enums.RiskCodeEnum;
+import com.jzg.quotation.zijin.crawler.component.ZiJinCrawlerCacheComponent;
 import com.jzg.quotation.zijin.crawler.entity.request.ZiJinCrawlerQuotationRequest;
-import com.jzg.quotation.zijin.crawler.entity.request.ZiJinCrawlerRecognizeCodesRequest;
 import com.jzg.quotation.zijin.crawler.entity.request.ZiJinCrawlerSaveQuoteInfoRequest;
 import com.jzg.quotation.zijin.crawler.entity.response.ZiJinCrawlerQuotationResponse;
 import com.jzg.quotation.zijin.crawler.util.ConvertUtil;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.jetbrains.annotations.NotNull;
+import org.springframework.stereotype.Component;
 import org.springframework.util.ObjectUtils;
 
 import java.util.*;
@@ -20,9 +20,113 @@ import java.util.*;
  * @author:
  * @date:
  **/
+@Component
+@RequiredArgsConstructor
 @Slf4j
 public class ZiJinCrawlerSaveQuoteInfoRequestBuild {
 
+    private final ZiJinCrawlerCacheComponent ziJinCrawlerCacheComponent;
+
+    /**
+     * 构建保存报价信息请求对象
+     *
+     * @return 构建完成的保存报价信息请求对象
+     */
+    public ZiJinCrawlerSaveQuoteInfoRequest buildSaveQuoteInfoRequest(QuoteVo quoteVo, ZiJinCrawlerQuotationRequest ziJinCrawlerQuotationRequest, ZiJinCrawlerQuotationResponse ziJinCrawlerQuotationResponse) {
+        ZiJinCrawlerSaveQuoteInfoRequest ziJinCrawlerSaveQuoteInfoRequest = new ZiJinCrawlerSaveQuoteInfoRequest();
+
+        // 设置代理人代码
+        ziJinCrawlerSaveQuoteInfoRequest.setAgentCode(ziJinCrawlerQuotationRequest.getBaseInfo().getAgentCode());
+
+        // 设置订单ID
+        ziJinCrawlerSaveQuoteInfoRequest.setOrderId(ziJinCrawlerQuotationResponse.getOrderId());
+
+        // 设置订单号
+        ziJinCrawlerSaveQuoteInfoRequest.setOrderNo(ziJinCrawlerQuotationResponse.getOrderNo());
+
+        // 设置基础信息
+        ziJinCrawlerSaveQuoteInfoRequest.setBaseInfo(buildSaveBaseInfo(quoteVo, ziJinCrawlerQuotationRequest, ziJinCrawlerQuotationResponse));
+
+        // 设置车主信息
+        ziJinCrawlerSaveQuoteInfoRequest.setCarOwnerInfo(buildSaveCarOwnerInfo(quoteVo, ziJinCrawlerQuotationRequest));
+
+        // 设置车险附加险信息列表
+        ziJinCrawlerSaveQuoteInfoRequest.setCarPolicySubInfoList(buildSaveCarPolicySubInfo(ziJinCrawlerQuotationRequest));
+
+        // 设置附加险列表
+        ziJinCrawlerSaveQuoteInfoRequest.setAttachRiskList(new ArrayList<>());
+
+        // 设置 投保人/被保人 列表
+        ziJinCrawlerSaveQuoteInfoRequest.setInsuredList(buildSaveInsuredList(quoteVo, ziJinCrawlerQuotationRequest));
+
+        // 设置险别明细列表
+        ziJinCrawlerSaveQuoteInfoRequest.setItemKindList(buildSaveItemKindList(ziJinCrawlerQuotationResponse));
+
+        // 设置收费信息列表
+        ziJinCrawlerSaveQuoteInfoRequest.setChargingInfoList(new ArrayList<>());
+
+        // 设置订单来源
+        ziJinCrawlerSaveQuoteInfoRequest.setOrderOrigin("KSCD_PROD");
+
+        // 设置产品代码
+        ziJinCrawlerSaveQuoteInfoRequest.setProductCode("CAR20190517");
+
+        // 设置产品名称
+        ziJinCrawlerSaveQuoteInfoRequest.setProductName("机动车保险");
+
+        // 设置提交信息
+        ziJinCrawlerSaveQuoteInfoRequest.setSubmitInfo(new HashMap<>());
+
+        // 设置车船税减免信息
+        ziJinCrawlerSaveQuoteInfoRequest.setTaxRelifInfo(buildSaveTaxRelifInfo(ziJinCrawlerQuotationResponse));
+
+        // 设置终端ID
+        ziJinCrawlerSaveQuoteInfoRequest.setTerminalId("KSCD");
+
+        // 设置终端类型
+        ziJinCrawlerSaveQuoteInfoRequest.setTerminalIdType("Vue-PC");
+
+        // 设置投保标识
+        ziJinCrawlerSaveQuoteInfoRequest.setInsuranceSign("0");
+
+        // 设置车辆信息
+        ziJinCrawlerSaveQuoteInfoRequest.setVehicleInfo(buildVehicleInfo(ziJinCrawlerQuotationRequest, ziJinCrawlerQuotationResponse));
+
+        // 设置车辆设备保费列表
+        ziJinCrawlerSaveQuoteInfoRequest.setCarDevicePremiumDtoList(new ArrayList<>());
+
+        // 设置约定列表
+        ziJinCrawlerSaveQuoteInfoRequest.setEngageList(new ArrayList<>());
+
+        // 设置附件文件列表
+        ziJinCrawlerSaveQuoteInfoRequest.setItemFileDataList(buildSaveFileDataList(ziJinCrawlerQuotationResponse));
+
+        // 设置订单附加信息
+        ziJinCrawlerSaveQuoteInfoRequest.setOrderAttachInfo(buildSaveOrderAttachInfo(quoteVo, ziJinCrawlerQuotationRequest));
+
+        // 设置是否包含子机构
+        ziJinCrawlerSaveQuoteInfoRequest.setIsIncludeSubCom(1);
+
+        return ziJinCrawlerSaveQuoteInfoRequest;
+    }
+
+    /**
+     * 构建保存报价信息请求的附件文件列表
+     *
+     * @param ziJinCrawlerQuotationResponse
+     * @return
+     */
+    private List<ZiJinCrawlerSaveQuoteInfoRequest.ItemFileData> buildSaveFileDataList(ZiJinCrawlerQuotationResponse ziJinCrawlerQuotationResponse) {
+        // 获取图片上传信息
+        List<ZiJinCrawlerSaveQuoteInfoRequest.ItemFileData.FileInfo> imagesInfoList = ziJinCrawlerCacheComponent.getImagesInfo(ziJinCrawlerQuotationResponse.getOrderNo());
+        return Optional.ofNullable(ziJinCrawlerQuotationResponse.getItemKindList()).orElseGet(Collections::emptyList).stream().map(itemKindListDTO ->
+                ZiJinCrawlerSaveQuoteInfoRequest.ItemFileData.builder()
+                        .riskCode(itemKindListDTO.getRiskCode())
+                        .fileList(imagesInfoList)
+                        .build()
+        ).toList();
+    }
+
     /**
      * 构建保存报价信息的订单附加信息
      *
@@ -30,7 +134,7 @@ public class ZiJinCrawlerSaveQuoteInfoRequestBuild {
      * @param ziJinCrawlerQuotationRequest
      * @return
      */
-    public static ZiJinCrawlerSaveQuoteInfoRequest.OrderAttachInfo buildSaveOrderAttachInfo(QuoteVo quoteVo, ZiJinCrawlerQuotationRequest ziJinCrawlerQuotationRequest) {
+    private ZiJinCrawlerSaveQuoteInfoRequest.OrderAttachInfo buildSaveOrderAttachInfo(QuoteVo quoteVo, ZiJinCrawlerQuotationRequest ziJinCrawlerQuotationRequest) {
         return ZiJinCrawlerSaveQuoteInfoRequest.OrderAttachInfo.builder()
                 .carAppliRelation("1")
                 .carInsuredRelation("1")
@@ -53,7 +157,7 @@ public class ZiJinCrawlerSaveQuoteInfoRequestBuild {
      * @param ziJinCrawlerQuotationResponse 报价结果
      * @return 保存报价信息的车辆信息
      */
-    public static ZiJinCrawlerSaveQuoteInfoRequest.VehicleInfo buildVehicleInfo(ZiJinCrawlerQuotationRequest ziJinCrawlerQuotationRequest, ZiJinCrawlerQuotationResponse ziJinCrawlerQuotationResponse) {
+    private ZiJinCrawlerSaveQuoteInfoRequest.VehicleInfo buildVehicleInfo(ZiJinCrawlerQuotationRequest ziJinCrawlerQuotationRequest, ZiJinCrawlerQuotationResponse ziJinCrawlerQuotationResponse) {
         ZiJinCrawlerQuotationRequest.VehicleInfo carInfo = ziJinCrawlerQuotationRequest.getVehicleInfo();
         // 计算使用年限
         int useYears = 0;
@@ -129,7 +233,7 @@ public class ZiJinCrawlerSaveQuoteInfoRequestBuild {
      * @param ziJinCrawlerQuotationResponse
      * @return
      */
-    public static ZiJinCrawlerSaveQuoteInfoRequest.TaxRelifInfo buildSaveTaxRelifInfo(ZiJinCrawlerQuotationResponse ziJinCrawlerQuotationResponse) {
+    private ZiJinCrawlerSaveQuoteInfoRequest.TaxRelifInfo buildSaveTaxRelifInfo(ZiJinCrawlerQuotationResponse ziJinCrawlerQuotationResponse) {
         if (ziJinCrawlerQuotationResponse.getCarShipTax() == null) {
             return null;
         }
@@ -192,8 +296,7 @@ public class ZiJinCrawlerSaveQuoteInfoRequestBuild {
      * @param ziJinCrawlerQuotationResponse
      * @return
      */
-    @NotNull
-    public static List<ZiJinCrawlerSaveQuoteInfoRequest.ItemKindInfo> buildSaveItemKindList(ZiJinCrawlerQuotationResponse ziJinCrawlerQuotationResponse) {
+    private List<ZiJinCrawlerSaveQuoteInfoRequest.ItemKindInfo> buildSaveItemKindList(ZiJinCrawlerQuotationResponse ziJinCrawlerQuotationResponse) {
         List<ZiJinCrawlerSaveQuoteInfoRequest.ItemKindInfo> itemKindList = new ArrayList<>();
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(ziJinCrawlerQuotationResponse.getItemKindList())) {
             for (ZiJinCrawlerQuotationResponse.ItemKindList kind : ziJinCrawlerQuotationResponse.getItemKindList()) {
@@ -222,8 +325,7 @@ public class ZiJinCrawlerSaveQuoteInfoRequestBuild {
      * @param ziJinCrawlerQuotationRequest
      * @return
      */
-    @NotNull
-    public static List<ZiJinCrawlerSaveQuoteInfoRequest.InsuredInfo> buildSaveInsuredList(QuoteVo quoteVo, ZiJinCrawlerQuotationRequest ziJinCrawlerQuotationRequest) {
+    private List<ZiJinCrawlerSaveQuoteInfoRequest.InsuredInfo> buildSaveInsuredList(QuoteVo quoteVo, ZiJinCrawlerQuotationRequest ziJinCrawlerQuotationRequest) {
         // 投保人
         CustomerInfoVo policyHolderInfo = quoteVo.getPolicyHolderInfo();
         String addr = policyHolderInfo.getAddr();
@@ -289,8 +391,7 @@ public class ZiJinCrawlerSaveQuoteInfoRequestBuild {
      * @param ziJinCrawlerQuotationRequest
      * @return
      */
-    @NotNull
-    public static List<ZiJinCrawlerSaveQuoteInfoRequest.CarPolicySubInfo> buildSaveCarPolicySubInfo(ZiJinCrawlerQuotationRequest ziJinCrawlerQuotationRequest) {
+    private List<ZiJinCrawlerSaveQuoteInfoRequest.CarPolicySubInfo> buildSaveCarPolicySubInfo(ZiJinCrawlerQuotationRequest ziJinCrawlerQuotationRequest) {
         List<ZiJinCrawlerSaveQuoteInfoRequest.CarPolicySubInfo> carPolicySubInfoList = new ArrayList<>();
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(ziJinCrawlerQuotationRequest.getCarPolicySubInfoList())) {
             for (ZiJinCrawlerQuotationRequest.CarPolicySubInfoList subInfo : ziJinCrawlerQuotationRequest.getCarPolicySubInfoList()) {
@@ -319,7 +420,7 @@ public class ZiJinCrawlerSaveQuoteInfoRequestBuild {
      * @param ziJinCrawlerQuotationRequest
      * @return
      */
-    public static ZiJinCrawlerSaveQuoteInfoRequest.CarOwnerInfo buildSaveCarOwnerInfo(QuoteVo quoteVo, ZiJinCrawlerQuotationRequest ziJinCrawlerQuotationRequest) {
+    private ZiJinCrawlerSaveQuoteInfoRequest.CarOwnerInfo buildSaveCarOwnerInfo(QuoteVo quoteVo, ZiJinCrawlerQuotationRequest ziJinCrawlerQuotationRequest) {
         return ZiJinCrawlerSaveQuoteInfoRequest.CarOwnerInfo.builder()
                 .customerAmlPropReqDtoList(new ArrayList<>())
                 .carOwner(ziJinCrawlerQuotationRequest.getCarOwnerInfo().getCarOwner())
@@ -337,7 +438,7 @@ public class ZiJinCrawlerSaveQuoteInfoRequestBuild {
      * @param ziJinCrawlerQuotationRequest  报价参数
      * @param ziJinCrawlerQuotationResponse 报价返回对象
      */
-    public static ZiJinCrawlerSaveQuoteInfoRequest.BaseInfo buildSaveBaseInfo(QuoteVo quoteVo, ZiJinCrawlerQuotationRequest ziJinCrawlerQuotationRequest, ZiJinCrawlerQuotationResponse ziJinCrawlerQuotationResponse) {
+    private ZiJinCrawlerSaveQuoteInfoRequest.BaseInfo buildSaveBaseInfo(QuoteVo quoteVo, ZiJinCrawlerQuotationRequest ziJinCrawlerQuotationRequest, ZiJinCrawlerQuotationResponse ziJinCrawlerQuotationResponse) {
         Double sumPremium = 0.0;
         Double sumPremiumCI = ziJinCrawlerQuotationResponse.getPlanList().stream().filter(plan -> RiskCodeEnum.TRAFFIC_CODE.equals(plan.getRiskCode())).mapToDouble(ZiJinCrawlerQuotationResponse.PlanList::getPlanFee).findFirst().orElse(0.0);
         return ZiJinCrawlerSaveQuoteInfoRequest.BaseInfo.builder()
@@ -410,27 +511,4 @@ public class ZiJinCrawlerSaveQuoteInfoRequestBuild {
                 .build();
     }
 
-    /**
-     * 构建识别码请求
-     *
-     * @param ziJinCrawlerQuotationResponse
-     * @return
-     */
-    public static ArrayList<ZiJinCrawlerRecognizeCodesRequest> buildRecognizeCodesRequests(ZiJinCrawlerQuotationResponse ziJinCrawlerQuotationResponse) {
-        ArrayList<ZiJinCrawlerRecognizeCodesRequest> ziJinCrawlerRecognizeCodesRequests = new ArrayList<>();
-        if (StringUtils.isNotEmpty(ziJinCrawlerQuotationResponse.getBasePart().getQuestion())) {
-            ZiJinCrawlerRecognizeCodesRequest ziJinCrawlerRecognizeCodesRequest = new ZiJinCrawlerRecognizeCodesRequest();
-            ziJinCrawlerRecognizeCodesRequest.setBase64(ziJinCrawlerQuotationResponse.getBasePart().getQuestion());
-            ziJinCrawlerRecognizeCodesRequest.setSerialNo("question");
-            ziJinCrawlerRecognizeCodesRequests.add(ziJinCrawlerRecognizeCodesRequest);
-        }
-        if (StringUtils.isNotEmpty(ziJinCrawlerQuotationResponse.getBasePart().getQuestionCI())) {
-            ZiJinCrawlerRecognizeCodesRequest ziJinCrawlerRecognizeCodesRequest = new ZiJinCrawlerRecognizeCodesRequest();
-            ziJinCrawlerRecognizeCodesRequest.setBase64(ziJinCrawlerQuotationResponse.getBasePart().getQuestionCI());
-            ziJinCrawlerRecognizeCodesRequest.setSerialNo("questionCI");
-            ziJinCrawlerRecognizeCodesRequests.add(ziJinCrawlerRecognizeCodesRequest);
-        }
-        return ziJinCrawlerRecognizeCodesRequests;
-    }
-
 }

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

@@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.jzg.quotation.zijin.crawler.entity.request.ZiJinCrawlerSaveQuoteInfoRequest;
+import com.jzg.quotation.zijin.crawler.entity.request.ZiJinCrawlerUploadImageInfoListRequest;
 import com.jzg.quotation.zijin.crawler.entity.response.ZiJinCrawlerSaveResponse;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -116,7 +117,7 @@ public class ZiJinCrawlerCacheComponent {
      * @param orderNo 订单号
      * @param dataDTOS 图片信息
      */
-    public void cacheImagesInfo(String orderNo, List<ZiJinCrawlerSaveQuoteInfoRequest.ItemFileData.FileInfo> dataDTOS) {
+    public void cacheImagesInfo(String orderNo, List<ZiJinCrawlerUploadImageInfoListRequest.ItemFileDataListDTO> dataDTOS) {
         String responseStr = JSONObject.toJSONString(dataDTOS);
         redissonClient.getBucket(IMAGES_INFO + orderNo).set(responseStr, Duration.ofDays(IMAGES_INFO_TIME));
     }

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

@@ -341,6 +341,23 @@ public class ZiJinCrawlerRequestComponent {
         return responseEntity.getBody();
     }
 
+    /**
+     * 上传影像件列表
+     *
+     * @param headers
+     * @return ZiJinCrawlerImageUploadResponse
+     */
+    public ZiJinCrawlerImageUploadInfoListResponse uploadImageInfoList(ZiJinCrawlerUploadImageInfoListRequest ziJinCrawlerUploadImageInfoListRequest, HttpHeaders headers) throws Exception {
+        //设置headers
+        HttpHeaders httpHeaders = setHttpHeaders();
+
+        String jsonString = JSON.toJSONString(ziJinCrawlerUploadImageInfoListRequest);
+        log.info("ziJinCrawlerUploadImageInfoListRequest请求参数的值:{}", jsonString);
+        ResponseEntity<ZiJinCrawlerImageUploadInfoListResponse> responseEntity = requestComponent.post(RequestUrl.UPLOAD_IMAGE_INFO_LIST.getRequestUrl(ziJinCrawlerProperties.getBaseUrl()), jsonString, ZiJinCrawlerImageUploadInfoListResponse.class, httpHeaders);
+        return responseEntity.getBody();
+    }
+
+
 
     /**
      * 获取支付链接
@@ -368,7 +385,7 @@ public class ZiJinCrawlerRequestComponent {
      */
     public ZiJinCrawlerQueryOrderStatusResponse queryOrderStatus(ZiJinCrawlerQueryOrderStatusRequest ziJinCrawlerQueryOrderStatusRequest, HttpHeaders headers) throws IOException {
         //设置headers
-        HttpHeaders httpHeaders = setHttpHeaders1();
+        HttpHeaders httpHeaders = setHttpHeaders();
 
         String jsonString = JSON.toJSONString(ziJinCrawlerQueryOrderStatusRequest);
         log.info("ziJinCrawlerQueryOrderStatusRequest请求参数的值:{}", jsonString);
@@ -512,6 +529,7 @@ public class ZiJinCrawlerRequestComponent {
         headers.set("sec-ch-ua-mobile", "?0");
         headers.set("sec-ch-ua-platform", "\"Windows\"");
         headers.set("x-csrf-token", "CrwLEmSfUevAb8PcN7kXff-I");
+        headers.set("content-type", "application/json");
         return headers;
     }
 

+ 7 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/entity/request/ZiJinCrawlerQueryOrderStatusRequest.java

@@ -77,4 +77,11 @@ public class ZiJinCrawlerQueryOrderStatusRequest implements Serializable {
     @JsonProperty("orderOrigin")
     @JSONField(ordinal = 8)
     private String orderOrigin;
+
+    /**
+     * 许可证号:传车牌号
+     */
+    @JsonProperty("licenseNo")
+    @JSONField(ordinal = 9)
+    private String licenseNo;
 }

+ 1 - 1
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/entity/request/ZiJinCrawlerQuotationRequest.java

@@ -353,7 +353,7 @@ public class ZiJinCrawlerQuotationRequest implements Serializable {
         private String renewalFlag;
 
         /**
-         *
+         * 续保标志
          */
         @JsonProperty("renewalFlagCI")
         private String renewalFlagCI;

+ 54 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/entity/request/ZiJinCrawlerUploadImageInfoListRequest.java

@@ -0,0 +1,54 @@
+package com.jzg.quotation.zijin.crawler.entity.request;
+
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quotation.zijin.api.entity.request.UploadFileRequest;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description:
+ * @author:
+ * @date:
+ **/
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class ZiJinCrawlerUploadImageInfoListRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 5189448987075578164L;
+
+    @JsonProperty("itemFileDataList")
+    private List<ItemFileDataListDTO> itemFileDataList;
+
+    @JsonProperty("orderId")
+    private String orderId;
+
+
+    @NoArgsConstructor
+    @Data
+    @Builder
+    public static class ItemFileDataListDTO implements Serializable {
+
+        @Serial
+        private static final long serialVersionUID = -8088228995799949015L;
+
+        @JsonProperty("fileId")
+        private String fileId;
+
+        @JsonProperty("fileType")
+        private String fileType;
+
+        public ItemFileDataListDTO(String fileId, String fileType) {
+            this.fileId = fileId;
+            this.fileType = fileType;
+        }
+    }
+}

+ 37 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/entity/response/ZiJinCrawlerImageUploadInfoListResponse.java

@@ -0,0 +1,37 @@
+package com.jzg.quotation.zijin.crawler.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @description: 紫金财险爬虫影像上传列表响应实体类
+ * @author:
+ * @date:
+ **/
+@Data
+public class ZiJinCrawlerImageUploadInfoListResponse implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -7410523311993599009L;
+
+    /**
+     * 响应状态码
+     */
+    @JsonProperty("rtnCode")
+    private String rtnCode;
+
+    /**
+     * 响应状态描述
+     */
+    @JsonProperty("rtnMsg")
+    private String rtnMsg;
+
+    /**
+     * 影像ID
+     */
+    @JsonProperty("recoFailedImageIdList")
+    private String recoFailedImageIdList;
+}

+ 3 - 2
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/enums/RequestUrl.java

@@ -23,8 +23,8 @@ public enum RequestUrl implements CrawlerRequestUrlStandard {
     GET_ACTUAL_VALUE("/api/v1/insurance/public/vehicle-proposal/vehicleModel/getActualValue", "获取车辆实际价值"),
     PRICE("/api/v1/vehicle/proposal-process/premium-calculation", "计算保费"),
     SAVE_QUOTE_INFORMATION("/dpgateway/insurance-order/order/save", "保存报价信息"),
-    // 报价提示转保标志,紫金系统调用该接口自动输入验证码跳过转保标志继续报价(二维码是报价接口失败返回:basePart.question)
-    SKIP_SING("/egg/controller/common/recognizeCodes", "跳过转保标志"),
+    // 报价提示转保标志,紫金系统调用该接口自动输入验证码跳过转保标志继续报价
+    SKIP_SING("/egg/controller/common/recognizeCodes", "转保标志"),
     SAVE_PROPOSAL_ORDER("/kscd-frontend/order/saveProposal", "保存投保单"),
     // 税务登记证号
     GET_TAX_REGISTRY_NUMBER("/temp/api/v1/insurance/public/taxInfo/getTaxRegistryNumber", "获取税务登记证号"),
@@ -32,6 +32,7 @@ public enum RequestUrl implements CrawlerRequestUrlStandard {
     UNDERWRITING("/kscd-frontend/carAutoUnderwriting", "核保"),
     //上传影像
     UPLOAD_IMAGE("/dpgateway/insurance-order/carInsurance/uploadFile", "上传影像"),
+    UPLOAD_IMAGE_INFO_LIST("/dpgateway/insurance-order/carInsurance/uploadImageInfoList", "上传影像列表"),
     // 支付链接
     QRCODE("/api/v1/insurance/public/paymentApplication/pushMessage", "支付二维码"),
     // 查询订单状态

+ 2 - 1
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/service/ZiJinCrawlerOrderService.java

@@ -3,6 +3,7 @@ package com.jzg.quotation.zijin.crawler.service;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.quotation.zijin.crawler.entity.po.ZiJinCrawlerOrder;
 import com.jzg.quotation.zijin.crawler.entity.response.ZiJinCrawlerQuotationResponse;
+import com.jzg.quotation.zijin.crawler.entity.response.ZiJinCrawlerSaveProposalResponse;
 
 /**
  * @description: 紫金财险爬虫订单服务
@@ -17,7 +18,7 @@ public interface ZiJinCrawlerOrderService {
      * @param ziJinCrawlerQuotationResponse
      * @param success
      */
-    void save(QuoteVo quoteVo, ZiJinCrawlerQuotationResponse ziJinCrawlerQuotationResponse, boolean success);
+    void save(QuoteVo quoteVo, ZiJinCrawlerQuotationResponse ziJinCrawlerQuotationResponse, ZiJinCrawlerSaveProposalResponse ziJinCrawlerSaveProposalResponse, String orderId, boolean success);
 
     /**
      * 根据系统内部订单号查询紫金财险爬虫订单

+ 11 - 12
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/crawler/service/impl/ZiJinCrawlerOrderServiceImpl.java

@@ -3,6 +3,7 @@ package com.jzg.quotation.zijin.crawler.service.impl;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.quotation.zijin.crawler.entity.po.ZiJinCrawlerOrder;
 import com.jzg.quotation.zijin.crawler.entity.response.ZiJinCrawlerQuotationResponse;
+import com.jzg.quotation.zijin.crawler.entity.response.ZiJinCrawlerSaveProposalResponse;
 import com.jzg.quotation.zijin.crawler.repository.ZiJinCrawlerOrderRepository;
 import com.jzg.quotation.zijin.crawler.service.ZiJinCrawlerOrderService;
 import lombok.RequiredArgsConstructor;
@@ -23,29 +24,27 @@ public class ZiJinCrawlerOrderServiceImpl implements ZiJinCrawlerOrderService {
 
     /**
      * 保存紫金财险爬虫订单
+     *
      * @param quoteVo
      * @param ziJinCrawlerQuotationResponse
      * @param success
      */
     @Override
-    public void save(QuoteVo quoteVo, ZiJinCrawlerQuotationResponse ziJinCrawlerQuotationResponse, boolean success) {
+    public void save(QuoteVo quoteVo, ZiJinCrawlerQuotationResponse ziJinCrawlerQuotationResponse, ZiJinCrawlerSaveProposalResponse ziJinCrawlerSaveProposalResponse, String orderId, boolean success) {
         ZiJinCrawlerOrder order = new ZiJinCrawlerOrder();
         order.setOrdersNo(quoteVo.getOrder().getOrdersNo());
         order.setOrderNo(ziJinCrawlerQuotationResponse.getOrderNo());
-        /*order.setOrderNo(ziJinCrawlerQuotationResponse.getData().getBusUniqueId());
-        order.setBusUniqueId(ziJinCrawlerQuotationResponse.getData().getBusUniqueId());
+        order.setBusUniqueId(orderId);
         order.setQuoteSuccess(success);
-
-        if (ziJinCrawlerQuotationResponse.getData().getTrafficPolicy() != null) {
-            order.setCiApplyNo(ziJinCrawlerQuotationResponse.getData().getTrafficPolicy().getApplicationNo());
-            order.setCiPremium(ziJinCrawlerQuotationResponse.getData().getTrafficPolicy().getPremium());
+        if (success && ziJinCrawlerSaveProposalResponse != null) {
+            order.setCiApplyNo(ziJinCrawlerSaveProposalResponse.getData().getProposalNoCI());
+            order.setCiPolicyNo(ziJinCrawlerSaveProposalResponse.getData().getPolicyNoCI());
+            // order.setCiPremium(ziJinCrawlerQuotationResponse.getData().getTrafficPolicy().getPremium());
+            order.setSyApplyNo(ziJinCrawlerSaveProposalResponse.getData().getProposalNo());
+            order.setBiPolicyNo(ziJinCrawlerSaveProposalResponse.getData().getPolicyNo());
+            // order.setBiPremium(ziJinCrawlerQuotationResponse.getData().getBusinessPolicy().getPremium());
         }
 
-        if (ziJinCrawlerQuotationResponse.getData().getBusinessPolicy() != null) {
-            order.setSyApplyNo(ziJinCrawlerQuotationResponse.getData().getBusinessPolicy().getApplicationNo());
-            order.setBiPremium(ziJinCrawlerQuotationResponse.getData().getBusinessPolicy().getPremium());
-        }*/
-
         order.setCreateTime(LocalDateTime.now());
         order.setUpdateTime(LocalDateTime.now());
         if (!success) {

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

@@ -13,12 +13,14 @@ import com.jzg.commons.entity.quote.vo.base.OrderBase;
 import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
-import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
+import com.jzg.quotation.commons.utils.DateTimeUtil;
 import com.jzg.quotation.zijin.api.constant.enums.MotorVehicleInsuranceEnum;
 import com.jzg.quotation.zijin.api.constant.enums.RiskCodeEnum;
+import com.jzg.quotation.zijin.api.entity.request.UploadImageInfoListRequest;
+import com.jzg.quotation.zijin.crawler.build.ZiJinCrawlerQuoteRequestBuild;
 import com.jzg.quotation.zijin.crawler.build.ZiJinCrawlerQuoteResultsVoBuild;
 import com.jzg.quotation.zijin.crawler.build.ZiJinCrawlerSaveQuoteInfoRequestBuild;
 import com.jzg.quotation.zijin.crawler.component.ZiJinBuildingAttributionInformation;
@@ -33,7 +35,6 @@ import com.jzg.quotation.zijin.crawler.service.ZiJinCrawlerOrderService;
 import com.jzg.quotation.zijin.crawler.service.ZiJinCrawlerQuoteProcessService;
 import com.jzg.quotation.zijin.crawler.service.ZiJinCrawlerRequest;
 import com.jzg.quotation.zijin.crawler.util.Base64ImageExtractor;
-import com.jzg.quotation.zijin.crawler.util.RS6Item;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
@@ -72,7 +73,7 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
 
     private final ZiJinCrawlerQuoteProcessService ziJinCrawlerQuoteProcessService;
 
-    private final PlatformClient platformClient;
+    private final ZiJinCrawlerSaveQuoteInfoRequestBuild ziJinCrawlerSaveQuoteInfoRequestBuild;
 
 
     /**
@@ -206,32 +207,23 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
             // 转保标志
             if (ResponseCode.R_0001.getCode().equals(ziJinCrawlerQuotationResponse.getRtnCode())) {
                 if (ziJinCrawlerQuotationResponse.getBasePart() != null) {
-                    ZiJinCrawlerRecognizeCodesResponse ziJinCrawlerRecognizeCodesResponse = ziJinCrawlerRequestComponent.recognizeCodes(ZiJinCrawlerSaveQuoteInfoRequestBuild.buildRecognizeCodesRequests(ziJinCrawlerQuotationResponse), headers);
+                    ZiJinCrawlerRecognizeCodesResponse ziJinCrawlerRecognizeCodesResponse = ziJinCrawlerRequestComponent.recognizeCodes(ZiJinCrawlerQuoteRequestBuild.buildRecognizeCodesRequests(ziJinCrawlerQuotationResponse), headers);
                     log.info("ziJinCrawlerRecognizeCodesResponse参数的值:{}", JSON.toJSONString(ziJinCrawlerRecognizeCodesResponse));
-                    // 再次调用报价接口
+                    // 验证码通过后再次调用报价接口
                     if (ResponseCode.R_0000.getCode().equals(ziJinCrawlerRecognizeCodesResponse.getRtnCode())) {
-                        List<ZiJinCrawlerRecognizeCodesResponse.Results> results = ziJinCrawlerRecognizeCodesResponse.getResults();
-                        for (ZiJinCrawlerRecognizeCodesResponse.Results result : results) {
-                            if ("question".equals(result.getSerialNo())) {
-                                ziJinCrawlerQuotationRequest.getBaseInfo().setAnswer(result.getResult());
-                            }
-                            if ("questionCI".equals(result.getSerialNo())) {
-                                ziJinCrawlerQuotationRequest.getBaseInfo().setAnswerCI(result.getResult());
-                            }
-                            ziJinCrawlerQuotationRequest.getBaseInfo().setRenewalFlagCI("1");
-                        }
+                        ZiJinCrawlerQuoteRequestBuild.buildReQuote(ziJinCrawlerQuotationResponse, ziJinCrawlerRecognizeCodesResponse, ziJinCrawlerQuotationRequest);
                         ziJinCrawlerQuotationResponse = ziJinCrawlerRequestComponent.quotation(ziJinCrawlerQuotationRequest, headers);
                     }
                 }
             }
             // 4.0 处理报价失败
             if (!ResponseCode.R_0000.getCode().equals(ziJinCrawlerQuotationResponse.getRtnCode())) {
-                ziJinCrawlerOrderService.save(quoteVo, ziJinCrawlerQuotationResponse, false);
+                ziJinCrawlerOrderService.save(quoteVo, ziJinCrawlerQuotationResponse, null, ziJinCrawlerQuotationRequest.getOrderId(), false);
                 return ZiJinCrawlerQuoteResultsVoBuild.buildQuoteFailResultsVo(ziJinCrawlerQuotationResponse);
             } else {
                 // 报价成功
                 // 保存报价信息
-                ZiJinCrawlerSaveQuoteInfoRequest ziJinCrawlerSaveQuoteInfoRequest = buildSaveQuoteInfoRequest(quoteVo, ziJinCrawlerQuotationRequest, ziJinCrawlerQuotationResponse);
+                ZiJinCrawlerSaveQuoteInfoRequest ziJinCrawlerSaveQuoteInfoRequest = ziJinCrawlerSaveQuoteInfoRequestBuild.buildSaveQuoteInfoRequest(quoteVo, ziJinCrawlerQuotationRequest, ziJinCrawlerQuotationResponse);
                 log.info("ziJinCrawlerSaveQuoteInfoRequest参数的值:{}", JSON.toJSONString(ziJinCrawlerSaveQuoteInfoRequest));
                 ZiJinCrawlerSaveQuoteInfoResponse ziJinCrawlerSaveQuoteInfoResponse = ziJinCrawlerRequestComponent.saveQuoteInformation(ziJinCrawlerSaveQuoteInfoRequest, headers);
                 log.info("ziJinCrawlerSaveQuoteInfoResponse参数的值:{}", JSON.toJSONString(ziJinCrawlerSaveQuoteInfoResponse));
@@ -244,7 +236,7 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
                 ZiJinCrawlerSaveProposalResponse ziJinCrawlerSaveProposalResponse = ziJinCrawlerRequestComponent.saveProposal(ziJinCrawlerSaveProposalRequest, headers);
                 log.info("ziJinCrawlerSaveProposalResponse参数的值:{}", JSON.toJSONString(ziJinCrawlerSaveProposalResponse));
 
-                ziJinCrawlerOrderService.save(quoteVo, ziJinCrawlerQuotationResponse, true);
+                ziJinCrawlerOrderService.save(quoteVo, ziJinCrawlerQuotationResponse, ziJinCrawlerSaveProposalResponse, ziJinCrawlerQuotationRequest.getOrderId(), true);
                 return ZiJinCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo.getOrder().getOrdersNo(), quoteVo, ziJinCrawlerQuotationResponse);
             }
         } catch (Exception e) {
@@ -269,7 +261,7 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
 
         ZiJinCrawlerUnderwritingResponse ziJinCrawlerUnderwritingResponse = null;
         try {
-            ZiJinCrawlerUnderwritingRequest ziJinCrawlerUnderwritingRequest = new ZiJinCrawlerUnderwritingRequest("KSCD_PROD", ziJinCrawlerOrder.getOrdersNo());
+            ZiJinCrawlerUnderwritingRequest ziJinCrawlerUnderwritingRequest = new ZiJinCrawlerUnderwritingRequest("KSCD_PROD", ziJinCrawlerOrder.getOrderNo());
             // 核保
             ziJinCrawlerUnderwritingResponse = ziJinCrawlerRequestComponent.underwriting(ziJinCrawlerUnderwritingRequest, headers);
             log.info("ziJinCrawlerUnderwritingResponse参数的值:{}", JSON.toJSONString(ziJinCrawlerUnderwritingResponse));
@@ -381,7 +373,7 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
             }
 
             // 单个上传影像
-            List<ZiJinCrawlerSaveQuoteInfoRequest.ItemFileData.FileInfo> dataDTOS = new ArrayList<>();
+            List<ZiJinCrawlerUploadImageInfoListRequest.ItemFileDataListDTO> dataDTOS = new ArrayList<>();
 
             for (InsuranceImageVo insuranceImageVo : insuranceUploadImageVo.getImageVoList()) {
                 if (insuranceImageVo == null) {
@@ -403,24 +395,21 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
 
                 // 构建上传影像文件请求参数
                 ZiJinCrawlerImageUploadRequest ziJinCrawlerImageUploadRequest = new ZiJinCrawlerImageUploadRequest();
-
                 // 根据图片格式动态设置MIME类型
                 String imageName = imageDTO.getImageName();
                 String mimeType = Base64ImageExtractor.getImageMimeType(imageName);
                 ziJinCrawlerImageUploadRequest.setFileBase64(mimeType + imageDTO.getImageBase64Str());
                 ziJinCrawlerImageUploadRequest.setFileName(imageName);
-
                 // 设置文件类型,转换为紫金对应的文件类型
                 String fileType = getFileTypeByImageCode(insuranceImageVo.getImageCode());
                 ziJinCrawlerImageUploadRequest.setFileType(fileType);
                 ziJinCrawlerImageUploadRequest.setOrderNo(ziJinCrawlerOrder.getOrderNo());
-
                 ZiJinCrawlerImageUploadResponse ziJinCrawlerImageUploadResponse = ziJinCrawlerRequestComponent.uploadImage(ziJinCrawlerImageUploadRequest, headers);
                 log.info("影像上传响应,订单号:{},响应:{}", ziJinCrawlerOrder.getOrderNo(), JSON.toJSONString(ziJinCrawlerImageUploadResponse));
 
                 if ("0000".equals(ziJinCrawlerImageUploadResponse.getRtnCode())) {
 
-                    ZiJinCrawlerSaveQuoteInfoRequest.ItemFileData.FileInfo fileInfo = ZiJinCrawlerSaveQuoteInfoRequest.ItemFileData.FileInfo.builder()
+                    ZiJinCrawlerUploadImageInfoListRequest.ItemFileDataListDTO fileInfo = ZiJinCrawlerUploadImageInfoListRequest.ItemFileDataListDTO.builder()
                             .fileId(ziJinCrawlerImageUploadResponse.getFileId())
                             .fileType(fileType)
                             .build();
@@ -429,7 +418,6 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
 
                     log.info("影像上传成功,订单号:{},影像编码:{},影像ID:{}", ziJinCrawlerOrder.getOrderNo(), insuranceImageVo.getImageCode(), ziJinCrawlerImageUploadResponse.getFileId());
                 } else {
-
                     String errorMsg = String.format("影像上传失败,订单号:%s,影像编码:%s,错误码:%s,错误信息:%s", ziJinCrawlerOrder.getOrderNo(), insuranceImageVo.getImageCode(), ziJinCrawlerImageUploadResponse.getRtnCode(), ziJinCrawlerImageUploadResponse.getRtnMsg());
                     log.error(errorMsg);
                     throw new RuntimeException(errorMsg);
@@ -440,6 +428,10 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
                 return;
             }
 
+            ZiJinCrawlerUploadImageInfoListRequest ziJinCrawlerUploadImageInfoListRequest = new ZiJinCrawlerUploadImageInfoListRequest(dataDTOS, ziJinCrawlerOrder.getBusUniqueId());
+            // 保存影像信息
+            ziJinCrawlerRequestComponent.uploadImageInfoList(ziJinCrawlerUploadImageInfoListRequest, headers);
+
             // 缓存影像信息
             ziJinCrawlerCacheComponent.cacheImagesInfo(ziJinCrawlerOrder.getOrderNo(), dataDTOS);
 
@@ -456,19 +448,19 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
      * @return 文件类型
      */
     private String getFileTypeByImageCode(String imageCode) {
-        if (!StringUtils.hasLength(imageCode)) {
-            return "9";
-        }
         switch (imageCode) {
             case "C01":
-                return "9";
             case "D01":
                 return "56";
             case "C02":
             case "D02":
+            case "C03":
+            case "D03":
+            case "C04":
+            case "D04":
                 return "53";
             default:
-                return "9";
+                return "";
         }
     }
 
@@ -495,12 +487,13 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
             // 设置请求参数
             ziJinCrawlerQueryOrderStatusRequest.setOrderStatus(new String[]{});
             ziJinCrawlerQueryOrderStatusRequest.setOrderNo(ziJinCrawlerOrder.getOrderNo());
-            ziJinCrawlerQueryOrderStatusRequest.setUpdateTimeBegin("");
-            ziJinCrawlerQueryOrderStatusRequest.setUpdateTimeEnd("");
+            ziJinCrawlerQueryOrderStatusRequest.setLicenseNo(orderStatusVo.getCarInfo().getLicenseNo());
+            ziJinCrawlerQueryOrderStatusRequest.setUpdateTimeBegin(DateTimeUtil.getLocalDateStr());
+            ziJinCrawlerQueryOrderStatusRequest.setUpdateTimeEnd(DateTimeUtil.getLocalDateStr());
             ziJinCrawlerQueryOrderStatusRequest.setPageNum(1);
             ziJinCrawlerQueryOrderStatusRequest.setPageSize(10);
             ziJinCrawlerQueryOrderStatusRequest.setProductCodeList(new String[]{});
-            ziJinCrawlerQueryOrderStatusRequest.setOrderOrigin("KSCD_PROD,FH_PROD,DP_WXMP,DP_ZYB,RENEWAL_PROD,DP_ZNCD,SHHTB_B");
+            ziJinCrawlerQueryOrderStatusRequest.setOrderOrigin("KSCD_PROD,FH_PROD,DP_WXMP,DP_ZYB,RENEWAL_PROD,DP_ZNCD,SHHTB_B,QYYGTB");
 
             ZiJinCrawlerQueryOrderStatusResponse ziJinCrawlerQueryOrderStatusResponse = ziJinCrawlerRequestComponent.queryOrderStatus(ziJinCrawlerQueryOrderStatusRequest, headers);
             log.info("ziJinCrawlerQueryOrderStatusResponse对象的值:{}", JSON.toJSONString(ziJinCrawlerQueryOrderStatusResponse));
@@ -513,6 +506,10 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
                 orderStatusEnum = InsOrderStatusEnum.valueOf("ORDER_CLOSE");
                 orderStatus = orderStatusEnum.getCode();
             }
+            if ("9".equals(orderStatus)) {
+                orderStatusEnum = InsOrderStatusEnum.valueOf("AUDIT_FAIL");
+                orderStatus = orderStatusEnum.getCode();
+            }
             OrderStatusResultVo orderStatusResultVo = new OrderStatusResultVo();
             // 将订单状态转换为枚举类型
             orderStatusResultVo.setOrderStatus(orderStatusEnum);
@@ -802,11 +799,15 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
         baseInfo.setHanderCode("214003263");
         baseInfo.setHanderName("程涛");
         baseInfo.setDemandNo("01ZKIC140026051910017933666448");
-        baseInfo.setDemandNoCI("01ZKIC140026051910017933666448");// 这个先放开看行不
+        if (quoteVo.getBiRiskInfoVo() != null) {
+            baseInfo.setDemandNoCI("01ZKIC140026051910017933666448");// 这个先放开看行不
+        }
         // 经测试:燃油: 单交设为2,交三设为0
         baseInfo.setCalculateFlag(quoteVo.getBiRiskInfoVo() == null ? "2" : "0");
-        // 经测试:燃油:单交设为"",交三设为1
+        // 经测试:燃油:单交设为"",交三设为1?。 这个是续保标志,延顺日期的时候设置为1(完了测试一下)
         baseInfo.setRenewalFlag(quoteVo.getBiRiskInfoVo() == null ? "" : "1");
+        // 经测试:燃油:单交设为"",交三设为1?。 这个是续保标志,延顺日期的时候设置为1(完了测试一下)
+        baseInfo.setRenewalFlagCI(quoteVo.getBiRiskInfoVo() == null ? "" : "1");
         return baseInfo;
     }
 
@@ -1122,7 +1123,6 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
                 item.setUnitAmount(kindItem.getUnitAmount());
                 item.setServiceTimes(kindItem.getServiceTimes());
                 item.setQuantity(ObjectUtils.isEmpty(kindItem.getQuantity()) ? null : Integer.parseInt(kindItem.getQuantity()));
-                item.setDeductibleRate(ObjectUtils.isEmpty(kindItem.getDeductibleRate()) ? null : Integer.parseInt(kindItem.getDeductibleRate()));
                 itemKindList.add(item);
             }
         }
@@ -1731,97 +1731,7 @@ public class ZiJinCrawlerRequestImpl implements ZiJinCrawlerRequest {
         return profitDataList;
     }
 
-    /**
-     * 构建保存报价信息请求对象
-     *
-     * @return 构建完成的保存报价信息请求对象
-     */
-    private ZiJinCrawlerSaveQuoteInfoRequest buildSaveQuoteInfoRequest(QuoteVo quoteVo, ZiJinCrawlerQuotationRequest ziJinCrawlerQuotationRequest, ZiJinCrawlerQuotationResponse ziJinCrawlerQuotationResponse) {
-        ZiJinCrawlerSaveQuoteInfoRequest ziJinCrawlerSaveQuoteInfoRequest = new ZiJinCrawlerSaveQuoteInfoRequest();
-
-        // 设置代理人代码
-        ziJinCrawlerSaveQuoteInfoRequest.setAgentCode(ziJinCrawlerQuotationRequest.getBaseInfo().getAgentCode());
-
-        // 设置订单ID
-        ziJinCrawlerSaveQuoteInfoRequest.setOrderId(ziJinCrawlerQuotationResponse.getOrderId());
-
-        // 设置订单号
-        ziJinCrawlerSaveQuoteInfoRequest.setOrderNo(ziJinCrawlerQuotationResponse.getOrderNo());
-
-        // 设置基础信息
-        ziJinCrawlerSaveQuoteInfoRequest.setBaseInfo(ZiJinCrawlerSaveQuoteInfoRequestBuild.buildSaveBaseInfo(quoteVo, ziJinCrawlerQuotationRequest, ziJinCrawlerQuotationResponse));
-
-        // 设置车主信息
-        ziJinCrawlerSaveQuoteInfoRequest.setCarOwnerInfo(ZiJinCrawlerSaveQuoteInfoRequestBuild.buildSaveCarOwnerInfo(quoteVo, ziJinCrawlerQuotationRequest));
-
-        // 设置车险附加险信息列表
-        ziJinCrawlerSaveQuoteInfoRequest.setCarPolicySubInfoList(ZiJinCrawlerSaveQuoteInfoRequestBuild.buildSaveCarPolicySubInfo(ziJinCrawlerQuotationRequest));
-
-        // 设置附加险列表
-        ziJinCrawlerSaveQuoteInfoRequest.setAttachRiskList(new ArrayList<>());
 
-        // 设置 投保人/被保人 列表
-        ziJinCrawlerSaveQuoteInfoRequest.setInsuredList(ZiJinCrawlerSaveQuoteInfoRequestBuild.buildSaveInsuredList(quoteVo, ziJinCrawlerQuotationRequest));
 
-        // 设置险别明细列表
-        ziJinCrawlerSaveQuoteInfoRequest.setItemKindList(ZiJinCrawlerSaveQuoteInfoRequestBuild.buildSaveItemKindList(ziJinCrawlerQuotationResponse));
 
-        // 设置收费信息列表
-        ziJinCrawlerSaveQuoteInfoRequest.setChargingInfoList(new ArrayList<>());
-
-        // 设置订单来源
-        ziJinCrawlerSaveQuoteInfoRequest.setOrderOrigin("KSCD_PROD");
-
-        // 设置产品代码
-        ziJinCrawlerSaveQuoteInfoRequest.setProductCode("CAR20190517");
-
-        // 设置产品名称
-        ziJinCrawlerSaveQuoteInfoRequest.setProductName("机动车保险");
-
-        // 设置提交信息
-        ziJinCrawlerSaveQuoteInfoRequest.setSubmitInfo(new HashMap<>());
-
-        // 设置车船税减免信息
-        ziJinCrawlerSaveQuoteInfoRequest.setTaxRelifInfo(ZiJinCrawlerSaveQuoteInfoRequestBuild.buildSaveTaxRelifInfo(ziJinCrawlerQuotationResponse));
-
-        // 设置终端ID
-        ziJinCrawlerSaveQuoteInfoRequest.setTerminalId("KSCD");
-
-        // 设置终端类型
-        ziJinCrawlerSaveQuoteInfoRequest.setTerminalIdType("Vue-PC");
-
-        // 设置投保标识
-        ziJinCrawlerSaveQuoteInfoRequest.setInsuranceSign("0");
-
-        // 设置车辆信息
-        ziJinCrawlerSaveQuoteInfoRequest.setVehicleInfo(ZiJinCrawlerSaveQuoteInfoRequestBuild.buildVehicleInfo(ziJinCrawlerQuotationRequest, ziJinCrawlerQuotationResponse));
-
-        // 设置车辆设备保费列表
-        ziJinCrawlerSaveQuoteInfoRequest.setCarDevicePremiumDtoList(new ArrayList<>());
-
-        // 设置约定列表
-        ziJinCrawlerSaveQuoteInfoRequest.setEngageList(new ArrayList<>());
-
-        // 设置附件文件列表
-        ziJinCrawlerSaveQuoteInfoRequest.setItemFileDataList(buildSaveFileDataList(ziJinCrawlerQuotationResponse));
-
-        // 设置订单附加信息
-        ziJinCrawlerSaveQuoteInfoRequest.setOrderAttachInfo(ZiJinCrawlerSaveQuoteInfoRequestBuild.buildSaveOrderAttachInfo(quoteVo, ziJinCrawlerQuotationRequest));
-
-        // 设置是否包含子机构
-        ziJinCrawlerSaveQuoteInfoRequest.setIsIncludeSubCom(1);
-
-        return ziJinCrawlerSaveQuoteInfoRequest;
-    }
-
-    private List<ZiJinCrawlerSaveQuoteInfoRequest.ItemFileData> buildSaveFileDataList(ZiJinCrawlerQuotationResponse ziJinCrawlerQuotationResponse) {
-        // 获取图片上传信息
-        List<ZiJinCrawlerSaveQuoteInfoRequest.ItemFileData.FileInfo> imagesInfoList = ziJinCrawlerCacheComponent.getImagesInfo(ziJinCrawlerQuotationResponse.getOrderNo());
-        return Optional.ofNullable(ziJinCrawlerQuotationResponse.getItemKindList()).orElseGet(Collections::emptyList).stream().map(itemKindListDTO ->
-                ZiJinCrawlerSaveQuoteInfoRequest.ItemFileData.builder()
-                        .riskCode(itemKindListDTO.getRiskCode())
-                        .fileList(imagesInfoList)
-                        .build()
-        ).toList();
-    }
 }