소스 검색

update
1. 华农财险报价逻辑修改
2. 报价订单生成逻辑修改

wks 1 년 전
부모
커밋
368f61f926
13개의 변경된 파일과 761개의 추가작업 그리고 122개의 파일을 삭제
  1. 2 1
      commons/src/main/java/com/jzg/commons/constants/quote/enums/base/QuoteRuleGroup.java
  2. 8 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/TimeProcessing.java
  3. 11 0
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/component/HuaNongCrawlerRequestComponent.java
  4. 1 0
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/constant/enums/RequestUrl.java
  5. 2 1
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerActualValueRequestRequest.java
  6. 110 0
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerPrecisionServiceSearchRequest.java
  7. 376 105
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerQuotedPriceRequestRequest.java
  8. 1 0
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/response/HuaNongCrawlerModelsQueryResponse.java
  9. 209 0
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/response/HuaNongCrawlerPrecisionServiceSearchResponse.java
  10. 23 8
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerRequestImpl.java
  11. 1 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/converter/QuoteInfoConverter.java
  12. 13 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  13. 4 5
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/util/Base64Tool.java

+ 2 - 1
commons/src/main/java/com/jzg/commons/constants/quote/enums/base/QuoteRuleGroup.java

@@ -29,7 +29,8 @@ public enum QuoteRuleGroup {
     LICENSE_KIND("LICENSE_KIND", "号牌种类"),
     // 人员信息
     POLICYHOLDER_INSURED_RELATIONSHIP("POLICYHOLDER_INSURED_RELATIONSHIP", "投被保人关系"),
-    GENDER("GENDER", "性别");
+    GENDER("GENDER", "性别"),
+    DOCUMENTS_TYPE("DOCUMENTS_TYPE", "证件类型代码");
 
     private final String code;
 

+ 8 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/TimeProcessing.java

@@ -50,6 +50,10 @@ public final class TimeProcessing {
         return LocalDateTime.of(LocalDate.parse(date, DATE_FORMATTER), LocalTime.MIN).format(DATE_TIME_FORMATTER);
     }
 
+    public static String dateToDateTimeMax(String date) {
+        return LocalDateTime.of(LocalDate.parse(date, DATE_FORMATTER), LocalTime.MAX).format(DATE_TIME_FORMATTER);
+    }
+
     /**
      * 一年以后减1秒得时间
      *
@@ -113,6 +117,10 @@ public final class TimeProcessing {
         return LocalDate.now().format(DATE_FORMATTER);
     }
 
+    public static String nowDateTime() {
+        return LocalDateTime.now().format(DATE_TIME_FORMATTER);
+    }
+
     /**
      * 明天的 明天0点0分0秒
      *

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

@@ -135,6 +135,17 @@ public class HuaNongCrawlerRequestComponent {
         return post(MODELS_QUERY, request, HuaNongCrawlerModelsQueryResponse.class, headers);
     }
 
+    /**
+     * 精准查询
+     *
+     * @param request 精准查询请求
+     * @param headers 请求头
+     * @return 精准查询响应
+     */
+    public HuaNongCrawlerPrecisionServiceSearchResponse precisionServiceSearch(HuaNongCrawlerPrecisionServiceSearchRequest request, HttpHeaders headers) {
+        return post(PRECISION_SERVICE_SEARCH, request, HuaNongCrawlerPrecisionServiceSearchResponse.class, headers);
+    }
+
     /**
      * 计算折旧价
      *

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

@@ -24,6 +24,7 @@ public enum RequestUrl implements CrawlerRequestUrlStandard {
     USER_TYPE_AND_PROXY_INFO_QUERY("userTypeAndProxyinfoQuery", "渠道类型和代理信息", "userTypeAndProxyinfoQuery"),
     // 报价
     MODELS_QUERY("ModelsQuery", "车型查询", "modelsQuery"),
+    PRECISION_SERVICE_SEARCH("QUERYCARMODELRISK", "精准服务搜索", "precisionServiceSearch.do"),
     ACTUAL_VALUE("ActualValue", "折旧价计算", "actualValue"),
     QUOTED_PRICE("QuotedPrice", "保费计算", "QuotedPrice"),
     SAVE("Save", "保存订单", "Save"),

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

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.quotation.commons.utils.TimeProcessing;
 import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerModelsQueryResponse;
+import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerPrecisionServiceSearchResponse;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
@@ -49,7 +50,7 @@ public class HuaNongCrawlerActualValueRequestRequest implements HuaNongHeadReque
     @JsonProperty("EnergyType")
     private String energyType;
 
-    public HuaNongCrawlerActualValueRequestRequest(String token, String loginCom, HuaNongCrawlerModelsQueryResponse.CarModelDTO carModelDTO, CarInfoVo carInfoVo) {
+    public HuaNongCrawlerActualValueRequestRequest(String token, String loginCom, HuaNongCrawlerPrecisionServiceSearchResponse.CarModelDTO carModelDTO, CarInfoVo carInfoVo) {
         this.head = new HuaNongCrawlerRequestBaseHead(token);
         this.localModelCode = carModelDTO.getFullCarData().getLocalModelCode();
         this.approvedPassengersCapacity = Integer.valueOf(carInfoVo.getSeatCount());

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

@@ -0,0 +1,110 @@
+package com.jzg.quotation.huanong.crawler.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.commons.util.StringUtils;
+import com.jzg.quotation.commons.utils.TimeProcessing;
+import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerModelsQueryResponse;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+
+
+/**
+ * @description: 华农财险 精准查询 请求
+ * @author: wenks
+ * @date: 2025/6/20 17:36
+ **/
+@NoArgsConstructor
+@Data
+public class HuaNongCrawlerPrecisionServiceSearchRequest implements HuaNongHeadRequest {
+
+    @Serial
+    private static final long serialVersionUID = -244103644827656541L;
+
+    @JsonProperty("queryCarModilePureRiskReqModule")
+    private QueryCarModilePureRiskReqModuleDTO queryCarModilePureRiskReqModule;
+
+    @JsonProperty("head")
+    private HuaNongCrawlerRequestBaseHead head;
+
+    public HuaNongCrawlerPrecisionServiceSearchRequest(String token, String loginCom, CarInfoVo carInfoVo, HuaNongCrawlerModelsQueryResponse.CarModelDTO carModelDTO) {
+        this.queryCarModilePureRiskReqModule = new QueryCarModilePureRiskReqModuleDTO(loginCom, carInfoVo, carModelDTO);
+        this.head = new HuaNongCrawlerRequestBaseHead(token);
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class QueryCarModilePureRiskReqModuleDTO {
+
+        @JsonProperty("comCode")
+        private String comCode;
+        @JsonProperty("exhaustScale")
+        private Double exhaustScale;
+        @JsonProperty("modelCode")
+        private String modelCode;
+        @JsonProperty("basicRateCode")
+        private String basicRateCode;
+        @JsonProperty("licensePlateNo")
+        private String licensePlateNo;
+        @JsonProperty("engineNo")
+        private String engineNo;
+        @JsonProperty("VIN")
+        private String vin;
+        @JsonProperty("motorUsageTypeCode")
+        private String motorUsageTypeCode;
+        @JsonProperty("motorTypeCode")
+        private String motorTypeCode;
+        @JsonProperty("firstRegisterDate")
+        private String firstRegisterDate;
+        @JsonProperty("effectiveDate")
+        private String effectiveDate;
+        @JsonProperty("tonnage")
+        private Integer tonnage;
+        @JsonProperty("ratedPassengerCapacity")
+        private Integer ratedPassengerCapacity;
+        @JsonProperty("noticeType")
+        private String noticeType;
+        @JsonProperty("replacementValue")
+        private String replacementValue;
+        @JsonProperty("queryModel")
+        private String queryModel;
+        @JsonProperty("expireDate")
+        private String expireDate;
+        @JsonProperty("pageNo")
+        private String pageNo;
+        @JsonProperty("rows")
+        private Integer rows;
+        @JsonProperty("pureRange")
+        private String pureRange;
+        @JsonProperty("modelEnergyType")
+        private String modelEnergyType;
+
+        public QueryCarModilePureRiskReqModuleDTO(String loginCom, CarInfoVo carInfoVo, HuaNongCrawlerModelsQueryResponse.CarModelDTO carModelDTO) {
+            this.comCode = loginCom;
+            this.exhaustScale = carModelDTO.getFullCarData().getDisplacement();
+            this.modelCode = carModelDTO.getFullCarData().getModelCode();
+            this.basicRateCode = "";
+            this.licensePlateNo = carInfoVo.getLicenseNo();
+            this.engineNo = carInfoVo.getEngineNo();
+            this.vin = carInfoVo.getVinNo();
+            this.motorUsageTypeCode = carInfoVo.getVehicleUseCode();
+            this.motorTypeCode = carInfoVo.getCarKindCode();
+            this.firstRegisterDate = TimeProcessing.dateToDateTime(carInfoVo.getRegisterDate());
+            this.effectiveDate = TimeProcessing.nowDateTime();
+            this.tonnage = Integer.valueOf(carInfoVo.getLimitLoad());
+            this.ratedPassengerCapacity = Integer.valueOf(carInfoVo.getSeatCount()) ;
+            this.noticeType = carModelDTO.getPlatFormCar().getNoticeType();
+            this.replacementValue = carModelDTO.getFullCarData().getPurchasePrice();
+            this.queryModel = "1";
+            this.expireDate = TimeProcessing.dateToDateTime(carInfoVo.getIssueDate());
+            this.pageNo = "1";
+            this.rows = 10;
+            this.pureRange = "";
+            this.modelEnergyType = carModelDTO.getFullCarData().getEnergyTypes();
+        }
+    }
+
+
+}

+ 376 - 105
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerQuotedPriceRequestRequest.java

@@ -3,10 +3,11 @@ package com.jzg.quotation.huanong.crawler.entity.request;
 import cn.hutool.core.codec.Base64;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.jzg.commons.entity.quote.vo.*;
+import com.jzg.quotation.commons.utils.TimeProcessing;
 import com.jzg.quotation.huanong.crawler.entity.HuaNongCrawlerConfigureParameters;
 import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerBaseCodeResponse;
 import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerComInfoQueryResponse;
-import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerModelsQueryResponse;
+import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerPrecisionServiceSearchResponse;
 import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerUserTypeAndProxyInfoQueryResponse;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -16,6 +17,7 @@ import java.io.Serial;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
 
 
 /**
@@ -54,7 +56,7 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                                                    String loginComCode,
                                                    String actualValue,
                                                    HuaNongCrawlerConfigureParameters parameters,
-                                                   HuaNongCrawlerModelsQueryResponse.CarModelDTO carModelDTO,
+                                                   HuaNongCrawlerPrecisionServiceSearchResponse.CarModelDTO carModelDTO,
                                                    HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.SaleInfoDTO saleInfoDTO) {
         this.head = new HuaNongCrawlerRequestBaseHead(token);
         this.loginCom = loginComCode;
@@ -148,7 +150,8 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
         private List<Object> glassInfo;
 
 
-        public BusinessDataDTO(QuoteVo quoteVo, HuaNongCrawlerModelsQueryResponse.CarModelDTO carModelDTO, String loginCom, String loginComName, String actualValue, HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.SaleInfoDTO saleInfoDTO) {
+        public BusinessDataDTO(QuoteVo quoteVo, HuaNongCrawlerPrecisionServiceSearchResponse.CarModelDTO carModelDTO, String loginCom, String loginComName, String actualValue,
+                               HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.SaleInfoDTO saleInfoDTO) {
             this.saleInfo = saleInfoDTO;
             this.businessMain = new BusinessMainDTO(loginCom, loginComName);
             this.insuredObject = new InsuredObjectDTO(carModelDTO, quoteVo.getCarInfoVo(), quoteVo.getOwnersInfo(), actualValue);
@@ -170,66 +173,33 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
             this.centerFlag = "";
             this.centerText = "";
             // 险种
-            this.contract = ContractDTO.build(quoteVo.getCiRiskInfoVo(), quoteVo.getBiRiskInfoVo(), quoteVo.getKindInfoVo());
+            this.contract = ContractDTO.build(quoteVo.getCiRiskInfoVo(), quoteVo.getBiRiskInfoVo(), quoteVo.getKindInfoVo(), quoteVo.getInsuredPersonInfo());
             // 人员
-            this.customer = CustomerDTO.build(quoteVo.getPolicyHolderInfo(), quoteVo.getInsuredPersonInfo(), quoteVo.getOwnersInfo());
+            this.customer = CustomerDTO.build(quoteVo.getPolicyHolderInfo(), quoteVo.getInsuredPersonInfo(), quoteVo.getOwnersInfo(), this.saleInfo.agentCode, this.saleInfo.comCode);
         }
 
         @NoArgsConstructor
         @Data
         public static class BusinessMainDTO {
-            @JsonProperty("accessSource")
-            private String accessSource;
-            @JsonProperty("agreementNo")
-            private String agreementNo;
+
+            @JsonProperty("baseDiscountFlag")
+            private String baseDiscountFlag;
             @JsonProperty("appointAreaCode")
             private String appointAreaCode;
             @JsonProperty("argueSolution")
             private String argueSolution;
             @JsonProperty("argueSolutionCom")
             private String argueSolutionCom;
-            @JsonProperty("beforeFXQStockOnline")
-            private Boolean beforeFXQStockOnline;
-            @JsonProperty("billAcceptDate")
-            private String billAcceptDate;
             @JsonProperty("businessType")
             private String businessType;
-            @JsonProperty("constract5")
-            private String constract5;
             @JsonProperty("hnscoreGroup")
             private String hnscoreGroup;
-            @JsonProperty("inputDateTime")
-            private String inputDateTime;
-            @JsonProperty("isAloneCorrectingNveh")
-            private String isAloneCorrectingNveh;
-            @JsonProperty("isAsync")
-            private Boolean isAsync;
-            @JsonProperty("isCorrectGLASS")
-            private Boolean isCorrectGLASS;
-            @JsonProperty("isCorrectHOME")
-            private Boolean isCorrectHOME;
-            @JsonProperty("isCorrectNVEH")
-            private Boolean isCorrectNVEH;
-            @JsonProperty("isElectronicInsuredFlag")
-            private Boolean isElectronicInsuredFlag;
-            @JsonProperty("isFace")
-            private String isFace;
             @JsonProperty("makeCom")
             private String makeCom;
             @JsonProperty("makeComName")
             private String makeComName;
             @JsonProperty("operateDateTime")
             private String operateDateTime;
-            @JsonProperty("operatorName")
-            private String operatorName;
-            @JsonProperty("relateType")
-            private String relateType;
-            @JsonProperty("underWriteEndDate")
-            private String underWriteEndDate;
-            @JsonProperty("underwritingReminderFlag")
-            private String underwritingReminderFlag;
-            @JsonProperty("verificationCode")
-            private String verificationCode;
             @JsonProperty("reCalculateFlag")
             private String reCalculateFlag;
             @JsonProperty("suggestedDiscountQuoted")
@@ -252,32 +222,15 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
             private Integer isAloneInsureNveh;
 
             public BusinessMainDTO(String makeCom, String makeComName) {
-                this.accessSource = "";
-                this.agreementNo = "";
                 this.appointAreaCode = "";
                 this.argueSolution = "1";
                 this.argueSolutionCom = "";
-                this.beforeFXQStockOnline = false;
-                this.billAcceptDate = "";
                 this.businessType = "2";
-                this.constract5 = "";
                 this.hnscoreGroup = "";
-                this.inputDateTime = "";
-                this.isAloneCorrectingNveh = "";
-                this.isAsync = false;
-                this.isCorrectGLASS = false;
-                this.isCorrectHOME = false;
-                this.isCorrectNVEH = false;
-                this.isElectronicInsuredFlag = false;
-                this.isFace = "";
                 this.makeCom = makeCom;
                 this.makeComName = makeComName;
                 this.operateDateTime = "";
-                this.operatorName = "";
-                this.relateType = "";
-                this.underWriteEndDate = "";
-                this.underwritingReminderFlag = "";
-                this.verificationCode = "";
+                this.baseDiscountFlag = "0";
                 this.reCalculateFlag = "0";
                 this.suggestedDiscountQuoted = "";
                 this.priceAdjustType = "1";
@@ -305,11 +258,12 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
             @JsonProperty("specializedDevice")
             private List<Object> specializedDevice;
 
-            public InsuredObjectDTO(HuaNongCrawlerModelsQueryResponse.CarModelDTO carModelDTO, CarInfoVo carInfoVo, CustomerInfoVo ownersInfo, String actualValue) {
+            public InsuredObjectDTO(HuaNongCrawlerPrecisionServiceSearchResponse.CarModelDTO carModelDTO, CarInfoVo carInfoVo, CustomerInfoVo ownersInfo, String actualValue) {
                 this.chargingPostInfos = Collections.emptyList();
+                this.specializedDevice = Collections.emptyList();
                 this.platformCar = new PlatformCarDTO(carModelDTO.getPlatFormCar());
-                this.policyCar = new PolicyCarDTO(carInfoVo, ownersInfo, carModelDTO.getFullCarData(), actualValue);
-                this.simpleStadarCar = new SimpleStadarCarDTO(carModelDTO.getFullCarData(), carInfoVo.getSeatCount(), carInfoVo.getCompleteKerbMass(), carInfoVo.getLimitLoad());
+                this.policyCar = new PolicyCarDTO(carInfoVo, ownersInfo, carModelDTO.getFullCarData(), carModelDTO.getPlatFormCar(), actualValue);
+                this.simpleStadarCar = new SimpleStadarCarDTO(carModelDTO.getFullCarData(), carModelDTO.getPlatFormCar(), carInfoVo.getSeatCount(), carInfoVo.getCompleteKerbMass(), carInfoVo.completeKerbMassToTonCount());
             }
 
             @NoArgsConstructor
@@ -341,9 +295,17 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                 private String series;
                 @JsonProperty("tradeNmae")
                 private String tradeNmae;
+                @JsonProperty("ineffectualDate")
+                private String ineffectualDate;
+                @JsonProperty("lastCheckDate")
+                private String lastCheckDate;
+                @JsonProperty("rejectDate")
+                private String rejectDate;
+                @JsonProperty("seriesType")
+                private String seriesType;
 
 
-                public PlatformCarDTO(HuaNongCrawlerModelsQueryResponse.CarModelDTO.PlatFormCarDTO platFormCar) {
+                public PlatformCarDTO(HuaNongCrawlerPrecisionServiceSearchResponse.CarModelDTO.PlatFormCarDTO platFormCar) {
                     this.basicRateCode = "";
                     this.brand = "";
                     this.carName = platFormCar.getCarName();
@@ -354,9 +316,13 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                     this.deptName = platFormCar.getDeptName();
                     this.modelCodeHX = "";
                     this.modelIdCode = "";
-                    this.noticeType = "";
+                    this.noticeType = platFormCar.getNoticeType();
                     this.series = "";
                     this.tradeNmae = "";
+                    this.ineffectualDate = "";
+                    this.lastCheckDate = "";
+                    this.rejectDate = "";
+                    this.seriesType = "";
                 }
             }
 
@@ -423,6 +389,10 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                 private String issueDate;
                 @JsonProperty("lfDate")
                 private String lfDate;
+                @JsonProperty("deptCode")
+                private String deptCode;
+                @JsonProperty("deptName")
+                private String deptName;
                 @JsonProperty("lkxcFlag")
                 private Boolean lkxcFlag;
                 @JsonProperty("loanStatus")
@@ -499,8 +469,16 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                 private Boolean otherCarFlag;
                 @JsonProperty("certificateDate")
                 private String certificateDate;
-
-                public PolicyCarDTO(CarInfoVo carInfoVo, CustomerInfoVo ownersInfo, HuaNongCrawlerModelsQueryResponse.CarModelDTO.FullCarDataDTO fullCarDataDTO, String actualValue) {
+                @JsonProperty("HKPlateNo")
+                private String HKPlateNo;
+                @JsonProperty("carCheckTime")
+                private String carCheckTime;
+                @JsonProperty("invoiceDate")
+                private String invoiceDate;
+
+                public PolicyCarDTO(CarInfoVo carInfoVo, CustomerInfoVo ownersInfo,
+                                    HuaNongCrawlerPrecisionServiceSearchResponse.CarModelDTO.FullCarDataDTO fullCarDataDTO,
+                                    HuaNongCrawlerPrecisionServiceSearchResponse.CarModelDTO.PlatFormCarDTO platFormCar, String actualValue) {
                     this.actualValue = actualValue;
                     this.bankCode = "";
                     this.bankName = "";
@@ -510,6 +488,9 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                     this.carChecker = "";
                     this.carDetails = "";
                     this.carInjury = "";
+                    this.HKPlateNo = "";
+                    this.carCheckTime = "";
+                    this.invoiceDate = "";
                     this.carKind = fullCarDataDTO.getCarKind();
                     this.carRenewalFlagBI = "0";
                     this.carRenewalFlagCI = "0";
@@ -528,9 +509,11 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                     this.hfcode = fullCarDataDTO.getHfcode();
                     this.hfname = fullCarDataDTO.getHfname();
                     this.insCarClass = fullCarDataDTO.getInsCarClass();
-                    this.isNewEnergyFlag = fullCarDataDTO.getDisPlayFlag();
-                    this.issueDate = carInfoVo.getIssueDate();
+                    this.isNewEnergyFlag = carInfoVo.isNewEnergyMark();
+                    this.issueDate = TimeProcessing.dateToDateTime(carInfoVo.getIssueDate());
                     this.lfDate = "";
+                    this.deptCode = platFormCar.getDeptCode();
+                    this.deptName = platFormCar.getDeptName();
                     this.lkxcFlag = false;
                     this.loanStatus = false;
                     this.loanVehicleFlag = false;
@@ -551,15 +534,20 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                     this.pmQueryNo = "";
                     this.precisionServiceSearch = false;
                     this.pureRange = 0;
-                    this.registerDate = carInfoVo.getRegisterDate();
+                    this.registerDate = TimeProcessing.dateToDateTime(carInfoVo.getRegisterDate());
                     this.runArea = "";
                     this.runMiles = "";
                     this.siChuanUsageType = "0";
                     this.specialFlag = false;
                     this.taxInclued = false;
                     this.topSpeed = "";
-                    this.transferDate = carInfoVo.getTransferDate();
+                    if (carInfoVo.isTransfer()) {
+                        this.transferDate = carInfoVo.getTransferDate();
+                    } else {
+                        this.transferDate = "";
+                    }
                     this.transferMark = carInfoVo.isTransfer();
+
                     this.transferMarkBi = carInfoVo.isBiTransfer();
                     this.useYears = "";
                     this.useYearsDetail = "";
@@ -587,7 +575,7 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                 @JsonProperty("analogyPriceTax")
                 private Integer analogyPriceTax;
                 @JsonProperty("approvedLoad")
-                private Integer approvedLoad;
+                private String approvedLoad;
                 @JsonProperty("approvedPassengersCapacity")
                 private Integer approvedPassengersCapacity;
                 @JsonProperty("brand")
@@ -669,7 +657,7 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                 @JsonProperty("transmissionType")
                 private String transmissionType;
                 @JsonProperty("unladenMass")
-                private Integer unladenMass;
+                private String unladenMass;
                 @JsonProperty("vehicleStyleUniqueId")
                 private String vehicleStyleUniqueId;
                 @JsonProperty("noticeType")
@@ -679,12 +667,14 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                 @JsonProperty("purchasePriceCopy")
                 private String purchasePriceCopy;
 
-                public SimpleStadarCarDTO(HuaNongCrawlerModelsQueryResponse.CarModelDTO.FullCarDataDTO fullCarDataDTO, String seatCount, String completeKerbMass, String limitLoad) {
+                public SimpleStadarCarDTO(HuaNongCrawlerPrecisionServiceSearchResponse.CarModelDTO.FullCarDataDTO fullCarDataDTO,
+                                          HuaNongCrawlerPrecisionServiceSearchResponse.CarModelDTO.PlatFormCarDTO platFormCarDTO,
+                                          String seatCount, String completeKerbMass, String limitLoad) {
                     this.absFlag = fullCarDataDTO.getAbsFlag();
                     this.airbagCount = fullCarDataDTO.getAirbagCount();
                     this.analogyPrice = fullCarDataDTO.getAnalogyPrice();
                     this.analogyPriceTax = fullCarDataDTO.getAnalogyPriceTax();
-                    this.approvedLoad = fullCarDataDTO.getApprovedLoad();
+                    this.approvedLoad = limitLoad;
                     this.approvedPassengersCapacity = Integer.valueOf(seatCount);
                     this.brand = fullCarDataDTO.getBrand();
                     this.brandCode = fullCarDataDTO.getBrandCode();
@@ -725,10 +715,12 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                     this.theftProof = fullCarDataDTO.getTheftProof();
                     this.tractionMass = fullCarDataDTO.getTractionMass();
                     this.transmissionType = fullCarDataDTO.getTransmissionType();
-                    this.unladenMass = fullCarDataDTO.getUnladenMass();
-                    this.noticeType = fullCarDataDTO.getNoticeType();
-                    this.brandCopy = fullCarDataDTO.getBrandCopy();
-                    this.purchasePriceCopy = fullCarDataDTO.getPurchasePriceCopy();
+                    this.unladenMass = completeKerbMass;
+                    this.noticeType = platFormCarDTO.getNoticeType();
+                    this.brandCopy = fullCarDataDTO.getModelName();
+                    this.purchasePriceCopy = fullCarDataDTO.getPurchasePrice();
+                    this.vehicleStyleUniqueId = platFormCarDTO.getVehicleStyleUniqueId();
+                    this.noticeType = platFormCarDTO.getNoticeType();
                 }
             }
         }
@@ -892,7 +884,7 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                 this.salesIdentifyNumber = agentInfoListDTO.getSalesIdentifyNumber();
                 this.salesIdentifyType = agentInfoListDTO.getSalesIdentifyType();
 
-                this.agreementNo = "";
+                this.agreementNo = handlerListDTO.getAgreementNo();
                 this.comCode = comListDTO.getComCode();
                 this.comFlag = comListDTO.getFlag();
                 this.comName = comListDTO.getComName();
@@ -944,6 +936,21 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                 @JsonProperty("riskClassType")
                 private String certificateNo;
 
+                @JsonProperty("performanceDate")
+                private String performanceDate;
+
+                @JsonProperty("coachCode")
+                private String coachCode;
+
+                @JsonProperty("coachName")
+                private String coachName;
+
+                @JsonProperty("coachComCode")
+                private String coachComCode;
+
+                @JsonProperty("handlerType")
+                private String handlerType;
+
                 public SalesmanDTO(HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.HandlerListDTO handlerListDTO, String callerName) {
                     this.callerName = callerName;
                     this.certificateNo = handlerListDTO.getCertificateNo();
@@ -952,9 +959,14 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                     this.handleRate = 100;
                     this.handlerCode = handlerListDTO.getHandlerCode();
                     this.handlerName = handlerListDTO.getHandlerName();
-                    this.handlerIdentifynumber = handlerListDTO.getHandlerCode();
+                    this.handlerIdentifynumber = handlerListDTO.getHandlerId();
                     this.handlerMobile = handlerListDTO.getHandlerMobile();
                     this.riskClassType = handlerListDTO.getRiskClassType();
+                    this.performanceDate = "201705";
+                    this.coachCode = "";
+                    this.coachName = "";
+                    this.coachComCode = "";
+                    this.handlerType = "";
                 }
             }
         }
@@ -1246,27 +1258,44 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
             @JsonProperty("coverage")
             private List<CoverageDTO> coverage;
 
-            private static ContractDTO getCiContractDTO(RiskInfoVo ciRiskInfoVo) {
+            private static ContractDTO getCiContractDTO(RiskInfoVo ciRiskInfoVo, CustomerInfoVo insuredPersonInfo) {
                 ContractDTO contractDTO = new ContractDTO();
-                contractDTO.setContractMain(new ContractMainDTO());
-
-                return new ContractDTO();
+                contractDTO.setContractMain(new ContractMainDTO(ciRiskInfoVo, "0507", "CI"));
+                contractDTO.setTax(new TaxDTO(insuredPersonInfo));
+
+                contractDTO.setViolation(Collections.emptyList());
+                contractDTO.setPlatFormMessage(new PlatFormMessageDTO());
+                contractDTO.setCoverage(List.of(new CoverageDTO(ciRiskInfoVo)));
+                contractDTO.setEngage(Collections.emptyList());
+                return contractDTO;
             }
 
             private static ContractDTO getBiContractDTO(RiskInfoVo biRiskInfoVo, List<KindInfoVo> kindInfoVo) {
                 ContractDTO contractDTO = new ContractDTO();
-
+                contractDTO.setContractMain(new ContractMainDTO(biRiskInfoVo, "0510", "BI"));
                 List<CoverageDTO> coverageDTOS = kindInfoVo.stream()
                         .map(kind -> new CoverageDTO(biRiskInfoVo, kind))
                         .toList();
-                contractDTO.setCoverage(coverageDTOS);
+                contractDTO.setTax(new TaxDTO());
 
-                return new ContractDTO();
+                contractDTO.setPlatFormMessage(new PlatFormMessageDTO());
+                contractDTO.setCoverage(coverageDTOS);
+                contractDTO.setEngage(Collections.emptyList());
+                return contractDTO;
             }
 
 
-            private static List<ContractDTO> build(RiskInfoVo ciRiskInfoVo, RiskInfoVo biRiskInfoVo, List<KindInfoVo> kindInfoVo) {
-                return List.of(getCiContractDTO(ciRiskInfoVo), getBiContractDTO(biRiskInfoVo, kindInfoVo));
+            private static List<ContractDTO> build(RiskInfoVo ciRiskInfoVo, RiskInfoVo biRiskInfoVo, List<KindInfoVo> kindInfoVo, CustomerInfoVo insuredPersonInfo) {
+                List<ContractDTO> contractDTOList = new ArrayList<>();
+                Optional.ofNullable(ciRiskInfoVo)
+                        .ifPresent(x -> {
+                            contractDTOList.add(getCiContractDTO(x, insuredPersonInfo));
+                        });
+                Optional.ofNullable(biRiskInfoVo)
+                        .ifPresent(x -> {
+                            contractDTOList.add(getBiContractDTO(x, kindInfoVo));
+                        });
+                return contractDTOList;
             }
 
             @NoArgsConstructor
@@ -1519,7 +1548,7 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                 @JsonProperty("timeEffectFlag")
                 private Integer timeEffectFlag;
                 @JsonProperty("totalAdjustRate")
-                private String totalAdjustRate;
+                private double totalAdjustRate;
                 @JsonProperty("totalPremium")
                 private String totalPremium;
                 @JsonProperty("totalPremiumRange")
@@ -1544,6 +1573,8 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                 private String riskType;
                 @JsonProperty("BImark")
                 private Boolean bImark;
+                @JsonProperty("CImark")
+                private Boolean cImark;
                 @JsonProperty("ilogType")
                 private String ilogType;
                 @JsonProperty("peerComparisonFlag")
@@ -1560,6 +1591,96 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                 private String htmlSource;
                 @JsonProperty("reinsInfo")
                 private String reinsInfo;
+
+                public ContractMainDTO(RiskInfoVo riskInfoVo, String riskCode, String riskType) {
+                    this.allTotalpremium = 0.0;
+                    this.basicCommissionRate = 0;
+                    this.basicExpenseRate = 0;
+                    this.basicPerformanceRate = 0;
+                    this.biTotalpremium = 0.0;
+                    this.bjsRiskId = "";
+                    this.bjsSaleId = "";
+                    this.ccId = "";
+                    this.ccScore = "";
+                    this.ciCarshiptaxpremium = 0;
+                    this.ciTotalpremium = 0;
+                    this.comRateUpperLimit = 0;
+                    this.commissionRate = 0;
+                    this.commissionRateOri = 0;
+                    this.configCommissionRate = 0;
+                    this.configExpenseRate = 0;
+                    this.configPerformanceRate = 0;
+                    this.costType = "";
+                    this.disCountType = "";
+                    this.discount = 0;
+                    this.egflPredbc = 0;
+                    this.endorRateUpperLimit = 0;
+                    this.expRateExtUpperLimit = 0;
+                    this.expRateUpperLimit = 0;
+                    this.expandRateExtOri = 0;
+                    this.expandRateOri = 0;
+                    this.expectCommissionRate = 0;
+                    this.expectExpenseRate = 0;
+                    this.expectPerformanceRate = 0;
+                    this.expenseAmountExt = 0;
+                    this.expenseAmountRangeExt = 0;
+                    this.expenseBusRate = 0;
+                    this.expenseOrgRate = 0;
+                    this.expenseRate = 0;
+                    this.expenseRateExt = 0;
+                    this.expiryDate = riskInfoVo.getEndDate();
+                    this.feeRateChg = 0;
+                    this.isFullSurrender = false;
+                    this.isPersonalAgent = "";
+                    this.isSynModifyGlass = false;
+                    this.isSynModifyHome = false;
+                    this.isSynModifyNveh = false;
+                    this.lastPolicyEndDate = "";
+                    this.lastPolicyInsurerCode = "";
+                    this.lastPolicyIsLocal = "";
+                    this.lastPolicyNcd = "";
+                    this.lastPolicyStartDate = "";
+                    this.lowestDiscount = 0;
+                    this.noTaxPremium = 0;
+                    this.noTaxPremiumChg = 0;
+                    this.nvehPremium = 0;
+                    this.nvehReInsureFlag = "";
+                    this.nvehStandardPremium = 0;
+                    this.nvehTotalpremium = 0;
+                    this.perRateUpperLimit = 0;
+                    this.performanceRate = 0;
+                    this.performanceRateOri = 0;
+                    this.policyDiscount = 0;
+                    this.premiumCount = 0;
+                    this.riskCode = riskCode;
+                    this.riskCost = 0.0;
+                    this.saleDiscount = "";
+                    this.saleSelfPriceAdjust = "";
+                    this.saleSelfPriceAdjustOld = 0;
+                    this.sucplPredbc = 0;
+                    this.sucprPredbc = 0;
+                    this.totalAdjustRate = 0;
+                    this.totalPremium = "";
+                    this.totalPremiumRange = 0;
+                    this.totalRiskPremium = "";
+                    this.totalStandardPremium = "";
+                    this.totalStandardPremiumRange = 0;
+                    this.unitPremium = 0;
+                    this.validDate = riskInfoVo.getStartDate();
+                    this.vat = 0;
+                    this.vatChg = 0;
+                    this.riskType = riskType;
+                    this.argueSolution = "1";
+                    this.bImark = false;
+                    this.cImark = false;
+                    this.renewalSource = "0";
+                    this.relatedType = "3";
+                    this.printType = "1";
+                    this.htmlSource = "35";
+                    this.productionDate = TimeProcessing.nowDateTime();
+                    this.timeEffectFlag = 0;
+
+                }
             }
 
             @NoArgsConstructor
@@ -1744,6 +1865,50 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                 private Integer unit;
                 @JsonProperty("exceedStartDateExceedEndDate")
                 private String exceedStartDateExceedEndDate;
+
+                @JsonProperty("calculateMode")
+                private String calculateMode;
+
+                @JsonProperty("taxPayerName")
+                private String taxPayerName;
+
+                @JsonProperty("taxPayerIdentityType")
+                private String taxPayerIdentityType;
+
+                @JsonProperty("taxPayerIdentityNo")
+                private String taxPayerIdentityNo;
+
+                @JsonProperty("taxPayerIdentity")
+                private String taxPayerIdentity;
+
+                @JsonProperty("taxPayerIdentificationCode")
+                private String taxPayerIdentificationCode;
+
+                @JsonProperty("taxConditionCode")
+                private String taxConditionCode;
+
+                public TaxDTO(CustomerInfoVo insuredPersonInfo) {
+                    this.annualTaxAmount = 0;
+                    this.annualTaxDue = 0;
+                    this.chgSumpayTax = 0;
+                    this.commission = 0;
+                    this.deduction = 0;
+                    this.deductionDueProportion = 0;
+                    this.exceedDaysCount = 0;
+                    this.lastPaidYear = 0;
+                    this.sumOverdue = 0;
+                    this.sumTax = 0;
+                    this.sumTaxDefault = 0;
+                    this.unit = 0;
+                    this.taxConditionCode = "1";
+                    this.exceedStartDateExceedEndDate = "";
+                    this.calculateMode = "C1";
+                    this.taxPayerName = insuredPersonInfo.getName();
+                    this.taxPayerIdentityType = "01";
+                    this.taxPayerIdentityNo = insuredPersonInfo.getIdentifyNumber();
+                    this.taxPayerIdentity = "2";
+                    this.taxPayerIdentificationCode = insuredPersonInfo.getIdentifyNumber();
+                }
             }
 
             @NoArgsConstructor
@@ -1842,6 +2007,56 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                 @JsonProperty("ductibleRate")
                 private String ductibleRate;
 
+                private CoverageDTO(RiskInfoVo ciRiskInfoVo) {
+                    this.amount = "200000";
+                    this.basePremium = 0;
+                    this.commission = 0;
+                    this.coverageAdjustRate = "";
+                    this.coveragePremium = "";
+                    this.coveragePremiumRange = "";
+                    this.coverageRiskPremium = "";
+                    this.coverageStandardPremium = "";
+                    this.deductible = 0;
+                    this.deductibleRate = 0;
+                    this.dutyCode = "";
+                    this.dutyName = "";
+                    this.eachDamageLimitAmount = 0;
+                    this.enndorFormual = "";
+                    this.expiryDate = ciRiskInfoVo.getEndDate();
+                    this.flag = "";
+                    this.kindCode = "BZ";
+                    this.kindName = "机动车交通事故责任强制保险";
+                    this.kindNo = 0;
+                    this.kindType = "";
+                    this.modeCode = "";
+                    this.modeName = "";
+                    this.noTaxPremium = 0;
+                    this.noTaxPremiumChg = 0;
+                    this.perRate = 0;
+                    this.perRateExt = 0;
+                    this.profitRate = 0;
+                    this.quantity = 0;
+                    this.rate = 0;
+                    this.returnPremium = 0;
+                    this.seatCount = "";
+                    this.serviceTimes = "";
+                    this.shortRate = 0;
+                    this.shortRateType = "";
+                    this.surrenderPremium = 0;
+                    this.term = "";
+                    this.unitAmount = String.valueOf(0.0);
+                    this.unitPremium = 0;
+                    this.validDate = ciRiskInfoVo.getStartDate();
+                    this.vat = 0;
+                    this.vatChg = 0;
+                    this.calculateFlag1 = "";
+                    this.choosed = false;
+                    this.notDeductibleFlag = false;
+                    this.optNotDeductibleFlag = 0;
+                    this.ductibleRate = "";
+                }
+
+
                 private CoverageDTO(RiskInfoVo biRiskInfoVo, KindInfoVo kind) {
                     this.amount = kind.getAmount();
                     this.basePremium = 0;
@@ -2026,23 +2241,69 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
             private String role;
             @JsonProperty("individualBusinessFlag")
             private String individualBusinessFlag;
+            @JsonProperty("isCustomerEqual")
+            private String isCustomerEqual;
+            @JsonProperty("agentCode")
+            private String agentCode;
+            @JsonProperty("comCode")
+            private String comCode;
+
+            @JsonProperty("firstBeneficiary")
+            private String firstBeneficiary;
+
+            @JsonProperty("carInsuredRelation")
+            private String carInsuredRelation;
+
+            @JsonProperty("DriverTypeCode")
+            private String driverTypeCode;
+
+            @JsonProperty("IssueDate")
+            private String issueDate;
+
+            @JsonProperty("IsMajorDriver")
+            private String isMajorDriver;
+
+            @JsonProperty("OrganizationCustomer")
+            private boolean organizationCustomer;
+
+            @JsonProperty("choosedChargeDate")
+            private boolean choosedChargeDate;
+
+            @JsonProperty("choosedOrgDate")
+            private boolean choosedOrgDate;
+
+            @JsonProperty("choosedCorpDate")
+            private boolean choosedCorpDate;
+
+            @JsonProperty("flag")
+            private String flag;
+
 
-            public CustomerDTO(CustomerInfoVo customerInfoVo, String role, String tandBRelationship) {
+            public CustomerDTO(CustomerInfoVo customerInfoVo, String role, String tandBRelationship, String agentCode, String comCode) {
                 this.age = customerInfoVo.getAge().toString();
                 this.annualSalary = "";
-                this.birthday = customerInfoVo.getBirthday();
-                this.cervalidDate = customerInfoVo.getIdentifyValidDate();
+                this.birthday = TimeProcessing.dateToDateTime(customerInfoVo.getBirthday());
+                this.cervalidDate = TimeProcessing.dateToDateTime(customerInfoVo.getIdentifyValidDate());
                 this.contact = List.of(new ContactDTO(customerInfoVo));
-                this.creendDate = customerInfoVo.getIdentifyValidEndDate();
+                this.creendDate = TimeProcessing.dateToDateTimeMax(customerInfoVo.getIdentifyValidEndDate());
                 this.customerSign = "4";
-                String addr = customerInfoVo.getProperty() + customerInfoVo.getCity() + customerInfoVo.getCounty();
-                this.detailedAddressInfo = addr + customerInfoVo.getAddr();
-                this.email = customerInfoVo.getEmail();
-                this.fxqSex = "1";
+                this.detailedAddressInfo = customerInfoVo.getAddr();
+                this.email = Optional.ofNullable(customerInfoVo.getEmail())
+                        .orElse(customerInfoVo.getMobile() + "@qq.com");
+                this.fxqSex = customerInfoVo.getGender();
                 this.householdRegisType = "";
-                this.identifyNumber = Base64.encode(customerInfoVo.getIdentifyNumber());
+                this.identifyNumber = Base64.encode(customerInfoVo.getIdentifyNumber()) + "=";
                 this.identifyType = customerInfoVo.getDocumentsTypeCode();
                 this.isAuthFlag = "";
+                this.firstBeneficiary = "0";
+                this.carInsuredRelation = "01";
+                this.driverTypeCode = "";
+                this.issueDate = "";
+                this.isMajorDriver = "";
+                this.organizationCustomer = false;
+                this.choosedOrgDate = false;
+                this.choosedCorpDate = false;
+                this.flag = "";
                 this.isBlackTrade = "0";
                 this.job = "0201009";
                 this.jobCode1 = "0201";
@@ -2054,22 +2315,29 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
                 this.secrecyUnitFlag = false;
                 this.sex = customerInfoVo.getGender();
                 this.sysflag = "1";
-                this.tandBRelationship = "";
+                this.tandBRelationship = tandBRelationship;
                 this.type = "1";
                 this.workUnit = "";
                 this.status = "I";
                 this.copypersonObj = new CopypersonObjDTO();
                 this.copyorgObj = new CopyorgObjDTO();
-                this.choosedDate = true;
-                this.choosedDateCopy = false;
+                this.choosedDate = false;
+                this.choosedDateCopy = true;
                 this.numberCopy = customerInfoVo.getIdentifyNumber();
                 this.personalCustomer = true;
                 this.role = role;
                 this.individualBusinessFlag = "";
+                this.agentCode = agentCode;
+                this.comCode = comCode;
+                this.isCustomerEqual = "0";
             }
 
-            public static List<CustomerDTO> build(CustomerInfoVo policyHolderInfo, CustomerInfoVo insuredPersonInfo, CustomerInfoVo ownersInfo) {
-                return List.of(new CustomerDTO(policyHolderInfo, "1", "99"), new CustomerDTO(insuredPersonInfo, "2", ""), new CustomerDTO(ownersInfo, "3", ""));
+            public static List<CustomerDTO> build(CustomerInfoVo policyHolderInfo, CustomerInfoVo insuredPersonInfo, CustomerInfoVo ownersInfo, String agentCode, String comCode) {
+                return List.of(
+                        new CustomerDTO(policyHolderInfo, "1", "99", agentCode, comCode),
+                        new CustomerDTO(insuredPersonInfo, "2", "", agentCode, comCode),
+                        new CustomerDTO(ownersInfo, "3", "", agentCode, comCode)
+                );
             }
 
 
@@ -2115,9 +2383,12 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
 
                 public ContactDTO(CustomerInfoVo customerInfoVo) {
                     this.addr = "";
+                    this.linkName = "";
+                    this.related = "";
+                    this.postCode = "";
                     this.city = customerInfoVo.getCityCode();
                     this.district = customerInfoVo.getCountyCode();
-                    this.mobile = Base64.encode(customerInfoVo.getMobile());
+                    this.mobile = Base64.encode(customerInfoVo.getMobile()) + "=";
                     this.province = customerInfoVo.getProvinceCode();
                     this.provinceValue = customerInfoVo.getProvince();
                     this.districtValue = customerInfoVo.getCounty();

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

@@ -8,6 +8,7 @@ import lombok.NoArgsConstructor;
 import java.io.Serial;
 import java.util.List;
 
+
 /**
  * @description: 华农财险 车型查询 响应
  * @author: wenks

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

@@ -0,0 +1,209 @@
+package com.jzg.quotation.huanong.crawler.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quotation.commons.filter.CarModelsFilter;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.util.List;
+
+
+/**
+ * @description: 华农财险 精准查询 响应
+ * @author: wenks
+ * @date: 2025/6/20 17:38
+ **/
+@NoArgsConstructor
+@Data
+public class HuaNongCrawlerPrecisionServiceSearchResponse implements HuaNongHeadResponse {
+
+    @Serial
+    private static final long serialVersionUID = -1442152101945682937L;
+
+    @JsonProperty("carModel")
+    private List<CarModelDTO> carModel;
+
+    @JsonProperty("head")
+    private HuaNongCrawlerBaseResponseHead head;
+
+    @JsonProperty("pageNo")
+    private Integer pageNo;
+
+    @JsonProperty("totalRow")
+    private Integer totalRow;
+
+    @NoArgsConstructor
+    @Data
+    public static class HeadDTO {
+        @JsonProperty("errorCode")
+        private String errorCode;
+        @JsonProperty("logId")
+        private String logId;
+        @JsonProperty("returnCode")
+        private String returnCode;
+        @JsonProperty("returnMessage")
+        private String returnMessage;
+        @JsonProperty("token")
+        private String token;
+        @JsonProperty("transCode")
+        private String transCode;
+        @JsonProperty("transType")
+        private String transType;
+        @JsonProperty("sign")
+        private String sign;
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class CarModelDTO implements CarModelsFilter {
+        @JsonProperty("fullCarData")
+        private FullCarDataDTO fullCarData;
+        @JsonProperty("licenseKindCode")
+        private String licenseKindCode;
+        @JsonProperty("platFormCar")
+        private PlatFormCarDTO platFormCar;
+        @JsonProperty("vehicleType")
+        private String vehicleType;
+
+        @Override
+        public String getCarYear() {
+            return fullCarData.getCarYear();
+        }
+
+        @Override
+        public String getPurchasePrice() {
+            return fullCarData.getPurchasePrice();
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class FullCarDataDTO {
+            @JsonProperty("absFlag")
+            private String absFlag;
+            @JsonProperty("airbagCount")
+            private String airbagCount;
+            @JsonProperty("analogyPrice")
+            private Integer analogyPrice;
+            @JsonProperty("analogyPriceTax")
+            private Integer analogyPriceTax;
+            @JsonProperty("approvedLoad")
+            private Integer approvedLoad;
+            @JsonProperty("approvedPassengersCapacity")
+            private Integer approvedPassengersCapacity;
+            @JsonProperty("brand")
+            private String brand;
+            @JsonProperty("brandCode")
+            private String brandCode;
+            @JsonProperty("carAlias")
+            private String carAlias;
+            @JsonProperty("carKind")
+            private String carKind;
+            @JsonProperty("carType")
+            private String carType;
+            @JsonProperty("carYear")
+            private String carYear;
+            @JsonProperty("displacement")
+            private Double displacement;
+            @JsonProperty("energyTypes")
+            private String energyTypes;
+            @JsonProperty("factory")
+            private String factory;
+            @JsonProperty("grossMass")
+            private Integer grossMass;
+            @JsonProperty("hfEndTime")
+            private String hfEndTime;
+            @JsonProperty("hfStartTime")
+            private String hfStartTime;
+            @JsonProperty("hfcode")
+            private String hfcode;
+            @JsonProperty("hfname")
+            private String hfname;
+            @JsonProperty("hnCarNo")
+            private String hnCarNo;
+            @JsonProperty("insCarClass")
+            private String insCarClass;
+            @JsonProperty("insCarClassName")
+            private String insCarClassName;
+            @JsonProperty("localModelCode")
+            private String localModelCode;
+            @JsonProperty("modelCode")
+            private String modelCode;
+            @JsonProperty("modelFlag")
+            private String modelFlag;
+            @JsonProperty("modelName")
+            private String modelName;
+            @JsonProperty("oldMark")
+            private String oldMark;
+            @JsonProperty("power")
+            private Integer power;
+            @JsonProperty("productStatus")
+            private String productStatus;
+            @JsonProperty("purchasePrice")
+            private String purchasePrice;
+            @JsonProperty("purchasePriceTax")
+            private String purchasePriceTax;
+            @JsonProperty("qualityMax")
+            private Integer qualityMax;
+            @JsonProperty("qualityMin")
+            private Integer qualityMin;
+            @JsonProperty("remark")
+            private String remark;
+            @JsonProperty("riskType")
+            private String riskType;
+            @JsonProperty("seatMax")
+            private Integer seatMax;
+            @JsonProperty("seatMin")
+            private Integer seatMin;
+            @JsonProperty("series")
+            private String series;
+            @JsonProperty("seriesCode")
+            private String seriesCode;
+            @JsonProperty("seriesType")
+            private String seriesType;
+            @JsonProperty("shortHandCode")
+            private String shortHandCode;
+            @JsonProperty("theftProof")
+            private String theftProof;
+            @JsonProperty("tractionMass")
+            private Integer tractionMass;
+            @JsonProperty("transmissionType")
+            private String transmissionType;
+            @JsonProperty("unladenMass")
+            private Integer unladenMass;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PlatFormCarDTO {
+            @JsonProperty("brand")
+            private String brand;
+            @JsonProperty("carFirstRegisterDate")
+            private String carFirstRegisterDate;
+            @JsonProperty("carName")
+            private String carName;
+            @JsonProperty("categoryCode")
+            private String categoryCode;
+            @JsonProperty("categoryName")
+            private String categoryName;
+            @JsonProperty("configType")
+            private String configType;
+            @JsonProperty("deptCode")
+            private String deptCode;
+            @JsonProperty("deptName")
+            private String deptName;
+            @JsonProperty("modelCodeHX")
+            private String modelCodeHX;
+            @JsonProperty("modelIdCode")
+            private String modelIdCode;
+            @JsonProperty("noticeType")
+            private String noticeType;
+            @JsonProperty("series")
+            private String series;
+            @JsonProperty("tradeNmae")
+            private String tradeNmae;
+            @JsonProperty("vehicleStyleUniqueId")
+            private String vehicleStyleUniqueId;
+        }
+    }
+}

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

@@ -17,6 +17,7 @@ import com.jzg.quotation.huanong.crawler.entity.HuaNongCrawlerConfigureParameter
 import com.jzg.quotation.huanong.crawler.entity.po.HuaNongCrawlerOrder;
 import com.jzg.quotation.huanong.crawler.entity.request.*;
 import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerModelsQueryResponse;
+import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerPrecisionServiceSearchResponse;
 import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerQuotedPriceResponse;
 import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerSubmitResponse;
 import com.jzg.quotation.huanong.crawler.service.HuaNongCrawlerGetToken;
@@ -24,9 +25,12 @@ import com.jzg.quotation.huanong.crawler.service.HuaNongCrawlerOrderService;
 import com.jzg.quotation.huanong.crawler.service.HuaNongCrawlerQuoteProcessService;
 import com.jzg.quotation.huanong.crawler.service.HuaNongCrawlerRequest;
 import lombok.RequiredArgsConstructor;
+import org.jetbrains.annotations.NotNull;
 import org.redisson.api.RMap;
 import org.springframework.http.HttpHeaders;
 
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
@@ -67,30 +71,41 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
         HuaNongCrawlerModelsQueryRequestRequest huaNongCrawlerModelsQueryRequest = new HuaNongCrawlerModelsQueryRequestRequest(token, loginComCode, carInfoVo);
         HuaNongCrawlerModelsQueryResponse huaNongCrawlerModelsQueryResponse = huaNongCrawlerRequestComponent.modelsQuery(huaNongCrawlerModelsQueryRequest, httpHeaders);
         HuaNongCrawlerModelsQueryResponse.CarModelDTO carModelDTO = CarModelsFilterUtils.to(huaNongCrawlerModelsQueryResponse.getCarModel(), carInfoVo);
+        // 精确查询
+        HuaNongCrawlerPrecisionServiceSearchRequest precisionServiceSearchRequest = new HuaNongCrawlerPrecisionServiceSearchRequest(token, loginComCode, carInfoVo, carModelDTO );
+        HuaNongCrawlerPrecisionServiceSearchResponse precisionServiceSearchResponse = huaNongCrawlerRequestComponent.precisionServiceSearch(precisionServiceSearchRequest, httpHeaders);
+        HuaNongCrawlerPrecisionServiceSearchResponse.CarModelDTO carModel = CarModelsFilterUtils.to(precisionServiceSearchResponse.getCarModel(), carInfoVo);
 
         // 折旧价查询
-        HuaNongCrawlerActualValueRequestRequest huaNongCrawlerActualValueRequest = new HuaNongCrawlerActualValueRequestRequest(token, loginComCode, carModelDTO, carInfoVo);
+        HuaNongCrawlerActualValueRequestRequest huaNongCrawlerActualValueRequest = new HuaNongCrawlerActualValueRequestRequest(token, loginComCode, carModel, carInfoVo);
         String actualValue = huaNongCrawlerRequestComponent.actualValue(huaNongCrawlerActualValueRequest, httpHeaders);
 
         // 保费计算
         HuaNongCrawlerQuotedPriceRequestRequest huaNongCrawlerQuotedPriceRequest
-                = new HuaNongCrawlerQuotedPriceRequestRequest(token, attributionInformationVo.getUsername(), quoteVo, loginComCode, actualValue, parameters, carModelDTO, saleInfoDTO);
+                = new HuaNongCrawlerQuotedPriceRequestRequest(token, attributionInformationVo.getUsername(), quoteVo, loginComCode, actualValue, parameters, carModel, saleInfoDTO);
 
         HuaNongCrawlerQuotedPriceResponse huaNongCrawlerQuotedPriceResponse = huaNongCrawlerRequestComponent.quotedPrice(huaNongCrawlerQuotedPriceRequest, httpHeaders);
 
         // 保存
-        List<HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.ContractDTO> contract = huaNongCrawlerQuotedPriceRequest.getBusinessData()
-                .getContract();
-        List<HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.ContractAccidentDTO> contractAccident = huaNongCrawlerQuotedPriceRequest.getBusinessData()
-                .getContractAccident();
-
-        HuaNongCrawlerSaveRequestRequest huaNongCrawlerSaveRequest = new HuaNongCrawlerSaveRequestRequest(contract, contractAccident, token, loginComCode);
+        HuaNongCrawlerSaveRequestRequest huaNongCrawlerSaveRequest = getHuaNongCrawlerSaveRequestRequest(huaNongCrawlerQuotedPriceRequest, token, loginComCode);
         huaNongCrawlerRequestComponent.save(huaNongCrawlerSaveRequest, httpHeaders);
 
         return HuaNongCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo.getOrder()
                 .getOrdersNo(), quoteVo, huaNongCrawlerQuotedPriceResponse);
     }
 
+    @NotNull
+    private static HuaNongCrawlerSaveRequestRequest getHuaNongCrawlerSaveRequestRequest(HuaNongCrawlerQuotedPriceRequestRequest huaNongCrawlerQuotedPriceRequest, String token, String loginComCode) {
+        List<HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.ContractDTO> contract = huaNongCrawlerQuotedPriceRequest.getBusinessData()
+                .getContract();
+        List<HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.ContractAccidentDTO> contractAccident =
+                Optional.ofNullable(huaNongCrawlerQuotedPriceRequest.getBusinessData().getContractAccident())
+                        .orElse(new ArrayList<>());
+
+        HuaNongCrawlerSaveRequestRequest huaNongCrawlerSaveRequest = new HuaNongCrawlerSaveRequestRequest(contract, contractAccident, token, loginComCode);
+        return huaNongCrawlerSaveRequest;
+    }
+
     @Override
     public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) {
         // 获取归属信息

+ 1 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/converter/QuoteInfoConverter.java

@@ -69,6 +69,7 @@ public class QuoteInfoConverter {
         List<CustomerInfoVo> customerInfoVos = List.of(quoteVo.getOwnersInfo(), quoteVo.getInsuredPersonInfo(), quoteVo.getPolicyHolderInfo());
         customerInfoVos.forEach(customerInfoVo -> {
             quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.GENDER.getCode(), customerInfoVo.getGender(), customerInfoVo, CustomerInfoVo::setGender);
+            quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.DOCUMENTS_TYPE.getCode(), customerInfoVo.getDocumentsTypeCode(), customerInfoVo, CustomerInfoVo::setDocumentsTypeCode);
         });
     }
 

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

@@ -475,14 +475,25 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
                 : orgClient.queryByAddress(quoteVo.getPolicyHolderInfo().getAddr(), quoteVo.getPolicyHolderInfo().getIdentifyNumber());
 
         quoteVo.getOwnersInfo().setProvinceCode(ownerAddress.getData().getProvinceCode());
+        quoteVo.getOwnersInfo().setProvince(ownerAddress.getData().getProvinceName());
         quoteVo.getOwnersInfo().setCityCode(ownerAddress.getData().getCityCode());
+        quoteVo.getOwnersInfo().setCity(ownerAddress.getData().getCityName());
         quoteVo.getOwnersInfo().setCountyCode(ownerAddress.getData().getCountyCode());
+        quoteVo.getOwnersInfo().setCounty(ownerAddress.getData().getCountyName());
+
         quoteVo.getInsuredPersonInfo().setProvinceCode(insuredAddress.getData().getProvinceCode());
+        quoteVo.getInsuredPersonInfo().setProvince(insuredAddress.getData().getProvinceName());
         quoteVo.getInsuredPersonInfo().setCityCode(insuredAddress.getData().getCityCode());
+        quoteVo.getInsuredPersonInfo().setCity(insuredAddress.getData().getCityName());
         quoteVo.getInsuredPersonInfo().setCountyCode(insuredAddress.getData().getCountyCode());
+        quoteVo.getInsuredPersonInfo().setCounty(insuredAddress.getData().getCountyName());
+
         quoteVo.getPolicyHolderInfo().setProvinceCode(policyAddress.getData().getProvinceCode());
+        quoteVo.getPolicyHolderInfo().setProvince(policyAddress.getData().getProvinceName());
         quoteVo.getPolicyHolderInfo().setCityCode(policyAddress.getData().getCityCode());
+        quoteVo.getPolicyHolderInfo().setCity(policyAddress.getData().getCityName());
         quoteVo.getPolicyHolderInfo().setCountyCode(policyAddress.getData().getCountyCode());
+        quoteVo.getPolicyHolderInfo().setCounty(policyAddress.getData().getCountyName());
     }
 
     @Override
@@ -691,14 +702,14 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         {
             isExistsMainOrder = true;
         }
-        String mainOrderNo = mainOrders.getId();
+        String mainOrderNo;
         // 如果订单号为0 则生成主订单
         if (!isExistsMainOrder) {
             // 生成主订单
             mainOrderNo = this.saveBaseOrderorSubOrder(quoteVo,companyName,"0");
         }else{
             // 更新主订单
-            mainOrderNo = this.updateMainOrders(quoteVo,mainOrderNo,companyName);
+            mainOrderNo = this.updateMainOrders(quoteVo,mainOrders.getId(),companyName);
         }
         // 生成子订单
         return this.saveBaseOrderorSubOrder(quoteVo,companyName,mainOrderNo);

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 4 - 5
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/util/Base64Tool.java


이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.