Jelajahi Sumber

Merge remote-tracking branch 'origin/master' into dev_jzg_lipf_cxbj_v20260416

lipf 5 bulan lalu
induk
melakukan
c4363670cf
89 mengubah file dengan 5497 tambahan dan 4570 penghapusan
  1. 6 6
      commons/pom.xml
  2. 4 0
      commons/src/main/java/com/jzg/commons/entity/orders/po/InsOrdersCarInfo.java
  3. 1 1
      commons/src/main/java/com/jzg/commons/entity/po/SysDistributionSetting.java
  4. 12 0
      commons/src/main/java/com/jzg/commons/entity/quote/vo/QuoteVo.java
  5. 16 3
      commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/OrderStatusVo.java
  6. 5 4
      commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/PaymentLinkVo.java
  7. 6 0
      commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/QuoteResultsVo.java
  8. 15 0
      commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/UnderwritingVo.java
  9. 2 0
      commons/src/main/java/com/jzg/commons/entity/scheme/vo/SchemeResultVo.java
  10. 5 0
      tenant/insurance/quotation-chengtai/pom.xml
  11. 67 89
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/build/ChengTaiAPIQuoteResultsVoBuild.java
  12. 271 376
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/component/ChengTaiRequestApiComponent.java
  13. 0 20
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/ChengTaiApiConfigureParameters.java
  14. 27 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/ChengTaiApiParameters.java
  15. 0 34
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/ChengTaiEncrypted.java
  16. 106 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/CarActualValueEnum.java
  17. 42 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/KindCodeEnum.java
  18. 43 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/KindCodeMapping.java
  19. 0 21
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/PlateType.java
  20. 33 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/RequestType.java
  21. 0 23
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/ResponseCode.java
  22. 32 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/UploadEnum.java
  23. 25 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/UseNatureShowEnum.java
  24. 0 55
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/enums/ImageTypeEnum.java
  25. 0 32
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/enums/OrderStatusEnum.java
  26. 0 35
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/enums/RequestUrl.java
  27. 0 28
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/enums/RiskCodeEnum.java
  28. 0 28
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/enums/TaxConditionCodeEnum.java
  29. 0 24
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/BaseRequest.java
  30. 0 38
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/CarInfoRequest.java
  31. 46 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/CarModelQueryRequest.java
  32. 0 24
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/ChengTaiTokenRequest.java
  33. 0 21
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/DownLoadDocumentUrlRequest.java
  34. 73 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/FcPolicyElectronicRequest.java
  35. 0 1481
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/InsurePremiumRequest.java
  36. 0 46
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/PayUrlRequest.java
  37. 97 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/PaymentRequest.java
  38. 76 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/PolicyElectronicRequest.java
  39. 9 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/PolicyRecallRequest.java
  40. 75 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/PolicyStatusRequest.java
  41. 1387 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/PremiumCalculationRequest.java
  42. 0 115
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/QueryCarActualValueRequest.java
  43. 1380 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/SubmitRequest.java
  44. 0 454
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/SubmitVerifyRequest.java
  45. 0 21
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/SubmitVerifyResultRequest.java
  46. 0 21
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/UnderwritingRequest.java
  47. 0 21
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/UnderwritingResultRequest.java
  48. 90 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/UpLoadRequest.java
  49. 0 107
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/UploadFileRequest.java
  50. 0 42
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/BaseResponse.java
  51. 0 102
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/CarInfoResponse.java
  52. 169 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/CarModelQueryResponse.java
  53. 0 26
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/ChengTaiTokenResponse.java
  54. 0 29
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/DownLoadDocumentUrlResponse.java
  55. 54 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/FcPolicyElectronicResponse.java
  56. 0 667
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/InsurePremiumResponse.java
  57. 0 15
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/PayUrlResponse.java
  58. 9 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/PaymentResponse.java
  59. 120 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/PolicyElectronicResponse.java
  60. 9 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/PolicyRecallResponse.java
  61. 123 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/PolicyStatusResponse.java
  62. 476 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/PremiumCalculationResponse.java
  63. 0 17
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/QueryCarActualValueResponse.java
  64. 135 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/SubmitResponse.java
  65. 0 33
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/SubmitVerifyResponse.java
  66. 0 30
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/SubmitVerifyResultResponse.java
  67. 0 26
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/UnderwritingResponse.java
  68. 0 25
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/UnderwritingResultResponse.java
  69. 9 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/UpLoadResponse.java
  70. 0 20
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/UploadFileResponse.java
  71. 3 3
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/service/ChengTaiCrawlerOrderService.java
  72. 289 367
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/service/impl/ChengTaiApiRequestImpl.java
  73. 6 18
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/service/impl/ChengTaiCrawlerOrderServiceImpl.java
  74. 75 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/utils/XmlDateTimeFormatter.java
  75. 0 5
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/service/impl/ChengTaiCrawlerQuoteProcessServiceImpl.java
  76. 10 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/TimeProcessing.java
  77. 7 1
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/entity/Request/NonAutoInsOrderRequest.java
  78. 22 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  79. 2 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersAccidentalDrivingService.java
  80. 9 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersAccidentalDrivingServiceImpl.java
  81. 2 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  82. 2 5
      tenant/insurance/quotation-summary/src/main/resources/application-prod.yaml
  83. 1 1
      tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/entity/po/YangGuangApiOrder.java
  84. 5 2
      tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/entity/request/YangGuangAccuracyCalculateRequest.java
  85. 1 1
      tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/entity/request/YangGuangGetNonVehicleProductsRequest.java
  86. 2 1
      tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/entity/request/YangGuangSubmitRequest.java
  87. 1 2
      tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/service/impl/YangGuangApiOrderServiceImpl.java
  88. 4 2
      tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/service/impl/YangGuangApiRequestImpl.java
  89. 1 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlSchemeServiceImpl.java

+ 6 - 6
commons/pom.xml

@@ -146,12 +146,12 @@
                 <configuration>
                     <source>14</source>
                     <target>14</target>
-                    <annotationProcessorPaths>
-                        <path>
-                            <groupId>org.projectlombok</groupId>
-                            <artifactId>lombok</artifactId>
-                        </path>
-                    </annotationProcessorPaths>
+<!--                    <annotationProcessorPaths>-->
+<!--                        <path>-->
+<!--                            <groupId>org.projectlombok</groupId>-->
+<!--                            <artifactId>lombok</artifactId>-->
+<!--                        </path>-->
+<!--                    </annotationProcessorPaths>-->
                 </configuration>
             </plugin>
         </plugins>

+ 4 - 0
commons/src/main/java/com/jzg/commons/entity/orders/po/InsOrdersCarInfo.java

@@ -65,6 +65,10 @@ public class InsOrdersCarInfo extends BaseModel {
     @DiffProperty(name = "新车购置价")
     private BigDecimal purchasePrice;
 
+    @Schema(description = "折旧价")
+    @DiffProperty(name = "折旧价")
+    private BigDecimal actualValue;
+
     @Schema(description = "使用性质")
     @DiffProperty(name = "使用性质")
     private String carNatureCode;

+ 1 - 1
commons/src/main/java/com/jzg/commons/entity/po/SysDistributionSetting.java

@@ -23,7 +23,7 @@ import java.util.List;
 @AllArgsConstructor
 public class SysDistributionSetting {
     @TableId(type = IdType.ASSIGN_ID)
-    private Long id;
+    private String id;
 
     @Schema(description = "分销模式 1-一级分销 2-二级分销 3-三级分销")
     private String distributionMode;

+ 12 - 0
commons/src/main/java/com/jzg/commons/entity/quote/vo/QuoteVo.java

@@ -114,6 +114,18 @@ public class QuoteVo implements Serializable {
     @Schema(description = "特约")
     private List<InsCompanyClause> specialInfoVo;
 
+    /**
+     * 交强险转保验证码
+     */
+    @Schema(description = "交强险转保验证码")
+    private String ciTransferCode;
+
+    /**
+     * 商业险转保验证码
+     */
+    @Schema(description = "商业险转保验证码")
+    private String biTransferCode;
+
     /**
      * 订单数据库查询数据转QuoteVo对象
      *

+ 16 - 3
commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/OrderStatusVo.java

@@ -1,11 +1,11 @@
 package com.jzg.commons.entity.quote.vo.aggregated;
 
-import com.jzg.commons.entity.orders.po.InsOrders;
-import com.jzg.commons.entity.orders.po.InsOrdersCarInfo;
-import com.jzg.commons.entity.orders.po.InsOrdersPolicy;
+import com.jzg.commons.entity.orders.po.*;
 import com.jzg.commons.entity.quote.vo.base.OrderBase;
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * 订单状态查询VO
  */
@@ -31,4 +31,17 @@ public class OrderStatusVo {
      * 车辆信息
      */
     private InsOrdersCarInfo carInfo;
+    /**
+     * 订单车辆人员信息
+     */
+    private List<InsOrdersCarUserInfo> insOrdersCarUserInfoList;
+    /**
+     * 订单费用信息
+     */
+    private InsOrdersCosts insOrdersCosts;
+
+    /**
+     * 非车险信息
+     */
+    private InsOrdersAccidentalDriving insOrdersAccidentalDriving;
 }

+ 5 - 4
commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/PaymentLinkVo.java

@@ -1,9 +1,6 @@
 package com.jzg.commons.entity.quote.vo.aggregated;
 
-import com.jzg.commons.entity.orders.po.InsOrders;
-import com.jzg.commons.entity.orders.po.InsOrdersCarUserInfo;
-import com.jzg.commons.entity.orders.po.InsOrdersCosts;
-import com.jzg.commons.entity.orders.po.InsOrdersPolicy;
+import com.jzg.commons.entity.orders.po.*;
 import com.jzg.commons.entity.quote.vo.base.OrderBase;
 import lombok.Data;
 
@@ -39,4 +36,8 @@ public class PaymentLinkVo {
      * 订单费用信息
      */
     private InsOrdersCosts insOrdersCosts;
+    /**
+     * 非车险信息
+     */
+    private InsOrdersAccidentalDriving insOrdersAccidentalDriving;
 }

+ 6 - 0
commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/QuoteResultsVo.java

@@ -15,6 +15,7 @@ import lombok.NoArgsConstructor;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -52,6 +53,11 @@ public class QuoteResultsVo implements Serializable {
 
     private List<TaxInfoVo> taxVo;
 
+    /**
+     * 车辆折旧价
+     */
+    private BigDecimal carActualValue;
+
     /**
      * 费用因子
      */

+ 15 - 0
commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/UnderwritingVo.java

@@ -65,4 +65,19 @@ public class UnderwritingVo {
      */
     private InsOrderRightsInfoDto insOrderRightsInfoDto;
 
+    /**
+     * 车船税信息
+     */
+    private InsOrdersTax insOrdersTax;
+
+    /**
+     * 险种表信息
+     */
+    private List<InsOrdersKind> insOrdersKindList;
+
+    /**
+     * 非车险信息
+     */
+    private InsOrdersAccidentalDriving insOrdersAccidentalDriving;
+
 }

+ 2 - 0
commons/src/main/java/com/jzg/commons/entity/scheme/vo/SchemeResultVo.java

@@ -68,6 +68,8 @@ public class SchemeResultVo {
 
         private String serviceTimes;
 
+        private String deductibleRate;
+
         private List<Option> options = new ArrayList<>();
     }
 

+ 5 - 0
tenant/insurance/quotation-chengtai/pom.xml

@@ -23,5 +23,10 @@
             <version>1.0-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-xml</artifactId>
+            <version>2.9.0</version>
+        </dependency>
     </dependencies>
 </project>

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

@@ -3,13 +3,15 @@ package com.jzg.quotation.chengtai.api.build;
 import com.alibaba.fastjson.JSONArray;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
+import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.commons.entity.quote.vo.TaxInfoVo;
-import com.jzg.quotation.chengtai.api.entity.constants.ResponseCode;
-import com.jzg.quotation.chengtai.api.entity.response.InsurePremiumResponse;
 import com.jzg.commons.constants.quote.enums.quote.KindCode;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.commons.util.StringUtils;
+import com.jzg.quotation.chengtai.api.entity.response.PremiumCalculationResponse;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -27,68 +29,41 @@ public final class ChengTaiAPIQuoteResultsVoBuild {
         throw new IllegalStateException("Utility class");
     }
 
-    public static QuoteResultsVo buildQuoteResultsVo(String ordersNo, QuoteVo quoteVo, InsurePremiumResponse insurePremiumResponse) {
+    public static QuoteResultsVo buildQuoteResultsVo(String ordersNo, QuoteVo quoteVo, PremiumCalculationResponse premiumCalculationResponse, BigDecimal carActualValue) {
 
 
         QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
-        quoteResultsVo.setOrdersNo(insurePremiumResponse.getOrderId());
+        if(!premiumCalculationResponse.getHead().getResponseCode().equals("0000")){
+            quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.QUOTE_FAIL);
+            quoteResultsVo.setErrorMessage(premiumCalculationResponse.getHead().getErrorMessage());
+            return quoteResultsVo;
+        }
+        String orderNumber = premiumCalculationResponse.getCompRisk() != null
+                ? premiumCalculationResponse.getCompRisk().getFtrno().getOrderNumber()
+                : premiumCalculationResponse.getCommRisk().getFtrno().getOrderNumber();
+        quoteResultsVo.setCompanyOrderNo(orderNumber);
         // 交强险
         quoteResultsVo.setCiRiskInfoVo(quoteVo.getCiRiskInfoVo());
         // 商业险
         quoteResultsVo.setBiRiskInfoVo(quoteVo.getBiRiskInfoVo());
         quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.WAIT_AUDIT);
-
-        if(!ResponseCode.R_000.getCode().equals(insurePremiumResponse.getCode())){
-            quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.QUOTE_FAIL);
-            quoteResultsVo.setErrorMessage(insurePremiumResponse.getMessage());
-            return quoteResultsVo;
+        // 评分 折扣
+        quoteResultsVo.setScoreVo(buildScoreVo(premiumCalculationResponse));
+        // 商业险险种
+        if (Objects.nonNull(premiumCalculationResponse.getCommRisk().getKindList())) {
+            List<KindInfoVo> kindInfoVo = buildKindInfoVo(quoteVo.getKindInfoVo(), premiumCalculationResponse.getCommRisk().getKindList());
+            quoteResultsVo.setKindInfoVo(kindInfoVo);
         }
+        // 折旧价
+        quoteResultsVo.setCarActualValue(carActualValue);
 
         // 交强保费 车船税 商业保费
-        buildPremium(quoteResultsVo, insurePremiumResponse);
-        quoteResultsVo.setCompanyOrderNo(insurePremiumResponse.getOrderId());
+        buildPremium(quoteResultsVo, premiumCalculationResponse);
         quoteResultsVo.setOrdersNo(ordersNo);
-
-        // 商业险险种信息
-        if(Objects.nonNull(insurePremiumResponse.getBiContract())){
-            List<KindInfoVo> kindInfoVo = buildKindInfoVo(quoteVo.getKindInfoVo(), insurePremiumResponse.getBiContract().getCoverage());
-            quoteResultsVo.setKindInfoVo(kindInfoVo);
-        }
-
-        // 评分
-        quoteResultsVo.getScoreVo().setScoreJson(new JSONArray());
-
-
-        // 费用因子
-//        List<ExpenseFactor> expenseFactors = buildExpenseFactor(calculatePremiumResponse.getPriceInfoList());
-//        quoteResultsVo.setExpenseFactors(expenseFactors);
         return quoteResultsVo;
     }
 
-//    private static List<ExpenseFactor> buildExpenseFactor(List<CalculatePremiumResponse.PriceInfoListDTO> priceInfoList) {
-//
-//
-//        return new ArrayList<>();
-//    }
-
-    private static List<KindInfoVo> buildKindInfoVo(List<KindInfoVo> kindInfoVo, List<InsurePremiumResponse.BiContractDTO.CoverageDTO> itemKindList) {
-        Map<String, InsurePremiumResponse.BiContractDTO.CoverageDTO> collect = itemKindList
-                .stream()
-                .collect(Collectors.toMap(InsurePremiumResponse.BiContractDTO.CoverageDTO::getKindCode, x -> x));
-        kindInfoVo.forEach(kind -> {
-            InsurePremiumResponse.BiContractDTO.CoverageDTO itemKindListDTO = collect.get(kind.getKindCode());
-            if (KindCode.A
-                    .getCode()
-                    .equals(kind.getPlatformKindCode())) {
-                kind.setAmount(itemKindListDTO.getAmount() + "");
-            }
-            // 设置保费
-            kind.setPremium(itemKindListDTO.getCoveragePremium() + "");
-        });
-        return kindInfoVo;
-    }
-
-    private static void buildPremium(QuoteResultsVo quoteResultsVo, InsurePremiumResponse insurePremiumResponse) {
+    private static void buildPremium(QuoteResultsVo quoteResultsVo, PremiumCalculationResponse premiumCalculationResponse) {
 
         QuoteResultsVo.CostsVo costsVo = new QuoteResultsVo.CostsVo();
 
@@ -96,52 +71,55 @@ public final class ChengTaiAPIQuoteResultsVoBuild {
         double syPremium = 0;
         double jyPremium = 0;
         double sumTax = 0;
-        // 交强
-        if(Objects.nonNull(insurePremiumResponse.getCiContract())){
-            InsurePremiumResponse.CiContractDTO.ContractMainDTO ciContractMain = insurePremiumResponse.getCiContract().getContractMain();
-            jqPremium = ciContractMain.getTotalPremium();
-            costsVo.setCiPremium( jqPremium+ "");
-            //车船税
-            InsurePremiumResponse.CiContractDTO.TaxDTO taxDTO = insurePremiumResponse.getCiContract().getTax();
-            sumTax = taxDTO.getSumTax();
-            costsVo.setVvTax(sumTax + "");
 
-            //起保日期
-            quoteResultsVo.setCiStartDate(ciContractMain.getValidDate());
-            quoteResultsVo.setCiEndDate(ciContractMain.getExpiryDate());
-
-            //欠税信息
-            if (null != insurePremiumResponse.getCiContract().getTax()) {
-                InsurePremiumResponse.CiContractDTO.TaxDTO tax = insurePremiumResponse.getCiContract().getTax();
-                List<TaxInfoVo> taxArrearsList = new ArrayList<>();
-                TaxInfoVo taxArrear = new TaxInfoVo();
-
-                taxArrear.setYears(tax.getLastPaidYear());
-                taxArrear.setTaxDefault(tax.getAnnualTaxDue());
-                taxArrear.setLateFee(tax.getSumOverdue());
-                taxArrearsList.add(taxArrear);
-                quoteResultsVo.setTaxVo(taxArrearsList);
-            }
+        // 交强金额
+        if (Objects.nonNull(premiumCalculationResponse.getCompRisk())) {
+            jqPremium = Double.parseDouble(premiumCalculationResponse.getCompRisk().getBasePart().getSumPremuim());
+            sumTax = Double.parseDouble(String.valueOf(premiumCalculationResponse.getCompRisk().getCarShipTax().getSumPayTax()));
         }
-        //商业
-        if(Objects.nonNull(insurePremiumResponse.getBiContract())){
-            InsurePremiumResponse.BiContractDTO.ContractMainDTO biContractMain = insurePremiumResponse.getBiContract().getContractMain();
-            syPremium = biContractMain.getTotalPremium();
-            costsVo.setBiPremium(syPremium+"");
-
-            //起保日期
-            quoteResultsVo.setBiStartDate(biContractMain.getValidDate());
-            quoteResultsVo.setBiEndDate(biContractMain.getExpiryDate());
+        // 商业金额
+        if (Objects.nonNull(premiumCalculationResponse.getCommRisk())) {
+            syPremium = Double.parseDouble(premiumCalculationResponse.getCommRisk().getBasePart().getSumPremuim());
         }
-        // 驾意
-        if(Objects.nonNull(insurePremiumResponse.getAccContract())){
-            InsurePremiumResponse.AccContractDTO accContract = insurePremiumResponse.getAccContract();
-            jyPremium = accContract.getContractMain().getTotalPremium();
-            costsVo.setNiPremium(syPremium+"");
+        // 非车金额
+        if (Objects.nonNull(premiumCalculationResponse.getAcciRisk())) {
+            jyPremium = Double.parseDouble(String.valueOf(premiumCalculationResponse.getAcciRisk().getNvhlSuitPrice()));
         }
+        costsVo.setCiPremium(String.valueOf(jqPremium));
+        costsVo.setBiPremium(String.valueOf(syPremium));
+        costsVo.setNiPremium(String.valueOf(jyPremium));
+        costsVo.setVvTax(String.valueOf(sumTax));
         costsVo.setSumPremium(String.valueOf(jqPremium + syPremium + jyPremium + sumTax));
-
         quoteResultsVo.setCosts(costsVo);
     }
 
+    private static QuoteResultsVo.ScoreVo buildScoreVo(PremiumCalculationResponse premiumCalculationResponse) {
+        QuoteResultsVo.ScoreVo scoreVo = new QuoteResultsVo.ScoreVo();
+        scoreVo.setJqAdjustRate(premiumCalculationResponse.getCompRisk().getBasePart().getDiscount().toString());
+        scoreVo.setSyAdjustRate(premiumCalculationResponse.getCommRisk().getBasePart().getDiscount().toString());
+        scoreVo.setLossRation(premiumCalculationResponse.getYztScore().getCentile().toString());
+        scoreVo.setJqRenewal(premiumCalculationResponse.getCompRisk().getBasePart().getRenewalFlag());
+        scoreVo.setSyRenewal(premiumCalculationResponse.getCommRisk().getBasePart().getRenewalFlag());
+        scoreVo.setCiClaims(premiumCalculationResponse.getCompRisk().getBasePart().getClaimsNum());
+        scoreVo.setBiClaims(premiumCalculationResponse.getCommRisk().getBasePart().getClaimsNum());
+        return scoreVo;
+    }
+
+    private static List<KindInfoVo> buildKindInfoVo(List<KindInfoVo> kindInfoVo, List<PremiumCalculationResponse.commRisk.Kind> itemKindList) {
+        Map<String, PremiumCalculationResponse.commRisk.Kind> collect = itemKindList
+                .stream()
+                .collect(Collectors.toMap(PremiumCalculationResponse.commRisk.Kind::getKindCode, x -> x));
+        kindInfoVo.forEach(kind -> {
+            PremiumCalculationResponse.commRisk.Kind itemKindListDTO = collect.get(kind.getKindCode());
+            if (KindCode.A
+                    .getCode()
+                    .equals(kind.getPlatformKindCode())) {
+                kind.setAmount(itemKindListDTO.getAmount().toString());
+            }
+            // 设置保费
+            kind.setPremium(itemKindListDTO.getGrossPremium().toString());
+        });
+        return kindInfoVo;
+    }
+
 }

+ 271 - 376
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/component/ChengTaiRequestApiComponent.java

@@ -1,478 +1,373 @@
 package com.jzg.quotation.chengtai.api.component;
 
+
+import cn.hutool.core.net.URLDecoder;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+import com.jzg.commons.constants.quote.enums.base.InsuranceEnum;
 import com.jzg.commons.exception.SystemException;
-import com.jzg.commons.util.StringUtils;
-import com.jzg.quotation.chengtai.api.entity.ChengTaiApiConfigureParameters;
-import com.jzg.quotation.chengtai.api.entity.ChengTaiEncrypted;
-import com.jzg.quotation.chengtai.api.entity.constants.ResponseCode;
-import com.jzg.quotation.chengtai.api.entity.constants.enums.RequestUrl;
+import com.jzg.quotation.chengtai.api.entity.constants.RequestType;
 import com.jzg.quotation.chengtai.api.entity.request.*;
 import com.jzg.quotation.chengtai.api.entity.response.*;
 import com.jzg.quotation.chengtai.api.properties.ChengTaiApiProperties;
-import com.jzg.quotation.chengtai.api.utils.RSAUtil;
-import com.jzg.quotation.commons.component.RequestComponent;
-import com.jzg.quotation.commons.constant.CacheConstant;
+import com.jzg.quotation.commons.utils.InsuranceLog;
+import jakarta.annotation.Resource;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.redisson.api.RLock;
-import org.redisson.api.RMap;
-import org.redisson.api.RedissonClient;
+import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
 
-import java.nio.charset.Charset;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.time.Duration;
-import java.util.Base64;
-import java.util.concurrent.TimeUnit;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+import java.util.Set;
 
 @Slf4j
 @Component
 @RequiredArgsConstructor
 public class ChengTaiRequestApiComponent {
 
-    private static final String AUTHORIZATION = "Authorization";
-
-    private static final String AUTHTOKEN = "X-ACCESS-TOKEN";
-
-    private final RedissonClient redissonClient;
-
     private final ChengTaiApiProperties chengTaiApiProperties;
 
-    private final RequestComponent requestComponent;
-
-    public <T extends BaseRequest, B extends BaseResponse> B requestUrl(String url, T requestBody, Class<B> responseType, HttpHeaders httpHeaders) {
-        try {
-            String busReqString = JSON.toJSONString(requestBody, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
-            PrivateKey privateKey = RSAUtil.getPrivateKeyFromPKCS8("RSA", chengTaiApiProperties.getPrivateKey());
-            PublicKey ctPublicKey = RSAUtil.getPublicKeyFromX509("RSA", chengTaiApiProperties.getCtPublicKey());
-            log.debug("请求数据: {}", busReqString);
-
-            //base64加密
-            String baseStr = Base64.getEncoder().encodeToString(busReqString.getBytes(Charset.forName("UTF-8")));
-            //rsa加密
-            String encryptStr = RSAUtil.encryptString(ctPublicKey, baseStr); //加密
-            String signatureStr = RSAUtil.signature(baseStr, privateKey);  //加签
-            ChengTaiEncrypted chengTaiEncrypted = new ChengTaiEncrypted(encryptStr,chengTaiApiProperties,signatureStr);
-            log.debug("加密后数据: {}", JSON.toJSON(chengTaiEncrypted));
-
-            ResponseEntity<B> bResponseEntity = requestComponent.objectPost(url, chengTaiEncrypted, responseType, httpHeaders);
-
-            String body = JSON.toJSONString(bResponseEntity.getBody());//需要联调观察数据格式
-            B res = JSON.parseObject(body).toJavaObject(responseType);
-            log.debug("响应数据: {}", JSON.toJSON(res));
-
-            // 解密响应
-            String newSource = RSAUtil.decryptString(privateKey, res.encryptionMessage);
-            String info = new String(Base64.getDecoder().decode(newSource), Charset.forName("UTF-8"));
-            log.debug("解密后数据: {}", info);
-
-            boolean flag = RSAUtil.signatureVerfiy(newSource, res.signature, ctPublicKey);
-            if(!flag){throw new SystemException("验签失败: " + res.message);}
-            res.setDecodeData(info);
-            return res;
-        } catch (SystemException e) {
-            log.error("请求异常: {}", e.getMessage(), e);
-            throw e;
-        } catch (Exception e) {
-            log.error("请求异常: {}", e.getMessage(), e);
-            throw new SystemException("请求失败: " + e.getMessage());
-        }
-    }
-
-    public <T extends BaseRequest, B extends BaseResponse> B requestRequestUrl(RequestUrl requestUrl, T requestBody, Class<B> responseType, HttpHeaders httpHeaders, String partnerCode,String url) {
-        return requestUrl(requestUrl.getRequestUrl(url), requestBody, responseType, httpHeaders);
+    private final RestTemplate restTemplate;
+
+    @Resource(name = "restTemplateIgnoreSSL")
+    private RestTemplate restTemplateIgnoreSSL;
+
+    private <Q , S> S post(Q q, Class<S> tClass, String requestType,String requestDesc,String apiUrl) {
+        // 请求地址
+        String url = apiUrl + requestType;
+        //设置请求头类型
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        // 请求体
+        String requestJson = JSON.toJSONString(q, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
+        // 封装请求体
+        HttpEntity<String> entity = new HttpEntity<>(requestJson, headers);
+        InsuranceLog.infoLog(InsuranceEnum.CHAC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                requestDesc, url, requestJson);
+        ResponseEntity<String> response = restTemplateIgnoreSSL.postForEntity(url, entity, String.class);
+        String rawResponseBody = response.getBody();
+        rawResponseBody = URLDecoder.decode(rawResponseBody, StandardCharsets.UTF_8);
+        String fixedResponseBody = fixJsonString(rawResponseBody);
+        InsuranceLog.infoLog(InsuranceEnum.CHAC.getPinyin(), "\n\t---------> {} \n\t---------> 响应参数:{}", requestDesc, fixedResponseBody);
+        return JSON.parseObject(fixedResponseBody, tClass);
     }
 
-    public <T extends BaseRequest, B extends BaseResponse> B requestUrlToken(String url, T requestBody, Class<B> responseType, HttpHeaders httpHeaders) {
-        try {
-            ResponseEntity<B> bResponseEntity = requestComponent.objectPost(url, requestBody, responseType, httpHeaders);
-            String body = JSON.toJSONString(bResponseEntity.getBody());
-            B res = JSON.parseObject(body).toJavaObject(responseType);
-
-            if (!ResponseCode.R_000.getCode().equals(res.getCode())){
-                throw new SystemException("API返回错误: " + res.message);
-            }
-
-            PrivateKey privateKey = RSAUtil.getPrivateKeyFromPKCS8("RSA", chengTaiApiProperties.getPrivateKey());
-            PublicKey ctPublicKey = RSAUtil.getPublicKeyFromX509("RSA", chengTaiApiProperties.getCtPublicKey());
-
-            // 解密响应
-            String newSource = RSAUtil.decryptString(privateKey, res.encryptionMessage);
-            String info = new String(Base64.getDecoder().decode(newSource), Charset.forName("UTF-8"));
-
-            boolean flag = RSAUtil.signatureVerfiy(newSource, res.signature, ctPublicKey);
-            if(!flag){throw new SystemException("验签失败: " + res.message);}
-            res.setDecodeData(info);
-            return res;
-        } catch (SystemException e) {
-            log.error("token请求异常: {}", e.getMessage(), e);
-            throw e;
-        } catch (Exception e) {
-            log.error("token请求异常: {}", e.getMessage(), e);
-            throw new SystemException("token请求失败: " + e.getMessage());
+    private String postForm(MultiValueMap<String, String> paramMap, String requestType, String requestDesc,String apiUrl) {
+        // 请求地址
+        String url = apiUrl + requestType;
+        //设置请求头类型
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+        // 请求体
+        HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(paramMap, headers);
+        String formParamLog = paramMap.toString();
+        InsuranceLog.infoLog(InsuranceEnum.CHAC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                requestDesc, url, formParamLog);
+        ResponseEntity<String> response = restTemplateIgnoreSSL.postForEntity(url, entity, String.class);
+        String rawResponseBody = response.getBody();
+        String decodedResponseBody = "";
+        if (rawResponseBody != null && !rawResponseBody.isEmpty()) {
+
+            decodedResponseBody = URLDecoder.decode(rawResponseBody, StandardCharsets.UTF_8);
         }
+        InsuranceLog.infoLog(InsuranceEnum.CHAC.getPinyin(), "\n\t---------> {} \n\t---------> 响应参数:{}", requestDesc, decodedResponseBody);
+        return decodedResponseBody;
     }
 
-    public <T extends BaseRequest, B extends BaseResponse> B requestRequestUrlToken(RequestUrl requestUrl, T requestBody, Class<B> responseType, HttpHeaders httpHeaders,String url) {
-        return requestUrlToken(requestUrl.getRequestUrl(url), requestBody, responseType, httpHeaders);
+    public static void main(String[] args) {
+        String keyword = "%7B%22responseBody%22%3A%7B%22eBCallbackData%22%3A%5B%7B%22insuredName%22%3A%22%E9%83%AD%E6%B7%91%E7%8F%8D%22%2C%22nodeStatus%22%3A%220%22%2C%22operateText%22%3A%22%E5%90%8C%E6%84%8F%3Cbr%2F%3E%22%2C%22operateTime%22%3A1773199010000%2C%22operateType%22%3A%221%22%2C%22operateUserCode%22%3A%2201000049%22%2C%22operateUserName%22%3A%22%E5%8F%B2++%E8%AF%97%22%2C%22paymentEndDate%22%3A%222026-03-12+00%3A00%3A00%22%2C%22proposalNo%22%3A%220059904080120260000254%22%2C%22resourceType%22%3A%22B2C-QD%22%2C%22riskCode%22%3A%220801%22%2C%22sumAmount%22%3A200000.0%2C%22totalPremium%22%3A950.0%2C%22underWriteInd%22%3A%221%22%2C%22uuid%22%3A%22OhPPz7MURZe9mwktaH8znA%22%7D%2C%7B%22insuredName%22%3A%22%E9%83%AD%E6%B7%91%E7%8F%8D%22%2C%22nodeStatus%22%3A%220%22%2C%22operateText%22%3A%22%E5%90%8C%E6%84%8F%3Cbr%2F%3E%22%2C%22operateTime%22%3A1773199010000%2C%22operateType%22%3A%221%22%2C%22operateUserCode%22%3A%2201000049%22%2C%22operateUserName%22%3A%22%E5%8F%B2++%E8%AF%97%22%2C%22paymentEndDate%22%3A%222026-03-12+00%3A00%3A00%22%2C%22proposalNo%22%3A%220059904082120260000197%22%2C%22resourceType%22%3A%22B2C-QD%22%2C%22riskCode%22%3A%220808%22%2C%22sumAmount%22%3A331312.0%2C%22totalPremium%22%3A3009.18%2C%22underWriteInd%22%3A%221%22%2C%22uuid%22%3A%22OhPPz7MURZe9mwktaH8znA%22%7D%5D%7D%2C%22responseHead%22%3A%7B%22errorMessage%22%3A%22%E5%A4%84%E7%90%86%E6%88%90%E5%8A%9F%22%2C%22responseCode%22%3A%220000%22%7D%7D";
+        URLDecoder.decode(keyword, StandardCharsets.UTF_8);
+        System.out.println(URLDecoder.decode(keyword, StandardCharsets.UTF_8));
     }
 
-
-    /**
-     * 协议id获取请求头
-     *
-     * @param chengTaiApiConfigureParameters 协议配置
-     * @return HttpHeaders
-     */
-    public HttpHeaders getHttpHeaders(ChengTaiApiConfigureParameters chengTaiApiConfigureParameters,String url) {
-        return getHttpHeaders(chengTaiApiConfigureParameters,3,url);
+    private <Q , S> String get(Q q,Class<S> tClass,String requestType,String requestDesc,String apiUrl) throws UnsupportedEncodingException {
+        // 请求地址
+        String url = apiUrl + requestType;
+        String urlWithParams = buildGetUrlWithParams(url, q);
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        HttpEntity<Void> entity = new HttpEntity<>(headers);
+        String requestParamLog = q != null ? JSON.toJSONString(q, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty) : "无参数";
+        InsuranceLog.infoLog(InsuranceEnum.CHAC.getPinyin(),
+                "\n\t---------> {} \n\t---------> URL: {} \n\t---------> 请求参数:{}",
+                requestDesc, urlWithParams, requestParamLog);
+        return urlWithParams;
     }
 
     /**
-     * 配置方式获取请求头
-     *
-     * @param chengTaiApiConfigureParameters 配置参数
-     * @return HttpHeaders
+     * 提取参数
+     * @param rawJson
+     * @return
      */
-    public HttpHeaders getHttpHeaders(ChengTaiApiConfigureParameters chengTaiApiConfigureParameters, int number,String url) {
-        if (number <= 0) {
-            throw new SystemException("接口请求异常,请重试!");
-        }
-        number--;
-
-        HttpHeaders httpHeaders = new HttpHeaders();
-        String authorization = (String) redissonClient
-                .getMap(CacheConstant.CHENGTAI_AUTHORIZATION + chengTaiApiConfigureParameters.getUserId())
-                .get(AUTHORIZATION);
-
-        if (StringUtils.isNotBlank(authorization)) {
-            log.debug("使用缓存中的token: {}", authorization);
-            httpHeaders.set(AUTHTOKEN, authorization);
-            httpHeaders.setContentType(MediaType.APPLICATION_JSON);
-            return httpHeaders;
-        }
-
-        // 使用分布式锁 只有一个人可以访问登录
-        RLock lock = redissonClient.getLock(CacheConstant.CT_ACCESS_LOCK + chengTaiApiConfigureParameters.getUserId());
+    private String fixJsonString(String rawJson) {
+        // 解析为JSONObject
         try {
-            boolean isLock = lock.tryLock(1, 10000, TimeUnit.MILLISECONDS);
-            if (isLock) {
-                try {
-                    return this.getToken(chengTaiApiConfigureParameters,httpHeaders,url);
-                } catch (Exception e) {
-                    log.error("获取token失败: {}", e.getMessage(), e);
-                    throw new SystemException("获取token失败: " + e.getMessage());
-                } finally {
-                    if (lock.isHeldByCurrentThread()) {
-                        lock.unlock();
+            JSONObject jsonObject = JSON.parseObject(rawJson);
+            // 获取所有字段名
+            Set<String> keySet = jsonObject.keySet();
+
+            for (String key : keySet) {
+                Object value = jsonObject.get(key);
+                if (value instanceof String) {
+                    String strValue = (String) value;
+                    if (strValue.startsWith("[") && strValue.endsWith("]")) {
+                        try {
+                            // 转换为JSON数组并替换原字段
+                            JSONArray jsonArray = JSON.parseArray(strValue);
+                            jsonObject.put(key, jsonArray);
+                        } catch (Exception e) {
+                            System.out.println("字段[" + key + "]的值不是合法JSON数组,保留原字符串:" + strValue);
+                        }
                     }
+                    else if (strValue.startsWith("{") && strValue.endsWith("}")) {
+                        try {
+                            JSONObject subJsonObject = JSON.parseObject(strValue);
+                            jsonObject.put(key, subJsonObject);
+                        } catch (Exception e) {
+                            System.out.println("字段[" + key + "]的值不是合法JSON对象,保留原字符串:" + strValue);
+                        }
+                    }
+
                 }
             }
+            return jsonObject.toJSONString();
+        } catch (Exception e) {
+            String errorMsg = "JSON解析失败:" + rawJson;
+            throw new SystemException(errorMsg);
+        }
+    }
 
-        } catch (InterruptedException e) {
-            log.error("获取锁失败: {}", e.getMessage(), e);
-            Thread.currentThread().interrupt();
-            throw new SystemException("获取锁失败: " + e.getMessage());
+    private String buildGetUrlWithParams(String baseUrl, Object paramObj) throws UnsupportedEncodingException {
+        if (paramObj == null) {
+            return baseUrl;
         }
 
-        // 睡眠一段时间 自调用 重新获取缓存中的 header
-        try {
-            Thread.sleep(280);
-        } catch (InterruptedException e) {
-            log.debug(e.getMessage());
-            Thread.currentThread().interrupt();
-            throw new SystemException("接口请求异常,请重试!");
+        // 1. 将对象转为Map
+        Map<String, Object> paramMap;
+        if (paramObj instanceof Map) {
+            paramMap = (Map<String, Object>) paramObj;
+        } else {
+            // 实体类转为Map
+            paramMap = JSON.parseObject(JSON.toJSONString(paramObj), Map.class);
         }
 
-        return getHttpHeaders(chengTaiApiConfigureParameters, number, url);
-    }
+        // 2. 拼接URL参数
+        StringBuilder urlBuilder = new StringBuilder(baseUrl);
+        boolean isFirstParam = true;
+        for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
+            String key = entry.getKey();
+            Object value = entry.getValue();
 
-    /**
-     * 获取 接入方 token 车险业务token
-     * @param chengTaiApiConfigureParameters 诚泰api配置
-     * @param httpHeaders                    请求头
-     * @return
-     */
-    private HttpHeaders getToken(ChengTaiApiConfigureParameters chengTaiApiConfigureParameters, HttpHeaders httpHeaders,String url) {
-        try {
-            ChengTaiTokenRequest request = new ChengTaiTokenRequest(chengTaiApiProperties.getPartnerCode());
-            httpHeaders.setContentType(MediaType.APPLICATION_JSON);
-            ChengTaiTokenResponse accessToken = getAccessToken(request,httpHeaders,url);
+            if (value == null || "".equals(value.toString().trim())) {
+                continue;
+            }
 
-            if (accessToken == null || StringUtils.isBlank(accessToken.getAccessToken())) {
-                throw new SystemException("获取accessToken失败或为空");
+            if (isFirstParam) {
+                urlBuilder.append("?");
+                isFirstParam = false;
+            } else {
+                urlBuilder.append("&");
             }
 
-            httpHeaders.set(AUTHTOKEN, accessToken.getAccessToken());
-            // 3.1 存入redis中
-            RMap<Object, Object> rMap = redissonClient.getMap(CacheConstant.CHENGTAI_AUTHORIZATION + chengTaiApiConfigureParameters.getUserId());
-            rMap.put(AUTHORIZATION, accessToken.getAccessToken());
-            rMap.expire(Duration.ofHours(CacheConstant.CHENGTAI_AUTHORIZATION_TIME));
-            return httpHeaders;
-        } catch (Exception e) {
-            log.error("获取token异常: {}", e.getMessage(), e);
-            throw new SystemException("获取token失败: " + e.getMessage());
+            // URL编码
+            String encodedKey = URLEncoder.encode(key, String.valueOf(StandardCharsets.UTF_8));
+            String encodedValue = URLEncoder.encode(value.toString(), String.valueOf(StandardCharsets.UTF_8));
+
+            // 拼接键值对
+            urlBuilder.append(encodedKey).append("=").append(encodedValue);
         }
-    }
 
+        return urlBuilder.toString();
+    }
     /**
-     * 为接入方提供获取token服务
-     *
-     * @param chengTaiTokenRequest           诚泰财险 为接入方提供获取token服务 入参实体
-     * @param httpHeaders
-     * @return 出参实体
+     * xml请求
+     * @param requestType
+     * @param nameSpace
+     * @return
      */
-    private ChengTaiTokenResponse getAccessToken(ChengTaiTokenRequest chengTaiTokenRequest, HttpHeaders httpHeaders,String url) {
-        try {
-            ChengTaiTokenResponse response = requestRequestUrlToken(RequestUrl.Z00001,
-                    chengTaiTokenRequest,
-                    ChengTaiTokenResponse.class,
-                    httpHeaders,url);
-
-            if (response == null || StringUtils.isBlank(response.getDecodeData())) {
-                throw new SystemException("获取token响应为空");
-            }
+    private <Q , S> S postXml(Q q, Class<S> tClass, String requestUrl,String requestType,String requestDesc,String nameSpace,String apiUrl) throws JsonProcessingException {
+        String url = apiUrl + requestUrl;
 
-            ChengTaiTokenResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(ChengTaiTokenResponse.class);
-            res.setCode(response.getCode());
-            res.setMessage(response.getMessage());
-            return res;
-        } catch (Exception e) {
-            log.error("请求token接口失败: {}", e.getMessage(), e);
-            throw new SystemException("请求token接口失败: " + e.getMessage());
+        HttpHeaders httpHeaders = new HttpHeaders();
+        MediaType mediaType = MediaType.parseMediaType("text/xml;charset=UTF-8");
+        httpHeaders.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 " +
+                "Safari/537.36");
+        httpHeaders.setContentType(mediaType);
+        httpHeaders.add("SOAPAction", "");
+
+        XmlMapper xmlMapper = new XmlMapper();
+        xmlMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
+        String requestXml = buildSoapEnvelope(xmlMapper.writeValueAsString(q), requestType,nameSpace);
+
+        HttpEntity<String> entity = new HttpEntity<>(requestXml, httpHeaders);
+        InsuranceLog.infoLog(InsuranceEnum.CHAC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                requestDesc, url, requestXml);
+
+        ResponseEntity<String> response = restTemplateIgnoreSSL.postForEntity(url, entity, String.class);
+        String responseBody = extractSoapBodyContent(response.getBody());
+        // 如果是核保则 进行转换一次xml  返回的有问题.!
+        if(requestUrl.contains(RequestType.Z00004.getCode())) {
+            responseBody = "<policySaveResponseBody>" + responseBody + "</policySaveResponseBody>";
         }
+        InsuranceLog.infoLog(InsuranceEnum.CHAC.getPinyin(), "\n\t---------> {} \n\t---------> 响应参数:{}",
+                requestDesc, responseBody);
+        return xmlMapper.readValue(responseBody, tClass);
     }
 
 
     /**
-     * 车型查询
-     *
-     * @param carInfoRequest 诚泰财险 车型查询 入参实体
-     * @param partnerCode
-     * @return 出参实体
+     * 拼接soap请求体
+     * @param businessXml
+     * @param requestType
+     * @param nameSpace
+     * @return
      */
-    public CarInfoResponse carinfoQuery(CarInfoRequest carInfoRequest, HttpHeaders httpHeaders, String partnerCode,String url) {
-        CarInfoResponse response = requestRequestUrl(RequestUrl.Z00002,
-                carInfoRequest,
-                CarInfoResponse.class,
-                httpHeaders,
-                partnerCode,url);
-        System.out.printf("诚泰返回:" + response.message);
-        CarInfoResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(CarInfoResponse.class);
-        res.setCode(response.getCode());
-        res.setMessage(response.getMessage());
-        return res;
+    private String buildSoapEnvelope(String businessXml,String requestType,String nameSpace) {
+        String dynamicNodeName = "pol:" + requestType.trim();
+        return  "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+                + "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" "
+                + "xmlns:pol=\"http://" + nameSpace + ".provider.app.vhlthirdparty.echannel.ebiz.isoftstone.com/\">"
+                + "<soapenv:Header/>"
+                + "<soapenv:Body>"
+                + "<" + dynamicNodeName + ">"
+                + businessXml
+                + "</" + dynamicNodeName + ">"
+                + "</soapenv:Body>"
+                + "</soapenv:Envelope>";
     }
 
     /**
-     * 车辆价格计算
-     *
-     * @param carActualValueRequest 诚泰财险 车辆价格计算 入参实体
-     * @param httpHeaders
-     * @param partnerCode
-     * @return 出参实体
+     * 提取SOAP响应中的正文内容
+     * @param soapResponse
+     * @return
      */
-    public QueryCarActualValueResponse queryActualValue(QueryCarActualValueRequest carActualValueRequest, HttpHeaders httpHeaders, String partnerCode,String url) {
-        QueryCarActualValueResponse response = requestRequestUrl(RequestUrl.Z00003,
-                carActualValueRequest,
-                QueryCarActualValueResponse.class,
-                httpHeaders,
-                partnerCode,url);
-
-        QueryCarActualValueResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(QueryCarActualValueResponse.class);
-        res.setCode(response.getCode());
-        res.setMessage(response.getMessage());
-        return res;
+    private String extractSoapBodyContent(String soapResponse) {
+        int start = soapResponse.indexOf("<return>");
+        int returnTagEnd = soapResponse.indexOf(">", start) + 1;
+        int end = soapResponse.indexOf("</return>");
+        return soapResponse.substring(returnTagEnd, end).trim();
     }
 
-
     /**
-     * 保费计算
-     *
-     * @param insurePremiumRequest 诚泰财险 保费计算 入参实体
-     * @param partnerCode
-     * @return 出参实体
+     * 将上传请求对象转换为表单参数
+     * @param
+     * @return
      */
-    public InsurePremiumResponse calculatePremium(InsurePremiumRequest insurePremiumRequest, HttpHeaders httpHeaders, String partnerCode,String url) {
-        InsurePremiumResponse response = requestRequestUrl(RequestUrl.Z00004,
-                insurePremiumRequest,
-                InsurePremiumResponse.class,
-                httpHeaders,
-                partnerCode,url);
-        if (StringUtils.isBlank(response.getDecodeData())){
-            return response;
+    private <T> MultiValueMap<String, String> convertToFormParams(T t) {
+        MultiValueMap<String, String> paramMap = new LinkedMultiValueMap<>();
+
+        if (t == null) {
+            return paramMap;
+        }
+        Map<String, Object> entityMap = JSON.parseObject(JSON.toJSONString(t), Map.class);
+        for (Map.Entry<String, Object> entry : entityMap.entrySet()) {
+            String key = entry.getKey();
+            Object valueObj = entry.getValue();
+
+            if (valueObj == null || "".equals(valueObj.toString().trim())) {
+                continue;
+            }
+            String value = valueObj.toString();
+            paramMap.add(key, value);
         }
-        InsurePremiumResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(InsurePremiumResponse.class);
-        res.setCode(response.getCode());
-        res.setMessage(response.getMessage());
-        return res;
+        return paramMap;
     }
 
+
     /**
-     * 获取支付链接
-     *
-     * @param payUrlRequest 诚泰财险 新支付 入参实体
-     * @param partnerCode
-     * @return 出参实体
+     * 查询车型
      */
-    public PayUrlResponse getPayUrl(PayUrlRequest payUrlRequest, HttpHeaders httpHeaders, String partnerCode,String url) {
-        PayUrlResponse response = requestRequestUrl(RequestUrl.Z00010,
-                payUrlRequest,
-                PayUrlResponse.class,
-                httpHeaders,
-                partnerCode,url);
-        PayUrlResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(PayUrlResponse.class);
-        res.setCode(response.getCode());
-        res.setMessage(response.getMessage());
-        return res;
+    public CarModelQueryResponse carModelQuery(CarModelQueryRequest carModelQueryRequest,String apiUrl) {
+        String requestType = RequestType.Z00002.getCode();
+        String requestDesc = RequestType.Z00002.getDesc();
+        return post(carModelQueryRequest, CarModelQueryResponse.class, requestType,requestDesc,apiUrl);
     }
 
     /**
-     * 影像上传
-     *
-     * @param uploadFileRequest 诚泰财险 入参实体
-     * @param httpHeaders
-     * @param partnerCode
-     * @return
+     *  报价
      */
-    public UploadFileResponse submitImage(UploadFileRequest uploadFileRequest, HttpHeaders httpHeaders, String partnerCode,String url) {
-
-        UploadFileResponse response = requestNoEncryptRequestUrl(RequestUrl.Z00005,
-                uploadFileRequest,
-                UploadFileResponse.class,
-                httpHeaders,
-                partnerCode,url);
-        return response;
-    }
-
-    public <T extends BaseRequest, B extends BaseResponse> B requestNoEncryptRequestUrl(RequestUrl requestUrl, T requestBody, Class<B> responseType, HttpHeaders httpHeaders, String partnerCode,String url) {
-        return requestNoEncryptUrl(requestUrl.getRequestUrl(url), requestBody, responseType, httpHeaders);
+    public PremiumCalculationResponse premiumCalculation(PremiumCalculationRequest premiumCalculationRequest,String apiUrl) throws JsonProcessingException {
+        String requestUrl = RequestType.Z00001.getCode();
+        String requestType = RequestType.Z00001.getType();
+        String requestDesc = RequestType.Z00001.getDesc();
+        String nameSpace = RequestType.Z00001.getNameSpace();
+        return postXml(premiumCalculationRequest, PremiumCalculationResponse.class, requestUrl,requestType,requestDesc,nameSpace,apiUrl);
     }
 
-    private <B extends BaseResponse, T extends BaseRequest> B requestNoEncryptUrl(String requestUrl, T requestBody, Class<B> responseType, HttpHeaders httpHeaders) {
-        ResponseEntity<B> response = requestComponent.objectPost(requestUrl, requestBody, responseType, httpHeaders);
-        return response.getBody();
-    }
-
-
     /**
-     * 投保保存
-     * @param submitVerifyRequest
-     * @param httpHeaders
-     * @param partnerCode
-     * @return
+     * 上传影像
      */
-    public SubmitVerifyResponse underwritingSave(SubmitVerifyRequest submitVerifyRequest, HttpHeaders httpHeaders, String partnerCode,String url) {
-        SubmitVerifyResponse response = requestRequestUrl(RequestUrl.Z00006,
-                submitVerifyRequest,
-                SubmitVerifyResponse.class,
-                httpHeaders,
-                partnerCode,url);
-        SubmitVerifyResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(SubmitVerifyResponse.class);
-        res.setCode(response.getCode());
-        res.setMessage(response.getMessage());
-        return res;
-
+    public String upLoad(UpLoadRequest upLoadRequest,String apiUrl) {
+        String requestType = RequestType.Z00003.getCode();
+        String requestDesc = RequestType.Z00003.getDesc();
+        MultiValueMap<String, String> paramMap = convertToFormParams(upLoadRequest);
+        return postForm(paramMap, requestType,requestDesc,apiUrl);
     }
 
     /**
      * 核保
-     * @param underwritingRequest
-     * @param httpHeaders
-     * @param partnerCode
-     * @return
      */
-    public UnderwritingResponse underwriting(UnderwritingRequest underwritingRequest, HttpHeaders httpHeaders, String partnerCode,String url) {
-        UnderwritingResponse response = requestRequestUrl(RequestUrl.Z00007,
-                underwritingRequest,
-                UnderwritingResponse.class,
-                httpHeaders,
-                partnerCode,url);
-        UnderwritingResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(UnderwritingResponse.class);
-        res.setCode(response.getCode());
-        res.setMessage(response.getMessage());
-        return res;
-
+    public SubmitResponse submit(SubmitRequest submitRequest,String apiUrl) throws JsonProcessingException {
+        String requestUrl = RequestType.Z00004.getCode();
+        String requestType = RequestType.Z00004.getType();
+        String requestDesc = RequestType.Z00004.getDesc();
+        String nameSpace = RequestType.Z00004.getNameSpace();
+        return postXml(submitRequest, SubmitResponse.class, requestUrl, requestType, requestDesc,nameSpace,apiUrl);
     }
 
     /**
-     * 投保结果查询
-     * @param submitVerifyResultRequest
-     * @param httpHeaders
-     * @param partnerCode
-     * @return
+     * 支付
      */
-    public SubmitVerifyResultResponse underwritingSaveResult(SubmitVerifyResultRequest submitVerifyResultRequest, HttpHeaders httpHeaders, String partnerCode,String url) {
-        SubmitVerifyResultResponse response = requestRequestUrl(RequestUrl.Z00009,
-                submitVerifyResultRequest,
-                SubmitVerifyResultResponse.class,
-                httpHeaders,
-                partnerCode,url);
-        SubmitVerifyResultResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(SubmitVerifyResultResponse.class);
-        res.setCode(response.getCode());
-        res.setMessage(response.getMessage());
-        return res;
+    public String payment(PaymentRequest paymentRequest,String apiUrl) throws UnsupportedEncodingException {
+        String requestUrl = RequestType.Z00005.getCode();
+        String requestDesc = RequestType.Z00005.getDesc();
+        return get(paymentRequest, PaymentResponse.class,requestUrl,requestDesc,apiUrl);
     }
 
     /**
-     * 保单查询
-     * @param downLoadDocumentUrlRequest
-     * @param httpHeaders
-     * @param partnerCode
-     * @return
+     * 电子保单
      */
-    public DownLoadDocumentUrlResponse downLoadDocumentUrl(DownLoadDocumentUrlRequest downLoadDocumentUrlRequest, HttpHeaders httpHeaders, String partnerCode,String url) {
-        DownLoadDocumentUrlResponse response = requestRequestUrl(RequestUrl.Z00011,
-                downLoadDocumentUrlRequest,
-                DownLoadDocumentUrlResponse.class,
-                httpHeaders,
-                partnerCode,url);
-        DownLoadDocumentUrlResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(DownLoadDocumentUrlResponse.class);
-        res.setCode(response.getCode());
-        res.setMessage(response.getMessage());
-        return res;
+    public PolicyElectronicResponse policyElectronic(PolicyElectronicRequest policyElectronicRequest,String apiUrl) {
+        String requestUrl = RequestType.Z00006.getCode();
+        String requestDesc = RequestType.Z00006.getDesc();
+        return post(policyElectronicRequest, PolicyElectronicResponse.class, requestUrl, requestDesc,apiUrl);
     }
 
     /**
-     * 投保结果查询
-     * @param submitVerifyResultRequest
-     * @param httpHeaders
-     * @param partnerCode
-     * @return
+     * 保单状态查询
      */
-    public SubmitVerifyResultResponse auditSaveResult(SubmitVerifyResultRequest submitVerifyResultRequest, HttpHeaders httpHeaders, String partnerCode,String url) {
-        SubmitVerifyResultResponse response = requestRequestUrl(RequestUrl.Z00009,
-                submitVerifyResultRequest,
-                SubmitVerifyResultResponse.class,
-                httpHeaders,
-                partnerCode,url);
-        SubmitVerifyResultResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(SubmitVerifyResultResponse.class);
-        res.setCode(response.getCode());
-        res.setMessage(response.getMessage());
-        return res;
+    public PolicyStatusResponse policyStatus(PolicyStatusRequest policyStatusRequest,String apiUrl) {
+        String requestUrl = RequestType.Z00007.getCode();
+        String requestDesc = RequestType.Z00007.getDesc();
+        return post(policyStatusRequest, PolicyStatusResponse.class, requestUrl, requestDesc,apiUrl);
     }
 
     /**
-     * @param underwritingResultRequest
-     * @param httpHeaders
-     * @param partnerCode
-     * @return
+     * 撤单
      */
-    public UnderwritingResultResponse auditResult(UnderwritingResultRequest underwritingResultRequest, HttpHeaders httpHeaders, String partnerCode,String url) {
-        UnderwritingResultResponse response = requestRequestUrl(RequestUrl.Z00008,
-                underwritingResultRequest,
-                UnderwritingResultResponse.class,
-                httpHeaders,
-                partnerCode,url);
-        UnderwritingResultResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(UnderwritingResultResponse.class);
-        res.setCode(response.getCode());
-        res.setMessage(response.getMessage());
-        return res;
+    public PolicyRecallResponse policyRecall(PolicyRecallRequest policyRecallRequest,String apiUrl) {
+        String requestUrl = RequestType.Z00008.getCode();
+        String requestDesc = RequestType.Z00008.getDesc();
+        return post(policyRecallRequest, PolicyRecallResponse.class, requestUrl, requestDesc,apiUrl);
+    }
+
+    public FcPolicyElectronicResponse fcPolicyElectronic(FcPolicyElectronicRequest fcPolicyElectronicRequest,String apiUrl) {
+        String requestUrl = RequestType.Z00009.getCode();
+        String requestDesc = RequestType.Z00009.getDesc();
+        return post(fcPolicyElectronicRequest, FcPolicyElectronicResponse.class, requestUrl, requestDesc,apiUrl);
     }
 }

+ 0 - 20
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/ChengTaiApiConfigureParameters.java

@@ -1,20 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.jzg.quotation.commons.standard.ConfigureParameters;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@AllArgsConstructor
-@NoArgsConstructor
-@Data
-public class ChengTaiApiConfigureParameters implements ConfigureParameters {
-
-    /**
-     * 诚泰业务员
-     */
-    @JsonProperty("UserId")
-    private String userId;
-
-}

+ 27 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/ChengTaiApiParameters.java

@@ -0,0 +1,27 @@
+package com.jzg.quotation.chengtai.api.entity;
+
+import com.jzg.quotation.commons.standard.ConfigureParameters;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class ChengTaiApiParameters implements ConfigureParameters {
+
+    // 合作伙伴代码
+    private String partnerCode;
+
+    // 合作方代码
+    private String userId;
+
+    // 用户名
+    private String userName;
+
+    // 密码
+    private String passWord;
+
+    // 外网提供的唯一标志
+    private String queryId;
+}

+ 0 - 34
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/ChengTaiEncrypted.java

@@ -1,34 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.jzg.quotation.chengtai.api.properties.ChengTaiApiProperties;
-
-import java.io.Serializable;
-
-
-public class ChengTaiEncrypted implements Serializable {
-
-    /**
-     * 业务数据加密串
-     */
-    @JsonProperty("encryptionMessage")
-    private String encryptionMessage;
-
-    /**
-     * 加密验签
-     */
-    @JsonProperty("signature")
-    private String signature;
-
-    /**
-     * 合作方代码
-     */
-    @JsonProperty("embarkPartnerCode")
-    private String embarkPartnerCode;
-
-    public ChengTaiEncrypted(String encryptionMessage, ChengTaiApiProperties properties, String signature) {
-        this.encryptionMessage = encryptionMessage;
-        this.embarkPartnerCode = properties.getPartnerCode();
-        this.signature = signature;
-    }
-}

+ 106 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/CarActualValueEnum.java

@@ -0,0 +1,106 @@
+package com.jzg.quotation.chengtai.api.entity.constants;
+
+import com.jzg.commons.exception.SystemException;
+import lombok.Getter;
+
+import java.math.BigDecimal;
+import java.util.Arrays;
+
+/**
+ * @author quchen
+ * @date 2026/4/20 17:07
+ */
+
+@Getter
+public enum CarActualValueEnum {
+    // ============================非能源车==============================
+    NON_ENERGY_CAR(new String[]{"0"}, new String[]{"01"},"A0",null, new BigDecimal("0.006"),"9座(含9座)以下非营运载客汽车(包括轿车、含越野型)"),
+
+    NON_ENERGY_CAR_TAXI_CARGO(new String[]{"0"},new String[]{"04","07","12"},"A1",null,new BigDecimal("0.012"),"出租汽车与及大于6吨载货汽车、矿山作业专用车"),
+
+    NON_ENERGY_CAR_OTHER(new String[]{"0"},new String[]{"01","02","03","04","07","10","11","12"},null, null, new BigDecimal("0.009"),"其他类型车辆"),
+    // ===========================能源车================================
+    ENERGY_CAR_10W(new String[]{"1"}, new String[]{"01","02","03","04","07","10","11","12"}, "A0",new PriceRange(null,new BigDecimal("100000")), new BigDecimal("0.0082"),"9座(含9座)客车,纯电动,新车购置价<10万"),
+    ENERGY_CAR_10W_TO_20W(new String[]{"1"}, new String[]{"01","02","03","04","07","10","11","12"},"A0", new PriceRange(new BigDecimal("100000"),new BigDecimal("200000")), new BigDecimal("0.0077"),"9座(含9座)客车,纯电动,新车购置价>=10万<20万"),
+    ENERGY_CAR_20W_TO_30W(new String[]{"1"}, new String[]{"01","02","03","04","07","10","11","12"},"A0", new PriceRange(new BigDecimal("200000"),new BigDecimal("300000")), new BigDecimal("0.0072"),"9座(含9座)客车,纯电动,新车购置价>=20万<30万"),
+    ENERGY_CAR_30W(new String[]{"1"}, new String[]{"01","02","03","04","07","10","11","12"}, "A0",new PriceRange(new BigDecimal("300000"),null), new BigDecimal("0.0068"),"9座(含9座)客车,纯电动,新车购置价>=30万"),
+    ENERGY_CAR_FUEL_CELL_PHEV(new String[]{"2","3"}, new String[]{"01","02","03","04","07","10","11","12"}, "A0",null, new BigDecimal("0.0063"),"9座(含9座)客车,燃料电池、插电式混合动力"),
+    ENERGY_CAR_LOW_SPEED_TRUCK(new String[]{"1","2","3","4","9"}, new String[]{"01","02","03","04","07","10","11","12"}, "A1",null, new BigDecimal("0.011"),"低速货车、三轮汽车"),
+    ENERGY_CAR_OTHER(new String[]{"4","9"}, new String[]{"01","02","03","04","07","10","11","12"}, "A0",null, new BigDecimal("0.009"),"其他类型车辆");
+    private final String[] energyType; // 能源种类 0-燃油 1-纯电动 2-燃料电池 3-插电式混合动力 4-其他混合动力 9-其他
+    private final String[] vehicleUse; // 车辆用途 01-营业出租租赁 02-营业城市公交 03-营业公路客运 04-营业货运 05-家庭自用 06-非营业机关 07-非营业企业 08-非营业货运
+
+    private final String vehicleType; // 车辆种类 A0-客车 A1-货车
+    private final PriceRange priceRange; // 新车购置价价格区间(仅纯电动客车有值)
+    private final BigDecimal monthlyDepreciationRate; // 月折旧率
+    private final String desc;
+
+    @Getter
+    public static class PriceRange {
+        private final BigDecimal min;
+        private final BigDecimal max;
+        public PriceRange(BigDecimal min, BigDecimal max) {
+            this.min = min;
+            this.max = max;
+        }
+    }
+    CarActualValueEnum(String[] energyType, String[] vehicleUse, String vehicleType, PriceRange priceRange, BigDecimal monthlyDepreciationRate, String desc) {
+        this.energyType = energyType;
+        this.vehicleUse = vehicleUse;
+        this.vehicleType = vehicleType;
+        this.priceRange = priceRange;
+        this.monthlyDepreciationRate = monthlyDepreciationRate;
+        this.desc = desc;
+    }
+
+    /**
+     * 匹配车辆折旧率
+     */
+    public static BigDecimal matchDepreciationRate(String energyType, String vehicleUse, String vehicleType, BigDecimal purchasePrice){
+        for (CarActualValueEnum enumItem : CarActualValueEnum.values()) {
+            // 匹配能源种类
+            boolean energyMatch = Arrays.asList(enumItem.getEnergyType()).contains(energyType);
+            if (!energyMatch) {
+                continue;
+            }
+            // 匹配车辆用途
+            boolean useMatch = Arrays.asList(enumItem.getVehicleUse()).contains(vehicleUse);
+            if (!useMatch) {
+                continue;
+            }
+            // 匹配车辆种类
+            boolean typeMatch = enumItem.getVehicleType().equals(vehicleType);
+            if (!typeMatch) {
+                continue;
+            }
+            // 匹配车辆购置价
+            PriceRange range = enumItem.getPriceRange();
+            if (range != null) {
+                // 购置价为空
+                if (purchasePrice == null) {
+                    continue;
+                }
+                // 价格区间匹配
+                boolean minMatch = (range.getMin() == null) || (purchasePrice.compareTo(range.getMin()) >= 0);
+                boolean maxMatch = (range.getMax() == null) || (purchasePrice.compareTo(range.getMax()) < 0);
+                if (minMatch && maxMatch) {
+                    return enumItem.getMonthlyDepreciationRate();
+                }
+            } else {
+                // 无价格区间直接匹配
+                return enumItem.getMonthlyDepreciationRate();
+            }
+        }
+        throw new SystemException("车辆折旧率匹配失败");
+    }
+
+    public static void main(String[] args) {
+        String energyType = "0";
+        String vehicleUse = "05";
+        String vehicleType = "A0";
+        BigDecimal purchasePrice = new BigDecimal("170000");
+        BigDecimal monthlyDepreciationRate = matchDepreciationRate(energyType, vehicleUse, vehicleType, purchasePrice);
+        System.out.println(monthlyDepreciationRate);
+
+    }
+}

+ 42 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/KindCodeEnum.java

@@ -0,0 +1,42 @@
+package com.jzg.quotation.chengtai.api.entity.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author quchen
+ * @date 2026/4/20 15:59
+ */
+
+@Getter
+@AllArgsConstructor
+public enum KindCodeEnum {
+    KCE_BZ("BZ","0801", "BZ","1","机动车交通事故责任强制保险"),
+    KCE_02("02", "0808","02", "1","第三者责任保险"),
+    KCE_01("01", "0808","01", "1","车辆损失保险"),
+    KCE_041("041","0808","041","1","车上人员责任险(司机)"),
+    KCE_044("044","0808","044","1","车上人员责任险(乘客)"),
+    KCE_FA("FA","0808","01","2","绝对免赔率(车损)"),
+    KCE_FB("FB","0808","02","2","绝对免赔率(三者)"),
+    KCE_FD11("FD11","0808","041","2","绝对免赔率(司机)"),
+    KCE_FD12("FD12","0808","044","2","绝对免赔率(乘客)"),
+    KCE_32("32", "0808","02","2","三者假日翻倍险"),
+    KCE_21("21", "0808","01","2","车身划痕损失险(附加险)"),
+    KCE_YB("YB","0808","02","2","医保外用药责任险(三者)"),
+    KCE_YD11("YD11","0808","041","2","医保外用药责任险(司机)"),
+    KCE_YD12("YD12","0808","044","2","医保外用药责任险(乘客)"),
+    KCE_S1("S1","0808","02","2","道路救援特约"),
+    KCE_S2("S2","0808","02","2","安全检测特约"),
+    KCE_S3("S3","0808","02","2","代驾特约"),
+    KCE_S4("S4","0808","02","2","代送检特约");
+
+    private final String kindCode;
+
+    private final String riskCode;
+
+    private final String mainKindCode;
+
+    private final String kindInd;
+
+    private final String desc;
+}

+ 43 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/KindCodeMapping.java

@@ -0,0 +1,43 @@
+package com.jzg.quotation.chengtai.api.entity.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author quchen
+ * @date 2026/4/21 14:18
+ */
+
+@Getter
+@AllArgsConstructor
+public enum KindCodeMapping {
+    BZ("BZ","0801", "BZ","1","机动车交通事故责任强制保险"),
+    B("02", "0808","02", "1","第三者责任保险"),
+    A("01", "0808","01", "1","车辆损失保险"),
+    D3("041","0808","041","1","车上人员责任险(司机)"),
+    D4("044","0808","044","1","车上人员责任险(乘客)"),
+    MJ1("FA","0808","01","2","绝对免赔率(车损)"),
+    MJ2("FB","0808","02","2","绝对免赔率(三者)"),
+    MJ3("FD11","0808","041","2","绝对免赔率(司机)"),
+    MJ4("FD12","0808","044","2","绝对免赔率(乘客)"),
+    BD("32", "0808","02","2","三者假日翻倍险"),
+    L("21", "0808","01","2","车身划痕损失险(附加险)"),
+    SY_FJ_YBW1("YB","0808","02","2","医保外用药责任险(三者)"),
+    SY_FJ_YBW3("YD11","0808","041","2","医保外用药责任险(司机)"),
+    SY_FJ_YBW2("YD12","0808","044","2","医保外用药责任险(乘客)"),
+    TY1("S1","0808","02","2","道路救援特约"),
+    TY2("S2","0808","02","2","安全检测特约"),
+    TY3("S3","0808","02","2","代驾特约"),
+    TY4("S4","0808","02","2","代送检特约");
+
+    private final String kindCode;
+
+    private final String riskCode;
+
+    private final String mainKindCode;
+
+    private final String kindInd;
+
+    private final String desc;
+
+}

+ 0 - 21
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/PlateType.java

@@ -1,21 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.constants;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 号牌种类
- */
-@Getter
-@AllArgsConstructor
-public enum PlateType {
-    P01("01", "大型汽车号牌"),
-    P02("02", "小型汽车号牌"),
-    P03("03", "使馆汽车号牌"),
-    P51("51", "大型新能源汽车"),
-    P52("52", "小型新能源汽车");
-
-    private final String code;
-
-    private final String desc;
-}

+ 33 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/RequestType.java

@@ -0,0 +1,33 @@
+package com.jzg.quotation.chengtai.api.entity.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @description: 诚泰财险 请求类型代码
+ * @author quchen
+ * @date 2026/4/20 11:55
+ */
+
+@Getter
+@AllArgsConstructor
+public enum RequestType {
+    Z00001("cxf/policyFeeCountSerivce?wsdl", "countFee","policyfeecount","保费计算"),
+    Z00002("new/vhl/carModelQuery","","","车辆查询"),
+    Z00003("new/wechat/uploadImage","","","上传影像"),
+    Z00004("cxf/policySaveSerivce?wsdl","savePolicy","policySave","核保提交"),
+    Z00005("chac/pay/payment","","","支付"),
+    Z00006("new/vhl/policyElectronic","","","保单下载"),
+    Z00007("new/vhl/policyStatus","","","保单状态查询"),
+    Z00008("new/vhl/policyRecall","","","撤单"),
+    Z00009("new/policy/policyUrl/query","","","非车电子保单下载"),;
+
+
+    private final String code;
+
+    private final String type;
+
+    private final String nameSpace;
+
+    private final String desc;
+}

+ 0 - 23
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/ResponseCode.java

@@ -1,23 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.constants;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 诚泰异常信息枚举
- */
-@AllArgsConstructor
-@Getter
-public enum ResponseCode {
-
-    R_000("000", "访问成功"),
-    R_999("999", "访问失败"),
-    R_998("998", "查询接入方信息失败"),
-    R_997("000", "验签失败"),
-    R_996("000", "参数解密失败"),
-    R_995("000", "系统繁忙");
-
-    private final String code;
-
-    private final String desc;
-}

+ 32 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/UploadEnum.java

@@ -0,0 +1,32 @@
+package com.jzg.quotation.chengtai.api.entity.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author quchen
+ * @date 2026/4/21 16:46
+ */
+
+@Getter
+@AllArgsConstructor
+public enum UploadEnum {
+    C01("01-06-02", "行驶证正面"),
+    D01("01-06-02", "行驶证反面"),
+
+    C02("01-06-03", "车主身份证正面"),
+    D02("01-06-03", "车主身份证反面"),
+    Y02("01-06-09", "车主营业执照"),
+
+    C03("01-06-03", "投保人身份证正面"),
+    D03("01-06-03", "投保人身份证反面"),
+    Y03("01-06-09", "投保人营业执照"),
+
+    C04("01-06-03", "被保人身份证正面"),
+    D04("01-06-03", "被保人身份证反面"),
+    Y04("01-06-09", "被保人营业执照");
+
+    private final String code;
+
+    private final String name;
+}

+ 25 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/UseNatureShowEnum.java

@@ -0,0 +1,25 @@
+package com.jzg.quotation.chengtai.api.entity.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author quchen
+ * @date 2026/4/21 10:45
+ */
+
+@Getter
+@AllArgsConstructor
+public enum UseNatureShowEnum {
+    U_05("01", "家庭自用"),
+    U_07("10", "非营业企业"),
+    U_06("11", "非营业党政机关,事业团体"),
+    U_01("04", "营业出租租赁"),
+    U_02("03", "营业城市公交"),
+    U_03("02", "营业公路客运"),
+    U_04("07", "营业货运"),
+    U_08("12", "非营业货运");
+    private final String code;
+
+    private final String desc;
+}

+ 0 - 55
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/enums/ImageTypeEnum.java

@@ -1,55 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.constants.enums;
-
-import com.jzg.commons.constants.quote.enums.base.InsuranceImageEnum;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 诚泰图片类型枚举
- */
-@Getter
-@AllArgsConstructor
-public enum ImageTypeEnum {
-
-    IT_1("1", "行驶证正面",new String[]{
-            InsuranceImageEnum.C01.getCode(),
-    }),
-    IT_11("11", "行驶证反面",new String[]{
-            InsuranceImageEnum.D01.getCode(),
-    }),
-
-    IT_2("2", "车主身份证正面",new String[]{
-            InsuranceImageEnum.C02.getCode(), InsuranceImageEnum.Y02.getCode()
-    }),
-    IT_3("3", "车主身份证反面",new String[]{
-            InsuranceImageEnum.D02.getCode(),
-    }),
-
-    IT_4("4", "投保人身份证正面",new String[]{
-            InsuranceImageEnum.C03.getCode(), InsuranceImageEnum.Y03.getCode()
-    }),
-    IT_5("5", "投保人身份证反面",new String[]{
-            InsuranceImageEnum.D03.getCode(),
-    }),
-
-    IT_6("6", "被保人身份证正面",new String[]{
-            InsuranceImageEnum.C04.getCode(), InsuranceImageEnum.Y04.getCode()
-    }),
-    IT_7("7", "被保人身份证反面",new String[]{
-            InsuranceImageEnum.D04.getCode(),
-    }),
-
-    IT_20("20", "购车发票", new String[]{
-            InsuranceImageEnum.GC00.getCode()
-    }),
-
-    IT_21("21", "验车照", new String[]{"C05"}),
-    IT_22("22", "其他影像资料",new String[]{}),
-    IT_30("30", "验车视频",new String[]{});
-    private final String code;
-
-    private final String desc;
-
-    private final String[] imagesType;
-
-}

+ 0 - 32
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/enums/OrderStatusEnum.java

@@ -1,32 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.constants.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 诚泰保单状态枚举
- */
-@Getter
-@AllArgsConstructor
-public enum OrderStatusEnum {
-
-    A1000("A1000", "未核保"),
-    A2003("A2003", "核保中"),
-    A2000("A2000", "核保成功"),
-    A2004("A2004", "投保“车+意”核保失败(非车核保失败)"),
-    A2002("A2002", "转人工核保"),
-    A2006("A2006", "人核已领取待审核"),
-    A2001("A2001", "核保拒保"),
-    A2999("A2999", "核保失败"),
-    A2998("A2998", "核保撤销失败"),
-    A2008("A2008", "涉恐或反欺诈"),
-    A2009("A2009", "涉恐冻结"),
-    A2007("A2007", "转出单"),
-    A7004("A7004", "支付成功承保中"),
-    A7005("A7005", "支付成功承保成功"),
-    A7999("A7999", "承保失败");
-
-    private final String code;
-
-    private final String desc;
-}

+ 0 - 35
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/enums/RequestUrl.java

@@ -1,35 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.constants.enums;
-
-import com.jzg.quotation.commons.standard.CrawlerRequestUrlStandard;
-import lombok.AllArgsConstructor;
-
-@AllArgsConstructor
-public enum RequestUrl implements CrawlerRequestUrlStandard {
-
-    Z00001("SHUB-ChacInsureLoginShub", "获取Token信息"),
-    Z00002("SHUB-ChacCarInfoQueryShub", "车辆查询"),
-    Z00003("SHUB-ChaCarCalculActualValueCalCulShub", "车辆实际价值计算"),
-    Z00004("SHUB-ChacInsurePremiumCalculationShub", "保费试算"),
-    Z00005("SHUB-ChacInsureImageUploadShub", "影像上传"),
-    Z00006("SHUB-ChacInsureProposalInsureSaveEventShub", "投保保存"),
-    Z00007("SHUB-ChacInsureProposalUnderWriteEventShub", "核保"),
-    Z00008("SHUB-ChacInsureProposalUnderWriteRetShub", "核保结果查询"),
-    Z00009("SHUB-ChacInsureApplicateRetShub", "投保结果查询"),
-    Z00010("SHUB-ChacInsureSMSReissueShub", "获取支付链接"),
-    Z00011("SHUB-ChacInsureSearchDownPolicyAddressShub", "保单下载"),
-    Z00012("SHUB-ChacCancelOrderShub", "撤销订单");
-
-    private final String uri;
-
-    private final String description;
-
-    @Override
-    public String getRequestDescription() {
-        return description;
-    }
-
-    @Override
-    public String uri() {
-        return uri;
-    }
-}

+ 0 - 28
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/enums/RiskCodeEnum.java

@@ -1,28 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.constants.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 险种枚举
- */
-@Getter
-@AllArgsConstructor
-public enum RiskCodeEnum {
-
-    R1002("1002", "交强险(08版)"),
-    R1003("1003", "摩托车拖拉机交强险(08版)"),
-    R1231("1231", "机动车综合商业保险"),
-    R1232("1232", "特种车综合商业保险"),
-    R1233("1233", "摩托车、拖拉机综合商业保险"),
-    R1234("1234", "机动车单程提车保险"),
-    R0825("0825", "新能源车综合商业保险"),
-    R0821("0821", "机动车商业保险(2020版)"),
-    R0822("0822", "特种车商业保险(2020版)"),
-    R0823("0823", "摩托车、拖拉机商业保险(2020版)"),
-    R0824("0824", "机动车单程提车保险(2020版)"),
-    R1116("ct_1116", "驾意险");
-    private final String code;
-
-    private final String desc;
-}

+ 0 - 28
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/constants/enums/TaxConditionCodeEnum.java

@@ -1,28 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.constants.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 纳税类型代码
- */
-@Getter
-@AllArgsConstructor
-public enum TaxConditionCodeEnum {
-
-    T_1("1N", "纳税"),
-    T_2("3M", "免税"),
-    T_3("5J", "减税"),
-    T_4("2W", "完税"),
-    T_5("4H", "缓税"),
-
-    T_6("6Q", "欠税"),
-    T_7("7B", "不征税"),
-    T_8("8R", "拒缴"),
-    T_9("9D", "有争议"),
-    T_0("0N", "不代收");
-
-    private final String code;
-
-    private final String desc;
-}

+ 0 - 24
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/BaseRequest.java

@@ -1,24 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.request;
-
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serial;
-import java.io.Serializable;
-
-/**
- * 【诚泰】请求实体父类
- */
-@NoArgsConstructor
-@Data
-public class BaseRequest implements Serializable {
-
-    @Serial
-    private static final long serialVersionUID = 076365617362353225676L;
-
-    private String embarkPartnerCode;
-
-    public BaseRequest(String embarkPartnerCode) {
-        this.embarkPartnerCode = embarkPartnerCode;
-    }
-}

+ 0 - 38
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/CarInfoRequest.java

@@ -1,38 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.request;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * 【车型查询】请求实体
- */
-@NoArgsConstructor
-@Data
-public class CarInfoRequest extends BaseRequest {
-
-    /**
-     * 车型名称
-     */
-    @JsonProperty("modelCName")
-    private String modelCName;
-
-    /**
-     * 起始条数
-     */
-    @JsonProperty("begin")
-    private Integer begin;
-
-    /**
-     * 每页条数
-     */
-    @JsonProperty("count")
-    private Integer count;
-
-    public CarInfoRequest(String partnerCode, String brandName) {
-        super(partnerCode);
-        this.modelCName = brandName;
-        this.begin = 0;
-        this.count = 50;
-    }
-}

+ 46 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/CarModelQueryRequest.java

@@ -0,0 +1,46 @@
+package com.jzg.quotation.chengtai.api.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author quchen
+ * @date 2026/4/20 14:44
+ */
+
+@NoArgsConstructor
+@Data
+public class CarModelQueryRequest {
+    /**
+     * 品牌型号
+     */
+    @JsonProperty("brandName")
+    private String brandName;
+
+    /**
+     * 当前页
+     */
+    @JsonProperty("nowPage")
+    private String nowPage;
+
+    /**
+     * 每页条数
+     */
+    @JsonProperty("pageSize")
+    private String pageSize;
+
+    /**
+     * 是否需要编码 前台页面直接请求,该字段不填;通过后台代码请求接口时该字段填:‘00000’
+     */
+    @JsonProperty("encode")
+    private String encode;
+
+    public CarModelQueryRequest(String brandName) {
+        this.brandName = brandName;
+        this.nowPage = "1";
+        this.pageSize = "20";
+        this.encode = "00000";
+    }
+}

+ 0 - 24
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/ChengTaiTokenRequest.java

@@ -1,24 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.request;
-
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * @description: 诚泰财险 为接入方提供获取token服务 入参实体
- * @author: dongxin
- * @date: 2023/8/19 9:28
- **/
-@NoArgsConstructor
-@Data
-public class ChengTaiTokenRequest extends BaseRequest {
-
-    @JsonProperty("embarkPartnerCode")
-    private String embarkPartnerCode;
-
-    public ChengTaiTokenRequest(String embarkPartnerCode){
-        this.embarkPartnerCode = embarkPartnerCode;
-    }
-
-}

+ 0 - 21
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/DownLoadDocumentUrlRequest.java

@@ -1,21 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.request;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * 【保单下载】请求实体
- */
-@NoArgsConstructor
-@Data
-public class DownLoadDocumentUrlRequest extends BaseRequest{
-
-    @JsonProperty("policyNo")
-    private String policyNo;
-
-    public DownLoadDocumentUrlRequest(String ppartnerCode, String policyNo) {
-        super(ppartnerCode);
-        this.policyNo = policyNo;
-    }
-}

+ 73 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/FcPolicyElectronicRequest.java

@@ -0,0 +1,73 @@
+package com.jzg.quotation.chengtai.api.entity.request;
+
+import com.jzg.commons.entity.quote.vo.base.OrderBase;
+import com.jzg.quotation.chengtai.api.entity.ChengTaiApiParameters;
+import com.jzg.quotation.commons.utils.SnowFlakeUtil;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author quchen
+ * @date 2026/4/22 11:07
+ */
+
+@Data
+@AllArgsConstructor
+public class FcPolicyElectronicRequest {
+    private Head head;
+
+    private Body body;
+
+    @Data
+    @NoArgsConstructor
+    public static class Head {
+        /**
+         * 请求类型
+         */
+        private String requestType;
+
+        /**
+         * 用户名
+         */
+        private String userName;
+
+        /**
+         * 密码
+         */
+        private String passWord;
+
+        /**
+         * 合作伙伴编码
+         */
+        private String partnerCode;
+
+        /**
+         * 外网提供的唯一标志
+         */
+        private String queryId;
+
+        public Head(ChengTaiApiParameters parameters) {
+            this.requestType = "00011";
+            this.userName = parameters.getUserName();
+            this.passWord = parameters.getPassWord();
+            this.partnerCode = parameters.getPartnerCode();
+            this.queryId = String.valueOf(new SnowFlakeUtil().nextId());
+        }
+    }
+
+    @Data
+    @NoArgsConstructor
+    public static class Body {
+        private String policyNo;
+
+        public Body(String policyNo) {
+            this.policyNo = policyNo;
+        }
+    }
+
+    public FcPolicyElectronicRequest(ChengTaiApiParameters parameters, String policyNo) {
+        this.head = new Head(parameters);
+        this.body = new Body(policyNo);
+    }
+}

+ 0 - 1481
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/InsurePremiumRequest.java

@@ -1,1481 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.request;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.ArrayUtil;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.jzg.commons.entity.orders.po.InsOrdersCarUserInfo;
-import com.jzg.commons.entity.quote.vo.*;
-import com.jzg.commons.exception.SystemException;
-import com.jzg.commons.util.IDCardUtils;
-import com.jzg.commons.util.StringUtils;
-import com.jzg.quotation.chengtai.api.entity.ChengTaiApiConfigureParameters;
-import com.jzg.quotation.chengtai.api.entity.constants.PlateType;
-import com.jzg.quotation.chengtai.api.entity.constants.enums.RiskCodeEnum;
-import com.jzg.quotation.chengtai.api.entity.constants.enums.TaxConditionCodeEnum;
-import com.jzg.quotation.chengtai.api.entity.response.CarInfoResponse;
-import com.jzg.quotation.chengtai.api.entity.response.QueryCarActualValueResponse;
-import com.jzg.quotation.commons.constant.InsuranceTypeCorrespondence;
-import com.jzg.commons.entity.quote.vo.QuoteVo;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.math.BigDecimal;
-import java.time.format.DateTimeFormatter;
-import java.util.*;
-
-/**
- * 【保费试算】请求实体
- */
-@NoArgsConstructor
-@Data
-public class InsurePremiumRequest extends BaseRequest {
-
-    /**
-     * 意外险信息
-     */
-    @JsonProperty("accContract")
-    private AccContractDTO accContract;
-
-    /**
-     * 商业信息
-     */
-    @JsonProperty("biContract")
-    private BiContractDTO biContract;
-
-    /**
-     * 标的信息
-     */
-    @JsonProperty("insuredObject")
-    private InsuredObjectDTO insuredObject;
-
-    /**
-     * 车主
-     */
-    @JsonProperty("owner")
-    private OwnerDTO owner;
-
-    /**
-     * 交强险信息
-     */
-    @JsonProperty("ciContract")
-    private CiContractDTO ciContract;
-
-    /**
-     * 订单号
-     */
-    @JsonProperty("orderId")
-    private String orderId;
-
-    /**
-     * 保司业务员编码
-     */
-    @JsonProperty("handlerCode")
-    private String handlerCode;
-
-    @JsonProperty("applicant")
-    private ApplicantDTO applicant;
-    @JsonProperty("insured")
-    private InsuredDTO insured;
-
-    public InsurePremiumRequest(CarInfoResponse.CarModelListDTO carModelListDTO,
-                                QueryCarActualValueResponse carActualValueResponse,
-                                ChengTaiApiConfigureParameters parameters,
-                                QuoteVo quoteVo, String partnerCode){
-        super(partnerCode);
-        // 标的信息
-        InsuredObjectDTO insuredObject = new InsuredObjectDTO(quoteVo, carModelListDTO,carActualValueResponse);
-        this.insuredObject = insuredObject;
-        // 客户信息
-        OwnerDTO owner = new OwnerDTO(quoteVo.getOwnersInfo());
-        this.owner = owner;
-        CustomerInfoVo policyHolderInfo = quoteVo.getPolicyHolderInfo();
-        CustomerInfoVo insuredPersonInfo = quoteVo.getInsuredPersonInfo();
-        if ("0".equals(policyHolderInfo.getProperty())){
-            if (StringUtils.isBlank(policyHolderInfo.getTelephone())){
-                throw new SystemException("诚泰公司企业报价固定电话必填!");
-            }
-        }
-        if ("0".equals(insuredPersonInfo.getProperty())){
-            if (StringUtils.isBlank(insuredPersonInfo.getTelephone())){
-                throw new SystemException("诚泰公司企业报价固定电话必填!");
-            }
-        }
-        // 交强险
-        RiskInfoVo ciRiskInfoVo =  quoteVo.getCiRiskInfoVo();
-        if (Objects.nonNull(ciRiskInfoVo)){
-            CiContractDTO ciContract = new CiContractDTO(quoteVo,ciRiskInfoVo);
-            this.ciContract = ciContract;
-        }
-        // 商业险
-        RiskInfoVo biRiskInfoVo =  quoteVo.getBiRiskInfoVo();
-        if (Objects.nonNull(biRiskInfoVo)){
-            BiContractDTO biContract = new BiContractDTO(quoteVo,biRiskInfoVo,carActualValueResponse);
-            this.biContract = biContract;
-        }
-        // 意外险
-        List<AccidentalDrivingVo> accidentalDrivingVos = quoteVo.getAccidentalDrivings();
-        if(CollUtil.isNotEmpty(accidentalDrivingVos)){
-            AccContractDTO accContract = new AccContractDTO(quoteVo,accidentalDrivingVos);
-            this.accContract = accContract;
-        }
-        this.handlerCode = parameters.getUserId();
-
-        // 获取投保人被保人信息
-        CustomerInfoVo insuredHolder = quoteVo.getInsuredPersonInfo();
-        InsuredDTO insured = new InsuredDTO(insuredHolder);
-        this.insured = insured;
-        CustomerInfoVo policyHolder = quoteVo.getPolicyHolderInfo();
-        ApplicantDTO applicant = new ApplicantDTO(policyHolder);
-        this.applicant = applicant;
-    }
-
-    @Data
-    @NoArgsConstructor
-    public static class InsuredDTO {
-        @JsonProperty("type")
-        private String type;
-        @JsonProperty("name")
-        private String name;
-        @JsonProperty("identifyTypeCode")
-        private String identifyTypeCode;
-        @JsonProperty("identifyNumber")
-        private String identifyNumber;
-        @JsonProperty("identifyValidDate")
-        private String identifyValidDate;
-        @JsonProperty("identifyValidEndDate")
-        private String identifyValidEndDate;
-        @JsonProperty("identifyTypeName")
-        private String identifyTypeName;
-        @JsonProperty("sex")
-        private String sex;
-        @JsonProperty("age")
-        private Integer age;
-        @JsonProperty("birthday")
-        private String birthday;
-        @JsonProperty("longTerm")
-        private String longTerm;
-        @JsonProperty("province")
-        private String province;
-        @JsonProperty("city")
-        private String city;
-        @JsonProperty("district")
-        private String district;
-        @JsonProperty("addr")
-        private String addr;
-        @JsonProperty("mobile")
-        private String mobile;
-        @JsonProperty("relationWithInsured")
-        private String relationWithInsured;
-        @JsonProperty("relationWithCar")
-        private String relationWithCar;
-        @JsonProperty("organizationCode")
-        private String organizationCode;
-        @JsonProperty("tel")
-        private String tel;
-        @JsonProperty("linkerName")
-        private String linkerName;
-        @JsonProperty("unitTypeCode")
-        private String unitTypeCode;
-        @JsonProperty("terrorNationality")
-        private String terrorNationality;
-
-        public InsuredDTO(CustomerInfoVo insuredHolder) {
-//            if (insuredHolder.getPersonType().equals(1)) {
-                this.type = "1";
-                this.identifyTypeCode = "01";
-                this.identifyNumber = insuredHolder.getIdentifyNumber();
-                this.sex = insuredHolder.getGender();
-                this.birthday = IDCardUtils.GetBirthday(insuredHolder.getIdentifyNumber());
-                this.relationWithInsured = "0";
-                this.relationWithCar = "1";
-//            } else {
-//                this.type = "2";
-//                this.identifyTypeCode = "4";
-//                this.identifyNumber = insuredHolder.getIdentifyNumber();
-//                this.organizationCode = insuredHolder.getIdentifyNumber();
-//                this.tel = insuredHolder.getTelephone();
-////                this.linkerName = insuredHolder.getContact();
-//                this.unitTypeCode = "900"; // 单位性质 900:其他
-//            }
-            this.name = insuredHolder.getName();
-            this.province = insuredHolder.getProvinceCode();
-            this.city = insuredHolder.getCityCode();
-            this.district = insuredHolder.getCountyCode();
-            this.addr = insuredHolder.getAddr();
-            this.mobile = insuredHolder.getMobile();
-            this.identifyValidDate = insuredHolder.getIdentifyValidDate();
-            this.identifyValidEndDate = insuredHolder.getIdentifyValidEndDate();
-            this.longTerm = "0";
-            this.terrorNationality = "CN";
-        }
-    }
-
-    @Data
-    @NoArgsConstructor
-    public static class ApplicantDTO {
-        @JsonProperty("type")
-        private String type;
-        @JsonProperty("name")
-        private String name;
-        @JsonProperty("identifyTypeCode")
-        private String identifyTypeCode;
-        @JsonProperty("identifyNumber")
-        private String identifyNumber;
-        @JsonProperty("identifyValidDate")
-        private String identifyValidDate;
-        @JsonProperty("identifyValidEndDate")
-        private String identifyValidEndDate;
-        @JsonProperty("identifyTypeName")
-        private String identifyTypeName;
-        @JsonProperty("sex")
-        private String sex;
-        @JsonProperty("age")
-        private Integer age;
-        @JsonProperty("birthday")
-        private String birthday;
-        @JsonProperty("longTerm")
-        private String longTerm;
-        @JsonProperty("province")
-        private String province;
-        @JsonProperty("city")
-        private String city;
-        @JsonProperty("district")
-        private String district;
-        @JsonProperty("addr")
-        private String addr;
-        @JsonProperty("mobile")
-        private String mobile;
-        @JsonProperty("organizationCode")
-        private String organizationCode;
-        @JsonProperty("tel")
-        private String tel;
-        @JsonProperty("linkerName")
-        private String linkerName;
-        @JsonProperty("unitTypeCode")
-        private String unitTypeCode;
-        @JsonProperty("terrorNationality")
-        private String terrorNationality;
-
-
-        public ApplicantDTO(CustomerInfoVo policyHolder){
-//            if(policyHolder.getPersonType().equals(1)){
-                this.type = "1";
-                this.identifyTypeCode = "01";
-                this.identifyNumber = policyHolder.getIdentifyNumber();
-                this.sex = policyHolder.getGender();
-                this.birthday = IDCardUtils.GetBirthday(policyHolder.getIdentifyNumber());
-//            }else{
-//                this.type = "2";
-//                this.identifyTypeCode = "4";
-//                this.identifyNumber = policyHolder.getIdentifyNumber();
-//                this.organizationCode = policyHolder.getIdentifyNumber();
-//                this.tel = policyHolder.getTelephone();
-////                this.linkerName = policyHolder.getContact();
-//                this.unitTypeCode = "900"; // 单位性质 900:其他
-//            }
-            this.name = policyHolder.getName();
-            this.province = policyHolder.getProvinceCode();
-            this.city = policyHolder.getCityCode();
-            this.district = policyHolder.getCountyCode();
-            this.addr = policyHolder.getAddr();
-            this.mobile = policyHolder.getMobile();
-            this.identifyValidDate = policyHolder.getIdentifyValidDate();
-            this.identifyValidEndDate = policyHolder.getIdentifyValidEndDate();
-            this.longTerm = "0";
-            this.terrorNationality = "CN";
-        }
-    }
-
-    @NoArgsConstructor
-    @Data
-    public static class AccContractDTO {
-
-        /**
-         * 险种信息
-         */
-        @JsonProperty("contractMain")
-        private ContractMainDTO contractMain;
-
-        /**
-         * 险别列表
-         */
-        @JsonProperty("coverage")
-        private List<CoverageDTO> coverage;
-
-        public AccContractDTO(QuoteVo quoteVo, List<AccidentalDrivingVo> accidentalDrivingVos){
-            ContractMainDTO contractMain = new ContractMainDTO(quoteVo);
-            this.contractMain = contractMain;
-            // 投保险别列表
-            this.coverage = CoverageDTO.toCoverageList(accidentalDrivingVos);
-        }
-        @NoArgsConstructor
-        @Data
-        public static class ContractMainDTO {
-
-            /**
-             * 险种代码
-             */
-            @JsonProperty("riskCode")
-            private String riskCode;
-
-            /**
-             * 即时起保
-             */
-            @JsonProperty("validAtOnce")
-            private String validAtOnce;
-
-            /**
-             * 起保日期
-             */
-            @JsonProperty("validDate")
-            private String validDate;
-
-            /**
-             * 终保日期
-             */
-            @JsonProperty("expiryDate")
-            private String expiryDate;
-
-            /**
-             * 续保标志
-             */
-            @JsonProperty("renewalFlag")
-            private String renewalFlag;
-
-            /**
-             * 方案编码
-             */
-            @JsonProperty("insPlan")
-            private String insPlan;
-
-            public ContractMainDTO(QuoteVo quoteVo){
-                List<AccidentalDrivingVo> accidentalDrivings = quoteVo.getAccidentalDrivings();
-                this.riskCode = "ct_1116";
-                this.renewalFlag = "0";
-                this.insPlan = accidentalDrivings.get(0).getProductCode();
-                RiskInfoVo ciRiskInfoVo = quoteVo.getCiRiskInfoVo();
-                RiskInfoVo biRiskInfoVo = quoteVo.getBiRiskInfoVo();
-                if(Objects.nonNull(ciRiskInfoVo)){
-                    this.validAtOnce = ciRiskInfoVo.isInstantFlag() ? "1" : "0"; // 及时起保
-                    this.validDate =ciRiskInfoVo.getStartDate();
-                    this.expiryDate = ciRiskInfoVo.getEndDate();
-                } else if(Objects.nonNull(biRiskInfoVo)){
-                    this.validAtOnce = biRiskInfoVo.isInstantFlag() ? "1" : "0"; // 及时起保
-                    this.validDate =biRiskInfoVo.getStartDate();
-                    this.expiryDate = biRiskInfoVo.getEndDate();
-                }
-            }
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class CoverageDTO {
-
-            /**
-             * 险别代码
-             */
-            @JsonProperty("kindCode")
-            private String kindCode;
-
-            /**
-             * 是否主险
-             */
-            @JsonProperty("ifMainKind")
-            private String ifMainKind;
-
-            /**
-             * 数量相关计数
-             */
-            @JsonProperty("quantity")
-            private Integer quantity;
-            @JsonProperty("calculateFlag")
-            private String calculateFlag;
-            @JsonProperty("shortRateType")
-            private String shortRateType;
-            @JsonProperty("shortRate")
-            private String shortRate;
-
-            public static List<CoverageDTO> toCoverageList(List<AccidentalDrivingVo> ctQuoteAccidentVo) {
-                List<CoverageDTO> coverageDTOS = new ArrayList<>();
-                CoverageDTO coverageDTO1 = new CoverageDTO();
-                coverageDTO1.setKindCode("ct_111601");
-                coverageDTO1.setIfMainKind("2");
-                coverageDTO1.setQuantity(0);
-                coverageDTO1.setCalculateFlag("1");
-                coverageDTO1.setShortRateType("2");
-                coverageDTO1.setShortRate("100");
-                coverageDTOS.add(coverageDTO1);
-                CoverageDTO coverageDTO2 = new CoverageDTO();
-                coverageDTO2.setKindCode("ct_111602");
-                coverageDTO2.setIfMainKind("2");
-                coverageDTO2.setQuantity(0);
-                coverageDTO2.setCalculateFlag("1");
-                coverageDTO2.setShortRateType("2");
-                coverageDTO2.setShortRate("100");
-                coverageDTOS.add(coverageDTO2);
-                CoverageDTO coverageDTO3 = new CoverageDTO();
-                coverageDTO3.setKindCode("ct_111603");
-                coverageDTO3.setIfMainKind("2");
-                coverageDTO3.setQuantity(0);
-                coverageDTO3.setCalculateFlag("1");
-                coverageDTO3.setShortRateType("2");
-                coverageDTO3.setShortRate("100");
-                coverageDTOS.add(coverageDTO3);
-                return coverageDTOS;
-            }
-        }
-    }
-
-    @NoArgsConstructor
-    @Data
-    public static class BiContractDTO {
-        @JsonProperty("contractMain")
-        private ContractMainDTO contractMain;
-        @JsonProperty("coverage")
-        private List<CoverageDTO> coverage;
-        @JsonProperty("platFormMessage")
-        private PlatFormMessageDTO platFormMessage;
-
-        public BiContractDTO(QuoteVo quoteVo, RiskInfoVo biRiskInfoVo, QueryCarActualValueResponse carActualValueResponse){
-            boolean isNewEnergy = quoteVo.getCarInfoVo().isNewEnergyMark();
-            // 险种信息
-            ContractMainDTO contractMain = new ContractMainDTO(biRiskInfoVo,isNewEnergy);
-            this.contractMain = contractMain;
-            // 投保险别列表
-            this.coverage = CoverageDTO.toCoverageList(quoteVo,carActualValueResponse);
-        }
-
-        @NoArgsConstructor        @Data
-        public static class PlatFormMessageDTO {
-//            @JsonProperty("scoreCode")
-//            private String scoreCode;
-//            @JsonProperty("lastPolicyQueryDate")
-//            private String lastPolicyQueryDate;
-//            @JsonProperty("insureYears")
-//            private String insureYears;
-//            @JsonProperty("ciCarKind")
-//            private String ciCarKind;
-//            @JsonProperty("peccancyAdjustCI")
-//            private String peccancyAdjustCI;
-//            @JsonProperty("lastPolicyExpireDate")
-//            private String lastPolicyExpireDate;
-//            @JsonProperty("noClaimAdjustReasonCodeBI")
-//            private String noClaimAdjustReasonCodeBI;
-//            @JsonProperty("modelEnergyType")
-//            private String modelEnergyType;
-//            @JsonProperty("noClaimAdjustReason")
-//            private String noClaimAdjustReason;
-//            @JsonProperty("score")
-//            private String score;
-//            @JsonProperty("queryDate")
-//            private String queryDate;
-//            @JsonProperty("claimAdjustReasonCodeBI")
-//            private String claimAdjustReasonCodeBI;
-//            @JsonProperty("ciModelCode")
-//            private String ciModelCode;
-//            @JsonProperty("lastPolicyEffectiveDate")
-//            private String lastPolicyEffectiveDate;
-//            @JsonProperty("unMatchLicenseNoMessage")
-//            private String unMatchLicenseNoMessage;
-//            @JsonProperty("lastReplacementValue")
-//            private String lastReplacementValue;
-//            @JsonProperty("expireDate")
-//            private String expireDate;
-//            @JsonProperty("repeatedMsg")
-//            private String repeatedMsg;
-            @JsonProperty("question")
-            private String question;
-//            @JsonProperty("noClaimAdjustReasonBI")
-//            private String noClaimAdjustReasonBI;
-//            @JsonProperty("nonClaimAdjust")
-//            private String nonClaimAdjust;
-            @JsonProperty("querySequenceNo")
-            private String querySequenceNo;
-//            @JsonProperty("noClaimAdjustReasonCodeCI")
-//            private String noClaimAdjustReasonCodeCI;
-//            @JsonProperty("lastModelCode")
-//            private String lastModelCode;
-//            @JsonProperty("claimAdjustReasonCodeCI")
-//            private String claimAdjustReasonCodeCI;
-//            @JsonProperty("lastModel")
-//            private String lastModel;
-            @JsonProperty("answer")
-            private String answer;
-//            @JsonProperty("claimCoeff")
-//            private String claimCoeff;
-//            @JsonProperty("claimAdjustLevel")
-//            private String claimAdjustLevel;
-//            @JsonProperty("peccancyAdjustReasonCI")
-//            private String peccancyAdjustReasonCI;
-            @JsonProperty("reinsuranceFlag")
-            private String reinsuranceFlag;
-//            @JsonProperty("claimTimes")
-//            private String claimTimes;
-//            @JsonProperty("rateFloatFlag")
-//            private String rateFloatFlag;
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class ContractMainDTO {
-
-            /**
-             * 期望系数
-             */
-            @JsonProperty("hopeCoefficient")
-            private Double hopeCoefficient;
-
-            /**
-             * 期望折扣
-             */
-            @JsonProperty("hopeDiscount")
-            private Double hopeDiscount;
-
-            /**
-             * 上年保单号
-             */
-            @JsonProperty("lastYearPolicyNo")
-            private String lastYearPolicyNo;
-            @JsonProperty("othBusinessNo")
-            private String othBusinessNo;
-
-            /**
-             * 续保标志
-             */
-            @JsonProperty("renewalFlag")
-            private String renewalFlag;
-
-            /**
-             * 险种代码
-             */
-            @JsonProperty("riskCode")
-            private String riskCode;
-
-            /**
-             * 险种名称
-             */
-            @JsonProperty("riskName")
-            private String riskName;
-
-            /**
-             * 即时起保
-             */
-            @JsonProperty("validAtOnce")
-            private String validAtOnce;
-
-            /**
-             * 起保日期
-             */
-            @JsonProperty("validDate")
-            private String validDate;
-
-            /**
-             * 终保日期
-             */
-            @JsonProperty("expiryDate")
-            private String expiryDate;
-
-            public ContractMainDTO(RiskInfoVo biRiskInfoVo, boolean isNewEnergy){
-                if(isNewEnergy){
-                    this.riskCode = RiskCodeEnum.R0825.getCode();
-                    this.riskName = RiskCodeEnum.R0825.getDesc();
-                }else{
-                    this.riskCode = RiskCodeEnum.R0821.getCode();
-                    this.riskName = RiskCodeEnum.R0821.getDesc();
-                }
-                this.validAtOnce = biRiskInfoVo.isInstantFlag()? "1" : "0"; // 及时起保
-                this.validDate =biRiskInfoVo.getStartDate();
-                this.expiryDate = biRiskInfoVo.getEndDate();
-                this.renewalFlag = "0";
-
-                // TODO 后期加期望折扣和期望系数
-//                String discount = quoteVo.getDiscount();
-//                String coefficient = quoteVo.getCoefficient();
-//                if(StringUtils.isNotBlank(discount)){
-//                    // 获取商业险的初始建议折扣 和 期望折扣
-//                    Double hopeDiscount = Double.parseDouble(discount); // 期望折扣
-//                    this.hopeDiscount = hopeDiscount;
-//                }else if(StringUtils.isNotBlank(coefficient)){
-//                    // 获取商业险的初始建议折扣 和 期望折扣
-//                    Double hopeCoefficient = Double.parseDouble(coefficient); // 期望折扣
-//                    this.hopeCoefficient = hopeCoefficient;
-//                }
-            }
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class CoverageDTO {
-
-            /**
-             * 保额
-             */
-            @JsonProperty("amount")
-            private BigDecimal amount;
-
-            /**
-             * 单位限额
-             */
-            @JsonProperty("unitAmount")
-            private Double unitAmount;
-
-            /**
-             * 数量相关计数
-             */
-            @JsonProperty("quantity")
-            private Integer quantity;
-
-            /**
-             *
-             */
-            @JsonProperty("calculateFlag")
-            private String calculateFlag;
-
-            /**
-             * 险别代码
-             */
-            @JsonProperty("kindCode")
-            private String kindCode;
-            @JsonProperty("shortRate")
-            private String shortRate;
-            @JsonProperty("shortRateType")
-            private String shortRateType;
-
-            /**
-             * 绝对免赔额
-             */
-            @JsonProperty("deductible")
-            private BigDecimal deductible;
-
-            /**
-             * 绝对免赔率
-             */
-            @JsonProperty("deductibleRate")
-            private BigDecimal deductibleRate;
-
-            public static List<CoverageDTO> toCoverageList(QuoteVo quoteVo, QueryCarActualValueResponse carActualValueResponse) {
-                List<CoverageDTO> list = new ArrayList<>();
-                List<KindInfoVo> kindList = quoteVo.getKindInfoVo();
-
-                for (KindInfoVo kindInfoVo : kindList) {
-                    String code = kindInfoVo.getKindCode();
-                    CoverageDTO coverageDTO = new CoverageDTO();
-                    coverageDTO.kindCode = code;
-                    // 司机
-                    if (ArrayUtil.indexOf(InsuranceTypeCorrespondence.getCtDriver(), code) >= 0) {
-                        coverageDTO.quantity = 1;
-                        coverageDTO.unitAmount = Double.parseDouble(kindInfoVo.getAmount());
-                        coverageDTO.amount = new BigDecimal(kindInfoVo.getAmount());
-                    }
-                    // 乘客
-                    else if (ArrayUtil.indexOf(InsuranceTypeCorrespondence.getCtPassenger(), code) >= 0) {
-                        coverageDTO.quantity = Integer.parseInt(quoteVo.getCarInfoVo().getSeatCount()) -1;
-                        coverageDTO.unitAmount = Double.parseDouble(kindInfoVo.getUnitAmount());
-                        coverageDTO.amount = new BigDecimal(kindInfoVo.getUnitAmount()).multiply(BigDecimal.valueOf(coverageDTO.quantity));
-                    }
-                    // 绝对免赔
-                    else if (ArrayUtil.indexOf(InsuranceTypeCorrespondence.getAbsoluteDeductible(), code) >= 0) {
-                        coverageDTO.deductibleRate = new BigDecimal(kindInfoVo.getDeductibleRate());
-                    } else if (ArrayUtil.indexOf(InsuranceTypeCorrespondence.getSpecialContractClause(), code) >= 0) {
-                        coverageDTO.quantity = Integer.parseInt(kindInfoVo.getServiceTimes());
-                    } else if ("A".equals(code)) {
-                        coverageDTO.amount = carActualValueResponse.getActualValue();
-                    } else {
-                        coverageDTO.amount = new BigDecimal(kindInfoVo.getAmount());
-                    }
-                    coverageDTO.calculateFlag = "1";
-                    coverageDTO.shortRateType = "2";
-                    coverageDTO.shortRate = "100";
-                    list.add(coverageDTO);
-                }
-                return list;
-            }
-
-        }
-    }
-
-    @NoArgsConstructor
-    @Data
-    public static class InsuredObjectDTO {
-
-        /**
-         * 车辆信息
-         */
-        @JsonProperty("policyCar")
-        private PolicyCarDTO policyCar;
-
-        /**
-         * 修理厂信息
-         */
-        @JsonProperty("repairFactory")
-        private RepairFactoryDTO repairFactory;
-
-        /**
-         * 修理厂信息
-         */
-        @JsonProperty("deviceList")
-        private List<?> deviceList;
-
-        public InsuredObjectDTO(QuoteVo quoteInfoVo,
-                                CarInfoResponse.CarModelListDTO carModelListDTO,
-                                QueryCarActualValueResponse carActualValueResponse){
-            PolicyCarDTO policyCarDTO = new PolicyCarDTO(quoteInfoVo, carModelListDTO,carActualValueResponse);
-            this.policyCar = policyCarDTO;
-
-            // 修理厂信息
-            RepairFactoryDTO repairFactory = new RepairFactoryDTO();
-            this.repairFactory = repairFactory;
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class PolicyCarDTO {
-            @JsonProperty("actualValue")
-            private BigDecimal actualValue;
-
-            /**
-             * 所属性质
-             */
-            @JsonProperty("attachNature")
-            private String attachNature;
-
-            /**
-             * 所属性质名称
-             */
-            @JsonProperty("attachNatureName")
-            private String attachNatureName;
-
-            /**
-             * (免)验车原因代码
-             */
-            @JsonProperty("carCheckReason")
-            private String carCheckReason;
-
-            /**
-             *
-             */
-            @JsonProperty("carCheckReasonName")
-            private String carCheckReasonName;
-
-            /**
-             * 验车情况
-             */
-            @JsonProperty("carCheckStatus")
-            private String carCheckStatus;
-
-            /**
-             * 车辆种类
-             */
-            @JsonProperty("carKindCode")
-            private String carKindCode;
-
-            /**
-             * 协商实际价值
-             */
-            @JsonProperty("consultValue")
-            private BigDecimal consultValue;
-
-            /**
-             * 排量(ml)
-             */
-            @JsonProperty("displacement")
-            private BigDecimal displacement;
-
-            /**
-             * 外地车标志
-             */
-            @JsonProperty("ecdemicVehicleFlag")
-            private String ecdemicVehicleFlag;
-
-            /**
-             * 能源种类
-             */
-            @JsonProperty("energyTypes")
-            private String energyTypes;
-
-            /**
-             * 发动机号
-             */
-            @JsonProperty("engine")
-            private String engine;
-
-            /**
-             * 排量单位
-             */
-            @JsonProperty("exhaustScaleUnit")
-            private String exhaustScaleUnit;
-
-            /**
-             * 行驶证发证日期
-             */
-            @JsonProperty("issueDate")
-            private String issueDate;
-
-            /**
-             * 核定载客人数
-             */
-            @JsonProperty("approvedPassengersCapacity")
-            private BigDecimal approvedPassengersCapacity;
-
-            /**
-             * 总质量
-             */
-            @JsonProperty("grossMass")
-            private Integer grossMass;
-
-            /**
-             * 车辆大类
-             */
-            @JsonProperty("vehicleKindCode")
-            private String vehicleKindCode;
-
-            /**
-             * 过户标志
-             */
-            @JsonProperty("transferMark")
-            private String transferMark;
-
-            /**
-             * 过户日期
-             */
-            @JsonProperty("transferDate")
-            private String transferDate;
-
-            /**
-             * 贷款车标志
-             */
-            @JsonProperty("loanVehicleFlag")
-            private String loanVehicleFlag;
-
-            /**
-             * 核定载质量(KG)
-             */
-            @JsonProperty("approvedLoad")
-            private BigDecimal approvedLoad;
-
-            /**
-             * 厂牌型号代码
-             */
-            @JsonProperty("modelCode")
-            private String modelCode;
-
-            /**
-             * 月折旧率
-             */
-            @JsonProperty("monthDepRate")
-            private BigDecimal monthDepRate;
-
-            @JsonProperty("newCarSign")
-            private String newCarSign;
-
-            /**
-             * 车牌号/移动证号牌
-             */
-            @JsonProperty("plateNo")
-            private String plateNo;
-
-            /**
-             * 号牌种类
-             */
-            @JsonProperty("plateType")
-            private String plateType;
-
-            /**
-             * 行驶区域代码
-             */
-            @JsonProperty("runArea")
-            private String runArea;
-
-            /**
-             * 新车购置价
-             */
-            @JsonProperty("purchasePrice")
-            private BigDecimal purchasePrice;
-
-            /**
-             * 初登日期
-             */
-            @JsonProperty("registerDate")
-            private String registerDate;
-
-            /**
-             * 整备质量(KG)
-             */
-            @JsonProperty("unladenMass")
-            private BigDecimal unladenMass;
-
-            /**
-             * 交管车辆类型
-             */
-            @JsonProperty("vehicleType")
-            private String vehicleType;
-
-            /**
-             * 购置日期
-             */
-            @JsonProperty("enrollDate")
-            private String enrollDate;
-
-            @JsonProperty("verifyCode")
-            private String verifyCode;
-
-            /**
-             * VIN-车架号
-             */
-            @JsonProperty("vin")
-            private String vin;
-
-            /**
-             * 使用性质代码
-             */
-            @JsonProperty("useNatureCode")
-            private String useNatureCode;
-
-
-
-            /**
-             * 车辆损失险车型
-             */
-            @JsonProperty("carTypeCode")
-            private String carTypeCode;
-
-            /**
-             * 车辆来历凭证种类  提示需要进行新车备案时必传
-             */
-            @JsonProperty("certificateType")
-            private String certificateType;
-
-            /**
-             * 车辆来历凭证编号  提示需要进行新车备案时必传
-             */
-            @JsonProperty("certificateNo")
-            private String certificateNo;
-
-            /**
-             * 车辆来历凭证所载日期  提示需要进行新车备案时必传
-             */
-            @JsonProperty("certificateDate")
-            private String certificateDate;
-
-            public PolicyCarDTO(QuoteVo quoteInfoVo,
-                                CarInfoResponse.CarModelListDTO carModelListDTO,
-                                QueryCarActualValueResponse carActualValueResponse){
-                CarInfoVo carInfo = quoteInfoVo.getCarInfoVo();
-                this.vin = carInfo.getVinNo();
-                this.engine = carInfo.getEngineNo();
-                if (StringUtils.isBlank(carInfo.getLicenseNo())){
-                    this.plateNo = "暂未上牌";
-                }else{
-                    this.plateNo = carInfo.getLicenseNo();
-                }
-                if("1".equals(carInfo.getEnergyTypeCode()) || "3".equals(carInfo.getEnergyTypeCode())) {
-                    this.plateType = PlateType.P52.getCode();
-                }else{
-                    this.plateType = PlateType.P02.getCode();
-                }
-                this.runArea = "02";
-                this.modelCode = carModelListDTO.getModelCode();
-                this.registerDate = carInfo.getRegisterDate();
-                this.enrollDate = carInfo.getRegisterDate();  // 后期需要改
-                this.useNatureCode = carInfo.getVehicleUseCode();
-                this.carKindCode = carInfo.getCarKindCode();
-                this.vehicleType = carInfo.getCarTypeCode();
-                this.ecdemicVehicleFlag = "0"; // 外地车标志
-                this.carTypeCode = "01"; // 01 常见车型 02 新车型 03 老旧车型 04 特殊车型
-                this.purchasePrice = new BigDecimal(carModelListDTO.getPurchasePrice());
-                this.attachNature = carInfo.getPropertyCode();
-                if(this.attachNature.equals("01")){
-                    this.attachNatureName = "个人";
-                }else if(this.attachNature.equals("02")){
-                    this.attachNatureName = "机关/团体";
-                }else if(this.attachNature.equals("03")){
-                    this.attachNatureName = "企业";
-                }
-                this.carCheckStatus = "3";
-                this.carCheckReason = "1";
-                this.carCheckReasonName = "按期续保未增保损失险类";
-                if (Objects.isNull(carModelListDTO.getDisplacement())){
-                    this.displacement = new BigDecimal(1);
-                }else{
-                    this.displacement = carModelListDTO.getDisplacement().multiply(new BigDecimal("1000"));
-                }
-                this.exhaustScaleUnit = "ml";
-                this.approvedLoad = StringUtils.isBlank(carInfo.getLimitLoad()) ? new BigDecimal(0) : new BigDecimal(carInfo.getLimitLoad());
-                this.approvedPassengersCapacity = carModelListDTO.getApprovedPassengersCapacity();
-                if("1".equals(carInfo.getEnergyTypeCode()) || "3".equals(carInfo.getEnergyTypeCode())) {
-                    this.vehicleKindCode = "X";
-                }else{
-                    this.vehicleKindCode = "V";
-                }
-                this.issueDate = carInfo.getRegisterDate();  // 后期确认
-                this.transferMark = carInfo.isTransfer() ? "1" : "0";
-                if(carInfo.isTransfer()){
-                    this.transferDate = carInfo.getTransferDate();
-                }
-                this.loanVehicleFlag = carInfo.isLoanStatus()? "1" : "0";
-                this.energyTypes = carInfo.getEnergyTypeCode();
-                this.monthDepRate = carActualValueResponse.getMonthDepRate();
-                this.actualValue = carActualValueResponse.getActualValue();
-                this.consultValue = carActualValueResponse.getActualValue();
-                this.unladenMass = new BigDecimal(carInfo.getCompleteKerbMass());
-
-                // TODO 后期加入新车备案信息
-            }
-        }
-
-//        @NoArgsConstructor
-        @Data
-        public static class RepairFactoryDTO {
-            @JsonProperty("factoryCode")
-            private String factoryCode;
-            @JsonProperty("factoryId")
-            private String factoryId;
-            @JsonProperty("factoryName")
-            private String factoryName;
-
-            public RepairFactoryDTO(){
-                super();
-                this.factoryId = "1";
-                this.factoryCode = "99";
-                this.factoryName = "其他";
-            }
-        }
-    }
-
-    @NoArgsConstructor
-    @Data
-    public static class OwnerDTO {
-
-        /**
-         * 客户类型 1 个人 2 机构
-         */
-        @JsonProperty("type")
-        private String type;
-
-        /**
-         * 涉恐标志 0 不涉恐 1.涉恐 2.疑似涉恐
-         */
-        @JsonProperty("isTerror")
-        private String isTerror;
-
-        /**
-         * 客户名称
-         */
-        @JsonProperty("name")
-        private String name;
-
-        /**
-         * 证件类型
-         * 01 居民身份证 个人
-         * 02 护照 个人
-         * 03 军人身份证件 个人
-         * 04 驾驶证 个人
-         * 05 港澳台同胞证 个人
-         * 07 中国护照 个人
-         * 08 港澳同胞回乡证(通行卡) 个人
-         * 09 台湾居民来往大陆通行证 个人
-         * 10 武警身份证件 个人
-         * 44 港澳台居民居住证 个人
-         * 99 其他 个人
-         * 1 组织机构代码证 团体
-         * 2 税务登记证 团体
-         * 3 营业执照 团体
-         * 4 统一社会信用代码 团体
-         * 99 其他 团体
-         */
-        @JsonProperty("identifyTypeCode")
-        private String identifyTypeCode;
-
-        /**
-         * 证件号码
-         */
-        @JsonProperty("identifyNumber")
-        private String identifyNumber;
-
-        /**
-         * 证件号码
-         */
-        @JsonProperty("identifyValidDate")
-        private String identifyValidDate;
-
-        /**
-         * 证件有效止期
-         */
-        @JsonProperty("identifyValidEndDate")
-        private String identifyValidEndDate;
-
-        /**
-         * 证件类型名称
-         */
-        @JsonProperty("identifyTypeName")
-        private String identifyTypeName;
-
-        /**
-         * 性别 1男 2女
-         */
-        @JsonProperty("sex")
-        private String sex;
-
-        /**
-         * 年龄
-         */
-        @JsonProperty("age")
-        private Integer age;
-
-        /**
-         * 出生日期
-         */
-        @JsonProperty("birthday")
-        private String birthday;
-
-        /**
-         * 是否长期 0否 1是
-         */
-        @JsonProperty("longTerm")
-        private String longTerm;
-
-        /**
-         * 地址省
-         */
-        @JsonProperty("province")
-        private String province;
-
-        /**
-         * 地址市
-         */
-        @JsonProperty("city")
-        private String city;
-
-        /**
-         * 地址区/县
-         */
-        @JsonProperty("district")
-        private String district;
-
-        /**
-         * 详细地址
-         */
-        @JsonProperty("addr")
-        private String addr;
-
-        /**
-         * 手机
-         */
-        @JsonProperty("mobile")
-        private String mobile;
-
-        /**
-         * 投保人与被保险人关系
-         */
-        @JsonProperty("relationWithInsured")
-        private String relationWithInsured;
-
-        /**
-         * 被保险人与车辆关系
-         */
-        @JsonProperty("relationWithCar")
-        private String relationWithCar;
-
-        public OwnerDTO(CustomerInfoVo ownerInfo){
-            if ("1".equals(ownerInfo.getProperty())){
-                this.type = "1"; // 个人
-                this.identifyTypeCode = "01";
-                this.identifyTypeName = "居民身份证";
-                this.identifyNumber = ownerInfo.getIdentifyNumber();
-                this.sex = IDCardUtils.getSex(identifyNumber).equalsIgnoreCase("FEMALE") ? "2" : "1";
-                this.age = IDCardUtils.getAgeFromIDCard(identifyNumber);
-                this.birthday = IDCardUtils.GetBirthday(identifyNumber);
-                this.identifyValidDate = ownerInfo.getIdentifyValidDate();
-                this.identifyValidEndDate = ownerInfo.getIdentifyValidEndDate();
-                this.longTerm = "0";
-            }else{
-                if (StringUtils.isBlank(ownerInfo.getTelephone())){
-                    throw new SystemException("诚泰公司企业报价固定电话必填!");
-                }
-                this.type = "2"; // 机构
-                this.identifyTypeCode = "4";
-                this.identifyTypeName = "统一社会信用代码";
-                this.identifyNumber = ownerInfo.getOrganizationCode();
-            }
-            this.isTerror = "0";
-            this.name = ownerInfo.getName();
-        }
-    }
-
-    @NoArgsConstructor
-    @Data
-    public static class CiContractDTO {
-        @JsonProperty("contractMain")
-        private ContractMainDTO contractMain;
-        @JsonProperty("coverage")
-        private List<CoverageDTO> coverage;
-        @JsonProperty("tax")
-        private TaxDTO tax;
-        @JsonProperty("platFormMessage")
-        private PlatFormMessageDTO platFormMessage;
-
-        public CiContractDTO(QuoteVo quoteVo, RiskInfoVo ciRiskInfoVo){
-            // 险种信息
-            this.contractMain = new ContractMainDTO(ciRiskInfoVo);
-            // 投保险别列表
-            this.coverage = Arrays.asList(CoverageDTO.getCoverage());
-            // 车船税信息
-            this.tax = new TaxDTO(quoteVo);
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class PlatFormMessageDTO {
-//            @JsonProperty("scoreCode")
-//            private String scoreCode;
-//            @JsonProperty("lastPolicyQueryDate")
-//            private String lastPolicyQueryDate;
-//            @JsonProperty("insureYears")
-//            private String insureYears;
-//            @JsonProperty("ciCarKind")
-//            private String ciCarKind;
-//            @JsonProperty("peccancyAdjustCI")
-//            private String peccancyAdjustCI;
-//            @JsonProperty("lastPolicyExpireDate")
-//            private String lastPolicyExpireDate;
-//            @JsonProperty("noClaimAdjustReasonCodeBI")
-//            private String noClaimAdjustReasonCodeBI;
-//            @JsonProperty("modelEnergyType")
-//            private String modelEnergyType;
-//            @JsonProperty("noClaimAdjustReason")
-//            private String noClaimAdjustReason;
-//            @JsonProperty("score")
-//            private String score;
-//            @JsonProperty("queryDate")
-//            private String queryDate;
-//            @JsonProperty("claimAdjustReasonCodeBI")
-//            private String claimAdjustReasonCodeBI;
-//            @JsonProperty("ciModelCode")
-//            private String ciModelCode;
-//            @JsonProperty("lastPolicyEffectiveDate")
-//            private String lastPolicyEffectiveDate;
-//            @JsonProperty("unMatchLicenseNoMessage")
-//            private String unMatchLicenseNoMessage;
-//            @JsonProperty("lastReplacementValue")
-//            private String lastReplacementValue;
-//            @JsonProperty("expireDate")
-//            private String expireDate;
-//            @JsonProperty("repeatedMsg")
-//            private String repeatedMsg;
-            @JsonProperty("question")
-            private String question;
-//            @JsonProperty("noClaimAdjustReasonBI")
-//            private String noClaimAdjustReasonBI;
-//            @JsonProperty("nonClaimAdjust")
-//            private String nonClaimAdjust;
-            @JsonProperty("querySequenceNo")
-            private String querySequenceNo;
-//            @JsonProperty("noClaimAdjustReasonCodeCI")
-//            private String noClaimAdjustReasonCodeCI;
-//            @JsonProperty("lastModelCode")
-//            private String lastModelCode;
-//            @JsonProperty("claimAdjustReasonCodeCI")
-//            private String claimAdjustReasonCodeCI;
-//            @JsonProperty("lastModel")
-//            private String lastModel;
-            @JsonProperty("answer")
-            private String answer;
-//            @JsonProperty("claimCoeff")
-//            private String claimCoeff;
-//            @JsonProperty("claimAdjustLevel")
-//            private String claimAdjustLevel;
-//            @JsonProperty("peccancyAdjustReasonCI")
-//            private String peccancyAdjustReasonCI;
-            @JsonProperty("reinsuranceFlag")
-            private String reinsuranceFlag;
-//            @JsonProperty("claimTimes")
-//            private String claimTimes;
-//            @JsonProperty("rateFloatFlag")
-//            private String rateFloatFlag;
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class ContractMainDTO {
-
-            /**
-             * 险种代码
-             */
-            @JsonProperty("riskCode")
-            private String riskCode;
-
-            /**
-             * 险种名称
-             */
-            @JsonProperty("riskName")
-            private String riskName;
-
-            /**
-             * 即时起保 0.否 1.是
-             */
-            @JsonProperty("validAtOnce")
-            private String validAtOnce;
-
-            /**
-             * 起保日期
-             */
-            @JsonProperty("validDate")
-            private String validDate;
-
-            /**
-             * 终保日期
-             */
-            @JsonProperty("expiryDate")
-            private String expiryDate;
-
-            /**
-             * 续保标志
-             */
-            @JsonProperty("renewalFlag")
-            private String renewalFlag;
-
-            /**
-             * 上年保单号
-             */
-            @JsonProperty("lastYearPolicyNo")
-            private String lastYearPolicyNo;
-
-            @JsonProperty("currency")
-            private String currency;
-
-            public ContractMainDTO(RiskInfoVo quoteInfoVo){
-                this.riskCode = RiskCodeEnum.R1002.getCode();
-                this.riskName = RiskCodeEnum.R1002.getDesc();
-                this.currency = "CNY";
-                this.validAtOnce = !quoteInfoVo.isInstantFlag()?"0" : "1"; // 及时起保
-                this.validDate =quoteInfoVo.getStartDate();
-                this.expiryDate =quoteInfoVo.getEndDate();
-                this.renewalFlag = "0";
-            }
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class TaxDTO {
-
-            /**
-             * 缴税类型 1N.纳税 2W.完税 3M.免税 4H.缓税 5J.减税 6Q.欠税 7B.不征税 8R.拒缴 9D.有争议 0N.不代收
-             */
-            @JsonProperty("taxConditionCode")
-            private String taxConditionCode;
-
-            /**
-             * 缴税起期
-             */
-            @JsonProperty("taxStartDate")
-            private String taxStartDate;
-
-            /**
-             * 缴税止期
-             */
-            @JsonProperty("taxEndDate")
-            private String taxEndDate;
-
-            /**
-             * 计税方式 1.按保险期间起期 2.按签单日期 4.按车辆购置日期
-             */
-            @JsonProperty("calculateMode")
-            private String calculateMode;
-
-            /**
-             * 纳税人证件号码
-             */
-            @JsonProperty("taxPayerIdentityNo")
-            private String taxPayerIdentityNo;
-
-            /**
-             * 纳税人识别号
-             */
-            @JsonProperty("taxPayerIdentificationCode")
-            private String taxPayerIdentificationCode;
-
-            /**
-             * 纳税人名称
-             */
-            @JsonProperty("taxPayerName")
-            private String taxPayerName;
-
-            /**
-             * 前次缴税年度
-             */
-            @JsonProperty("lastPaidYear")
-            private String lastPaidYear;
-
-            public TaxDTO(QuoteVo quoteVo){
-
-                CustomerInfoVo ownerInfo = quoteVo.getOwnersInfo();
-                VehicleAndVesselTaxVo vehicleAndVesselTax = quoteVo.getVehicleAndVesselTaxVo();
-                TaxConditionCodeEnum taxConditionCodeEnum = Enum.valueOf(TaxConditionCodeEnum.class, "T_" + vehicleAndVesselTax.getTaxRelifFlag());
-                this.taxConditionCode = taxConditionCodeEnum.getCode();
-                RiskInfoVo ciRiskInfoVo = quoteVo.getCiRiskInfoVo();
-                this.taxStartDate = ciRiskInfoVo.getStartDate();
-                this.taxEndDate = ciRiskInfoVo.getEndDate();
-                this.calculateMode = "1";
-                if(StringUtils.isBlank(ownerInfo.getProperty()) || !"0".equals(ownerInfo.getProperty())){
-                    this.taxPayerIdentityNo = vehicleAndVesselTax.getIdentifyNumber();
-                    this.taxPayerIdentificationCode = vehicleAndVesselTax.getIdentifyNumber();
-                }else{
-                    this.taxPayerIdentityNo = vehicleAndVesselTax.getOrganizationCode();
-                    this.taxPayerIdentificationCode = vehicleAndVesselTax.getOrganizationCode();
-                }
-                this.taxPayerName = vehicleAndVesselTax.getTaxpayerName();
-                Calendar calendar = Calendar.getInstance();
-                int year = calendar.get(Calendar.YEAR);
-                this.lastPaidYear = (year - 1) + "";
-            }
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class CoverageDTO {
-
-            /**
-             * 险别代码
-             */
-            @JsonProperty("kindCode")
-            private String kindCode;
-
-            /**
-             * 险别代码
-             */
-            @JsonProperty("ifMainKind")
-            private String ifMainKind;
-
-            /**
-             * 险别代码
-             */
-            @JsonProperty("amount")
-            private BigDecimal amount;
-
-            @JsonProperty("calculateFlag")
-            private String calculateFlag;
-            @JsonProperty("shortRateType")
-            private String shortRateType;
-            @JsonProperty("shortRate")
-            private String shortRate;
-
-            public static CoverageDTO getCoverage() {
-                CoverageDTO coverage = new CoverageDTO();
-                coverage.setKindCode("BZ");
-                coverage.setIfMainKind("1");
-                coverage.setAmount(new BigDecimal(200000));
-                coverage.setShortRateType("2");
-                coverage.setShortRate("100");
-                coverage.setCalculateFlag("1");
-                coverage.setShortRateType("2");
-                coverage.setShortRate("100");
-                return coverage;
-            }
-        }
-    }
-
-    public static void main(String[] args) {
-        System.out.println(new BigDecimal("1.497").multiply(new BigDecimal("1000")));
-    }
-
-}

+ 0 - 46
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/PayUrlRequest.java

@@ -1,46 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.request;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * 【获取支付链接】请求实体
- */
-@NoArgsConstructor
-@Data
-public class PayUrlRequest extends BaseRequest{
-
-    /**
-     * 订单ID
-     */
-    @JsonProperty("orderId")
-    private String orderId;
-
-    /**
-     * 类型 1:查询短信内容;2:补发短信;
-     */
-    @JsonProperty("type")
-    private String type;
-
-    /**
-     * 是否发送短信 是--true;否--false(不传默认否)
-     */
-    @JsonProperty("isSendMsg")
-    private boolean isSendMsg;
-
-    public PayUrlRequest(String partnerCode, String orderId) {
-        super(partnerCode);
-        this.orderId = orderId;
-        this.type = "1";
-        this.isSendMsg = false;
-    }
-
-    public boolean getIsSendMsg() {
-        return isSendMsg;
-    }
-
-    public void setSendMsg(boolean sendMsg) {
-        isSendMsg = sendMsg;
-    }
-}

+ 97 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/PaymentRequest.java

@@ -0,0 +1,97 @@
+package com.jzg.quotation.chengtai.api.entity.request;
+
+import com.jzg.commons.entity.quote.vo.aggregated.PaymentLinkVo;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+/**
+ * @author quchen
+ * @date 2026/4/20 14:46
+ */
+
+@Data
+@AllArgsConstructor
+public class PaymentRequest {
+    /**
+     * 订单号
+     */
+    private String orderCoder;
+
+    /**
+     * 支付金额
+     */
+    private String payAmt;
+
+    /**
+     * 保险类型
+     * 0:非车;1:车险
+     */
+    private String businessType;
+
+    /**
+     * 回调地址
+     */
+    private String foreEndURL;
+
+    /**
+     * 意外险投保单号
+     */
+    private String acciAppPolicyNo;
+
+    /**
+     * 阅读标志
+     * 是否需要阅读支付条款须知;0:否;1:是;默认0
+     */
+    private String readFlag;
+
+    /**
+     * 意外险code
+     * 车+意投保,意外险编码
+     */
+    private String nvhlSuitCode;
+
+    /**
+     * 意外险保费
+     * 车+意投保,意外险保费
+     */
+    private String payAmtnvhl;
+
+    /**
+     * 批单号
+     * 批改单号,批改支付必传
+     */
+    private String randomno;
+
+    /**
+     * 非车组合号
+     * businessType传0时,非车见费组合险,组合单号;组合险必传
+     */
+    private String combinationNo;
+
+    /**
+     * 短信
+     * 短信验证码,部分业务支付需校验验证码
+     */
+    private String smsCode;
+
+    /**
+     * 产品名称
+     */
+    private String productName;
+
+    /**
+     * 备用字段
+     */
+    private String type;
+
+    public PaymentRequest(PaymentLinkVo paymentLinkVo) {
+        this.orderCoder = paymentLinkVo.getInsOrders().getInsOrderNo();
+        this.payAmt = String.valueOf(paymentLinkVo.getInsOrdersCosts().getSumPremium());
+        this.businessType = "1";
+        this.foreEndURL = "";
+
+        this.acciAppPolicyNo = paymentLinkVo.getInsOrdersPolicy().getJyApplyNo();
+        this.nvhlSuitCode = paymentLinkVo.getInsOrdersAccidentalDriving().getRiskCode();
+        this.payAmtnvhl = paymentLinkVo.getInsOrdersAccidentalDriving().getAmount();
+    }
+}

+ 76 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/PolicyElectronicRequest.java

@@ -0,0 +1,76 @@
+package com.jzg.quotation.chengtai.api.entity.request;
+
+import com.jzg.commons.entity.quote.vo.base.OrderBase;
+import com.jzg.quotation.chengtai.api.entity.ChengTaiApiParameters;
+import com.jzg.quotation.commons.utils.SnowFlakeUtil;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author quchen
+ * @date 2026/4/20 14:47
+ */
+
+@Data
+@AllArgsConstructor
+public class PolicyElectronicRequest {
+    private RequestHead requestHead;
+
+    private RequestBody requestBody;
+
+    @Data
+    @NoArgsConstructor
+    public static class RequestHead {
+        /**
+         * 请求类型
+         */
+        private String requestType;
+
+        /**
+         * 用户名
+         */
+        private String userName;
+
+        /**
+         * 密码
+         */
+        private String passWord;
+
+        /**
+         * 合作伙伴编码
+         */
+        private String partnerCode;
+
+        /**
+         * 外网提供的唯一标志
+         */
+        private String queryId;
+
+        public RequestHead(ChengTaiApiParameters parameters) {
+            this.requestType = "00011";
+            this.userName = parameters.getUserName();
+            this.passWord = parameters.getPassWord();
+            this.partnerCode = parameters.getPartnerCode();
+            this.queryId = String.valueOf(new SnowFlakeUtil().nextId());
+        }
+    }
+
+    @Data
+    @NoArgsConstructor
+    public static class RequestBody {
+        /**
+         * 订单号
+         */
+        private String orderNumber;
+
+        public RequestBody(OrderBase order) {
+            this.orderNumber = order.getCompanyOrderNo();
+        }
+    }
+
+    public PolicyElectronicRequest(ChengTaiApiParameters parameters, OrderBase order) {
+        this.requestHead = new RequestHead(parameters);
+        this.requestBody = new RequestBody(order);
+    }
+}

+ 9 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/PolicyRecallRequest.java

@@ -0,0 +1,9 @@
+package com.jzg.quotation.chengtai.api.entity.request;
+
+/**
+ * @author quchen
+ * @date 2026/4/20 14:48
+ */
+
+public class PolicyRecallRequest {
+}

+ 75 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/PolicyStatusRequest.java

@@ -0,0 +1,75 @@
+package com.jzg.quotation.chengtai.api.entity.request;
+
+import com.jzg.commons.entity.quote.vo.aggregated.OrderStatusVo;
+import com.jzg.quotation.chengtai.api.entity.ChengTaiApiParameters;
+import com.jzg.quotation.commons.utils.SnowFlakeUtil;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author quchen
+ * @date 2026/4/20 14:48
+ */
+
+@Data
+@AllArgsConstructor
+public class PolicyStatusRequest {
+    private RequestHead requestHead;
+
+    private RequestBody requestBody;
+
+    @Data
+    @NoArgsConstructor
+    public static class RequestHead {
+        /**
+         * 请求类型
+         */
+        private String requestType;
+
+        /**
+         * 用户名
+         */
+        private String userName;
+
+        /**
+         * 密码
+         */
+        private String passWord;
+
+        /**
+         * 合作伙伴编码
+         */
+        private String partnerCode;
+
+        /**
+         * 外网提供的唯一标志
+         */
+        private String queryId;
+
+        public RequestHead(ChengTaiApiParameters parameters) {
+            this.requestType = "00011";
+            this.userName = parameters.getUserName();
+            this.passWord = parameters.getPassWord();
+            this.partnerCode = parameters.getPartnerCode();
+            this.queryId = String.valueOf(new SnowFlakeUtil().nextId());
+        }
+    }
+    @Data
+    @NoArgsConstructor
+    public static class RequestBody {
+        /**
+         * 订单号
+         */
+        private String orderNumber;
+
+        public RequestBody(String orderNumber) {
+            this.orderNumber = orderNumber;
+        }
+    }
+
+    public PolicyStatusRequest (ChengTaiApiParameters parameters, String orderNumber) {
+        this.requestHead = new RequestHead(parameters);
+        this.requestBody = new RequestBody(orderNumber);
+    }
+}

+ 1387 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/PremiumCalculationRequest.java

@@ -0,0 +1,1387 @@
+package com.jzg.quotation.chengtai.api.entity.request;
+
+import cn.hutool.core.util.ArrayUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+import com.jzg.commons.constants.InsuranceRisk;
+import com.jzg.commons.entity.quote.vo.*;
+import com.jzg.quotation.chengtai.api.entity.ChengTaiApiParameters;
+import com.jzg.quotation.chengtai.api.entity.constants.KindCodeEnum;
+import com.jzg.quotation.chengtai.api.entity.response.CarModelQueryResponse;
+import com.jzg.quotation.chengtai.api.utils.XmlDateTimeFormatter;
+import com.jzg.quotation.commons.constant.InsuranceTypeCorrespondence;
+import com.jzg.quotation.commons.utils.SnowFlakeUtil;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @author quchen
+ * @date 2026/4/20 14:29
+ */
+
+@NoArgsConstructor
+@Data
+@JacksonXmlRootElement(localName = "arg0")
+public class PremiumCalculationRequest {
+    /**
+     * 报文头信息(Head)
+     */
+    @JacksonXmlProperty(isAttribute = false, localName = "Head")
+    private head Head;
+
+    /**
+     * 基础信息(BasePart)
+     */
+    @JacksonXmlProperty(isAttribute = false, localName = "BasePart")
+    private basePart BasePart;
+
+    /**
+     * 标的信息(ItemMotor)
+     */
+    @JacksonXmlProperty(isAttribute = false, localName = "ItemMotor")
+    private itemMotor ItemMotor;
+
+    /**
+     * 险种信息数据列表(RiskList)数据集(Risk)
+     */
+    @JacksonXmlElementWrapper(useWrapping = false)
+    @JacksonXmlProperty(localName = "RiskList")
+    private RiskListWrapper riskListWrapper;
+
+    /**
+     * 险别信息数据列表(KindList)数据集(Kind)
+     */
+    @JacksonXmlElementWrapper(useWrapping = false)
+    @JacksonXmlProperty(localName = "KindList")
+    private KindListWrapper kindListWrapper;
+
+//    /**
+//     * 驾驶人列表列表(Driverlist)数据集(Driver)
+//     * 此节点单交强不用传  商业险时:驾驶人列表节点有就传 没有就不传
+//     */
+//    @JacksonXmlProperty(localName = "DriverList")
+//    private List<Driver> DriverList;
+
+    /**
+     * 车船税(CarShipTax)
+     * 此节点可选 ,不传默认代收税且上次缴费年度默认为投保的上一年
+     */
+    @JacksonXmlProperty(localName = "CarShipTax")
+    private carShipTax CarShipTax;
+
+    /**
+     * 投保人信息(RelatedParty)
+     */
+    @JacksonXmlProperty(localName = "RelatedParty")
+    private relatedParty RelatedParty;
+
+    /**
+     * 被保险人信息(RiskRelatedParty)
+     */
+    @JacksonXmlProperty(localName = "RiskRelatedParty")
+    private riskRelatedParty RiskRelatedParty;
+
+    public PremiumCalculationRequest(QuoteVo quoteVo, BigDecimal actualValue,
+                                     ChengTaiApiParameters parameters, CarModelQueryResponse.vehicle vehicle, String orderNumber) {
+        this.Head = new head(parameters);
+        this.BasePart = new basePart(quoteVo,orderNumber);
+        this.ItemMotor = new itemMotor(quoteVo.getOwnersInfo(),quoteVo.getCarInfoVo(),vehicle,actualValue);
+        this.riskListWrapper = new RiskListWrapper();
+        this.riskListWrapper.setRisks(Risk.buildRiskList(quoteVo.getCiRiskInfoVo(),quoteVo.getBiRiskInfoVo()));
+        this.kindListWrapper = new KindListWrapper();
+        this.kindListWrapper.setKinds(Kind.buildKindList(
+                quoteVo.getKindInfoVo(),quoteVo.getCiRiskInfoVo(),
+                vehicle,actualValue
+        ));
+        this.CarShipTax = new carShipTax(quoteVo.getVehicleAndVesselTaxVo(),quoteVo.getCiRiskInfoVo());
+        this.RelatedParty = new relatedParty(quoteVo.getPolicyHolderInfo());
+        this.RiskRelatedParty = new riskRelatedParty(quoteVo.getInsuredPersonInfo());
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class head {
+        /**
+         * 请求类型
+         */
+        @JacksonXmlProperty(localName = "requestType")
+        private String requestType;
+
+        /**
+         * 用户名
+         */
+        @JacksonXmlProperty(localName = "userName")
+        private String userName;
+
+        /**
+         * 密码
+         */
+        @JacksonXmlProperty(localName = "passWord")
+        private String passWord;
+
+        /**
+         * 外网提供的唯一标志
+         */
+        @JacksonXmlProperty(localName = "queryId")
+        private String queryId;
+
+        /**
+         * 合作伙伴代码
+         */
+        @JacksonXmlProperty(localName = "partnerCode")
+        private String partnerCode;
+
+        @JacksonXmlProperty(localName = "operatorIp")
+        private String operatorIp;
+
+        public head(ChengTaiApiParameters parameters) {
+            this.requestType = "00001";
+            this.userName = parameters.getUserName();
+            this.passWord = parameters.getPassWord();
+            this.queryId = String.valueOf(new SnowFlakeUtil().nextId());
+            this.partnerCode = parameters.getPartnerCode();
+            this.operatorIp = "0.0.0.1";
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class basePart {
+        /**
+         * 计划代码 组合险时填组合险代码,单险种填险种代码 0801交强险 0808商业险 1363组合险
+         */
+        @JacksonXmlProperty(localName = "planCode")
+        private String planCode;
+
+        /**
+         * 城市代码
+         */
+        @JacksonXmlProperty(localName = "cityCode")
+        private String cityCode;
+
+        /**
+         * 续保标志
+         * 0	新保
+         * 1	续保(暂不支持续保功能)
+         */
+        @JacksonXmlProperty(localName = "renewInd")
+        private String renewInd;
+
+        /**
+         * 订单号 二次保费计算订单号必传
+         */
+        @JacksonXmlProperty(localName = "orderNumber")
+        private String orderNumber;
+
+        /**
+         * 交强险转保车答案
+         */
+        @JacksonXmlProperty(localName = "compRenewalAnswer")
+        private String compRenewalAnswer;
+
+        /**
+         * 商业险转保车答案
+         */
+        @JacksonXmlProperty(localName = "commRenewalAnswer")
+        private String commRenewalAnswer;
+
+        /**
+         * 非车产品code
+         */
+        @JacksonXmlProperty(localName = "nvhlSuitCode")
+        private String nvhlSuitCode;
+
+        /**
+         * 被保人身份类型 投保驾乘意外险时传;01:司机,02:乘客,03司机与乘客
+         */
+        @JacksonXmlProperty(localName = "insuredType")
+        private String insuredType;
+
+        public basePart(QuoteVo quoteVo,String orderNumber) {
+            String productId = quoteVo.getProductId();
+            if ("0330".equals(productId)) {
+                this.planCode = "0801";
+            } else if ("034001".equals(productId) || "034002".equals(productId)) {
+                this.planCode = "0808";
+            } else {
+                this.planCode = "1363";
+            }
+            this.cityCode = "140100";
+            this.renewInd = "0";
+            this.orderNumber = orderNumber;
+            //转保答案
+            this.compRenewalAnswer = quoteVo.getCiTransferCode();
+            this.commRenewalAnswer = quoteVo.getBiTransferCode();
+            if(quoteVo.getAccidentalDrivings().size() > 0) {
+                AccidentalDrivingVo accidentalDrivingVo = quoteVo.getAccidentalDrivings().get(0);
+                this.insuredType = "03";
+                this.nvhlSuitCode = accidentalDrivingVo.getProductCode();
+            }
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class itemMotor {
+        /**
+         * 车主名称
+         */
+        @JacksonXmlProperty(localName = "carOwner")
+        private String carOwner;
+
+        /**
+         * 车牌号码
+         */
+        @JacksonXmlProperty(localName = "licenseNo")
+        private String licenseNo;
+
+        /**
+         * 发动机号
+         */
+        private String engineNo;
+
+        /**
+         * 精友车型代码
+         */
+        @JacksonXmlProperty(localName = "modelCode")
+        private String modelCode;
+
+        /**
+         * 车架号/VIN码
+         */
+        @JacksonXmlProperty(localName = "frameNo")
+        private String frameNo;
+
+        /**
+         * 新旧车标识
+         * O	旧车
+         * N	新车
+         */
+        @JacksonXmlProperty(localName = "carnewoldFlag")
+        private String carnewoldFlag;
+
+        /**
+         * 车主证件类型
+         * 01	居民身份证
+         * 02	护照
+         * 03	军人身份证
+         * 08	港澳居民来往内地通行证
+         * 09	台湾居民来往大陆通行证
+         * 10	武警身份证
+         * 11	外国人永久居留身份证
+         * 44	港澳台居民居住证
+         * 1	组织机构代码证(团体)
+         * 4	统一社会信用代码(团体)
+         */
+        @JacksonXmlProperty(localName = "vehicleTypeOfOwner")
+        private String vehicleTypeOfOwner;
+
+        /**
+         * 车主证件号码
+         */
+        @JacksonXmlProperty(localName = "vehicleOwnerIDNumber")
+        private String vehicleOwnerIDNumber;
+
+        /**
+         * 车主年龄
+         */
+        @JacksonXmlProperty(localName = "ageOfOwner")
+        private Integer ageOfOwner;
+
+        /**
+         * 车主性别
+         * 1	男
+         * 2	女
+         * 9	未说明
+         */
+        @JacksonXmlProperty(localName = "ownerGender")
+        private String ownerGender;
+
+        /**
+         * 过户标志
+         * 0	空
+         * 01	投保过户
+         * 02	批改过户
+         */
+        @JacksonXmlProperty(localName = "chgOwnerFlag")
+        private String chgOwnerFlag;
+
+        /**
+         * 过户日期
+         */
+        @JacksonXmlProperty(localName = "transferDate")
+        private String transferDate;
+
+        /**
+         * 验车情况
+         * 1	未验车
+         * 2	免验车
+         * 3	已验车
+         * 4	待补资料
+         */
+        @JacksonXmlProperty(localName = "carCheckStatus")
+        private String carCheckStatus;
+
+        /**
+         * 验车人
+         */
+        @JacksonXmlProperty(localName = "carChecker")
+        private String carChecker;
+
+        /**
+         * 验车时间
+         */
+        @JacksonXmlProperty(localName = "carCheckTime")
+        private String carCheckTime;
+
+        /**
+         * 免验车原因 验车情况为2时必传
+         * 1	单保责任险
+         * 2	按期续保未增保损失险类
+         * 3	新车
+         * 4	团单
+         */
+        @JacksonXmlProperty(localName = "carCheckReason")
+        private String carCheckReason;
+
+        /**
+         * 新使用性质
+         * 01	家庭自用汽车	机动车
+         * 02	公路客运	机动车
+         * 03	城市公交	机动车
+         * 04	租赁客车	机动车
+         * 05	出租客车	机动车
+         * 06	旅游客运	机动车
+         * 07	营业货车	机动车
+         * 08	营业挂车	机动车
+         * 09	非营业挂车	机动车
+         * 10	非营业企业	机动车
+         * 11	非营业机关、事业团体	机动车
+         * 12	非营业货车	机动车
+         */
+        @JacksonXmlProperty(localName = "useNatureShowNew")
+        private String useNatureShowNew;
+
+        /**
+         * 车辆所属性质
+         * 01	个人
+         * 02	机关/团体
+         * 03	企业
+         */
+        @JacksonXmlProperty(localName = "attachNature")
+        private String attachNature;
+
+        /**
+         * 号牌种类
+         * 代码	描述
+         * 01	大型汽车
+         * 02	小型汽车
+         * 15	挂车
+         * 16	教练汽车
+         * 99	其他
+         */
+        @JacksonXmlProperty(localName = "licenseTypeCode")
+        private String licenseTypeCode;
+
+        /**
+         * 初登日期
+         */
+        @JacksonXmlProperty(localName = "singeinDate")
+        private String singeinDate;
+
+        /**
+         * 购置日期
+         */
+        @JacksonXmlProperty(localName = "enrollDate")
+        private String enrollDate;
+
+        /**
+         * 贷款车标志
+         */
+        @JacksonXmlProperty(localName = "loanVehicleFlag")
+        private String loanVehicleFlag;
+
+        /**
+         * 车辆实际价值
+         */
+        @JacksonXmlProperty(localName = "actualValue")
+        private BigDecimal actualValue;
+
+        /**
+         * 座位数
+         */
+        @JacksonXmlProperty(localName = "seatNum")
+        private Integer seatNum;
+
+        /**
+         * 整备质量
+         */
+        @JacksonXmlProperty(localName = "completeKerbMass")
+        private Integer completeKerbMass;
+
+        /**
+         * 期望折扣
+         * 云南	65<= expectDiscount<= 135
+         * 四川	65<= expectDiscount<= 135
+         * 河南	65<= expectDiscount<= 135
+         * 山西	65<= expectDiscount<= 135
+         * 湖南	65<= expectDiscount<= 135
+         */
+        @JacksonXmlProperty(localName = "expectDiscount")
+        private Integer expectDiscount;
+
+        /**
+         * 能源种类
+         * 0	燃油
+         * 1	纯电动
+         * 2	燃料电池
+         * 3	插电式混合动力
+         * 4	其它混合动力
+         */
+        @JacksonXmlProperty(localName = "fuelTypeCode")
+        private String fuelTypeCode;
+
+        /**
+         * 交管车辆类型
+         */
+        @JacksonXmlProperty(localName = "vehicleCategory")
+        private String vehicleCategory;
+
+        /**
+         * 网约车类型
+         */
+        @JacksonXmlProperty(localName = "rentalType")
+        private String rentalType;
+
+        /**
+         * 新能源标志
+         * 0 燃油
+         * 1 新能源
+         */
+        @JacksonXmlProperty(localName = "energyFlag")
+        private String energyFlag;
+
+        /**
+         * 其他能源类型描述
+         */
+        @JacksonXmlProperty(localName = "energyDescription")
+        private String energyDescription;
+
+        /**
+         * 发证日期
+         */
+        @JacksonXmlProperty(localName = "issueDate")
+        private String issueDate;
+
+        /**
+         * 核定载质量
+         */
+        @JacksonXmlProperty(localName = "tonCount")
+        private String tonCount;
+
+        /**
+         * 排量
+         */
+        @JacksonXmlProperty(localName = "displacement")
+        private String displacement;
+
+        /**
+         * 期望系数
+         */
+        @JacksonXmlProperty(localName = "hopeCoefficient")
+        private Integer hopeCoefficient;
+
+        /**
+         * 功率 摩托车拖拉机传
+         */
+        @JacksonXmlProperty(localName = "power")
+        private Integer power;
+
+        /**
+         * 设计最高时速 摩托车传
+         */
+        @JacksonXmlProperty(localName = "maxDesignSpeed")
+        private Integer maxDesignSpeed;
+
+        /**
+         * 车辆来历凭证种类
+         * 01	销售发票
+         * 02	法院调解书
+         * 03	法院裁定书
+         * 04	法院判决书
+         * 05	仲裁裁决书
+         * 06	相关文书(继承、赠予、协议抵债)
+         * 07	批准文件
+         * 08	调拨证明
+         * 09	修理发票
+         * 10	车辆合格证
+         * 11	货物进口证明书
+         */
+        @JacksonXmlProperty(localName = "certificateType")
+        private String certificateType;
+
+        /**
+         * 车辆来历凭证编号
+         */
+        @JacksonXmlProperty(localName = "certificateNo")
+        private String certificateNo;
+
+        /**
+         * 车辆来历凭证日期
+         */
+        @JacksonXmlProperty(localName = "certificateDate")
+        private String certificateDate;
+
+        /**
+         * 修理厂ID
+         */
+        @JacksonXmlProperty(localName = "repairShopId")
+        private String repairShopId;
+
+        /**
+         * 修理厂代码
+         */
+        @JacksonXmlProperty(localName = "repairShopCode")
+        private String repairShopCode;
+
+        /**
+         * 修理厂名称
+         */
+        @JacksonXmlProperty(localName = "repairShopName")
+        private String repairShopName;
+
+        /**
+         * 总行驶里程
+         */
+        @JacksonXmlProperty(localName = "runMiles")
+        private Integer runMiles;
+
+        public itemMotor(CustomerInfoVo customerInfoVo, CarInfoVo carInfoVo, CarModelQueryResponse.vehicle vehicle, BigDecimal actualValue) {
+            this.carOwner = customerInfoVo.getName();
+            this.licenseNo = carInfoVo.getLicenseNo();
+            this.engineNo = carInfoVo.getEngineNo();
+            this.modelCode = vehicle.getModelCode();
+            this.frameNo = carInfoVo.getVinNo();
+            this.carnewoldFlag = "O";
+            if (customerInfoVo.getProperty().equals("1")) {
+                // 个人
+                this.vehicleTypeOfOwner = "01";
+                this.attachNature = "01";
+                this.vehicleOwnerIDNumber = customerInfoVo.getIdentifyNumber();
+            } else if (customerInfoVo.getProperty().equals("0")){
+                // 企业
+                this.attachNature = "03";
+                this.vehicleTypeOfOwner = "4";
+                this.vehicleOwnerIDNumber = customerInfoVo.getOrganizationCode();
+            }
+            this.ageOfOwner = customerInfoVo.getAge();
+            // 性别
+            this.ownerGender = customerInfoVo.getGender();
+            // 是否过户
+            if (carInfoVo.isTransfer()) {
+                this.chgOwnerFlag = "01";
+                this.transferDate = XmlDateTimeFormatter.format(carInfoVo.getTransferDate());
+            } else {
+                this.chgOwnerFlag = "0";
+            }
+            // 默认免验车
+            this.carCheckStatus = "2";
+            this.carCheckReason = "2";
+            this.useNatureShowNew = carInfoVo.getVehicleUseCode();
+            this.licenseTypeCode = carInfoVo.getLicenseKindCode();
+            this.singeinDate  = XmlDateTimeFormatter.format(carInfoVo.getRegisterDate());
+            this.issueDate = XmlDateTimeFormatter.format(carInfoVo.getIssueDate());
+            this.enrollDate = XmlDateTimeFormatter.format(carInfoVo.getRegisterDate());
+            this.actualValue = actualValue;
+            this.loanVehicleFlag = "0";
+            this.seatNum = Integer.valueOf(vehicle.getSeat());
+            this.displacement = vehicle.getVehicleDisplacement();
+            this.power = Integer.valueOf(carInfoVo.getPowerScale());
+            if (carInfoVo.getEnergyTypeCode().equals("0")) {
+                this.energyFlag = "0";
+            } else {
+                this.energyFlag = "1";
+                this.fuelTypeCode = carInfoVo.getEnergyTypeCode();
+            }
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class RiskListWrapper {
+        /**
+         * 内层 Risk 节点列表(关闭默认包裹层,指定节点名为 Risk)
+         */
+        @JacksonXmlProperty(localName = "Risk")
+        @JacksonXmlElementWrapper(useWrapping = false)
+        private List<Risk> risks;
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class Risk {
+        /**
+         * 险种代码
+         */
+        @JacksonXmlProperty(localName = "riskCode")
+        private String riskCode;
+        /**
+         * 即时生效 默认:0-否
+         */
+        @JacksonXmlProperty(localName = "effectFlag")
+        private String effectFlag;
+
+        /**
+         * 起保时间 yyyy-MM-dd hh:mm:ss
+         */
+        @JacksonXmlProperty(localName = "startDate")
+        private String startDate;
+
+        /**
+         * 终保时间 yyyy-MM-dd hh:mm:ss
+         */
+        @JacksonXmlProperty(localName = "endDate")
+        private String endDate;
+
+        public static List<Risk> buildRiskList(RiskInfoVo ciRiskInfoVo,RiskInfoVo biRiskInfoVo) {
+            List<Risk> riskList = new ArrayList<>();
+            if (ciRiskInfoVo != null) {
+                Risk risk = new Risk();
+                risk.setRiskCode("0801");
+                risk.setStartDate(XmlDateTimeFormatter.format(ciRiskInfoVo.getStartDate()));
+                risk.setEndDate(XmlDateTimeFormatter.format(ciRiskInfoVo.getEndDate()));
+                risk.setEffectFlag(ciRiskInfoVo.isInstantFlag() ? "1" : "0");
+                riskList.add(risk);
+            }
+            if (biRiskInfoVo != null) {
+                Risk risk = new Risk();
+                risk.setRiskCode("0808");
+                risk.setStartDate(XmlDateTimeFormatter.format(biRiskInfoVo.getStartDate()));
+                risk.setEndDate(XmlDateTimeFormatter.format(biRiskInfoVo.getEndDate()));
+                risk.setEffectFlag(biRiskInfoVo.isInstantFlag() ? "1" : "0");
+                riskList.add(risk);
+            }
+            return riskList;
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class KindListWrapper {
+        @JacksonXmlProperty(localName = "Kind")
+        @JacksonXmlElementWrapper(useWrapping = false)
+        private List<Kind> kinds;
+    }
+    @NoArgsConstructor
+    @Data
+    public static class Kind {
+        /**
+         * 险种代码
+         * 0801	交强险
+         * 0808	机动车商业险险(2014)
+         */
+        @JacksonXmlProperty(localName = "riskCode")
+        private String riskCode;
+
+        /**
+         * 险别代码
+         */
+        @JacksonXmlProperty(localName = "kindCode")
+        private String kindCode;
+
+        /**
+         * 每座保险金额
+         */
+        @JacksonXmlProperty(localName = "unitInsured")
+        private BigDecimal unitInsured;
+
+        /**
+         * 座位数
+         */
+        @JacksonXmlProperty(localName = "quantity")
+        private Integer quantity;
+
+        /**
+         * 主险/附加险标志
+         */
+        @JacksonXmlProperty(localName = "kindInd")
+        private String kindInd;
+
+        /**
+         * 主险代码
+         */
+        @JacksonXmlProperty(localName = "mainKindCode")
+        private String mainKindCode;
+
+        /**
+         * 是否投保不计免赔
+         */
+        @JacksonXmlProperty(localName = "relatedInd")
+        private String relatedInd;
+
+        /**
+         * 保险金额/赔偿金额
+         */
+        @JacksonXmlProperty(localName = "sumInsured")
+        private BigDecimal sumInsured;
+
+        /**
+         * 玻璃类型
+         */
+        @JacksonXmlProperty(localName = "valueType")
+        private String valueType;
+
+        /**
+         * 指定修理厂险费率
+         */
+        @JacksonXmlProperty(localName = "clxFee")
+        private BigDecimal clxFee;
+
+        public static List<Kind> buildKindList(List<KindInfoVo> kindInfoVoList,RiskInfoVo ciRiskInfoVo,CarModelQueryResponse.vehicle vehicle,BigDecimal actualValue){
+            List<Kind> kindList = new ArrayList<>();
+            // 是否投保交强险
+            if (ciRiskInfoVo != null) {
+                Kind kind = new Kind();
+                kind.setRiskCode("0801");
+                kind.setKindCode("BZ");
+                kind.setSumInsured(new BigDecimal("200000"));
+                kind.setKindInd("1");
+                kind.setMainKindCode("BZ");
+                kind.setRelatedInd("0");
+                kindList.add(kind);
+            }
+            for (KindInfoVo kindInfoVo : kindInfoVoList) {
+                Kind kind = new Kind();
+                String kindCode = kindInfoVo.getKindCode();
+                KindCodeEnum kindCodeEnum = KindCodeEnum.valueOf("KCE_" + kindCode);
+                kind.setKindCode(kindCodeEnum.getKindCode());
+                kind.setRiskCode(kindCodeEnum.getRiskCode());
+                kind.setMainKindCode(kindCodeEnum.getMainKindCode());
+                kind.setKindInd(kindCodeEnum.getKindInd());
+                kind.setRelatedInd("0");
+                // 司机
+                if (kindCode.equals("041") || kindCode.equals("YD11")) {
+                    kind.sumInsured = new BigDecimal(kindInfoVo.getAmount());
+                    kind.unitInsured = new BigDecimal(kindInfoVo.getUnitAmount());
+                    kind.quantity = 1;
+                }
+                // 乘客
+                else if (kindCode.equals("044") || kindCode.equals("YD12")) {
+                    kind.unitInsured = new BigDecimal(kindInfoVo.getUnitAmount());
+                    kind.sumInsured =
+                            new BigDecimal(kindInfoVo.getUnitAmount()).multiply(new BigDecimal(Integer.parseInt(vehicle.getSeat()) - 1));;
+                    kind.quantity = Integer.parseInt(vehicle.getSeat()) - 1;
+                }
+                // 绝对免赔
+                else if (kindCode.equals("FA") || kindCode.equals("FB") || kindCode.equals("FD11") || kindCode.equals("FD12")) {
+                    kind.quantity = Integer.valueOf(kindInfoVo.getDeductibleRate());
+                    kind.sumInsured = new BigDecimal(kindInfoVo.getDeductibleRate());
+                } else if (kindCode.equals("S1") || kindCode.equals("S2") || kindCode.equals("S3") || kindCode.equals("S4")) {
+                    kind.quantity = Integer.valueOf(kindInfoVo.getServiceTimes());
+                    kind.sumInsured = new BigDecimal(kindInfoVo.getServiceTimes());
+                } else if (KindCodeEnum.KCE_01.getKindCode().equals(kindCode)) {
+                    kind.sumInsured = actualValue;
+                } else {
+                    kind.sumInsured = new BigDecimal(kindInfoVo.getAmount());
+                    kind.quantity = Integer.parseInt(vehicle.getSeat());
+                }
+                kindList.add(kind);
+            }
+            return kindList;
+        }
+    }
+
+    /**
+     * 车船税
+     * 此节点可选 ,不传默认代收税且上次缴费年度默认为投保的上一年
+     */
+    @NoArgsConstructor
+    @Data
+    public static class carShipTax {
+        /**
+         * 计税分类
+         * 02	代收税
+         * 03	已完税
+         * 04	减税
+         * 05	免税
+         * 07	不征
+         */
+        @JacksonXmlProperty(localName = "taxRelifFlag")
+        private String taxRelifFlag;
+
+        /**
+         * 减免税凭证号/完税凭证号
+         */
+        @JacksonXmlProperty(localName = "paidFreeCertificate")
+        private String paidFreeCertificate;
+
+        /**
+         * 开据税务机关名称
+         */
+        @JacksonXmlProperty(localName = "taxCompancyName")
+        private String taxCompancyName;
+
+        /**
+         * 减税说明(减税原因) 减免税必传
+         * 0	无
+         * 1	具备减免税证明
+         * 2	拖拉机
+         * 3	军队、武警专用车辆
+         * 4	警车
+         * 5	外国使领馆、国际组织及其人员车辆
+         * 6	其他
+         */
+        @JacksonXmlProperty(localName = "relifReason")
+        private String relifReason;
+
+        /**
+         * 减免税方案代码 减免税必传
+         * A	按金额进行减免
+         * P	按比例进行减免
+         */
+        @JacksonXmlProperty(localName = "deductionDueType")
+        private String deductionDueType;
+
+        /**
+         * 减税比例
+         */
+        @JacksonXmlProperty(localName = "freeRate")
+        private String freeRate;
+
+        /**
+         * 税务机关省份名称
+         */
+        @JacksonXmlProperty(localName = "taxProvinceCname")
+        private String taxProvinceCname;
+
+        /**
+         * 税务机关省份代码
+         */
+        @JacksonXmlProperty(localName = "taxProvinceCode")
+        private String taxProvinceCode;
+
+        /**
+         * 凭证填发日期
+         */
+        @JacksonXmlProperty(localName = "taxDocumentDate")
+        private String taxDocumentDate;
+
+        /**
+         * 税务机关城市代码
+         */
+        @JacksonXmlProperty(localName = "taxCityCode")
+        private String taxCityCode;
+
+        /**
+         * 税务机关城市名称
+         */
+        @JacksonXmlProperty(localName = "taxCityCname")
+        private String taxCityCname;
+
+        /**
+         * 上次缴税年度
+         */
+        @JacksonXmlProperty(localName = "lastPaidYear")
+        private String lastPaidYear;
+
+        //正常交税
+        private static final String TAX_NORMAL = "1";
+        // 免税
+        private static final String TAX_EXEMPTION = "2";
+        // 减税
+        private static final String TAX_REDUCTION = "3";
+        // 已完税
+        private static final String TAX_FINISH = "4";
+        //不征
+        private static final String TAX_NOT_CHARGE = "9";
+
+        public carShipTax(VehicleAndVesselTaxVo vehicleAndVesselTax,RiskInfoVo ciRiskInfoVo) {
+            Boolean isJq = getFlagByTRAFFIC(ciRiskInfoVo);
+            if (isJq) {
+                String flag = vehicleAndVesselTax.getTaxRelifFlag();
+                switch (flag) {
+                    case TAX_NORMAL:
+                        this.taxRelifFlag = "02";
+                        this.taxCompancyName = vehicleAndVesselTax.getTaxComName();
+                        this.lastPaidYear = String.valueOf(LocalDate.now().getYear() - 1);
+                        break;
+                    case TAX_EXEMPTION:
+                        this.taxRelifFlag = "05";
+                        this.relifReason = vehicleAndVesselTax.getRelifReason();
+                        this.freeRate = vehicleAndVesselTax.getTaxRelief();
+                        this.taxCompancyName = vehicleAndVesselTax.getTaxComName();
+                        this.paidFreeCertificate = vehicleAndVesselTax.getExtendChar2();
+                        break;
+                    case TAX_REDUCTION:
+                        this.taxRelifFlag = "04";
+                        this.relifReason = vehicleAndVesselTax.getRelifReason();
+                        this.freeRate = vehicleAndVesselTax.getTaxRelief();
+                        this.taxCompancyName = vehicleAndVesselTax.getTaxComName();
+                        this.paidFreeCertificate = vehicleAndVesselTax.getExtendChar2();
+                        this.lastPaidYear = String.valueOf(LocalDate.now().getYear() - 1);
+                        break;
+                    case TAX_FINISH:
+                        this.taxRelifFlag = "03";
+                        this.taxCompancyName = vehicleAndVesselTax.getTaxComName();
+                        this.taxProvinceCname = vehicleAndVesselTax.getTaxPaidAreaCode();
+                        this.taxProvinceCode = vehicleAndVesselTax.getTaxPaidAreaCode();
+                        this.taxDocumentDate = vehicleAndVesselTax.getTaxDocumentDate();
+                        this.taxCityCode = vehicleAndVesselTax.getTaxPaidAreaCode();
+                        this.taxCityCname = vehicleAndVesselTax.getTaxPaidAreaCode();
+                        this.paidFreeCertificate = vehicleAndVesselTax.getPaidFreeCertificate();
+                        break;
+                    case TAX_NOT_CHARGE:
+                        this.taxRelifFlag = "07";
+                        break;
+                }
+            }
+        }
+    }
+
+    /**
+     * 投保人信息(RelatedParty)
+     */
+    @NoArgsConstructor
+    @Data
+    public static class relatedParty {
+        /**
+         * 投保人类型
+         * 1	个人
+         * 2	团体
+         */
+        @JacksonXmlProperty(localName = "insuredType")
+        private String insuredType;
+
+        /**
+         * 投保人名称
+         */
+        @JacksonXmlProperty(localName = "insuredName")
+        private String insuredName;
+
+        /**
+         * 证件类型
+         * 01	居民身份证
+         * 02	护照
+         * 03	军人身份证
+         * 08	港澳居民来往内地通行证
+         * 09	台湾居民来往大陆通行证
+         * 10	武警身份证
+         * 11	外国人永久居留身份证
+         * 44	港澳台居民居住证
+         * 1	组织机构代码证(团体)
+         * 4	统一社会信用代码(团体)
+         */
+        @JacksonXmlProperty(localName = "identifyType")
+        private String identifyType;
+
+        /**
+         * 证件号码
+         */
+        @JacksonXmlProperty(localName = "identifyNumber")
+        private String identifyNumber;
+
+        /**
+         * 省代码
+         */
+        @JacksonXmlProperty(localName = "appProvince")
+        private String appProvince;
+
+        /**
+         * 市代码
+         */
+        @JacksonXmlProperty(localName = "appCity")
+        private String appCity;
+
+        /**
+         * 区/县代码
+         */
+        @JacksonXmlProperty(localName = "appDistrict")
+        private String appDistrict;
+
+        /**
+         * 详细地址
+         */
+        @JacksonXmlProperty(localName = "appCompleteAddress")
+        private String appCompleteAddress;
+
+        /**
+         * 国家代码
+         * CN 中国
+         * US 美国
+         * JP 日本
+         * KR 韩国
+         * TW 中国台湾
+         * HK 中国香港
+         * MO 中国澳门
+         * SG 新加坡
+         */
+        @JacksonXmlProperty(localName = "terrorNationality")
+        private String terrorNationality;
+
+        /**
+         * 投保人证件有效期起期
+         */
+        @JacksonXmlProperty(localName = "identifyValidDate")
+        private String identifyValidDate;
+
+        /**
+         * 投保人证件有效期止期
+         */
+        @JacksonXmlProperty(localName = "identifyValidEndDate")
+        private String identifyValidEndDate;
+
+        /**
+         * 是否长期
+         * 0-否;1-是
+         */
+        @JacksonXmlProperty(localName = "longTerm")
+        private String longTerm;
+        /**
+         * 性别
+         * 1	男
+         * 2	女
+         * 9	未说明
+         */
+        @JacksonXmlProperty(localName = "sex")
+        private String sex;
+
+        /**
+         * 出生日期
+         */
+        @JacksonXmlProperty(localName = "birthDate")
+        private String birthDate;
+
+        /**
+         * 地址
+         */
+        @JacksonXmlProperty(localName = "insuredAddress")
+        private String insuredAddress;
+
+        /**
+         * 邮政编码
+         */
+        @JacksonXmlProperty(localName = "postCode")
+        private String postCode;
+
+        /**
+         * 联系电话
+         */
+        @JacksonXmlProperty(localName = "mobilePhone")
+        private String mobilePhone;
+
+        /**
+         * E - mail
+         */
+        @JacksonXmlProperty(localName = "email")
+        private String email;
+
+        /**
+         * 单位电话
+         */
+        @JacksonXmlProperty(localName = "officePhone")
+        private String officePhone;
+
+        /**
+         * 负责人姓名
+         */
+        @JacksonXmlProperty(localName = "insuredUnitLeader")
+        private String insuredUnitLeader;
+
+        /**
+         * 单位性质名称
+         */
+        @JacksonXmlProperty(localName = "unitTypeName")
+        private String unitTypeName;
+
+        /**
+         * 单位性质
+         */
+        @JacksonXmlProperty(localName = "unitTypeCode")
+        private String unitTypeCode;
+
+        /**
+         * 联系人名称
+         */
+        @JacksonXmlProperty(localName = "contactName")
+        private String contactName;
+
+        /**
+         * 联系人电话
+         */
+        @JacksonXmlProperty(localName = "contactMobile")
+        private String contactMobile;
+
+        /**
+         * 联系人证件类型
+         */
+        @JacksonXmlProperty(localName = "contactIdentifyType")
+        private String contactIdentifyType;
+
+        /**
+         * 联系人证件号码
+         */
+        @JacksonXmlProperty(localName = "contactIdentifyNumber")
+        private String contactIdentifyNumber;
+
+        public relatedParty(CustomerInfoVo policyHolderInfo) {
+            this.insuredName = policyHolderInfo.getName();
+            this.appProvince = policyHolderInfo.getProvince();
+            this.appCity = policyHolderInfo.getCity();
+            this.appDistrict = policyHolderInfo.getCounty();
+            this.appCompleteAddress = policyHolderInfo.getAddr();
+            this.terrorNationality = "CN";
+            this.identifyValidDate = XmlDateTimeFormatter.format(policyHolderInfo.getIdentifyValidDate());
+            this.identifyValidEndDate = XmlDateTimeFormatter.format(policyHolderInfo.getIdentifyValidEndDate());
+            this.longTerm = policyHolderInfo.getIdentifyValidEndDate() != null && policyHolderInfo.getIdentifyValidEndDate().contains("9999") ? "1" : "0";
+            this.insuredAddress = policyHolderInfo.getAddr();
+            this.mobilePhone = policyHolderInfo.getMobile();
+            //this.postCode = "";
+            if (policyHolderInfo.getProperty().equals("1")) {
+                this.insuredType = "1";
+                this.identifyType = "01";
+                this.identifyNumber = policyHolderInfo.getIdentifyNumber();
+                this.sex = policyHolderInfo.getGender().equals("男") ? "1" : "2";
+                this.birthDate = XmlDateTimeFormatter.format(policyHolderInfo.getIdentifyNumber().substring(6, 10) + "-" + policyHolderInfo.getIdentifyNumber().substring(10, 12) + "-" + policyHolderInfo.getIdentifyNumber().substring(12, 14));
+                this.email = policyHolderInfo.getEmail();
+            }
+            if (policyHolderInfo.getProperty().equals("0")) {
+                this.insuredType = "2";
+                this.identifyType = "4";
+                this.identifyNumber = policyHolderInfo.getOrganizationCode();
+                this.officePhone = policyHolderInfo.getMobile();
+                this.insuredUnitLeader = policyHolderInfo.getLegalPerson();
+                this.unitTypeCode = "";
+                this.unitTypeName = "";
+                this.contactName = policyHolderInfo.getLegalPerson();
+                this.contactMobile = policyHolderInfo.getMobile();
+                this.contactIdentifyType = "01";
+                this.contactIdentifyNumber = policyHolderInfo.getLeaderIdentifyNumber();
+            }
+        }
+    }
+
+    /**
+     *
+     * 被保险人信息(RiskRelatedParty)
+     */
+    @NoArgsConstructor
+    @Data
+    public static class riskRelatedParty {
+        /**
+         * 被保险人类型
+         * 1:个人 2:团体
+         */
+        @JacksonXmlProperty(localName = "insuredType")
+        private String insuredType;
+        /**
+         * 被保险人名称
+         */
+        @JacksonXmlProperty(localName = "insuredName")
+        private String insuredName;
+        /**
+         * 证件类型
+         */
+        @JacksonXmlProperty(localName = "identifyType")
+        private String identifyType;
+        /**
+         * 证件号码
+         */
+        @JacksonXmlProperty(localName = "identifyNumber")
+        private String identifyNumber;
+
+        /**
+         * 省代码
+         */
+        @JacksonXmlProperty(localName = "insuredProvince")
+        private String insuredProvince;
+        /**
+         * 市代码
+         */
+        @JacksonXmlProperty(localName = "insuredCity")
+        private String insuredCity;
+        /**
+         * 区/县代码
+         */
+        @JacksonXmlProperty(localName = "insuredDistrict")
+        private String insuredDistrict;
+
+        /**
+         * 详细地址
+         */
+        @JacksonXmlProperty(localName = "insuredCompleteAddress")
+        private String insuredCompleteAddress;
+
+        /**
+         * 国家代码
+         * CN 中国
+         * US 美国
+         * JP 日本
+         * KR 韩国
+         * TW 中国台湾
+         * HK 中国香港
+         * MO 中国澳门
+         * SG 新加坡
+         */
+        @JacksonXmlProperty(localName = "terrorNationality")
+        private String terrorNationality;
+
+        /**
+         * 投保人证件有效期起期
+         */
+        @JacksonXmlProperty(localName = "identifyValidDate")
+        private String identifyValidDate;
+
+        /**
+         * 投保人证件有效期止期
+         */
+        @JacksonXmlProperty(localName = "identifyValidEndDate")
+        private String identifyValidEndDate;
+
+        /**
+         * 是否长期
+         * 0-否;1-是
+         */
+        @JacksonXmlProperty(localName = "longTerm")
+        private String longTerm;
+
+        /**
+         * 性别
+         */
+        @JacksonXmlProperty(localName = "insuredSex")
+        private String insuredSex;
+
+        /**
+         * 出生日期
+         */
+        @JacksonXmlProperty(localName = "insuredBirthDate")
+        private String insuredBirthDate;
+
+        /**
+         * 地址
+         */
+        @JacksonXmlProperty(localName = "insuredAddress")
+        private String insuredAddress;
+
+        /**
+         * 邮政编码
+         */
+        @JacksonXmlProperty(localName = "insuredPostCode")
+        private String insuredPostCode;
+
+        /**
+         * 联系电话
+         */
+        @JacksonXmlProperty(localName = "insuredMobilePhone")
+        private String insuredMobilePhone;
+
+        /**
+         * 被保人与投保人关系
+         * 0	未知
+         * 1	配偶
+         * 2	父母
+         * 3	子女
+         * 4	祖父母
+         * 5	孙子女
+         * 6	其他
+         */
+        @JacksonXmlProperty(localName = "relationWithHolder")
+        private String relationWithHolder;
+
+        /**
+         * 被保险人与车辆关系
+         * 1	拥有
+         * 2	使用
+         * 3	管理
+         */
+        @JacksonXmlProperty(localName = "carInsuredRelation")
+        private String carInsuredRelation;
+
+        /**
+         * 单位电话
+         */
+        @JacksonXmlProperty(localName = "insuredOfficePhone")
+        private String insuredOfficePhone;
+
+        /**
+         * 负责人姓名
+         */
+        @JacksonXmlProperty(localName = "insuredUnitLeader")
+        private String insuredUnitLeader;
+
+        /**
+         * 单位性质code
+         */
+        @JacksonXmlProperty(localName = "unitTypeCode")
+        private String unitTypeCode;
+        /**
+         * 单位性质名称
+         */
+        @JacksonXmlProperty(localName = "unitTypeName")
+        private String unitTypeName;
+        /**
+         * 联系人名称
+         */
+        @JacksonXmlProperty(localName = "contactName")
+        private String contactName;
+
+        /**
+         * 联系人电话
+         */
+        @JacksonXmlProperty(localName = "contactMobile")
+        private String contactMobile;
+
+        public riskRelatedParty(CustomerInfoVo insuredPersonInfo) {
+            this.insuredName = insuredPersonInfo.getName();
+            this.insuredProvince = insuredPersonInfo.getProvince();
+            this.insuredCity = insuredPersonInfo.getCity();
+            this.insuredDistrict = insuredPersonInfo.getCounty();
+            this.insuredCompleteAddress = insuredPersonInfo.getAddr();
+            this.terrorNationality = "CN";
+            this.identifyValidDate = XmlDateTimeFormatter.format(insuredPersonInfo.getIdentifyValidDate());
+            this.identifyValidEndDate = XmlDateTimeFormatter.format(insuredPersonInfo.getIdentifyValidEndDate());
+            this.longTerm = insuredPersonInfo.getIdentifyValidEndDate() != null && insuredPersonInfo.getIdentifyValidEndDate().contains("9999") ? "1" : "0";
+            this.insuredAddress = insuredPersonInfo.getAddr();
+            this.insuredMobilePhone = insuredPersonInfo.getMobile();
+            //this.postCode = "";
+            if (insuredPersonInfo.getProperty().equals("1")) {
+                this.insuredType = "1";
+                this.identifyType = "01";
+                this.identifyNumber = insuredPersonInfo.getIdentifyNumber();
+                this.insuredSex = insuredPersonInfo.getGender().equals("男") ? "1" : "2";
+                this.insuredBirthDate = XmlDateTimeFormatter.format(insuredPersonInfo.getIdentifyNumber().substring(6, 10) + "-" + insuredPersonInfo.getIdentifyNumber().substring(10, 12) + "-" + insuredPersonInfo.getIdentifyNumber().substring(12, 14));
+                this.relationWithHolder = "0";
+                this.carInsuredRelation = "1";
+            }
+            if (insuredPersonInfo.getProperty().equals("0")) {
+                this.insuredType = "2";
+                this.identifyType = "4";
+                this.identifyNumber = insuredPersonInfo.getOrganizationCode();
+                this.insuredOfficePhone = insuredPersonInfo.getMobile();
+                this.insuredUnitLeader = insuredPersonInfo.getLegalPerson();
+                this.unitTypeCode = "";
+                this.unitTypeName = "";
+                this.contactName = insuredPersonInfo.getLegalPerson();
+                this.contactMobile = insuredPersonInfo.getMobile();
+                this.relationWithHolder = "0";
+                this.carInsuredRelation = "1";
+            }
+        }
+    }
+
+    public static Boolean getFlagByTRAFFIC(RiskInfoVo ciRiskInfoVo) {
+        boolean trafficFlag = false;//是否含交强
+            // 交强
+            if (InsuranceRisk.TRAFFIC.getCode().equals(ciRiskInfoVo.getRiskCode())) {
+                trafficFlag = true;
+            }
+        return trafficFlag;
+    }
+}

+ 0 - 115
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/QueryCarActualValueRequest.java

@@ -1,115 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.request;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.jzg.commons.entity.quote.vo.CarInfoVo;
-import com.jzg.commons.entity.quote.vo.RiskInfoVo;
-import com.jzg.quotation.chengtai.api.entity.constants.PlateType;
-import com.jzg.quotation.chengtai.api.entity.response.CarInfoResponse;
-import com.jzg.commons.entity.quote.vo.QuoteVo;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-
-import java.math.BigDecimal;
-import java.util.Objects;
-
-/**
- * 【车辆价值计算】请求实体
- */
-@EqualsAndHashCode(callSuper = true)
-@NoArgsConstructor
-@Data
-public class QueryCarActualValueRequest extends BaseRequest{
-
-    /**
-     * 交强险起保日期
-     */
-    @JsonProperty("ciValidDate")
-    private String ciValidDate;
-
-    /**
-     * 商业险起保日期
-     */
-    @JsonProperty("biValidDate")
-    private String biValidDate;
-
-    /**
-     * 新车购置价
-     */
-    @JsonProperty("purchasePrice")
-    private BigDecimal purchasePrice;
-
-    /**
-     * 初登日期
-     */
-    @JsonProperty("registerDate")
-    private String registerDate;
-
-    /**
-     * 行驶证发证日期
-     */
-    @JsonProperty("issueDate")
-    private String issueDate;
-
-    /**
-     * 车辆种类
-     */
-    @JsonProperty("carKindCode")
-    private String carKindCode;
-
-    /**
-     * 号牌种类
-     */
-    @JsonProperty("plateType")
-    private String plateType;
-
-    /**
-     * 核定载客人数
-     */
-    @JsonProperty("approvedPassengersCapacity")
-    private BigDecimal approvedPassengersCapacity;
-
-    /**
-     * 使用性质代码
-     */
-    @JsonProperty("useNatureCode")
-    private String useNatureCode;
-
-    /**
-     * 能源种类
-     */
-    @JsonProperty("energyTypes")
-    private String energyTypes;
-
-    public QueryCarActualValueRequest(QuoteVo quoteVo, CarInfoResponse.CarModelListDTO carModelListDTO, String partnerCode){
-        super(partnerCode);
-        String purchasePrice = carModelListDTO.getPurchasePrice(); // 新车购置价格
-        BigDecimal seatCount = carModelListDTO.getApprovedPassengersCapacity(); // 核定载客人数
-
-        // 3.1 计算起保日期
-        CarInfoVo carInfo = quoteVo.getCarInfoVo();
-        RiskInfoVo ciRiskInfoVo = quoteVo.getCiRiskInfoVo(); // 交强险
-        RiskInfoVo biRiskInfoVo = quoteVo.getBiRiskInfoVo(); // 商业险
-        String jqStartDate = ""; // 交强起保日期
-        String syStartDate = ""; // 商业起保日期
-        if(Objects.nonNull(ciRiskInfoVo)){
-            jqStartDate = ciRiskInfoVo.getStartDate(); // 交强起保日期
-        } else if(Objects.nonNull(biRiskInfoVo)){
-            syStartDate = biRiskInfoVo.getStartDate(); // 商业起保日期
-        }
-        this.ciValidDate = jqStartDate;
-        this.biValidDate = syStartDate;
-        this.purchasePrice = new BigDecimal(purchasePrice);
-        this.registerDate = carInfo.getRegisterDate();
-        this.issueDate = carInfo.getIssueDate();
-        this.carKindCode = carInfo.getCarKindCode();
-        if("1".equals(carInfo.getEnergyTypeCode()) || "3".equals(carInfo.getEnergyTypeCode())) {
-            this.plateType = PlateType.P52.getCode();
-        }else{
-            this.plateType = PlateType.P02.getCode();
-        }
-        this.approvedPassengersCapacity = seatCount;
-        this.useNatureCode = carInfo.getVehicleUseCode();
-        this.energyTypes = carInfo.getEnergyTypeCode();
-    }
-}

+ 1380 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/SubmitRequest.java

@@ -0,0 +1,1380 @@
+package com.jzg.quotation.chengtai.api.entity.request;
+
+import cn.hutool.core.util.ArrayUtil;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+import com.jzg.commons.entity.orders.po.*;
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
+import com.jzg.commons.entity.quote.vo.KindInfoVo;
+import com.jzg.commons.entity.quote.vo.RiskInfoVo;
+import com.jzg.commons.entity.quote.vo.aggregated.UnderwritingVo;
+import com.jzg.quotation.chengtai.api.entity.ChengTaiApiParameters;
+import com.jzg.quotation.chengtai.api.entity.constants.KindCodeEnum;
+import com.jzg.quotation.chengtai.api.entity.constants.KindCodeMapping;
+import com.jzg.quotation.chengtai.api.entity.constants.UseNatureShowEnum;
+import com.jzg.quotation.chengtai.api.entity.response.CarModelQueryResponse;
+import com.jzg.quotation.chengtai.api.utils.XmlDateTimeFormatter;
+import com.jzg.quotation.commons.constant.InsuranceTypeCorrespondence;
+import com.jzg.quotation.commons.utils.SnowFlakeUtil;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author quchen
+ * @date 2026/4/20 14:46
+ */
+
+@JacksonXmlRootElement(localName = "arg0")
+@NoArgsConstructor
+@Data
+public class SubmitRequest {
+
+    /**
+     * 报文头信息(Head)
+     */
+    @JacksonXmlProperty(isAttribute = false, localName = "Head")
+    private head Head;
+
+    /**
+     * 基础信息(BasePart)
+     */
+    @JacksonXmlProperty(isAttribute = false, localName = "BasePart")
+    private basePart BasePart;
+
+    /**
+     * 标的信息(ItemMotor)
+     */
+    @JacksonXmlProperty(isAttribute = false, localName = "ItemMotor")
+    private itemMotor ItemMotor;
+
+    /**
+     * 险种信息数据列表(RiskList)数据集(Risk)
+     */
+    @JacksonXmlElementWrapper(useWrapping = false)
+    @JacksonXmlProperty(localName = "RiskList")
+    private RiskListWrapper riskListWrapper;
+
+    /**
+     * 险别信息数据列表(KindList)数据集(Kind)
+     */
+    @JacksonXmlElementWrapper(useWrapping = false)
+    @JacksonXmlProperty(localName = "KindList")
+    private KindListWrapper kindListWrapper;
+
+    /**
+     * 投保人信息(RelatedParty)
+     */
+    @JacksonXmlProperty(localName = "RelatedParty")
+    private relatedParty RelatedParty;
+
+    /**
+     * 被保险人信息(RiskRelatedParty)
+     */
+    @JacksonXmlProperty(localName = "RiskRelatedParty")
+    private riskRelatedParty RiskRelatedParty;
+
+    /**
+     * 车船税(CarShipTax)
+     * 此节点可选 ,不传默认代收税且上次缴费年度默认为投保的上一年
+     */
+    @JacksonXmlProperty(localName = "CarShipTax")
+    private carShipTax CarShipTax;
+
+    //    /**
+//     * 特约节点
+//     */
+//    @JacksonXmlProperty(localName = "RiskSpecialClausesList")
+//    private List<RiskSpecialClauses> RiskSpecialClausesList;
+
+    public SubmitRequest(UnderwritingVo underwritingVo, CarModelQueryResponse.vehicle vehicle,
+                         ChengTaiApiParameters parameters) {
+        InsOrdersCarUserInfo policyHolder = underwritingVo.getInsOrdersCarUserInfoList()
+                .stream().filter(insOrdersCarUserInfo -> insOrdersCarUserInfo.getPolicyPersonType().equals(2))
+                .findFirst().orElse(null);
+        InsOrdersCarUserInfo insured = underwritingVo.getInsOrdersCarUserInfoList()
+                .stream().filter(insOrdersCarUserInfo -> insOrdersCarUserInfo.getPolicyPersonType().equals(3))
+                .findFirst().orElse(null);
+        this.Head = new head(parameters);
+        this.BasePart = new basePart(underwritingVo.getInsOrders(),underwritingVo.getInsOrdersAccidentalDriving());
+        this.ItemMotor = new itemMotor(underwritingVo,vehicle);
+        this.riskListWrapper = new RiskListWrapper();
+        this.riskListWrapper.setRisks(Risk.buildRiskList(underwritingVo));
+        this.kindListWrapper = new KindListWrapper();
+        this.kindListWrapper.setKinds(Kind.buildKindList(underwritingVo,vehicle));
+        this.CarShipTax = new carShipTax(underwritingVo);
+        this.RelatedParty = new relatedParty(policyHolder,underwritingVo.getInsOrdersCarInfo());
+        this.RiskRelatedParty = new riskRelatedParty(insured,underwritingVo.getInsOrdersCarInfo());
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class head {
+        /**
+         * 请求类型
+         */
+        @JacksonXmlProperty(localName = "requestType")
+        private String requestType;
+
+        /**
+         * 用户名
+         */
+        @JacksonXmlProperty(localName = "userName")
+        private String userName;
+
+        /**
+         * 密码
+         */
+        @JacksonXmlProperty(localName = "passWord")
+        private String passWord;
+
+        /**
+         * 外网提供的唯一标志
+         */
+        @JacksonXmlProperty(localName = "queryId")
+        private String queryId;
+
+        /**
+         * 合作伙伴代码
+         */
+        @JacksonXmlProperty(localName = "partnerCode")
+        private String partnerCode;
+
+        public head(ChengTaiApiParameters parameters) {
+            this.requestType = "00002";
+            this.userName = parameters.getUserName();
+            this.passWord = parameters.getPassWord();
+            this.queryId = String.valueOf(new SnowFlakeUtil().nextId());
+            this.partnerCode = parameters.getPartnerCode();
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class basePart {
+        /**
+         * 订单流水号
+         */
+        @JacksonXmlProperty(localName = "orderNumber")
+        private String orderNumber;
+
+        /**
+         * 计划代码 组合险时填组合险代码,单险种填险种代码 0801交强险 0808商业险 1363组合险
+         */
+        @JacksonXmlProperty(localName = "planCode")
+        private String planCode;
+
+        /**
+         * 城市代码
+         */
+        @JacksonXmlProperty(localName = "cityCode")
+        private String cityCode;
+
+        /**
+         * 续保标志
+         * 0	新保
+         * 1	续保(暂不支持续保功能)
+         */
+        @JacksonXmlProperty(localName = "renewInd")
+        private String renewInd;
+
+        /**
+         * 非车产品code
+         */
+        @JacksonXmlProperty(localName = "nvhlSuitCode")
+        private String nvhlSuitCode;
+
+        /**
+         * 非车支付金额
+         */
+        @JacksonXmlProperty(localName = "payAmtnvhl")
+        private String payAmtnvhl;
+
+        /**
+         * 被保人身份类型 投保驾乘意外险时传;01:司机,02:乘客,03司机与乘客
+         */
+        @JacksonXmlProperty(localName = "insuredType")
+        private String insuredType;
+
+        public basePart(InsOrders insOrders, InsOrdersAccidentalDriving insOrdersAccidentalDriving) {
+            this.orderNumber = insOrders.getCompanyOrderNo();
+            String productId = insOrders.getProductId();
+            if ("0330".equals(productId)) {
+                this.planCode = "0801";
+            } else if ("034001".equals(productId) || "034002".equals(productId)) {
+                this.planCode = "0808";
+            } else {
+                this.planCode = "1363";
+            }
+            this.cityCode = "140100";
+            this.renewInd = "0";
+            if(insOrdersAccidentalDriving != null) {
+                this.insuredType = "03";
+                this.nvhlSuitCode = insOrdersAccidentalDriving.getRiskCode();
+                this.payAmtnvhl = insOrdersAccidentalDriving.getAmount();
+            }
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class itemMotor {
+        /**
+         * 车主名称
+         */
+        @JacksonXmlProperty(localName = "carOwner")
+        private String carOwner;
+
+        /**
+         * 车牌号码
+         */
+        @JacksonXmlProperty(localName = "licenseNo")
+        private String licenseNo;
+
+        /**
+         * 发动机号
+         */
+        @JacksonXmlProperty(localName = "engineNo")
+        private String engineNo;
+
+        /**
+         * 精友车型代码
+         */
+        @JacksonXmlProperty(localName = "modelCode")
+        private String modelCode;
+
+        /**
+         * 车架号/VIN码
+         */
+        @JacksonXmlProperty(localName = "frameNo")
+        private String frameNo;
+
+        /**
+         * 新旧车标识
+         * O	旧车
+         * N	新车
+         */
+        @JacksonXmlProperty(localName = "carnewoldFlag")
+        private String carnewoldFlag;
+
+        /**
+         * 车主证件类型
+         * 01	居民身份证
+         * 02	护照
+         * 03	军人身份证
+         * 08	港澳居民来往内地通行证
+         * 09	台湾居民来往大陆通行证
+         * 10	武警身份证
+         * 11	外国人永久居留身份证
+         * 44	港澳台居民居住证
+         * 1	组织机构代码证(团体)
+         * 4	统一社会信用代码(团体)
+         */
+        @JacksonXmlProperty(localName = "vehicleTypeOfOwner")
+        private String vehicleTypeOfOwner;
+
+        /**
+         * 车主证件号码
+         */
+        @JacksonXmlProperty(localName = "vehicleOwnerIDNumber")
+        private String vehicleOwnerIDNumber;
+
+        /**
+         * 车主年龄
+         */
+        @JacksonXmlProperty(localName = "ageOfOwner")
+        private Integer ageOfOwner;
+
+        /**
+         * 车主性别
+         * 1	男
+         * 2	女
+         * 9	未说明
+         */
+        @JacksonXmlProperty(localName = "ownerGender")
+        private String ownerGender;
+
+        /**
+         * 过户标志
+         * 0	空
+         * 01	投保过户
+         * 02	批改过户
+         */
+        @JacksonXmlProperty(localName = "chgOwnerFlag")
+        private String chgOwnerFlag;
+
+        /**
+         * 过户日期
+         */
+        @JacksonXmlProperty(localName = "transferDate")
+        private String transferDate;
+
+        /**
+         * 验车情况
+         * 1	未验车
+         * 2	免验车
+         * 3	已验车
+         * 4	待补资料
+         */
+        @JacksonXmlProperty(localName = "carCheckStatus")
+        private String carCheckStatus;
+
+        /**
+         * 验车人
+         */
+        @JacksonXmlProperty(localName = "carChecker")
+        private String carChecker;
+
+        /**
+         * 验车时间
+         */
+        @JacksonXmlProperty(localName = "carCheckTime")
+        private String carCheckTime;
+
+        /**
+         * 免验车原因 验车情况为2时必传
+         * 1	单保责任险
+         * 2	按期续保未增保损失险类
+         * 3	新车
+         * 4	团单
+         */
+        @JacksonXmlProperty(localName = "carCheckReason")
+        private String carCheckReason;
+
+        /**
+         * 新使用性质
+         * 01	家庭自用汽车	机动车
+         * 02	公路客运	机动车
+         * 03	城市公交	机动车
+         * 04	租赁客车	机动车
+         * 05	出租客车	机动车
+         * 06	旅游客运	机动车
+         * 07	营业货车	机动车
+         * 08	营业挂车	机动车
+         * 09	非营业挂车	机动车
+         * 10	非营业企业	机动车
+         * 11	非营业机关、事业团体	机动车
+         * 12	非营业货车	机动车
+         */
+        @JacksonXmlProperty(localName = "useNatureShowNew")
+        private String useNatureShowNew;
+
+        /**
+         * 车辆所属性质
+         * 01	个人
+         * 02	机关/团体
+         * 03	企业
+         */
+        @JacksonXmlProperty(localName = "attachNature")
+        private String attachNature;
+
+        /**
+         * 号牌种类
+         * 代码	描述
+         * 01	大型汽车
+         * 02	小型汽车
+         * 15	挂车
+         * 16	教练汽车
+         * 99	其他
+         */
+        @JacksonXmlProperty(localName = "licenseTypeCode")
+        private String licenseTypeCode;
+
+        /**
+         * 初登日期
+         */
+        @JacksonXmlProperty(localName = "singeinDate")
+        private String singeinDate;
+
+        /**
+         * 购置日期
+         */
+        @JacksonXmlProperty(localName = "enrollDate")
+        private String enrollDate;
+
+        /**
+         * 贷款车标志
+         */
+        @JacksonXmlProperty(localName = "loanVehicleFlag")
+        private String loanVehicleFlag;
+
+        /**
+         * 车辆实际价值
+         */
+        @JacksonXmlProperty(localName = "actualValue")
+        private BigDecimal actualValue;
+
+        /**
+         * 座位数
+         */
+        @JacksonXmlProperty(localName = "seatNum")
+        private Integer seatNum;
+
+        /**
+         * 发证日期
+         */
+        @JacksonXmlProperty(localName = "issueDate")
+        private String issueDate;
+
+        /**
+         * 期望系数
+         */
+        @JacksonXmlProperty(localName = "hopeCoefficient")
+        private Integer hopeCoefficient;
+
+        /**
+         * 功率 摩托车拖拉机传
+         */
+        @JacksonXmlProperty(localName = "power")
+        private Integer power;
+
+        /**
+         * 设计最高时速 摩托车传
+         */
+        @JacksonXmlProperty(localName = "maxDesignSpeed")
+        private Integer maxDesignSpeed;
+
+        /**
+         * 车辆来历凭证种类
+         * 01	销售发票
+         * 02	法院调解书
+         * 03	法院裁定书
+         * 04	法院判决书
+         * 05	仲裁裁决书
+         * 06	相关文书(继承、赠予、协议抵债)
+         * 07	批准文件
+         * 08	调拨证明
+         * 09	修理发票
+         * 10	车辆合格证
+         * 11	货物进口证明书
+         */
+        @JacksonXmlProperty(localName = "certificateType")
+        private String certificateType;
+
+        /**
+         * 车辆来历凭证编号
+         */
+        @JacksonXmlProperty(localName = "certificateNo")
+        private String certificateNo;
+
+        /**
+         * 车辆来历凭证日期
+         */
+        @JacksonXmlProperty(localName = "certificateDate")
+        private String certificateDate;
+
+        /**
+         * 修理厂ID
+         */
+        @JacksonXmlProperty(localName = "repairShopId")
+        private String repairShopId;
+
+        /**
+         * 修理厂代码
+         */
+        @JacksonXmlProperty(localName = "repairShopCode")
+        private String repairShopCode;
+
+        /**
+         * 修理厂名称
+         */
+        @JacksonXmlProperty(localName = "repairShopName")
+        private String repairShopName;
+
+        /**
+         * 总行驶里程
+         */
+        @JacksonXmlProperty(localName = "runMiles")
+        private Integer runMiles;
+
+        public itemMotor(UnderwritingVo underwritingVo, CarModelQueryResponse.vehicle vehicle) {
+            InsOrdersCarInfo insOrdersCarInfo = underwritingVo.getInsOrdersCarInfo();
+            InsOrdersCarUserInfo owner = underwritingVo.getInsOrdersCarUserInfoList()
+                    .stream().filter(insOrdersCarUserInfo -> insOrdersCarUserInfo.getPolicyPersonType().equals(1))
+                    .findFirst().orElse(null);
+            this.carOwner = owner.getName();
+            this.licenseNo = insOrdersCarInfo.getLicenseNo();
+            this.engineNo = insOrdersCarInfo.getEngineNo();
+            this.modelCode = vehicle.getModelCode();
+            this.frameNo = insOrdersCarInfo.getVinNo();
+            this.carnewoldFlag = "O";
+            if (insOrdersCarInfo.getPropertyCode().equals("1")) {
+                // 个人
+                this.vehicleTypeOfOwner = "01";
+                this.attachNature = "01";
+                this.vehicleOwnerIDNumber = owner.getIdentifyNumber();
+            } else if (insOrdersCarInfo.getPropertyCode().equals("2")){
+                // 企业
+                this.attachNature = "03";
+                this.vehicleTypeOfOwner = "4";
+                this.vehicleOwnerIDNumber = owner.getIdentifyNumber();
+            }
+            this.ageOfOwner = owner.getAge();
+            // 性别
+            if (owner.getGender().equals("1")) {
+                this.ownerGender = "1";
+            } else if (owner.getGender().equals("2")){
+                this.ownerGender = "2";
+            } else {
+                this.ownerGender = "9";
+            }
+            // 是否过户
+            if (insOrdersCarInfo.getTransfer() == 1) {
+                this.chgOwnerFlag = "01";
+                this.transferDate = XmlDateTimeFormatter.format(insOrdersCarInfo.getTransferDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            } else {
+                this.chgOwnerFlag = "0";
+            }
+            // 默认免验车
+            this.carCheckStatus = "2";
+            this.carCheckReason = "2";
+            UseNatureShowEnum useNatureCodeEnum = UseNatureShowEnum.valueOf("U_"+ insOrdersCarInfo.getVehicleUseCode());
+            this.useNatureShowNew = useNatureCodeEnum.getCode();
+            this.licenseTypeCode = insOrdersCarInfo.getLicenseKindCode();
+            this.singeinDate  = XmlDateTimeFormatter.format(insOrdersCarInfo.getRegisterDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            this.issueDate = XmlDateTimeFormatter.format(insOrdersCarInfo.getIssueDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            this.enrollDate = XmlDateTimeFormatter.format(insOrdersCarInfo.getRegisterDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            this.actualValue = underwritingVo.getInsOrdersCarInfo().getActualValue();;
+            this.seatNum = Integer.valueOf(vehicle.getSeat());
+//            this.power = Integer.valueOf(carInfoVo.getPowerScale());
+        }
+    }
+
+    /**
+     * 投保人信息(RelatedParty)
+     */
+    @NoArgsConstructor
+    @Data
+    public static class relatedParty {
+        /**
+         * 投保人类型
+         * 1	个人
+         * 2	团体
+         */
+        @JacksonXmlProperty(localName = "insuredType")
+        private String insuredType;
+
+        /**
+         * 投保人名称
+         */
+        @JacksonXmlProperty(localName = "insuredName")
+        private String insuredName;
+
+        /**
+         * 证件类型
+         * 01	居民身份证
+         * 02	护照
+         * 03	军人身份证
+         * 08	港澳居民来往内地通行证
+         * 09	台湾居民来往大陆通行证
+         * 10	武警身份证
+         * 11	外国人永久居留身份证
+         * 44	港澳台居民居住证
+         * 1	组织机构代码证(团体)
+         * 4	统一社会信用代码(团体)
+         */
+        @JacksonXmlProperty(localName = "identifyType")
+        private String identifyType;
+
+        /**
+         * 证件号码
+         */
+        @JacksonXmlProperty(localName = "identifyNumber")
+        private String identifyNumber;
+
+        /**
+         * 省代码
+         */
+        @JacksonXmlProperty(localName = "appProvince")
+        private String appProvince;
+
+        /**
+         * 市代码
+         */
+        @JacksonXmlProperty(localName = "appCity")
+        private String appCity;
+
+        /**
+         * 区/县代码
+         */
+        @JacksonXmlProperty(localName = "appDistrict")
+        private String appDistrict;
+
+        /**
+         * 详细地址
+         */
+        @JacksonXmlProperty(localName = "appCompleteAddress")
+        private String appCompleteAddress;
+
+        /**
+         * 国家代码
+         * CN 中国
+         * US 美国
+         * JP 日本
+         * KR 韩国
+         * TW 中国台湾
+         * HK 中国香港
+         * MO 中国澳门
+         * SG 新加坡
+         */
+        @JacksonXmlProperty(localName = "terrorNationality")
+        private String terrorNationality;
+
+        /**
+         * 投保人证件有效期起期
+         */
+        @JacksonXmlProperty(localName = "identifyValidDate")
+        private String identifyValidDate;
+
+        /**
+         * 投保人证件有效期止期
+         */
+        @JacksonXmlProperty(localName = "identifyValidEndDate")
+        private String identifyValidEndDate;
+
+        /**
+         * 是否长期
+         * 0-否;1-是
+         */
+        @JacksonXmlProperty(localName = "longTerm")
+        private String longTerm;
+        /**
+         * 性别
+         * 1	男
+         * 2	女
+         * 9	未说明
+         */
+        @JacksonXmlProperty(localName = "sex")
+        private String sex;
+
+        /**
+         * 出生日期
+         */
+        @JacksonXmlProperty(localName = "birthDate")
+        private String birthDate;
+
+        /**
+         * 地址
+         */
+        @JacksonXmlProperty(localName = "insuredAddress")
+        private String insuredAddress;
+
+        /**
+         * 邮政编码
+         */
+        @JacksonXmlProperty(localName = "postCode")
+        private String postCode;
+
+        /**
+         * 联系电话
+         */
+        @JacksonXmlProperty(localName = "mobilePhone")
+        private String mobilePhone;
+
+        /**
+         * E - mail
+         */
+        @JacksonXmlProperty(localName = "email")
+        private String email;
+
+        /**
+         * 单位电话
+         */
+        @JacksonXmlProperty(localName = "officePhone")
+        private String officePhone;
+
+        /**
+         * 负责人姓名
+         */
+        @JacksonXmlProperty(localName = "insuredUnitLeader")
+        private String insuredUnitLeader;
+
+        /**
+         * 单位性质名称
+         */
+        @JacksonXmlProperty(localName = "unitTypeName")
+        private String unitTypeName;
+
+        /**
+         * 单位性质
+         */
+        @JacksonXmlProperty(localName = "unitTypeCode")
+        private String unitTypeCode;
+
+        /**
+         * 联系人名称
+         */
+        @JacksonXmlProperty(localName = "contactName")
+        private String contactName;
+
+        /**
+         * 联系人电话
+         */
+        @JacksonXmlProperty(localName = "contactMobile")
+        private String contactMobile;
+
+        /**
+         * 联系人证件类型
+         */
+        @JacksonXmlProperty(localName = "contactIdentifyType")
+        private String contactIdentifyType;
+
+        /**
+         * 联系人证件号码
+         */
+        @JacksonXmlProperty(localName = "contactIdentifyNumber")
+        private String contactIdentifyNumber;
+
+        public relatedParty(InsOrdersCarUserInfo policyHolderInfo, InsOrdersCarInfo insOrdersCarInfo) {
+            this.insuredName = policyHolderInfo.getName();
+            this.appProvince = policyHolderInfo.getProvinceCode();
+            this.appCity = policyHolderInfo.getCityCode();
+            this.appDistrict = policyHolderInfo.getCountyCode();
+            this.appCompleteAddress = policyHolderInfo.getAddr();
+            this.terrorNationality = "CN";
+            this.identifyValidDate = XmlDateTimeFormatter.format(policyHolderInfo.getIdentifyValidDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            this.identifyValidEndDate = XmlDateTimeFormatter.format(policyHolderInfo.getIdentifyValidEndDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            this.longTerm = (policyHolderInfo.getIdentifyValidEndDate() != null
+                    && policyHolderInfo.getIdentifyValidEndDate().getYear() == 9999)
+                    ? "1" : "0";
+            this.insuredAddress = policyHolderInfo.getAddr();
+            this.mobilePhone = policyHolderInfo.getMobile();
+            if (insOrdersCarInfo.getPropertyCode().equals("1")) {
+                this.insuredType = "1";
+                this.identifyType = "01";
+                this.identifyNumber = policyHolderInfo.getIdentifyNumber();
+                this.sex = policyHolderInfo.getGender().equals("男") ? "1" : "2";
+                this.birthDate = XmlDateTimeFormatter.format(policyHolderInfo.getIdentifyNumber().substring(6, 10) + "-" + policyHolderInfo.getIdentifyNumber().substring(10, 12) + "-" + policyHolderInfo.getIdentifyNumber().substring(12, 14));
+                this.email = policyHolderInfo.getEmail();
+            }
+            if (insOrdersCarInfo.getPropertyCode().equals("0")) {
+                this.insuredType = "2";
+                this.identifyType = "4";
+                this.identifyNumber = policyHolderInfo.getIdentifyNumber();
+                this.officePhone = policyHolderInfo.getMobile();
+                this.insuredUnitLeader = policyHolderInfo.getContact();
+                this.unitTypeCode = "";
+                this.unitTypeName = "";
+                this.contactName = policyHolderInfo.getContact();
+                this.contactMobile = policyHolderInfo.getMobile();
+                this.contactIdentifyType = "01";
+                this.contactIdentifyNumber = policyHolderInfo.getContactIdentifyNumber();
+            }
+        }
+    }
+
+    /**
+     *
+     * 被保险人信息(RiskRelatedParty)
+     */
+    @NoArgsConstructor
+    @Data
+    public static class riskRelatedParty {
+        /**
+         * 被保险人类型
+         * 1:个人 2:团体
+         */
+        @JacksonXmlProperty(localName = "insuredType")
+        private String insuredType;
+        /**
+         * 被保险人名称
+         */
+        @JacksonXmlProperty(localName = "insuredName")
+        private String insuredName;
+        /**
+         * 证件类型
+         */
+        @JacksonXmlProperty(localName = "identifyType")
+        private String identifyType;
+        /**
+         * 证件号码
+         */
+        @JacksonXmlProperty(localName = "identifyNumber")
+        private String identifyNumber;
+
+        /**
+         * 省代码
+         */
+        @JacksonXmlProperty(localName = "insuredProvince")
+        private String insuredProvince;
+        /**
+         * 市代码
+         */
+        @JacksonXmlProperty(localName = "insuredCity")
+        private String insuredCity;
+        /**
+         * 区/县代码
+         */
+        @JacksonXmlProperty(localName = "insuredDistrict")
+        private String insuredDistrict;
+
+        /**
+         * 详细地址
+         */
+        @JacksonXmlProperty(localName = "insuredCompleteAddress")
+        private String insuredCompleteAddress;
+
+        /**
+         * 国家代码
+         * CN 中国
+         * US 美国
+         * JP 日本
+         * KR 韩国
+         * TW 中国台湾
+         * HK 中国香港
+         * MO 中国澳门
+         * SG 新加坡
+         */
+        @JacksonXmlProperty(localName = "terrorNationality")
+        private String terrorNationality;
+
+        /**
+         * 投保人证件有效期起期
+         */
+        @JacksonXmlProperty(localName = "identifyValidDate")
+        private String identifyValidDate;
+
+        /**
+         * 投保人证件有效期止期
+         */
+        @JacksonXmlProperty(localName = "identifyValidEndDate")
+        private String identifyValidEndDate;
+
+        /**
+         * 是否长期
+         * 0-否;1-是
+         */
+        @JacksonXmlProperty(localName = "longTerm")
+        private String longTerm;
+
+        /**
+         * 性别
+         */
+        @JacksonXmlProperty(localName = "insuredSex")
+        private String insuredSex;
+
+        /**
+         * 出生日期
+         */
+        @JacksonXmlProperty(localName = "insuredBirthDate")
+        private String insuredBirthDate;
+
+        /**
+         * 地址
+         */
+        @JacksonXmlProperty(localName = "insuredAddress")
+        private String insuredAddress;
+
+        /**
+         * 邮政编码
+         */
+        @JacksonXmlProperty(localName = "insuredPostCode")
+        private String insuredPostCode;
+
+        /**
+         * 联系电话
+         */
+        @JacksonXmlProperty(localName = "insuredMobilePhone")
+        private String insuredMobilePhone;
+
+        /**
+         * 被保人与投保人关系
+         * 0	未知
+         * 1	配偶
+         * 2	父母
+         * 3	子女
+         * 4	祖父母
+         * 5	孙子女
+         * 6	其他
+         */
+        @JacksonXmlProperty(localName = "relationWithHolder")
+        private String relationWithHolder;
+
+        /**
+         * 被保险人与车辆关系
+         * 1	拥有
+         * 2	使用
+         * 3	管理
+         */
+        @JacksonXmlProperty(localName = "carInsuredRelation")
+        private String carInsuredRelation;
+
+        /**
+         * 单位电话
+         */
+        @JacksonXmlProperty(localName = "insuredOfficePhone")
+        private String insuredOfficePhone;
+
+        /**
+         * 负责人姓名
+         */
+        @JacksonXmlProperty(localName = "insuredUnitLeader")
+        private String insuredUnitLeader;
+
+        /**
+         * 单位性质code
+         */
+        @JacksonXmlProperty(localName = "unitTypeCode")
+        private String unitTypeCode;
+        /**
+         * 单位性质名称
+         */
+        @JacksonXmlProperty(localName = "unitTypeName")
+        private String unitTypeName;
+        /**
+         * 联系人名称
+         */
+        @JacksonXmlProperty(localName = "contactName")
+        private String contactName;
+
+        /**
+         * 联系人电话
+         */
+        @JacksonXmlProperty(localName = "contactMobile")
+        private String contactMobile;
+
+        public riskRelatedParty(InsOrdersCarUserInfo insuredPersonInfo, InsOrdersCarInfo insOrdersCarInfo) {
+            this.insuredName = insuredPersonInfo.getName();
+            this.insuredProvince = insuredPersonInfo.getProvinceCode();
+            this.insuredCity = insuredPersonInfo.getCityCode();
+            this.insuredDistrict = insuredPersonInfo.getCountyCode();
+            this.insuredCompleteAddress = insuredPersonInfo.getAddr();
+            this.terrorNationality = "CN";
+            this.identifyValidDate = XmlDateTimeFormatter.format(insuredPersonInfo.getIdentifyValidDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            this.identifyValidEndDate = XmlDateTimeFormatter.format(insuredPersonInfo.getIdentifyValidEndDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            this.longTerm = (insuredPersonInfo.getIdentifyValidEndDate() != null
+                    && insuredPersonInfo.getIdentifyValidEndDate().getYear() == 9999)
+                    ? "1" : "0";
+            this.insuredAddress = insuredPersonInfo.getAddr();
+            this.insuredMobilePhone = insuredPersonInfo.getMobile();
+            //this.postCode = "";
+            if (insOrdersCarInfo.getPropertyCode().equals("1")) {
+                this.insuredType = "1";
+                this.identifyType = "01";
+                this.identifyNumber = insuredPersonInfo.getIdentifyNumber();
+                this.insuredSex = insuredPersonInfo.getGender().equals("男") ? "1" : "2";
+                this.insuredBirthDate = XmlDateTimeFormatter.format(insuredPersonInfo.getIdentifyNumber().substring(6, 10) + "-" + insuredPersonInfo.getIdentifyNumber().substring(10, 12) + "-" + insuredPersonInfo.getIdentifyNumber().substring(12, 14));
+                this.relationWithHolder = "0";
+                this.carInsuredRelation = "1";
+            }
+            if (insOrdersCarInfo.getPropertyCode().equals("0")) {
+                this.insuredType = "2";
+                this.identifyType = "4";
+                this.identifyNumber = insuredPersonInfo.getIdentifyNumber();
+                this.insuredOfficePhone = insuredPersonInfo.getMobile();
+                this.insuredUnitLeader = insuredPersonInfo.getContact();
+                this.unitTypeCode = "";
+                this.unitTypeName = "";
+                this.contactName = insuredPersonInfo.getContact();
+                this.contactMobile = insuredPersonInfo.getMobile();
+                this.relationWithHolder = "0";
+                this.carInsuredRelation = "1";
+            }
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class RiskListWrapper {
+        /**
+         * 内层 Risk 节点列表(关闭默认包裹层,指定节点名为 Risk)
+         */
+        @JacksonXmlProperty(localName = "Risk")
+        @JacksonXmlElementWrapper(useWrapping = false)
+        private List<Risk> risks;
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class Risk {
+        /**
+         * 险种代码
+         */
+        @JacksonXmlProperty(localName = "riskCode")
+        private String riskCode;
+        /**
+         * 即时生效 默认:0-否
+         */
+        @JacksonXmlProperty(localName = "effectFlag")
+        private String effectFlag;
+
+        /**
+         * 起保时间 yyyy-MM-dd hh:mm:ss
+         */
+        @JacksonXmlProperty(localName = "startDate")
+        private String startDate;
+
+        /**
+         * 终保时间 yyyy-MM-dd hh:mm:ss
+         */
+        @JacksonXmlProperty(localName = "endDate")
+        private String endDate;
+
+        /**
+         * 总保费
+         */
+        @JacksonXmlProperty(localName = "sumGrossPremium")
+        private BigDecimal sumGrossPremium;
+
+        public static List<Risk> buildRiskList(UnderwritingVo underwritingVo) {
+            List<InsOrdersRisk> insOrdersRiskList = underwritingVo.getInsOrdersRiskList();
+            InsOrdersCosts insOrdersCosts = underwritingVo.getInsOrdersCosts();
+            List<Risk> riskList = new ArrayList<>();
+            for (InsOrdersRisk riskInfoVo : insOrdersRiskList) {
+                Risk risk = new Risk();
+                if (riskInfoVo.getRiskCode().equals("0507")) {
+                    risk.setRiskCode("0801");
+                    risk.setStartDate(XmlDateTimeFormatter.format(riskInfoVo.getStartDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))));
+                    risk.setEndDate(XmlDateTimeFormatter.format(riskInfoVo.getEndDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))));
+                    risk.setEffectFlag(!isZeroHour(riskInfoVo.getStartDate()) ? "1" : "0");
+                    risk.setSumGrossPremium(insOrdersCosts.getJqPremium());
+                } else if (riskInfoVo.getRiskCode().equals("0510")) {
+                    risk.setRiskCode("0808");
+                    risk.setStartDate(XmlDateTimeFormatter.format(riskInfoVo.getStartDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))));
+                    risk.setEndDate(XmlDateTimeFormatter.format(riskInfoVo.getEndDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))));
+                    risk.setEffectFlag(!isZeroHour(riskInfoVo.getStartDate()) ? "1" : "0");
+                    risk.setSumGrossPremium(insOrdersCosts.getSyPremium());
+                }
+                riskList.add(risk);
+            }
+            return riskList;
+        }
+    }
+
+    public static boolean isZeroHour(LocalDateTime startDate) {
+        if (startDate == null) {
+            return false;
+        }
+        // 判断是否是零点
+        return startDate.getHour() == 0
+                && startDate.getMinute() == 0
+                && startDate.getSecond() == 0;
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class KindListWrapper {
+        @JacksonXmlProperty(localName = "Kind")
+        @JacksonXmlElementWrapper(useWrapping = false)
+        private List<Kind> kinds;
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class Kind {
+        /**
+         * 险种代码
+         * 0801	交强险
+         * 0808	机动车商业险险(2014)
+         */
+        @JacksonXmlProperty(localName = "riskCode")
+        private String riskCode;
+
+        /**
+         * 险别代码
+         */
+        @JacksonXmlProperty(localName = "kindCode")
+        private String kindCode;
+
+        /**
+         * 每座保险金额
+         */
+        @JacksonXmlProperty(localName = "unitInsured")
+        private BigDecimal unitInsured;
+
+        /**
+         * 座位数
+         */
+        @JacksonXmlProperty(localName = "quantity")
+        private Integer quantity;
+
+        /**
+         * 主险/附加险标志
+         */
+        @JacksonXmlProperty(localName = "kindInd")
+        private String kindInd;
+
+        /**
+         * 主险代码
+         */
+        @JacksonXmlProperty(localName = "mainKindCode")
+        private String mainKindCode;
+
+        /**
+         * 是否投保不计免赔
+         */
+        @JacksonXmlProperty(localName = "relatedInd")
+        private String relatedInd;
+
+        /**
+         * 保险金额/赔偿金额
+         */
+        @JacksonXmlProperty(localName = "sumInsured")
+        private BigDecimal sumInsured;
+
+        /**
+         * 玻璃类型
+         */
+        @JacksonXmlProperty(localName = "valueType")
+        private String valueType;
+
+        /**
+         * 实缴金额
+         */
+        @JacksonXmlProperty(localName = "grossPremium")
+        private BigDecimal grossPremium;
+
+
+        public static List<Kind> buildKindList(UnderwritingVo underwritingVo,CarModelQueryResponse.vehicle vehicle){
+            List<InsOrdersRisk> riskInfoVoList = underwritingVo.getInsOrdersRiskList();
+            List<InsOrdersKind> insOrdersKindList = underwritingVo.getInsOrdersKindList();
+            InsOrdersCosts insOrdersCosts = underwritingVo.getInsOrdersCosts();
+            List<Kind> kindList = new ArrayList<>();
+            // 是否投保交强险
+            boolean isJq = riskInfoVoList.stream()
+                    .anyMatch(riskInfoVo -> "0507".equals(riskInfoVo.getRiskCode()));
+            if (isJq) {
+                Kind kind = new Kind();
+                kind.setRiskCode("0801");
+                kind.setKindCode("BZ");
+                kind.setSumInsured(new BigDecimal("200000"));
+                kind.setKindInd("1");
+                kind.setMainKindCode("BZ");
+                kind.setRelatedInd("0");
+                kindList.add(kind);
+                kind.setGrossPremium(insOrdersCosts.getJqPremium());
+            }
+            if (!insOrdersKindList.isEmpty()) {
+                for (InsOrdersKind insOrdersKind : insOrdersKindList) {
+                    Kind kind = new Kind();
+                    String kindCode = insOrdersKind.getKindCode();
+                    KindCodeMapping kindCodeMapping = KindCodeMapping.valueOf(KindCodeMapping.class, kindCode);
+                    kind.setKindCode(kindCodeMapping.getKindCode());
+                    kind.setRiskCode(kindCodeMapping.getRiskCode());
+                    kind.setMainKindCode(kindCodeMapping.getMainKindCode());
+                    kind.setKindInd(kindCodeMapping.getKindInd());
+                    kind.setRelatedInd("0");
+                    kind.setGrossPremium(insOrdersKind.getPremium());
+                    String code = kindCodeMapping.getKindCode();
+                    // 司机
+                    if (code.equals("041") || code.equals("YD11")) {
+                        kind.sumInsured = insOrdersKind.getAmount();
+                        kind.unitInsured = insOrdersKind.getUnitAmount();
+                        kind.quantity = 1;
+                    }
+                    // 乘客
+                    else if (code.equals("044") || code.equals("YD12")) {
+                        kind.unitInsured = insOrdersKind.getUnitAmount();
+                        kind.sumInsured =
+                                insOrdersKind.getUnitAmount().multiply(new BigDecimal(Integer.parseInt(vehicle.getSeat()) - 1));;
+                        kind.quantity = Integer.parseInt(vehicle.getSeat()) - 1;
+                    }
+                    // 绝对免赔
+                    // 绝对免赔
+                    else if (code.equals("FA") || code.equals("FB") || code.equals("FD11") || code.equals("FD12")) {
+                        kind.quantity = insOrdersKind.getDeductibleRate().intValue();
+                        kind.sumInsured = insOrdersKind.getDeductibleRate();
+                    }else if (code.equals("S1") || code.equals("S2") || code.equals("S3") || code.equals("S4")) {
+                        kind.quantity = insOrdersKind.getServiceTimes();
+                        kind.sumInsured = BigDecimal.valueOf(insOrdersKind.getServiceTimes());
+                    } else if (KindCodeMapping.A.getKindCode().equals(code)) {
+                        kind.sumInsured = underwritingVo.getInsOrdersCarInfo().getActualValue();
+                    } else {
+                        kind.sumInsured = insOrdersKind.getAmount();
+                        kind.quantity = Integer.parseInt(vehicle.getSeat());
+                    }
+                    kindList.add(kind);
+                }
+            }
+            return kindList;
+        }
+    }
+
+    /**
+     * 车船税
+     * 此节点可选 ,不传默认代收税且上次缴费年度默认为投保的上一年
+     */
+    @NoArgsConstructor
+    @Data
+    public static class carShipTax {
+        /**
+         * 计税分类
+         * 02	代收税
+         * 03	已完税
+         * 04	减税
+         * 05	免税
+         * 07	不征
+         */
+        @JacksonXmlProperty(localName = "taxRelifFlag")
+        private String taxRelifFlag;
+
+        /**
+         * 减免税凭证号/完税凭证号
+         */
+        @JacksonXmlProperty(localName = "paidFreeCertificate")
+        private String paidFreeCertificate;
+
+        /**
+         * 开据税务机关名称
+         */
+        @JacksonXmlProperty(localName = "taxCompancyName")
+        private String taxCompancyName;
+
+        /**
+         * 减税说明(减税原因) 减免税必传
+         * 0	无
+         * 1	具备减免税证明
+         * 2	拖拉机
+         * 3	军队、武警专用车辆
+         * 4	警车
+         * 5	外国使领馆、国际组织及其人员车辆
+         * 6	其他
+         */
+        @JacksonXmlProperty(localName = "relifReason")
+        private String relifReason;
+
+        /**
+         * 减免税方案代码 减免税必传
+         * A	按金额进行减免
+         * P	按比例进行减免
+         */
+        @JacksonXmlProperty(localName = "deductionDueType")
+        private String deductionDueType;
+
+        /**
+         * 减税比例
+         */
+        @JacksonXmlProperty(localName = "freeRate")
+        private String freeRate;
+
+        /**
+         * 税务机关省份名称
+         */
+        @JacksonXmlProperty(localName = "taxProvinceCname")
+        private String taxProvinceCname;
+
+        /**
+         * 税务机关省份代码
+         */
+        @JacksonXmlProperty(localName = "taxProvinceCode")
+        private String taxProvinceCode;
+
+        /**
+         * 凭证填发日期
+         */
+        @JacksonXmlProperty(localName = "taxDocumentDate")
+        private String taxDocumentDate;
+
+        /**
+         * 税务机关城市代码
+         */
+        @JacksonXmlProperty(localName = "taxCityCode")
+        private String taxCityCode;
+
+        /**
+         * 税务机关城市名称
+         */
+        @JacksonXmlProperty(localName = "taxCityCname")
+        private String taxCityCname;
+
+        /**
+         * 上次缴税年度
+         */
+        @JacksonXmlProperty(localName = "lastPaidYear")
+        private String lastPaidYear;
+
+        //正常交税
+        private static final String TAX_NORMAL = "1";
+        // 免税
+        private static final String TAX_EXEMPTION = "2";
+        // 减税
+        private static final String TAX_REDUCTION = "3";
+        // 已完税
+        private static final String TAX_FINISH = "4";
+        //不征
+        private static final String TAX_NOT_CHARGE = "9";
+
+        public carShipTax(UnderwritingVo underwritingVo) {
+            InsOrdersTax insOrdersTax = underwritingVo.getInsOrdersTax();
+            InsOrdersRisk jqRisk = underwritingVo.getInsOrdersRiskList().stream()
+                    .filter(risk -> "0507".equals(risk.getRiskCode()))
+                    .findFirst() // 取第一个匹配的
+                    .orElse(null);
+            if (jqRisk != null) {
+                String flag = String.valueOf(insOrdersTax.getTaxRelifFlag());
+                switch (flag) {
+                    case TAX_NORMAL:
+                        this.taxRelifFlag = "02";
+                        this.taxCompancyName = insOrdersTax.getTaxComName();
+                        break;
+                    case TAX_EXEMPTION:
+                        this.taxRelifFlag = "05";
+                        this.relifReason = insOrdersTax.getRelifReason();
+                        this.freeRate = String.valueOf(insOrdersTax.getTaxRelief());
+                        this.taxCompancyName = insOrdersTax.getTaxComName();
+                        this.paidFreeCertificate = insOrdersTax.getExtendChar2();
+                        break;
+                    case TAX_REDUCTION:
+                        this.taxRelifFlag = "04";
+                        this.relifReason = insOrdersTax.getRelifReason();
+                        this.freeRate = String.valueOf(insOrdersTax.getTaxRelief());
+                        this.taxCompancyName = insOrdersTax.getTaxComName();
+                        this.paidFreeCertificate = insOrdersTax.getExtendChar2();
+                        break;
+                    case TAX_FINISH:
+                        this.taxRelifFlag = "03";
+                        this.taxCompancyName = insOrdersTax.getTaxComName();
+                        this.taxProvinceCname = insOrdersTax.getTaxPaidAreaCode();
+                        this.taxProvinceCode = insOrdersTax.getTaxPaidAreaCode();
+                        this.taxDocumentDate = String.valueOf(insOrdersTax.getTaxDocumentDate());
+                        this.taxCityCode = insOrdersTax.getTaxPaidAreaCode();
+                        this.taxCityCname = insOrdersTax.getTaxPaidAreaCode();
+                        this.paidFreeCertificate = insOrdersTax.getPaidFreeCertificate();
+                        break;
+                    case TAX_NOT_CHARGE:
+                        this.taxRelifFlag = "07";
+                        break;
+                }
+            }
+        }
+    }
+
+    /**
+     * 特约信息
+     */
+    @NoArgsConstructor
+    @Data
+    public static class RiskSpecialClauses {
+        /**
+         * 方案代码
+         */
+        @JacksonXmlProperty(localName = "planCode")
+        private String planCode;
+
+        /**
+         * 险种代码
+         */
+        @JacksonXmlProperty(localName = "riskCode")
+        private String riskCode;
+
+        /**
+         * 特约代码
+         */
+        @JacksonXmlProperty(localName = "clauseCode")
+        private String clauseCode;
+
+        /**
+         * 特约内容
+         */
+        @JacksonXmlProperty(localName = "clauseContent")
+        private String clauseContent;
+    }
+}

+ 0 - 454
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/SubmitVerifyRequest.java

@@ -1,454 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.request;
-
-import cn.hutool.core.collection.CollUtil;
-import com.alibaba.fastjson.JSON;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.jzg.commons.entity.orders.po.InsOrdersCarUserInfo;
-import com.jzg.commons.util.IDCardUtils;
-import com.jzg.commons.util.StringUtils;
-import com.jzg.quotation.chengtai.api.entity.constants.enums.RiskCodeEnum;
-import com.jzg.quotation.chengtai.api.entity.po.ChengTaiApiOrder;
-import com.jzg.commons.entity.quote.vo.aggregated.UnderwritingVo;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 【投保保存】请求实体
- */
-@EqualsAndHashCode(callSuper = true)
-@NoArgsConstructor
-@Data
-public class SubmitVerifyRequest extends BaseRequest{
-
-    /**
-     * 投保人
-     */
-    @JsonProperty("applicant")
-    private ApplicantDTO applicant;
-
-    /**
-     * 被保险人
-     */
-    @JsonProperty("insured")
-    private InsuredDTO insured;
-
-    /**
-     * 特别约定信息
-     */
-    @JsonProperty("engageList")
-    private List<EngageListDTO> engageList;
-
-    /**
-     * 订单号
-     */
-    @JsonProperty("orderId")
-    private String orderId;
-
-    public SubmitVerifyRequest(String partnerCode,
-                               UnderwritingVo underwritingVo,
-                               ChengTaiApiOrder chengTaiApiOrder){
-        super(partnerCode);
-        this.orderId = underwritingVo.getOrder().getCompanyOrderNo();
-        // 获取投保人被保人信息
-        List<InsOrdersCarUserInfo> userInfos = underwritingVo.getInsOrdersCarUserInfoList();
-        InsOrdersCarUserInfo policyHolder = userInfos.stream()
-                .filter(insOrdersCarUserInfo -> insOrdersCarUserInfo.getPolicyPersonType().equals(2))
-                .findFirst().orElse(null);
-        InsOrdersCarUserInfo insuredHolder = userInfos.stream()
-                .filter(insOrdersCarUserInfo -> insOrdersCarUserInfo.getPolicyPersonType().equals(3))
-                .findFirst().orElse(null);
-        // 投保人
-        ApplicantDTO applicant = new ApplicantDTO(policyHolder);
-        this.applicant = applicant;
-        // 被保人
-        InsuredDTO insured = new InsuredDTO(insuredHolder);
-        this.insured = insured;
-
-        // 获取特约
-        List<SubmitVerifyRequest.EngageListDTO> engageDTO = new ArrayList<>();
-        if (StringUtils.isNotEmpty(chengTaiApiOrder.getJqappoint())){
-            List<SubmitVerifyRequest.EngageListDTO> ciEngageDTO = JSON.parseArray(chengTaiApiOrder.getJqappoint(),
-                    SubmitVerifyRequest.EngageListDTO.class);
-            if(CollUtil.isNotEmpty(ciEngageDTO)){
-                for (SubmitVerifyRequest.EngageListDTO engageListDTO : ciEngageDTO) {
-                    engageListDTO.setRiskCode(RiskCodeEnum.R1002.getCode());
-                }
-            }
-            List<SubmitVerifyRequest.EngageListDTO> biEngageDTO = JSON.parseArray(chengTaiApiOrder.getSyappoint(),
-                    SubmitVerifyRequest.EngageListDTO.class);
-            if(CollUtil.isNotEmpty(biEngageDTO)){
-                for (SubmitVerifyRequest.EngageListDTO engageListDTO : biEngageDTO) {
-                    engageListDTO.setRiskCode(RiskCodeEnum.R0821.getCode());
-                }
-            }
-            if(CollUtil.isNotEmpty(ciEngageDTO)){
-                engageDTO.addAll(ciEngageDTO);
-            }
-            if(CollUtil.isNotEmpty(biEngageDTO)){
-                engageDTO.addAll(biEngageDTO);
-            }
-        }
-        // 特约获取组装
-        this.engageList = engageDTO;
-    }
-
-    @Data
-    public static class ApplicantDTO {
-
-        /**
-         * 客户类型
-         */
-        @JsonProperty("type")
-        private String type;
-
-        /**
-         * 客户名称
-         */
-        @JsonProperty("name")
-        private String name;
-
-        /**
-         * 证件类型
-         */
-        @JsonProperty("identifyTypeCode")
-        private String identifyTypeCode;
-
-        /**
-         * 证件号码
-         */
-        @JsonProperty("identifyNumber")
-        private String identifyNumber;
-
-        /**
-         * 证件有效起期
-         */
-        @JsonProperty("identifyValidDate")
-        private String identifyValidDate;
-
-        /**
-         * 证件有效止期
-         */
-        @JsonProperty("identifyValidEndDate")
-        private String identifyValidEndDate;
-
-        /**
-         * 性别
-         */
-        @JsonProperty("sex")
-        private String sex;
-
-        /**
-         * 年龄
-         */
-        @JsonProperty("age")
-        private Integer age;
-
-        /**
-         * 出生日期
-         */
-        @JsonProperty("birthday")
-        private String birthday;
-
-        /**
-         * 是否长期
-         */
-        @JsonProperty("longTerm")
-        private String longTerm;
-
-        /**
-         * 地址省
-         */
-        @JsonProperty("province")
-        private String province;
-
-        /**
-         * 地址市
-         */
-        @JsonProperty("city")
-        private String city;
-
-        /**
-         * 地址市
-         */
-        @JsonProperty("district")
-        private String district;
-
-        /**
-         * 详细地址
-         */
-        @JsonProperty("addr")
-        private String addr;
-
-        /**
-         * 手机
-         */
-        @JsonProperty("mobile")
-        private String mobile;
-
-        /**
-         * 组织机构代码/信用号/税务编号/工商注册号
-         */
-        @JsonProperty("organizationCode")
-        private String organizationCode;
-
-        /**
-         * 固定电话
-         */
-        @JsonProperty("tel")
-        private String tel;
-
-        /**
-         * 联系人名称
-         */
-        @JsonProperty("linkerName")
-        private String linkerName;
-
-        /**
-         * 单位性质
-         */
-        @JsonProperty("unitTypeCode")
-        private String unitTypeCode;
-
-
-        public ApplicantDTO(InsOrdersCarUserInfo policyHolder){
-            if(policyHolder.getPersonType().equals(1)){
-                this.type = "1";
-                this.identifyTypeCode = "01";
-                this.identifyNumber = policyHolder.getIdentifyNumber();
-                this.sex = policyHolder.getGender();
-                this.birthday = IDCardUtils.GetBirthday(policyHolder.getIdentifyNumber());
-            }else{
-                this.type = "2";
-                this.identifyTypeCode = "4";
-                this.identifyNumber = policyHolder.getIdentifyNumber();
-                this.organizationCode = policyHolder.getIdentifyNumber();
-                this.tel = policyHolder.getLandline();
-                this.linkerName = policyHolder.getContact();
-                this.unitTypeCode = "900"; // 单位性质 900:其他
-            }
-            this.name = policyHolder.getName();
-            this.province = policyHolder.getProvinceCode();
-            this.city = policyHolder.getCityCode();
-            this.district = policyHolder.getCountyCode();
-            this.addr = policyHolder.getAddr();
-            this.mobile = policyHolder.getMobile();
-            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-            this.identifyValidDate = policyHolder.getIdentifyValidDate().format(formatter);
-            this.identifyValidEndDate = policyHolder.getIdentifyValidEndDate().format(formatter);
-            this.longTerm = "0";
-        }
-    }
-
-    @Data
-    public static class InsuredDTO {
-
-        /**
-         * 客户类型
-         */
-        @JsonProperty("type")
-        private String type;
-
-        /**
-         * 客户名称
-         */
-        @JsonProperty("name")
-        private String name;
-
-        /**
-         * 证件类型
-         */
-        @JsonProperty("identifyTypeCode")
-        private String identifyTypeCode;
-
-        /**
-         * 证件号码
-         */
-        @JsonProperty("identifyNumber")
-        private String identifyNumber;
-
-        /**
-         * 证件有效起期
-         */
-        @JsonProperty("identifyValidDate")
-        private String identifyValidDate;
-
-        /**
-         * 证件有效止期
-         */
-        @JsonProperty("identifyValidEndDate")
-        private String identifyValidEndDate;
-
-        /**
-         * 证件有效止期
-         */
-        @JsonProperty("identifyTypeName")
-        private String identifyTypeName;
-
-        /**
-         * 性别
-         */
-        @JsonProperty("sex")
-        private String sex;
-
-        /**
-         * 年龄
-         */
-        @JsonProperty("age")
-        private Integer age;
-
-        /**
-         * 出生日期
-         */
-        @JsonProperty("birthday")
-        private String birthday;
-
-        /**
-         * 是否长期
-         */
-        @JsonProperty("longTerm")
-        private String longTerm;
-
-        /**
-         * 地址省
-         */
-        @JsonProperty("province")
-        private String province;
-
-        /**
-         * 地址市
-         */
-        @JsonProperty("city")
-        private String city;
-
-        /**
-         * 地址市
-         */
-        @JsonProperty("district")
-        private String district;
-
-        /**
-         * 详细地址
-         */
-        @JsonProperty("addr")
-        private String addr;
-
-        /**
-         * 手机
-         */
-        @JsonProperty("mobile")
-        private String mobile;
-
-        /**
-         * 投保人与被保险人关系
-         */
-        @JsonProperty("relationWithInsured")
-        private String relationWithInsured;
-
-        /**
-         * 被保险人与车辆关系
-         */
-        @JsonProperty("relationWithCar")
-        private String relationWithCar;
-
-        /**
-         * 组织机构代码/信用号/税务编号/工商注册号
-         */
-        @JsonProperty("organizationCode")
-        private String organizationCode;
-
-        /**
-         * 固定电话
-         */
-        @JsonProperty("tel")
-        private String tel;
-
-        /**
-         * 联系人名称
-         */
-        @JsonProperty("linkerName")
-        private String linkerName;
-
-        /**
-         * 单位性质
-         */
-        @JsonProperty("unitTypeCode")
-        private String unitTypeCode;
-
-        public InsuredDTO(InsOrdersCarUserInfo insuredHolder){
-            if(insuredHolder.getPersonType().equals(1)){
-                this.type = "1";
-                this.identifyTypeCode = "01";
-                this.identifyNumber = insuredHolder.getIdentifyNumber();
-                this.sex = insuredHolder.getGender();
-                this.birthday = IDCardUtils.GetBirthday(insuredHolder.getIdentifyNumber());
-                this.relationWithInsured = "0";
-                this.relationWithCar = "1";
-            }else{
-                this.type = "2";
-                this.identifyTypeCode = "4";
-                this.identifyNumber = insuredHolder.getIdentifyNumber();
-                this.organizationCode = insuredHolder.getIdentifyNumber();
-                this.tel = insuredHolder.getLandline();
-                this.linkerName = insuredHolder.getContact();
-                this.unitTypeCode = "900"; // 单位性质 900:其他
-            }
-            this.name = insuredHolder.getName();
-            this.province = insuredHolder.getProvinceCode();
-            this.city = insuredHolder.getCityCode();
-            this.district = insuredHolder.getCountyCode();
-            this.addr = insuredHolder.getAddr();
-            this.mobile = insuredHolder.getMobile();
-            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-            this.identifyValidDate = insuredHolder.getIdentifyValidDate().format(formatter);
-            this.identifyValidEndDate = insuredHolder.getIdentifyValidEndDate().format(formatter);
-            this.longTerm = "0";
-        }
-    }
-
-    @NoArgsConstructor
-    @Data
-    public static class EngageListDTO implements Serializable {
-
-        /**
-         * 险种编码
-         */
-        @JsonProperty("riskCode")
-        private String riskCode;
-
-        /**
-         * 特约内容
-         */
-        @JsonProperty("engageDetail")
-        private String engageDetail;
-
-        /**
-         * 修改标识
-         */
-        @JsonProperty("modifyind")
-        private String modifyind;
-
-        /**
-         * 特约代码
-         */
-        @JsonProperty("engageCode")
-        private String engageCode;
-
-        /**
-         * 特约标题
-         */
-        @JsonProperty("engageTitle")
-        private String engageTitle;
-
-        /**
-         * 特约选择类型
-         */
-        @JsonProperty("chooseType")
-        private String chooseType;
-    }
-}

+ 0 - 21
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/SubmitVerifyResultRequest.java

@@ -1,21 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.request;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 【投保结果查询】请求实体
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-public class SubmitVerifyResultRequest extends BaseRequest{
-
-    @JsonProperty("orderId")
-    private String orderId;
-
-    public SubmitVerifyResultRequest(String partnerCode, String orderId) {
-        super(partnerCode);
-        this.orderId = orderId;
-    }
-}

+ 0 - 21
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/UnderwritingRequest.java

@@ -1,21 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.request;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 【核保】请求实体
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-public class UnderwritingRequest extends BaseRequest{
-
-    @JsonProperty("orderId")
-    private String orderId;
-
-    public UnderwritingRequest(String partnerCode, String orderId) {
-        super(partnerCode);
-        this.orderId = orderId;
-    }
-}

+ 0 - 21
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/UnderwritingResultRequest.java

@@ -1,21 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.request;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 【核保结果查询】请求实体
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-public class UnderwritingResultRequest extends BaseRequest{
-
-    @JsonProperty("orderId")
-    private String orderId;
-
-    public UnderwritingResultRequest(String partnerCode, String orderId) {
-        super(partnerCode);
-        this.orderId = orderId;
-    }
-}

+ 90 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/UpLoadRequest.java

@@ -0,0 +1,90 @@
+package com.jzg.quotation.chengtai.api.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
+import com.jzg.quotation.chengtai.api.entity.ChengTaiApiParameters;
+import com.jzg.quotation.chengtai.api.entity.constants.UploadEnum;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author quchen
+ * @date 2026/4/20 14:44
+ */
+
+@NoArgsConstructor
+@Data
+public class UpLoadRequest {
+    /**
+     * 合作伙伴代码
+     */
+    @JsonProperty("partnerCode")
+    private String partnerCode;
+
+    /**
+     * 用户名
+     */
+    @JsonProperty("user")
+    private String user;
+
+    /**
+     * 密码
+     */
+    @JsonProperty("passWord")
+    private String passWord;
+
+    /**
+     * 业务号
+     */
+    @JsonProperty("bussNo")
+    private String bussNo;
+
+    /**
+     * 业务类型
+     */
+    @JsonProperty("bussType")
+    private String bussType;
+
+    /**
+     * 类型完整路径
+     */
+    @JsonProperty("typePath")
+    private String typePath;
+
+    /**
+     * 类型完整名称
+     */
+    @JsonProperty("typeName")
+    private String typeName;
+
+    /**
+     * 原文件名称
+     */
+    @JsonProperty("fileOrgName")
+    private String fileOrgName;
+
+    /**
+     * 源文件
+     */
+    @JsonProperty("fileContent")
+    private String fileContent;
+
+    /**
+     * 备注
+     */
+    @JsonProperty("remark")
+    private String remark;
+
+    public UpLoadRequest(ChengTaiApiParameters parameters, String orderNumber, InsuranceImageVo imageVo ,InsuranceImageVo.ImageDTO insTaskImagesBase64) {
+        this.partnerCode = parameters.getPartnerCode();
+        this.user = parameters.getUserName();
+        this.passWord = parameters.getPassWord();
+        this.bussNo = orderNumber;
+        this.bussType = "T";
+        UploadEnum uploadEnum = UploadEnum.valueOf(imageVo.getImageCode());
+        this.typePath = uploadEnum.getCode();
+        this.typeName = uploadEnum.getName();
+        this.fileOrgName = insTaskImagesBase64.getImageName();
+        this.fileContent = insTaskImagesBase64.getImageBase64Str();
+    }
+}

+ 0 - 107
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/UploadFileRequest.java

@@ -1,107 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.request;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.jzg.quotation.chengtai.api.entity.constants.enums.ImageTypeEnum;
-import com.jzg.commons.constants.quote.enums.base.InsuranceImageEnum;
-import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * 【影像上传】请求实体
- */
-@EqualsAndHashCode(callSuper = true)
-@NoArgsConstructor
-@Data
-public class UploadFileRequest extends BaseRequest{
-
-
-    @JsonProperty("orderId")
-    private String orderId;
-
-    /**
-     * 影像类型
-     */
-    @JsonProperty("imageType")
-    private String imageType;
-
-    /**
-     * 影像所属对象类型
-     */
-    @JsonProperty("imageObjType")
-    private String imageObjType;
-
-    /**
-     * 接入方代码
-     */
-    @JsonProperty("embarkPartnerCode")
-    private String embarkPartnerCode;
-
-    /**
-     * 影像文件
-     */
-    @JsonProperty("fileList")
-    private List<FileListDTO> fileList;
-
-    public UploadFileRequest(InsuranceImageVo insuranceImageVo, String orderNo, String ppartnerCode){
-        super(ppartnerCode);
-        this.orderId = orderNo;
-        this.embarkPartnerCode = ppartnerCode;
-        String imageType = insuranceImageVo.getImageCode();
-
-        InsuranceImageEnum insuranceImageEnum = Enum.valueOf(InsuranceImageEnum.class, imageType);
-
-        for (ImageTypeEnum imageTypeEnum : ImageTypeEnum.values()) {
-            boolean contains = Arrays.asList(imageTypeEnum.getImagesType()).contains(insuranceImageEnum.getCode());
-            if(contains){
-                this.imageType = imageTypeEnum.getCode();
-                this.fileList = Arrays.asList(new FileListDTO(insuranceImageVo.getImageBase64List().get(0), imageTypeEnum));
-                if(InsuranceImageEnum.C01.getCode().equals(this.imageType)){
-                    this.imageObjType = "1";
-                }else if(InsuranceImageEnum.D01.getCode().equals(this.imageType)){
-                    this.imageObjType = "11";
-                }else if(InsuranceImageEnum.C02.getCode().equals(this.imageType)
-                    || InsuranceImageEnum.Y02.getCode().equals(this.imageType)
-                ){
-                    this.imageObjType = "2";
-                } else if(InsuranceImageEnum.D02.getCode().equals(this.imageType)){
-                    this.imageObjType = "3";
-                } else if(InsuranceImageEnum.C03.getCode().equals(this.imageType)
-                        || InsuranceImageEnum.Y03.getCode().equals(this.imageType)
-                ){
-                    this.imageObjType = "4";
-                } else if(InsuranceImageEnum.D03.getCode().equals(this.imageType)){
-                    this.imageObjType = "5";
-                } else if(InsuranceImageEnum.C04.getCode().equals(this.imageType)
-                        || InsuranceImageEnum.Y04.getCode().equals(this.imageType)
-                ){
-                    this.imageObjType = "6";
-                } else if(InsuranceImageEnum.D04.getCode().equals(this.imageType)){
-                    this.imageObjType = "7";
-                }
-                break;
-            }
-        }
-    }
-
-    @NoArgsConstructor
-    @Data
-    public static class FileListDTO {
-        @JsonProperty("fileName")
-        private String fileName;
-        @JsonProperty("fileContent")
-        private String fileContent;
-        @JsonProperty("fileId")
-        private String fileId;
-
-        public FileListDTO(InsuranceImageVo.ImageDTO imageDTO, ImageTypeEnum imageTypeEnum){
-            String suffix = imageDTO.getImageName().substring(imageDTO.getImageName().lastIndexOf("."));
-            this.fileName = imageTypeEnum.getDesc() + suffix;
-            this.fileContent = imageDTO.getImageBase64Str();
-        }
-    }
-}

+ 0 - 42
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/BaseResponse.java

@@ -1,42 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.response;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serial;
-import java.io.Serializable;
-
-@NoArgsConstructor
-@Data
-public class BaseResponse implements Serializable {
-
-    @Serial
-    private static final long serialVersionUID = 010534626470450373462L;
-
-    /**
-     * 加密报文
-     */
-    @JsonProperty("encryptionMessage")
-    public String encryptionMessage;
-
-    /**
-     * 签名
-     */
-    @JsonProperty("signature")
-    public String signature;
-
-    @JsonProperty("code")
-    public String code;
-
-    @JsonProperty("decodeData")
-    public String decodeData;
-
-    @JsonProperty("message")
-    public String message;
-
-    @JsonProperty("flag")
-    public Boolean flag;
-
-
-}

+ 0 - 102
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/CarInfoResponse.java

@@ -1,102 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.response;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.jzg.quotation.commons.filter.CarModelsFilter;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.math.BigDecimal;
-import java.util.List;
-
-@NoArgsConstructor
-@Data
-public class CarInfoResponse extends BaseResponse {
-
-    @JsonProperty("carModelList")
-    private List<CarModelListDTO> carModelList;
-
-    @JsonProperty("total")
-    private Integer total;
-
-
-    @NoArgsConstructor
-    @Data
-    public static class CarModelListDTO implements CarModelsFilter {
-
-        @JsonProperty("deptName")
-        private String deptName;
-        @JsonProperty("hfStartTime")
-        private String hfStartTime;
-        @JsonProperty("vehicleName")
-        private String vehicleName;
-        @JsonProperty("seriesCode")
-        private String seriesCode;
-        @JsonProperty("purchasePriceTax")
-        private BigDecimal purchasePriceTax;
-        @JsonProperty("qualityMax")
-        private BigDecimal qualityMax;
-        @JsonProperty("purchasePrice")
-        private String purchasePrice;
-        @JsonProperty("carYear")
-        private String carYear;
-        @JsonProperty("hfName")
-        private String hfName;
-        @JsonProperty("unladenMass")
-        private BigDecimal unladenMass;
-        @JsonProperty("modelCode")
-        private String modelCode;
-        @JsonProperty("seriesType")
-        private String seriesType;
-        @JsonProperty("shortHandCode")
-        private String shortHandCode;
-        @JsonProperty("displacement")
-        private BigDecimal displacement;
-        @JsonProperty("hfEndTime")
-        private String hfEndTime;
-        @JsonProperty("transmissionType")
-        private String transmissionType;
-        @JsonProperty("power")
-        private BigDecimal power;
-        @JsonProperty("brand")
-        private String brand;
-        @JsonProperty("brandCode")
-        private String brandCode;
-        @JsonProperty("factory")
-        private String factory;
-        @JsonProperty("insCarClassName")
-        private String insCarClassName;
-        @JsonProperty("insCarClass")
-        private String insCarClass;
-        @JsonProperty("seriesName")
-        private String seriesName;
-        @JsonProperty("carKind")
-        private String carKind;
-        @JsonProperty("modelName")
-        private String modelName;
-        @JsonProperty("series")
-        private String series;
-        @JsonProperty("approvedPassengersCapacity")
-        private BigDecimal approvedPassengersCapacity;
-        @JsonProperty("vehiclemodel")
-        private String vehiclemodel;
-        @JsonProperty("deptCode")
-        private String deptCode;
-        @JsonProperty("hfCode")
-        private String hfCode;
-        @JsonProperty("qualityMin")
-        private BigDecimal qualityMin;
-
-
-//        public CoreModelsVo toCoreModelsVo() {
-//            CoreModelsVo coreModelsVo = new CoreModelsVo();
-//            coreModelsVo.setModelCode(this.modelCode);
-//            coreModelsVo.setModelName(this.modelName);
-//            coreModelsVo.setCarYear(this.carYear);
-//            coreModelsVo.setPower(this.power.toString());
-//            coreModelsVo.setEnginedesc(Objects.nonNull(this.displacement)? this.displacement.toString() : "");
-//            coreModelsVo.setPurchasePrice(this.purchasePrice);
-//            coreModelsVo.setSeatCount(this.approvedPassengersCapacity.toString());
-//            return coreModelsVo;
-//        }
-    }
-}

+ 169 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/CarModelQueryResponse.java

@@ -0,0 +1,169 @@
+package com.jzg.quotation.chengtai.api.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.commons.entity.quote.vo.CoreModelsVo;
+import com.jzg.quotation.commons.filter.CarModelsFilter;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @author quchen
+ * @date 2026/4/20 14:44
+ */
+
+@NoArgsConstructor
+@Data
+public class CarModelQueryResponse {
+    /**
+     * 总数
+     */
+    @JsonProperty("maxPageNum")
+    private String maxPageNum;
+
+    /**
+     * 当前页
+     */
+    @JsonProperty("nowPage")
+    private String nowPage;
+
+    /**
+     * 每页条数
+     */
+    @JsonProperty("pageSize")
+    private String pageSize;
+
+    /**
+     * 车型信息
+     */
+    @JsonProperty("vehicleList")
+    private List<vehicle> vehicleList;
+
+    @NoArgsConstructor
+    @Data
+    public static class vehicle implements CarModelsFilter {
+        /**
+         * 精有车型编码
+         */
+        @JsonProperty("modelCode")
+        private String modelCode;
+
+        /**
+         * 品牌
+         */
+        @JsonProperty("vehicleBrand")
+        private String vehicleBrand;
+
+        /**
+         * 车系
+         */
+        @JsonProperty("vehicleSeries")
+        private String vehicleSeries;
+
+        /**
+         * 排量 单位:ml
+         */
+        @JsonProperty("vehicleDisplacement")
+        private String vehicleDisplacement;
+
+        /**
+         * 手/自动档
+         */
+        @JsonProperty("transmissionType")
+        private String transmissionType;
+
+        /**
+         * 配置型号
+         */
+        @JsonProperty("configModel")
+        private String configModel;
+
+        /**
+         * 参考价
+         */
+        @JsonProperty("vehiclePrice")
+        private String vehiclePrice;
+
+        /**
+         * 含税价
+         */
+        @JsonProperty("taxVehiclePrice")
+        private String taxVehiclePrice;
+
+        /**
+         * 整备质量 单位:千克
+         */
+        @JsonProperty("tonnage")
+        private String tonnage;
+
+        /**
+         * 座位数
+         */
+        @JsonProperty("seat")
+        private String seat;
+
+        /**
+         * 车辆种类
+         */
+        @JsonProperty("className")
+        private String className;
+
+        /**
+         * 是否减免税车型 0-非减免税车型、04-减免税车型、05-减税(注:05-减税,也是减免税车型,保费计算接口中车船税节点信息”taxRelifFlag” 计税分类字段须传 04,代表的是减免税车型。)
+         */
+        @JsonProperty("taxCutFlag")
+        private String taxCutFlag;
+
+        /**
+         *  减免税比例 减免比例返回的是百分比,如返回50,代表的是 百分之50,没减免比例则返回空
+         */
+        @JsonProperty("taxCutProp")
+        private String taxCutProp;
+
+        /**
+         * 是否新能源车辆 1:是 0:否
+         */
+        @JsonProperty("energyFlag")
+        private String energyFlag;
+
+        /**
+         * 精有车型名称
+         */
+        @JsonProperty("modelName")
+        private String modelName;
+
+        /**
+         * 备注
+         */
+        @JsonProperty("remark")
+        private String remark;
+
+        /**
+         * 能源类型
+         */
+        @JsonProperty("energyType")
+        private String energyType;
+        public CoreModelsVo toCoreModelsVo() {
+            CoreModelsVo coreModelsVo = new CoreModelsVo();
+            coreModelsVo.setModelCode(this.modelCode);
+            coreModelsVo.setModelName(this.modelName);
+            coreModelsVo.setCarYear(null);
+            coreModelsVo.setPower(null);
+            coreModelsVo.setEnginedesc(this.vehicleDisplacement);
+            coreModelsVo.setPurchasePrice(this.vehiclePrice);
+            coreModelsVo.setSeatCount(this.seat);
+            return coreModelsVo;
+        }
+
+        @Override
+        public String getCarYear() {
+            return null;
+        }
+
+        @Override
+        public String getPurchasePrice() {
+            return null;
+        }
+    }
+}

+ 0 - 26
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/ChengTaiTokenResponse.java

@@ -1,26 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.response;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-
-
-/**
- * @description: 诚泰财险 为接入方提供获取token服务 出参实体
- * @author: wenks
- * @date: 2023/8/19 9:29
- **/
-@NoArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-@Data
-public class ChengTaiTokenResponse extends BaseResponse {
-
-    private static final long serialVersionUID = 01744654061707132550211L;
-
-    /**
-     * Authorization的值
-     */
-    @JsonProperty("accessToken")
-    private String accessToken;
-}

+ 0 - 29
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/DownLoadDocumentUrlResponse.java

@@ -1,29 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.response;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@NoArgsConstructor
-@Data
-public class DownLoadDocumentUrlResponse extends BaseResponse{
-
-    @JsonProperty("ciDownLoad")
-    private String ciDownLoad;
-    @JsonProperty("ciDownloadResponseCode")
-    private String ciDownloadResponseCode;
-    @JsonProperty("biDownloadResponseCode")
-    private String biDownloadResponseCode;
-    @JsonProperty("biDownLoad")
-    private String biDownLoad;
-    @JsonProperty("businessType")
-    private String businessType;
-    @JsonProperty("contractNoBi")
-    private String contractNoBi;
-    @JsonProperty("contractNoCi")
-    private String contractNoCi;
-    @JsonProperty("ahiDownLoad")
-    private String ahiDownLoad;
-
-
-}

+ 54 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/FcPolicyElectronicResponse.java

@@ -0,0 +1,54 @@
+package com.jzg.quotation.chengtai.api.entity.response;
+
+import com.jzg.quotation.chengtai.api.entity.request.FcPolicyElectronicRequest;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author quchen
+ * @date 2026/4/22 11:07
+ */
+
+@Data
+@AllArgsConstructor
+public class FcPolicyElectronicResponse {
+    private Head head;
+
+    private Body body;
+
+    @Data
+    @NoArgsConstructor
+    public static class Head {
+        /**
+         * 响应信息
+         */
+        private String resMsg;
+
+        /**
+         * 响应代码
+         */
+        private String resCode;
+
+        /**
+         * 密码
+         */
+        private String passWord;
+
+        /**
+         * 合作伙伴编码
+         */
+        private String partnerCode;
+
+        /**
+         * 外网提供的唯一标志
+         */
+        private String queryId;
+    }
+
+    @Data
+    @NoArgsConstructor
+    public static class Body {
+        private String policyUrl;
+    }
+}

+ 0 - 667
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/InsurePremiumResponse.java

@@ -1,667 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.response;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.math.BigDecimal;
-import java.util.List;
-
-@NoArgsConstructor
-@Data
-public class InsurePremiumResponse extends BaseResponse {
-    @JsonProperty("orderId")
-    private String orderId;
-    @JsonProperty("carRegistFlag")
-    private String carRegistFlag;
-    @JsonProperty("biContract")
-    private BiContractDTO biContract;
-    @JsonProperty("accContract")
-    private AccContractDTO accContract;
-    @JsonProperty("insuredObject")
-    private InsuredObjectDTO insuredObject;
-    @JsonProperty("ciContract")
-    private CiContractDTO ciContract;
-
-    @JsonProperty("yztScore")
-    private YztScore yztScore;
-
-    @NoArgsConstructor
-    @Data
-    public static class YztScore {
-
-        /**
-         * 评分百分段
-         */
-        @JsonProperty("centile")
-        private Integer centile;
-
-        /**
-         * 商业险纯损失
-         */
-        @JsonProperty("commercialPureLost")
-        private BigDecimal commercialPureLost;
-
-        /**
-         * 预估标的终极赔付率
-         */
-        @JsonProperty("finalLossrationRate")
-        private BigDecimal finalLossrationRate;
-
-        /**
-         * 交强险纯损失
-         */
-        @JsonProperty("forcePureLost")
-        private BigDecimal forcePureLost;
-
-        /**
-         * 标的纯损失
-         */
-        @JsonProperty("targetPureLost")
-        private BigDecimal targetPureLost;
-
-        /**
-         * 升分主要因子
-         */
-        @JsonProperty("increaseFactor")
-        private String increaseFactor;
-    }
-
-
-    @NoArgsConstructor
-    @Data
-    public static class BiContractDTO {
-        @JsonProperty("coverage")
-        private List<CoverageDTO> coverage;
-        @JsonProperty("discountInfo")
-        private DiscountInfoDTO discountInfo;
-        @JsonProperty("platFormMessage")
-        private PlatFormMessageDTO platFormMessage;
-        @JsonProperty("adjust")
-        private List<AdjustDTO> adjust;
-        @JsonProperty("engage")
-        private List<EngageDTO> engage;
-//        @JsonProperty("chargingPileList")
-//        private List<?> chargingPileList;
-//        @JsonProperty("coveragePremium")
-//        private List<CoveragePremiumDTO> coveragePremium;
-        @JsonProperty("reInsureItem")
-        private ReInsureItemDTO reInsureItem;
-        @JsonProperty("contractMain")
-        private ContractMainDTO contractMain;
-
-        @NoArgsConstructor
-        @Data
-        public static class DiscountInfoDTO {
-            @JsonProperty("entireInitialDiscount")
-            private String entireInitialDiscount;
-        }
-
-//        @NoArgsConstructor
-//        @Data
-//        public static class CoveragePremiumDTO {
-//            @JsonProperty("vehiclaCode")
-//            private String vehiclaCode;
-//            @JsonProperty("pureriskPremium")
-//            private String pureriskPremium;
-//            @JsonProperty("used")
-//            private String used;
-//        }
-
-        @NoArgsConstructor
-        @Data
-        public static class PlatFormMessageDTO {
-            @JsonProperty("scoreCode")
-            private String scoreCode;
-            @JsonProperty("lastPolicyQueryDate")
-            private String lastPolicyQueryDate;
-            @JsonProperty("insureYears")
-            private String insureYears;
-            @JsonProperty("ciCarKind")
-            private String ciCarKind;
-            @JsonProperty("peccancyAdjustCI")
-            private String peccancyAdjustCI;
-            @JsonProperty("lastPolicyExpireDate")
-            private String lastPolicyExpireDate;
-            @JsonProperty("noClaimAdjustReasonCodeBI")
-            private String noClaimAdjustReasonCodeBI;
-            @JsonProperty("modelEnergyType")
-            private String modelEnergyType;
-            @JsonProperty("noClaimAdjustReason")
-            private String noClaimAdjustReason;
-            @JsonProperty("score")
-            private String score;
-            @JsonProperty("queryDate")
-            private String queryDate;
-            @JsonProperty("claimAdjustReasonCodeBI")
-            private String claimAdjustReasonCodeBI;
-            @JsonProperty("ciModelCode")
-            private String ciModelCode;
-            @JsonProperty("lastPolicyEffectiveDate")
-            private String lastPolicyEffectiveDate;
-            @JsonProperty("unMatchLicenseNoMessage")
-            private String unMatchLicenseNoMessage;
-            @JsonProperty("lastReplacementValue")
-            private String lastReplacementValue;
-            @JsonProperty("expireDate")
-            private String expireDate;
-            @JsonProperty("repeatedMsg")
-            private String repeatedMsg;
-            @JsonProperty("question")
-            private String question;
-            @JsonProperty("noClaimAdjustReasonBI")
-            private String noClaimAdjustReasonBI;
-            @JsonProperty("nonClaimAdjust")
-            private String nonClaimAdjust;
-            @JsonProperty("querySequenceNo")
-            private String querySequenceNo;
-            @JsonProperty("noClaimAdjustReasonCodeCI")
-            private String noClaimAdjustReasonCodeCI;
-            @JsonProperty("lastModelCode")
-            private String lastModelCode;
-            @JsonProperty("claimAdjustReasonCodeCI")
-            private String claimAdjustReasonCodeCI;
-            @JsonProperty("lastModel")
-            private String lastModel;
-            @JsonProperty("answer")
-            private String answer;
-            @JsonProperty("claimCoeff")
-            private String claimCoeff;
-            @JsonProperty("claimAdjustLevel")
-            private String claimAdjustLevel;
-            @JsonProperty("peccancyAdjustReasonCI")
-            private String peccancyAdjustReasonCI;
-            @JsonProperty("reinsuranceFlag")
-            private String reinsuranceFlag;
-            @JsonProperty("claimTimes")
-            private String claimTimes;
-            @JsonProperty("rateFloatFlag")
-            private String rateFloatFlag;
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class ReInsureItemDTO {
-            @JsonProperty("engineNo")
-            private String engineNo;
-            @JsonProperty("coverageItem")
-            private String coverageItem;
-            @JsonProperty("licensePlateColorCode")
-            private String licensePlateColorCode;
-            @JsonProperty("policyNo")
-            private String policyNo;
-            @JsonProperty("vin")
-            private String vin;
-            @JsonProperty("expireDate")
-            private String expireDate;
-            @JsonProperty("billDate")
-            private String billDate;
-            @JsonProperty("insurerCode")
-            private String insurerCode;
-            @JsonProperty("licensePlateNo")
-            private String licensePlateNo;
-            @JsonProperty("licensePlateType")
-            private String licensePlateType;
-            @JsonProperty("effectiveDate")
-            private String effectiveDate;
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class ContractMainDTO {
-            @JsonProperty("riskName")
-            private String riskName;
-            @JsonProperty("hopeDiscount")
-            private String hopeDiscount;
-            @JsonProperty("validDate")
-            private String validDate;
-            @JsonProperty("riskCode")
-            private String riskCode;
-            @JsonProperty("totalPremium")
-            private Double totalPremium;
-            @JsonProperty("policyNo")
-            private String policyNo;
-            @JsonProperty("validAtOnce")
-            private String validAtOnce;
-            @JsonProperty("renewalFlag")
-            private String renewalFlag;
-            @JsonProperty("lastYearPolicyNo")
-            private String lastYearPolicyNo;
-            @JsonProperty("sumAmount")
-            private String sumAmount;
-            @JsonProperty("proposalNo")
-            private String proposalNo;
-            @JsonProperty("expiryDate")
-            private String expiryDate;
-            @JsonProperty("hopeCoefficient")
-            private String hopeCoefficient;
-            @JsonProperty("currency")
-            private String currency;
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class CoverageDTO {
-            @JsonProperty("glassClassName")
-            private String glassClassName;
-            @JsonProperty("amount")
-            private Integer amount;
-            @JsonProperty("kindCode")
-            private String kindCode;
-            @JsonProperty("quantity")
-            private String quantity;
-            @JsonProperty("validDate")
-            private String validDate;
-            @JsonProperty("coveragePremium")
-            private Double coveragePremium;
-            @JsonProperty("glassClassCode")
-            private String glassClassCode;
-            @JsonProperty("calculateFlag")
-            private String calculateFlag;
-            @JsonProperty("expiryDate")
-            private String expiryDate;
-            @JsonProperty("ifMainKind")
-            private String ifMainKind;
-            @JsonProperty("deductible")
-            private String deductible;
-            @JsonProperty("kindName")
-            private String kindName;
-            @JsonProperty("unitAmount")
-            private Double unitAmount;
-            @JsonProperty("currency")
-            private String currency;
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class AdjustDTO {
-            @JsonProperty("adjustName")
-            private String adjustName;
-            @JsonProperty("adjustRate")
-            private String adjustRate;
-            @JsonProperty("adjustCode")
-            private String adjustCode;
-            @JsonProperty("minRate")
-            private String minRate;
-            @JsonProperty("maxRate")
-            private String maxRate;
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class EngageDTO {
-            @JsonProperty("engageDetail")
-            private String engageDetail;
-            @JsonProperty("modifyind")
-            private String modifyind;
-            @JsonProperty("engageCode")
-            private String engageCode;
-            @JsonProperty("engageTitle")
-            private String engageTitle;
-            @JsonProperty("chooseType")
-            private String chooseType;
-        }
-    }
-
-    @NoArgsConstructor
-    @Data
-    public static class AccContractDTO {
-        @JsonProperty("coverage")
-        private List<CoverageDTO> coverage;
-        @JsonProperty("engage")
-        private List<EngageDTO> engage;
-        @JsonProperty("contractMain")
-        private ContractMainDTO contractMain;
-
-//        public static List<AccidentResponseVo> toAccidentResponseVoList(AccContractDTO accContract, BaseQuoteVo<InsDrivingIntentionInsurance> quoteInfoVo) {
-//            ContractMainDTO contractMainDTO = accContract.getContractMain();
-//            InsDrivingIntentionInsurance insDrivingIntentionInsurance = quoteInfoVo.getAccidentalDrivingVo();
-//            List<AccidentResponseVo> accidentResponseVoList = new ArrayList<>();
-//            AccidentResponseVo accidentResponseVo = new AccidentResponseVo();
-//
-//            accidentResponseVo.setProjectCode(quoteInfoVo.getAccidentalDrivingVo().getProjectCode());
-//            if (StringUtils.isNotBlank(quoteInfoVo.getAccidentalDrivingVo().getProjectName())) {
-//                accidentResponseVo.setProjectName(quoteInfoVo.getAccidentalDrivingVo().getProjectName());
-//            }
-//            accidentResponseVo.setPremium(contractMainDTO.getTotalPremium().toString());
-//            accidentResponseVo.setQuantity("1");
-//            accidentResponseVo.setActualPremium(contractMainDTO.getSumAmount().toString());
-//            accidentResponseVoList.add(accidentResponseVo);
-//            return accidentResponseVoList;
-//        }
-
-        @NoArgsConstructor
-        @Data
-        public static class ContractMainDTO {
-            @JsonProperty("riskName")
-            private String riskName;
-            @JsonProperty("hopeDiscount")
-            private String hopeDiscount;
-            @JsonProperty("validDate")
-            private String validDate;
-            @JsonProperty("riskCode")
-            private String riskCode;
-            @JsonProperty("totalPremium")
-            private Double totalPremium;
-            @JsonProperty("policyNo")
-            private String policyNo;
-            @JsonProperty("validAtOnce")
-            private String validAtOnce;
-            @JsonProperty("renewalFlag")
-            private String renewalFlag;
-            @JsonProperty("lastYearPolicyNo")
-            private String lastYearPolicyNo;
-            @JsonProperty("sumAmount")
-            private String sumAmount;
-            @JsonProperty("proposalNo")
-            private String proposalNo;
-            @JsonProperty("expiryDate")
-            private String expiryDate;
-            @JsonProperty("currency")
-            private String currency;
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class CoverageDTO {
-            @JsonProperty("glassClassName")
-            private String glassClassName;
-            @JsonProperty("amount")
-            private Integer amount;
-            @JsonProperty("kindCode")
-            private String kindCode;
-            @JsonProperty("quantity")
-            private String quantity;
-            @JsonProperty("validDate")
-            private String validDate;
-            @JsonProperty("coveragePremium")
-            private String coveragePremium;
-            @JsonProperty("glassClassCode")
-            private String glassClassCode;
-            @JsonProperty("calculateFlag")
-            private String calculateFlag;
-            @JsonProperty("expiryDate")
-            private String expiryDate;
-            @JsonProperty("ifMainKind")
-            private String ifMainKind;
-            @JsonProperty("deductible")
-            private String deductible;
-            @JsonProperty("kindName")
-            private String kindName;
-            @JsonProperty("unitAmount")
-            private String unitAmount;
-            @JsonProperty("currency")
-            private String currency;
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class EngageDTO {
-            @JsonProperty("engageDetail")
-            private String engageDetail;
-            @JsonProperty("modifyind")
-            private String modifyind;
-            @JsonProperty("engageCode")
-            private String engageCode;
-            @JsonProperty("engageTitle")
-            private String engageTitle;
-            @JsonProperty("chooseType")
-            private String chooseType;
-        }
-    }
-
-    @NoArgsConstructor
-    @Data
-    public static class InsuredObjectDTO {
-//        @JsonProperty("deviceList")
-//        private List<?> deviceList;
-    }
-
-    @NoArgsConstructor
-    @Data
-    public static class CiContractDTO {
-        @JsonProperty("coverage")
-        private List<CoverageDTO> coverage;
-        @JsonProperty("discountInfo")
-        private DiscountInfoDTO discountInfo;
-        @JsonProperty("platFormMessage")
-        private PlatFormMessageDTO platFormMessage;
-        @JsonProperty("engage")
-        private List<EngageDTO> engage;
-        @JsonProperty("adjust")
-        private List<AdjustDTO> adjust;
-        @JsonProperty("tax")
-        private TaxDTO tax;
-        @JsonProperty("contractMain")
-        private ContractMainDTO contractMain;
-
-        @NoArgsConstructor
-        @Data
-        public static class DiscountInfoDTO {
-            @JsonProperty("entireInitialDiscount")
-            private String entireInitialDiscount;
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class PlatFormMessageDTO {
-            @JsonProperty("lastPolicyQueryDate")
-            private String lastPolicyQueryDate;
-            @JsonProperty("insureYears")
-            private String insureYears;
-            @JsonProperty("ciCarKind")
-            private String ciCarKind;
-            @JsonProperty("peccancyAdjustCI")
-            private String peccancyAdjustCI;
-            @JsonProperty("lastPolicyExpireDate")
-            private String lastPolicyExpireDate;
-            @JsonProperty("noClaimAdjustReasonCodeBI")
-            private String noClaimAdjustReasonCodeBI;
-            @JsonProperty("modelEnergyType")
-            private String modelEnergyType;
-            @JsonProperty("noClaimAdjustReason")
-            private String noClaimAdjustReason;
-            @JsonProperty("queryDate")
-            private String queryDate;
-            @JsonProperty("claimAdjustReasonCodeBI")
-            private String claimAdjustReasonCodeBI;
-            @JsonProperty("ciModelCode")
-            private String ciModelCode;
-            @JsonProperty("lastPolicyEffectiveDate")
-            private String lastPolicyEffectiveDate;
-            @JsonProperty("unMatchLicenseNoMessage")
-            private String unMatchLicenseNoMessage;
-            @JsonProperty("lastReplacementValue")
-            private String lastReplacementValue;
-            @JsonProperty("expireDate")
-            private String expireDate;
-            @JsonProperty("repeatedMsg")
-            private String repeatedMsg;
-            @JsonProperty("question")
-            private String question;
-            @JsonProperty("noClaimAdjustReasonBI")
-            private String noClaimAdjustReasonBI;
-            @JsonProperty("nonClaimAdjust")
-            private String nonClaimAdjust;
-            @JsonProperty("querySequenceNo")
-            private String querySequenceNo;
-            @JsonProperty("noClaimAdjustReasonCodeCI")
-            private String noClaimAdjustReasonCodeCI;
-            @JsonProperty("lastModelCode")
-            private String lastModelCode;
-            @JsonProperty("claimAdjustReasonCodeCI")
-            private String claimAdjustReasonCodeCI;
-            @JsonProperty("lastModel")
-            private String lastModel;
-            @JsonProperty("answer")
-            private String answer;
-            @JsonProperty("claimCoeff")
-            private String claimCoeff;
-            @JsonProperty("claimAdjustLevel")
-            private String claimAdjustLevel;
-            @JsonProperty("peccancyAdjustReasonCI")
-            private String peccancyAdjustReasonCI;
-            @JsonProperty("reinsuranceFlag")
-            private String reinsuranceFlag;
-            @JsonProperty("claimTimes")
-            private String claimTimes;
-            @JsonProperty("rateFloatFlag")
-            private String rateFloatFlag;
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class TaxDTO {
-            @JsonProperty("sumTax")
-            private Double sumTax;
-            @JsonProperty("sumOverdue")
-            private Double sumOverdue;
-            @JsonProperty("taxPayerIdentityNo")
-            private String taxPayerIdentityNo;
-            @JsonProperty("documentNumber")
-            private String documentNumber;
-            @JsonProperty("taxPayerName")
-            private String taxPayerName;
-            @JsonProperty("annualTaxDue")
-            private Double annualTaxDue;
-            @JsonProperty("noTaxReasonCode")
-            private String noTaxReasonCode;
-            @JsonProperty("sumTaxDefault")
-            private String sumTaxDefault;
-            @JsonProperty("lastPaidYear")
-            private String lastPaidYear;
-            @JsonProperty("unladenMass")
-            private Integer unladenMass;
-            @JsonProperty("taxStartDate")
-            private String taxStartDate;
-            @JsonProperty("taxEndDate")
-            private String taxEndDate;
-            @JsonProperty("taxDepartmentCity")
-            private String taxDepartmentCity;
-            @JsonProperty("deductionDueType")
-            private String deductionDueType;
-            @JsonProperty("taxDepartment")
-            private String taxDepartment;
-            @JsonProperty("taxDocumentDate")
-            private String taxDocumentDate;
-            @JsonProperty("taxConditionCode")
-            private String taxConditionCode;
-            @JsonProperty("taxDepartmentProvince")
-            private String taxDepartmentProvince;
-            @JsonProperty("annualTaxAmount")
-            private String annualTaxAmount;
-            @JsonProperty("taxPayerIdentityType")
-            private String taxPayerIdentityType;
-            @JsonProperty("calculateMode")
-            private String calculateMode;
-            @JsonProperty("deductionDueProportion")
-            private String deductionDueProportion;
-            @JsonProperty("unit")
-            private String unit;
-            @JsonProperty("taxDepartmentDetail")
-            private String taxDepartmentDetail;
-            @JsonProperty("deductionDueCode")
-            private String deductionDueCode;
-            @JsonProperty("deduction")
-            private String deduction;
-            @JsonProperty("taxPayerIdentificationCode")
-            private String taxPayerIdentificationCode;
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class ContractMainDTO {
-            @JsonProperty("riskName")
-            private String riskName;
-            @JsonProperty("hopeDiscount")
-            private String hopeDiscount;
-            @JsonProperty("validDate")
-            private String validDate;
-            @JsonProperty("riskCode")
-            private String riskCode;
-            @JsonProperty("totalPremium")
-            private Double totalPremium;
-            @JsonProperty("policyNo")
-            private String policyNo;
-            @JsonProperty("validAtOnce")
-            private String validAtOnce;
-            @JsonProperty("renewalFlag")
-            private String renewalFlag;
-            @JsonProperty("lastYearPolicyNo")
-            private String lastYearPolicyNo;
-            @JsonProperty("sumAmount")
-            private String sumAmount;
-            @JsonProperty("proposalNo")
-            private String proposalNo;
-            @JsonProperty("expiryDate")
-            private String expiryDate;
-            @JsonProperty("hopeCoefficient")
-            private String hopeCoefficient;
-            @JsonProperty("currency")
-            private String currency;
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class CoverageDTO {
-            @JsonProperty("glassClassName")
-            private String glassClassName;
-            @JsonProperty("amount")
-            private Integer amount;
-            @JsonProperty("kindCode")
-            private String kindCode;
-            @JsonProperty("quantity")
-            private String quantity;
-            @JsonProperty("validDate")
-            private String validDate;
-            @JsonProperty("coveragePremium")
-            private String coveragePremium;
-            @JsonProperty("glassClassCode")
-            private String glassClassCode;
-            @JsonProperty("calculateFlag")
-            private String calculateFlag;
-            @JsonProperty("expiryDate")
-            private String expiryDate;
-            @JsonProperty("ifMainKind")
-            private String ifMainKind;
-            @JsonProperty("deductible")
-            private String deductible;
-            @JsonProperty("kindName")
-            private String kindName;
-            @JsonProperty("unitAmount")
-            private String unitAmount;
-            @JsonProperty("currency")
-            private String currency;
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class EngageDTO {
-            @JsonProperty("engageDetail")
-            private String engageDetail;
-            @JsonProperty("modifyind")
-            private String modifyind;
-            @JsonProperty("engageCode")
-            private String engageCode;
-            @JsonProperty("engageTitle")
-            private String engageTitle;
-            @JsonProperty("chooseType")
-            private String chooseType;
-        }
-
-        @NoArgsConstructor
-        @Data
-        public static class AdjustDTO {
-            @JsonProperty("adjustName")
-            private String adjustName;
-            @JsonProperty("adjustRate")
-            private String adjustRate;
-            @JsonProperty("adjustCode")
-            private String adjustCode;
-            @JsonProperty("minRate")
-            private String minRate;
-            @JsonProperty("maxRate")
-            private String maxRate;
-        }
-    }
-}

+ 0 - 15
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/PayUrlResponse.java

@@ -1,15 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.response;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@NoArgsConstructor
-@Data
-public class PayUrlResponse extends BaseResponse{
-
-    @JsonProperty("message")
-    private String message;
-    @JsonProperty("smsUrl")
-    private String smsUrl;
-}

+ 9 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/PaymentResponse.java

@@ -0,0 +1,9 @@
+package com.jzg.quotation.chengtai.api.entity.response;
+
+/**
+ * @author quchen
+ * @date 2026/4/20 14:47
+ */
+
+public class PaymentResponse {
+}

+ 120 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/PolicyElectronicResponse.java

@@ -0,0 +1,120 @@
+package com.jzg.quotation.chengtai.api.entity.response;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+/**
+ * @author quchen
+ * @date 2026/4/20 14:47
+ */
+
+@Data
+@AllArgsConstructor
+public class PolicyElectronicResponse {
+    /**
+     * 响应头
+     */
+    private ResponseHead responseHead;
+
+    /**
+     * 响应体
+     */
+    private ResponseBody responseBody;
+
+    @Data
+    @AllArgsConstructor
+    public static class ResponseHead {
+        /**
+         * 响应类型
+         */
+        private String responseType;
+
+        /**
+         * 响应码
+         */
+        private String responseCode;
+
+        /**
+         * 错误描述
+         */
+        private String errorMessage;
+    }
+
+    @Data
+    @AllArgsConstructor
+    public static class ResponseBody {
+        /**
+         * 下载/打印地址查询返参
+         */
+        private ElectronicPolicy electronicPolicy;
+
+        @Data
+        @AllArgsConstructor
+        public static class ElectronicPolicy {
+            /**
+             * 商业险平台交互结果
+             */
+            private String biDownloadResponseCode;
+
+            /**
+             * 商业险失败原因
+             */
+            private String biDownloadErrorMessage;
+
+            /**
+             * 商业险下载地址
+             */
+            private String biDownLoad;
+
+            /**
+             * 交强险平台交互结果
+             */
+            private String ciDownloadResponseCode;
+
+            /**
+             * 交强险失败原因
+             */
+            private String ciDownloadErrorMessage;
+
+            /**
+             * 交强险下载地址
+             */
+            private String ciDownLoad;
+
+            /**
+             * 交强险标志平台交互结果
+             */
+            private String bzDownloadResponseCode;
+
+            /**
+             * 交强险标志失败原因
+             */
+            private String bzDownloadErrorMessage;
+
+            /**
+             * 交强险标志下载地址
+             */
+            private String bzDownLoad;
+
+            /**
+             * 交强险业务号
+             */
+            private String contractNoCi;
+
+            /**
+             * 交强险标志业务号
+             */
+            private String contractNoBz;
+
+            /**
+             * 商业险业务号
+             */
+            private String contractNoBi;
+
+            /**
+             * 业务类型
+             */
+            private String businessType;
+        }
+    }
+}

+ 9 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/PolicyRecallResponse.java

@@ -0,0 +1,9 @@
+package com.jzg.quotation.chengtai.api.entity.response;
+
+/**
+ * @author quchen
+ * @date 2026/4/20 14:49
+ */
+
+public class PolicyRecallResponse {
+}

+ 123 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/PolicyStatusResponse.java

@@ -0,0 +1,123 @@
+package com.jzg.quotation.chengtai.api.entity.response;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @author quchen
+ * @date 2026/4/20 14:48
+ */
+
+@Data
+@AllArgsConstructor
+public class PolicyStatusResponse {
+    private ResponseHead responseHead;
+
+    private ResponseBody responseBody;
+
+    @Data
+    @NoArgsConstructor
+    public static class ResponseHead {
+        /**
+         * 响应类型
+         */
+        private String responseType;
+
+        /**
+         * 返回类型代码
+         */
+        private String responseCode;
+
+        /**
+         * 错误信息
+         */
+        private String errorMessage;
+    }
+
+    @Data
+    @NoArgsConstructor
+    public static class ResponseBody {
+        /**
+         * 投保单状态查询对象
+         */
+        private List<EBCallbackData> eBCallbackData;
+
+        /**
+         * 车加意的意外险承保必返
+         */
+        private String nvhlPolicyNo;
+
+        @Data
+        @NoArgsConstructor
+        public static class EBCallbackData {
+            /**
+             * 投保单号
+             */
+            private String proposalNo;
+
+            /**
+             * 保单号
+             */
+            private String policyNo;
+
+            /**
+             * 状态
+             */
+            private String underWriteInd;
+
+            /**
+             * 审核时间
+             */
+            private String operateTime;
+
+            /**
+             * 审核意见
+             */
+            private String operateText;
+
+
+            /**
+             * 被保险人名称
+             */
+            private String insuredName;
+
+            /**
+             * 总保额
+             */
+            private String sumAmount;
+
+            /**
+             * 总签单保费
+             */
+            private String totalPremium;
+
+            /**
+             * 缴费有效止期
+             */
+            private String paymentEndDate;
+
+            /**
+             * 险种代码
+             */
+            private String riskCode;
+
+            /**
+             * 电子投保单签名状态
+             */
+            private String signStatus;
+
+            /**
+             * 起保日期
+             */
+            private String validDate;
+
+            /**
+             * 终保日期
+             */
+            private String expiryDate;
+        }
+    }
+}

+ 476 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/PremiumCalculationResponse.java

@@ -0,0 +1,476 @@
+package com.jzg.quotation.chengtai.api.entity.response;
+
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author quchen
+ * @date 2026/4/20 14:43
+ */
+
+@NoArgsConstructor
+@Data
+@JacksonXmlRootElement(localName = "policyFeeCountResponseBody")
+public class PremiumCalculationResponse {
+    /**
+     * 报文头信息(Head)
+     */
+    @JacksonXmlProperty(isAttribute = false, localName = "Head")
+    private head Head;
+
+    /**
+     * 商业险部分
+     */
+    @JacksonXmlProperty(isAttribute = false, localName = "CommRisk")
+    private commRisk CommRisk;
+
+    /**
+     * 交强险部分
+     */
+    @JacksonXmlProperty(isAttribute = false, localName = "CompRisk")
+    private compRisk CompRisk;
+
+    /**
+     * 驾意险部分
+     */
+    @JacksonXmlProperty(isAttribute = false, localName = "AcciRisk")
+    private AcciRisk AcciRisk;
+
+    /**
+     * 一账通定价信息
+     */
+    @JacksonXmlProperty(isAttribute = false, localName = "OcftInfo")
+    private OcftInfo OcftInfo;
+
+    /**
+     * 壹账通评分信息(YztScore)
+     */
+    @JacksonXmlProperty(isAttribute = false, localName = "YztScore")
+    private yztScore YztScore;
+
+    @NoArgsConstructor
+    @Data
+    public static class head {
+        /**
+         * 请求类型
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "requestType")
+        private String requestType;
+
+        /**
+         * 返回类型代码
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "responseCode")
+        private String responseCode;
+
+        /**
+         * 错误描述
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "errorMessage")
+        private String errorMessage;
+    }
+
+    /**
+     * 商业险部分
+     */
+    @NoArgsConstructor
+    @Data
+    public static class commRisk {
+        /**
+         * 公共部分
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "Ftrno")
+        private ftrno Ftrno;
+
+        /**
+         * 基础部分
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "BasePart")
+        private basePart BasePart;
+
+        /**
+         * 险别信息(KindList)包含多条(Kind)
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "KindList")
+        private List<Kind> KindList;
+
+        @NoArgsConstructor
+        @Data
+        public static class ftrno {
+            /**
+             * 订单号
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "orderNumber")
+            private String orderNumber;
+        }
+        @NoArgsConstructor
+        @Data
+        public static class basePart {
+            /**
+             * 总保费
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "sumPremuim")
+            private String sumPremuim;
+
+            /**
+             * 总折扣
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "discount")
+            private BigDecimal discount;
+
+            /**
+             * 折前总保费
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "benchmarkPremium")
+            private BigDecimal benchmarkPremium;
+
+            /**
+             * 转保车问题
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "question")
+            private String question;
+
+            /**
+             * 建议折扣
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "entireRecommenDiscount")
+            private BigDecimal entireRecommenDiscount;
+
+            /**
+             * NCD系数
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "profitRate")
+            private BigDecimal profitRate;
+
+            /**
+             * 续保标志 0-新保 1-转保
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "renewalFlag")
+            private String renewalFlag;
+
+            /**
+             * 连续承保期间出险次数
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "claimsNum")
+            private String claimsNum;
+
+            /**
+             * 自主定价系数
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "fixedPriceRate")
+            private BigDecimal fixedPriceRate;
+
+            /**
+             * 光博车险分
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "sunlightScore")
+            private BigDecimal sunlightScore;
+
+            /**
+             * 连续承保年数
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "insureYears")
+            private Integer insureYears;
+
+            /**
+             * 上年保单号
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "lastYearPolicyNo")
+            private String lastYearPolicyNo;
+        }
+        /**
+         * 险别信息(Kind)
+         */
+        @NoArgsConstructor
+        @Data
+        public static class Kind {
+
+            /**
+             * 险种代码
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "riskCode")
+            private String riskCode;
+
+            /**
+             * 险别名称
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "kindName")
+            private String kindName;
+
+            /**
+             * 险别代码
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "kindCode")
+            private String kindCode;
+
+            /**
+             * 保额
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "amount")
+            private BigDecimal amount;
+
+            /**
+             * 折后保费
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "grossPremium")
+            private BigDecimal grossPremium;
+
+            /**
+             * 折前保费
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "benchmarkPremium")
+            private BigDecimal benchmarkPremium;
+
+            /**
+             * 折扣率
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "discount")
+            private BigDecimal discount;
+
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class compRisk {
+        /**
+         * 公共部分
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "Ftrno")
+        private ftrno Ftrno;
+
+        /**
+         * 基础信息
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "BasePart")
+        private basePart BasePart;
+
+        /**
+         * 车船税信息
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "CarShipTax")
+        private carShipTax CarShipTax;
+
+        @NoArgsConstructor
+        @Data
+        public static class ftrno {
+            /**
+             * 订单号
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "orderNumber")
+            private String orderNumber;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class basePart {
+            /**
+             * 总保费
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "sumPremuim")
+            private String sumPremuim;
+
+            /**
+             * 总折扣
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "discount")
+            private BigDecimal discount;
+
+            /**
+             * 折前总保费
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "benchmarkPremium")
+            private BigDecimal benchmarkPremium;
+
+            /**
+             * 转保车问题
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "question")
+            private String question;
+
+            /**
+             * 上年出险次数
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "claimsNum")
+            private String claimsNum;
+
+            /**
+             * 续保标志
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "renewalFlag")
+            private String renewalFlag;
+
+            /**
+             * 光博车险分
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "sunlightScore")
+            private BigDecimal sunlightScore;
+
+            /**
+             * 交强险分类
+             * 1真单交 2假单交
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "isCIFlag")
+            private String isCIFlag;
+
+            /**
+             * 上年保单号
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "lastYearPolicyNo")
+            private String lastYearPolicyNo;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class carShipTax {
+            /**
+             * 税额合计
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "sumPayTax")
+            private BigDecimal sumPayTax;
+
+            /**
+             * 计税分类
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "taxRelifFlag")
+            private String taxRelifFlag;
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class AcciRisk {
+        /**
+         * 非车产品code
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "nvhlSuitCode")
+        private String nvhlSuitCode;
+
+        /**
+         * 非车产品保费
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "nvhlSuitPrice")
+        private BigDecimal nvhlSuitPrice;
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class OcftInfo {
+        /**
+         * 壹账通定价信息ID
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "ocftId")
+        private String ocftId;
+
+        /**
+         * 壹账通系数列表
+         */
+        @JacksonXmlElementWrapper(useWrapping = false)
+        @JacksonXmlProperty(isAttribute = false, localName = "coefficientList")
+        private List<Coefficient> coefficientList;
+
+        @NoArgsConstructor
+        @Data
+        public static class Coefficient {
+            /**
+             * 序号
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "sortNo")
+            private Integer sortNo;
+
+            /**
+             * 业务类型
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "dataType")
+            private String dataType;
+
+            /**
+             * 自主定价系数
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "coefficient")
+            private BigDecimal coefficient;
+
+            /**
+             * 车辆用途代码
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "carUsing")
+            private String carUsing;
+
+            /**
+             * 车辆用途名称
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "carUsingName")
+            private String carUsingName;
+
+            /**
+             * 选中标识 1-选中,默认空
+             */
+            @JacksonXmlProperty(isAttribute = false, localName = "isChoose")
+            private String isChoose;
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class yztScore {
+        /**
+         * orderID
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "orderId")
+        private String orderId;
+
+        /**
+         * 评分ID
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "scoreId")
+        private String scoreId;
+
+        /**
+         * 评分百分段
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "centile")
+        private Integer centile;
+
+        /**
+         * 商业险纯损失
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "commercialPureLost")
+        private BigDecimal commercialPureLost;
+
+        /**
+         * 预估标的终极赔付率
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "finalLossrationRate")
+        private BigDecimal finalLossrationRate;
+
+        /**
+         * 交强险纯损失
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "forcePureLost")
+        private BigDecimal forcePureLost;
+
+        /**
+         * 标的纯损失
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "targetPureLost")
+        private BigDecimal targetPureLost;
+
+        /**
+         * 升分主要因子
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "increaseFactor")
+        private String increaseFactor;
+
+        /**
+         * 具体错误信息
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "errorMessage")
+        private String errorMessage;
+    }
+}

+ 0 - 17
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/QueryCarActualValueResponse.java

@@ -1,17 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.response;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.math.BigDecimal;
-
-@NoArgsConstructor
-@Data
-public class QueryCarActualValueResponse extends BaseResponse{
-
-    @JsonProperty("monthDepRate")
-    private BigDecimal monthDepRate;
-    @JsonProperty("actualValue")
-    private BigDecimal actualValue;
-}

+ 135 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/SubmitResponse.java

@@ -0,0 +1,135 @@
+package com.jzg.quotation.chengtai.api.entity.response;
+
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author quchen
+ * @date 2026/4/20 14:46
+ */
+
+@NoArgsConstructor
+@Data
+@JacksonXmlRootElement(localName = "policySaveResponseBody")
+public class SubmitResponse {
+    /**
+     * 请求头信息
+     */
+    @JacksonXmlProperty(isAttribute = false, localName = "Head")
+    private Head head;
+
+    /**
+     * 投保单保存成功对象
+     */
+    @JacksonXmlProperty(isAttribute = false, localName = "Proposal")
+    private Proposal proposal;
+
+    /**
+     * 投保单失败信息
+     */
+//    @JacksonXmlProperty(isAttribute = false, localName = "errorMessage")
+//    private String errorMessage;
+//
+//    @JacksonXmlProperty(isAttribute = false, localName = "requestType")
+//    private String requestType;
+//
+//    @JacksonXmlProperty(isAttribute = false, localName = "responseCode")
+//    private String responseCode;
+
+
+
+    @NoArgsConstructor
+    @Data
+    public static class Head {
+        /**
+         * 请求类型
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "requestType")
+        private String requestType;
+
+        /**
+         * 返回类型代码
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "responseCode")
+        private String responseCode;
+
+        /**
+         * 错误描述
+         */
+        @JacksonXmlProperty(isAttribute = false, localName = "errorMessage")
+        private String errorMessage;
+
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class Proposal {
+        /**
+         * 投保单号
+         */
+        @JacksonXmlProperty(localName = "proposalNo")
+        private String proposalNo;
+
+        /**
+         * 险种代码
+         * 0801	交强险
+         * 0808	机动车综合险(2014)
+         */
+        @JacksonXmlProperty(localName = "riskCode")
+        private String riskCode;
+
+        /**
+         * 审核标志
+         * 0	初始状态(暂存状态)
+         * 1	双审核通过
+         * 2	下发修改
+         * 3	双审核自动通过
+         * 4	拒保
+         * 5	复核通过
+         * 6	承保确认
+         * 7	复核不通过
+         * 8	代复核
+         * 9	代双核审核
+         * A	已修改代复核
+         * B	下发影像
+         * C	报价确认
+         */
+        @JacksonXmlProperty(localName = "underWriteInd")
+        private String underWriteInd;
+
+        /**
+         * 商业险投保单号
+         */
+        @JacksonXmlProperty(localName = "commProposalNo")
+        private String commProposalNo;
+
+        /**
+         * 交强险投保单号
+         */
+        @JacksonXmlProperty(localName = "compProposalNo")
+        private String compProposalNo;
+
+        /**
+         * 签名状态
+         * 1	已签名
+         * 2	未签名
+         * 3	无需签名
+         */
+        @JacksonXmlProperty(localName = "signStatus")
+        private String signStatus;
+
+        /**
+         * 非车险投保单号
+         */
+        @JacksonXmlProperty(localName = "noCarProposalNo")
+        private String noCarProposalNo;
+
+        /**
+         * 是否需要短信验证码 0:不需要,2:缴费需要
+         */
+        @JacksonXmlProperty(localName = "smsCheckFlag")
+        private String smsCheckFlag;
+    }
+}

+ 0 - 33
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/SubmitVerifyResponse.java

@@ -1,33 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.response;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@NoArgsConstructor
-@Data
-public class SubmitVerifyResponse extends BaseResponse{
-
-    @JsonProperty("isPolitics")
-    private String isPolitics;
-    @JsonProperty("underWriteInd")
-    private String underWriteInd;
-    @JsonProperty("SMSCheckFlag")
-    private String sMSCheckFlag;
-    @JsonProperty("terrorType")
-    private String terrorType;
-    @JsonProperty("orderId")
-    private String orderId;
-    @JsonProperty("signStatus")
-    private String signStatus;
-    @JsonProperty("resCode")
-    private String resCode;
-    @JsonProperty("isTerror")
-    private String isTerror;
-    @JsonProperty("contractNoBI")
-    private String contractNoBI;
-    @JsonProperty("uuid")
-    private String uuid;
-    @JsonProperty("contractNoCI")
-    private String contractNoCI;
-}

+ 0 - 30
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/SubmitVerifyResultResponse.java

@@ -1,30 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.response;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.List;
-
-@NoArgsConstructor
-@Data
-public class SubmitVerifyResultResponse extends BaseResponse{
-
-    @JsonProperty("data")
-    private List<DataDTO> data;
-    @JsonProperty("policyProsts")
-    private String policyProsts;
-
-    @NoArgsConstructor
-    @Data
-    public static class DataDTO {
-        @JsonProperty("insCode")
-        private String insCode;
-        @JsonProperty("orderId")
-        private String orderId;
-        @JsonProperty("policyCode")
-        private String policyCode;
-        @JsonProperty("riskCode")
-        private String riskCode;
-    }
-}

+ 0 - 26
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/UnderwritingResponse.java

@@ -1,26 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.response;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.List;
-
-@NoArgsConstructor
-@Data
-public class UnderwritingResponse extends BaseResponse{
-
-    @JsonProperty("finalRuleResult")
-    private String finalRuleResult;
-    @JsonProperty("data")
-    private List<DataDTO> data;
-
-    @NoArgsConstructor
-    @Data
-    public static class DataDTO {
-        @JsonProperty("reasondescription")
-        private String reasondescription;
-        @JsonProperty("riskCode")
-        private String riskCode;
-    }
-}

+ 0 - 25
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/UnderwritingResultResponse.java

@@ -1,25 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.response;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@NoArgsConstructor
-@Data
-public class UnderwritingResultResponse extends BaseResponse{
-
-    @JsonProperty("finalRuleResult")
-    private String finalRuleResult;
-    @JsonProperty("contractNoACCI")
-    private String contractNoACCI;
-    @JsonProperty("orderId")
-    private String orderId;
-    @JsonProperty("finalRuleResultMsg")
-    private String finalRuleResultMsg;
-    @JsonProperty("contractNoBI")
-    private String contractNoBI;
-    @JsonProperty("contractNoCI")
-    private String contractNoCI;
-    @JsonProperty("finalRuleResultEndDate")
-    private String finalRuleResultEndDate;
-}

+ 9 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/UpLoadResponse.java

@@ -0,0 +1,9 @@
+package com.jzg.quotation.chengtai.api.entity.response;
+
+/**
+ * @author quchen
+ * @date 2026/4/20 14:45
+ */
+
+public class UpLoadResponse {
+}

+ 0 - 20
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/response/UploadFileResponse.java

@@ -1,20 +0,0 @@
-package com.jzg.quotation.chengtai.api.entity.response;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.List;
-
-@NoArgsConstructor
-@Data
-public class UploadFileResponse extends BaseResponse {
-    @JsonProperty("data")
-    private DataDTO data;
-    @NoArgsConstructor
-    @Data
-    public static class DataDTO {
-        @JsonProperty("fileIds")
-        private List<String> fileIds;
-    }
-}

+ 3 - 3
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/service/ChengTaiCrawlerOrderService.java

@@ -1,8 +1,8 @@
 package com.jzg.quotation.chengtai.api.service;
 
 import com.jzg.quotation.chengtai.api.entity.po.ChengTaiApiOrder;
-import com.jzg.quotation.chengtai.api.entity.response.InsurePremiumResponse;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.quotation.chengtai.api.entity.response.PremiumCalculationResponse;
 
 public interface ChengTaiCrawlerOrderService {
 
@@ -11,9 +11,9 @@ public interface ChengTaiCrawlerOrderService {
      * 存储订单信息
      *
      * @param quoteVo            报价信息
-     * @param insurePremiumResponse 报价信息
+     * @param premiumCalculationResponse 报价信息
      */
-    void saveOrderInfo(QuoteVo quoteVo, InsurePremiumResponse insurePremiumResponse);
+    void saveOrderInfo(QuoteVo quoteVo, PremiumCalculationResponse premiumCalculationResponse);
 
     /**
      * 获取mongo中的订单信息

+ 289 - 367
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/service/impl/ChengTaiApiRequestImpl.java

@@ -1,26 +1,25 @@
 package com.jzg.quotation.chengtai.api.service.impl;
 
-import cn.hutool.core.collection.CollUtil;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.agreement.po.PtlAgreementUrl;
+import com.jzg.commons.entity.po.SysUploadFiles;
 import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
+import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.commons.exception.SystemException;
+import com.jzg.commons.util.MinioUtils;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.commons.util.http.HttpUtil;
-import com.jzg.commons.util.http.HttpUtils;
 import com.jzg.quotation.chengtai.api.build.ChengTaiAPIQuoteResultsVoBuild;
 import com.jzg.quotation.chengtai.api.component.ChengTaiRequestApiComponent;
-import com.jzg.quotation.chengtai.api.entity.ChengTaiApiConfigureParameters;
-import com.jzg.quotation.chengtai.api.entity.constants.ResponseCode;
-import com.jzg.quotation.chengtai.api.entity.constants.enums.OrderStatusEnum;
-import com.jzg.quotation.chengtai.api.entity.constants.enums.RiskCodeEnum;
-import com.jzg.quotation.chengtai.api.entity.po.ChengTaiApiOrder;
+import com.jzg.quotation.chengtai.api.entity.ChengTaiApiParameters;
+import com.jzg.quotation.chengtai.api.entity.constants.CarActualValueEnum;
 import com.jzg.quotation.chengtai.api.entity.request.*;
 import com.jzg.quotation.chengtai.api.entity.response.*;
 import com.jzg.quotation.chengtai.api.properties.ChengTaiApiProperties;
@@ -31,18 +30,21 @@ import com.jzg.quotation.commons.annotation.QuoteApiService;
 import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.commons.entity.quote.vo.base.OrderBase;
-import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
-import com.jzg.quotation.commons.utils.DateTimeUtil;
+import com.jzg.quotation.commons.utils.TimeProcessing;
 import lombok.Data;
 import lombok.RequiredArgsConstructor;
-import org.springframework.beans.BeanUtils;
-import org.springframework.http.HttpHeaders;
+import org.apache.commons.io.IOUtils;
 
-import java.time.LocalDateTime;
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @description: 诚泰财险 API 计算
@@ -54,15 +56,10 @@ import java.util.*;
 public class ChengTaiApiRequestImpl implements ChengTaiApiRequest {
 
     private final ChengTaiRequestApiComponent chengTaiRequestApiComponent;
-
-    private final ChengTaiCrawlerOrderService chengTaiCrawlerOrderService;
-
-    private final ChengTaiApiProperties chengTaiApiProperties;
-
-    private final ChengTaiApiOrderRepository chengTaiApiOrderRepository;
-
     private final PlatformClient platformClient;
 
+    private final MinioUtils minioUtils;
+
     public String getApiUrl(String companyId) {
         // 获取保司配置url地址
         HttpResult<PtlAgreementUrl> ptlAgreementUrl = platformClient.getAgreementUrlByCompanyId(companyId);
@@ -70,340 +67,261 @@ public class ChengTaiApiRequestImpl implements ChengTaiApiRequest {
     }
 
     @Override
-    public QuoteResultsVo quote(QuoteVo quoteVo) {
+    public QuoteResultsVo quote(QuoteVo quoteVo) throws Exception {
         OrderBase order = quoteVo.getOrder();
         AttributionInformationVo attributionInformationVo = order.getAttributionInformationVo();
         // 配置信息
-        String url = getApiUrl(order.getInsuranceCompanyCode());
-        ChengTaiApiConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ChengTaiApiConfigureParameters.class,
+        String apiUrl = getApiUrl(order.getInsuranceCompanyCode());
+        ChengTaiApiParameters parameters = ConfigureParametersConversion.conversionEntity(ChengTaiApiParameters.class,
                 attributionInformationVo.getConfigInfo());
-        HttpHeaders httpHeaders = chengTaiRequestApiComponent.getHttpHeaders(parameters,url);
         // 车型查询
         CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
-        CarInfoRequest carInfoRequest = new CarInfoRequest(chengTaiApiProperties.getPartnerCode(), carInfoVo.getBrandName());
-        CarInfoResponse carInfoResponse = chengTaiRequestApiComponent.carinfoQuery(carInfoRequest, httpHeaders,chengTaiApiProperties.getPartnerCode(),url);
+        CarModelQueryRequest carInfoRequest = new CarModelQueryRequest(carInfoVo.getBrandName());
+        CarModelQueryResponse carModelQueryResponse = chengTaiRequestApiComponent.carModelQuery(carInfoRequest,apiUrl);
         // 过滤车型
-        CarInfoResponse.CarModelListDTO carModelListDTO = CarModelsFilterUtils.to(carInfoResponse.getCarModelList(), carInfoVo);
+        CarModelQueryResponse.vehicle vehicle = CarModelsFilterUtils.to(carModelQueryResponse.getVehicleList(), carInfoVo);
         // 计算车辆价格
-        QueryCarActualValueRequest carActualValueRequest = new QueryCarActualValueRequest(quoteVo,carModelListDTO, chengTaiApiProperties.getPartnerCode());
-        QueryCarActualValueResponse carActualValueResponse = chengTaiRequestApiComponent.queryActualValue(carActualValueRequest,httpHeaders,chengTaiApiProperties.getPartnerCode(),url);
+        BigDecimal carActualValue = calculateCarActualValue(vehicle,quoteVo.getCarInfoVo());
         // 报价
-        InsurePremiumRequest insurePremiumRequest = new InsurePremiumRequest(carModelListDTO, carActualValueResponse,parameters,quoteVo,chengTaiApiProperties.getPartnerCode());
-        InsurePremiumResponse insurePremiumResponse = chengTaiRequestApiComponent.calculatePremium(insurePremiumRequest,httpHeaders,chengTaiApiProperties.getPartnerCode(),url);
-
-        // 处理重复投保
-        repeatCoverhandler(insurePremiumRequest, insurePremiumResponse,httpHeaders,url);
-        // 处理验车码
-        codeRecognitionHandler(insurePremiumRequest, insurePremiumResponse,httpHeaders,url);
-        // 处理验车码识别错误
-        codeRecognitionErrHandler(insurePremiumRequest, insurePremiumResponse,httpHeaders,url);
-
-        chengTaiCrawlerOrderService.saveOrderInfo(quoteVo,insurePremiumResponse);
-
-        return ChengTaiAPIQuoteResultsVoBuild.buildQuoteResultsVo(order.getOrdersNo(), quoteVo, insurePremiumResponse);
+        PremiumCalculationRequest premiumCalculationRequest = new PremiumCalculationRequest(quoteVo,carActualValue,parameters,vehicle,null);
+        PremiumCalculationResponse premiumCalculationResponse
+                = getResponse(premiumCalculationRequest,quoteVo,carActualValue,parameters,vehicle, apiUrl);
+        return ChengTaiAPIQuoteResultsVoBuild.buildQuoteResultsVo(order.getOrdersNo(), quoteVo, premiumCalculationResponse,carActualValue);
     }
 
     /**
-     * 验车码识别错误处理
-     * @param insurePremiumRequest
-     * @param insurePremiumResponse
-     * @param httpHeaders
+     * 计算车辆实际价值
      */
-    private void codeRecognitionErrHandler(InsurePremiumRequest insurePremiumRequest,
-                                           InsurePremiumResponse insurePremiumResponse,
-                                           HttpHeaders httpHeaders,String url) {
-
-        if(!ResponseCode.R_000.getCode().equals(insurePremiumResponse.getCode()) && insurePremiumResponse.getMessage().contains("录入的校验码有误")){
-            InsurePremiumRequest.CiContractDTO ciContractReq = insurePremiumRequest.getCiContract();
-            InsurePremiumRequest.BiContractDTO biContractReq = insurePremiumRequest.getBiContract();
-            if(Objects.nonNull(ciContractReq)){
-                InsurePremiumRequest.CiContractDTO.PlatFormMessageDTO platFormMessageDTO = ciContractReq.getPlatFormMessage();
-                platFormMessageDTO.setAnswer(replacingStrings(platFormMessageDTO.getAnswer()));
-            }
-            if(Objects.nonNull(biContractReq)){
-                InsurePremiumRequest.BiContractDTO.PlatFormMessageDTO platFormMessageDTO = biContractReq.getPlatFormMessage();
-                platFormMessageDTO.setAnswer(replacingStrings(platFormMessageDTO.getAnswer()));
-            }
-            insurePremiumResponse = chengTaiRequestApiComponent.calculatePremium(insurePremiumRequest,httpHeaders,chengTaiApiProperties.getPartnerCode(),url);
+    private BigDecimal calculateCarActualValue(CarModelQueryResponse.vehicle vehicle,CarInfoVo carInfoVo) {
+        BigDecimal carActualValue;
+        // 获取车辆折旧月数
+        DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        // 获取车辆注册时间
+        LocalDate registerDate = LocalDate.parse(carInfoVo.getRegisterDate(), DATE_FORMATTER);
+        LocalDate currentDate = LocalDate.now();
+        // 计算车辆折旧月数
+        int years = currentDate.getYear() - registerDate.getYear();
+        int months = currentDate.getMonthValue() - registerDate.getMonthValue();
+        int days = currentDate.getDayOfMonth() - registerDate.getDayOfMonth();
+        long monthDiffLong = years * 12L + months;
+        if (days < 0) {
+            monthDiffLong--;
         }
-    }
-
-    public static String replacingStrings(String code) {
-        if (StringUtils.isEmpty(code)) {
-            return code;
-        }
-        if (code.length() > 4) {
-            return code.substring(code.length() - 4);
+        // 获取车辆种类
+        String vehicleType = carInfoVo.getCarKindCode();
+        // 获取车辆能源种类
+        String energyType = carInfoVo.getEnergyTypeCode();
+        // 获取车辆用途
+        String vehicleUse = carInfoVo.getVehicleUseCode();
+        // 新车购置价
+        BigDecimal purchasePrice = new BigDecimal(vehicle.getVehiclePrice());
+        // 匹配折旧率
+        BigDecimal rate = CarActualValueEnum.matchDepreciationRate(energyType, vehicleUse, vehicleType, purchasePrice);
+        // 车辆实际价值 = 新车购置价 - 新车购置价*月折旧率*折旧月数
+        carActualValue = purchasePrice.subtract(purchasePrice.multiply(rate).multiply(new BigDecimal(monthDiffLong)));
+        // 如果折旧价<新车购置价*20%,那么折旧价 = 新车购置价*20%
+        if (carActualValue.compareTo(purchasePrice.multiply(new BigDecimal("0.2"))) < 0) {
+            carActualValue = purchasePrice.multiply(new BigDecimal("0.2"));
         }
-        return code
-                .replace("3", "j")
-                .replace("0", "o");
+        return carActualValue;
     }
-
     /**
-     * 处理验车码
-     * @param insurePremiumRequest
-     * @param insurePremiumResponse
-     * @param httpHeaders
+     * 重复报价提取终保日期
+     * @param response
+     * @return
      */
-    private void codeRecognitionHandler(InsurePremiumRequest insurePremiumRequest,
-                                        InsurePremiumResponse insurePremiumResponse,
-                                        HttpHeaders httpHeaders,String url) {
-        InsurePremiumResponse.BiContractDTO biContract = insurePremiumResponse.getBiContract();
-        InsurePremiumResponse.CiContractDTO ciContract = insurePremiumResponse.getCiContract();
-
-        Boolean biBoo = false;
-        Boolean ciBoo = false;
-        if(Objects.nonNull(biContract)){
-            Double biTotalPremium = biContract.getContractMain().getTotalPremium();
-            if(Objects.isNull(biTotalPremium)){
-                biBoo = true;
-            }
+    private String extractEndDate(PremiumCalculationResponse response) {
+        String targetText = response.getHead().getErrorMessage();
+        Pattern pattern = Pattern.compile("终保日期 (\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2})");
+        Matcher matcher = pattern.matcher(targetText);
+        if (matcher.find()) {
+            String dateStr = matcher.group(1);
+            return dateStr + ":00";
         }
-        if(Objects.nonNull(ciContract)){
-            Double ciTotalPremium = ciContract.getContractMain().getTotalPremium();
-            if(Objects.isNull(ciTotalPremium)){
-                ciBoo = true;
-            }
-        }
-
-        if (biBoo || ciBoo) {
-            this.platRepetition(insurePremiumResponse,insurePremiumRequest);
-            insurePremiumResponse = chengTaiRequestApiComponent.calculatePremium(insurePremiumRequest,httpHeaders,chengTaiApiProperties.getPartnerCode(),url);
-        }
-
+        return null;
     }
 
     /**
-     * 转保车处理
-     * @param response
-     * @param insurePremiumRequest
+     * 重复报价
+     * @param premiumCalculationRequest
+     * @return
      */
-    private void platRepetition(InsurePremiumResponse response, InsurePremiumRequest insurePremiumRequest) {
-        String jqImageStr = null;
-        String syImageStr = null;
-        insurePremiumRequest.setOrderId(response.getOrderId());
-        InsurePremiumResponse.CiContractDTO ciContract = response.getCiContract();
-        InsurePremiumResponse.BiContractDTO biContract = response.getBiContract();
-        //交强险
-        if (Objects.nonNull(ciContract)) {
-            jqImageStr = ciContract.getPlatFormMessage().getQuestion();
-        }
-        //商业险
-        if (Objects.nonNull(biContract)) {
-            syImageStr = biContract.getPlatFormMessage().getQuestion();
-        }
-        Map<String, String> bodyMap = new HashMap<>();
-        bodyMap.put("jqImage", StringUtils.toString(jqImageStr, ""));
-        bodyMap.put("syImage", StringUtils.toString(syImageStr, ""));
-        String sendBody = JSON.toJSONString(bodyMap);
-        String ocrStr = HttpUtil.sendPost("http://39.98.41.104:8088/getres", sendBody);
-        CheckCodeResp resp = JSON.parseObject(ocrStr).toJavaObject(CheckCodeResp.class);
-
-        if(Objects.nonNull(ciContract)){
-            InsurePremiumRequest.CiContractDTO ciContractReq = insurePremiumRequest.getCiContract();
-            InsurePremiumRequest.CiContractDTO.PlatFormMessageDTO platFormMessage = ciContractReq.getPlatFormMessage();
-            if(Objects.isNull(platFormMessage)){
-                platFormMessage = new InsurePremiumRequest.CiContractDTO.PlatFormMessageDTO();
+    private PremiumCalculationResponse getResponse(PremiumCalculationRequest premiumCalculationRequest, QuoteVo quoteVo,BigDecimal carActualValue,
+                    ChengTaiApiParameters parameters, CarModelQueryResponse.vehicle vehicle, String apiUrl) throws Exception {
+
+        PremiumCalculationResponse premiumCalculationResponse = chengTaiRequestApiComponent.premiumCalculation(premiumCalculationRequest,apiUrl);
+        if (!premiumCalculationResponse.getHead().getErrorMessage().equals("成功")) {
+            /**
+             * 重复投保
+             */
+            // 获取新起保时间 终保时间
+            final String startDate = extractEndDate(premiumCalculationResponse);
+            String endDate;
+            if (startDate != null){
+                if (startDate.endsWith("00:00:00")) {
+                    endDate = TimeProcessing.minusOneSecondAfterYear(startDate);
+                } else {
+                    endDate = TimeProcessing.plusOneYearToString(startDate);
+                }
+                final String formatStartDate = startDate;
+                final String formatEndDate = endDate;
+                PremiumCalculationResponse finalPremiumCalculationResponse = premiumCalculationResponse;
+                if (quoteVo.getCiRiskInfoVo() != null && finalPremiumCalculationResponse.getHead().getErrorMessage().contains("交强")) {
+                    quoteVo.getCiRiskInfoVo().setStartDate(startDate);
+                    quoteVo.getCiRiskInfoVo().setEndDate(endDate);
+                }
+                // 处理商业险的即时起保
+                if (quoteVo.getBiRiskInfoVo() != null) {
+                    if (!formatStartDate.endsWith("00:00:00")) {
+                        String start, end = "";
+                        end = TimeProcessing.tomorrowDateTime(formatEndDate);
+                        quoteVo.getBiRiskInfoVo().setStartDate(formatStartDate);
+                        quoteVo.getBiRiskInfoVo().setEndDate(end);
+                    } else {
+                        quoteVo.getBiRiskInfoVo().setStartDate(startDate);
+                        quoteVo.getBiRiskInfoVo().setEndDate(endDate);
+                    }
+                }
+                premiumCalculationRequest = new PremiumCalculationRequest(quoteVo,carActualValue,parameters,vehicle,null);
+                premiumCalculationResponse = chengTaiRequestApiComponent.premiumCalculation(premiumCalculationRequest, apiUrl);
             }
-            BeanUtils.copyProperties(ciContract.getPlatFormMessage(), platFormMessage);
-            platFormMessage.setAnswer(resp.jqImageCode);
-            ciContractReq.setPlatFormMessage(platFormMessage);
-            insurePremiumRequest.setCiContract(ciContractReq);
         }
-        if(Objects.nonNull(biContract)){
-            InsurePremiumRequest.BiContractDTO biContractReq = insurePremiumRequest.getBiContract();
-            InsurePremiumRequest.BiContractDTO.PlatFormMessageDTO platFormMessage = biContractReq.getPlatFormMessage();
-            if(Objects.isNull(platFormMessage)){
-                platFormMessage = new InsurePremiumRequest.BiContractDTO.PlatFormMessageDTO();
+        // 转保车处理
+        String ciQuestion = premiumCalculationResponse.getCompRisk() != null
+                ? premiumCalculationResponse.getCompRisk().getBasePart().getQuestion()
+                : null;
+        String biQuestion = premiumCalculationResponse.getCommRisk() != null
+                ? premiumCalculationResponse.getCommRisk().getBasePart().getQuestion()
+                : null;
+        // 订单号
+        if (ciQuestion!= null || biQuestion != null) {
+            String orderNumber = premiumCalculationResponse.getCompRisk() != null
+                    ? premiumCalculationResponse.getCompRisk().getFtrno().getOrderNumber()
+                    : premiumCalculationResponse.getCommRisk().getFtrno().getOrderNumber();
+            Map<String, String> bodyMap = new HashMap<>();
+            if (Objects.nonNull(ciQuestion)) {
+                bodyMap.put("jqImage", ciQuestion);
             }
-            BeanUtils.copyProperties(biContract.getPlatFormMessage(), platFormMessage);
-            platFormMessage.setAnswer(resp.syImageCode);
-            biContractReq.setPlatFormMessage(platFormMessage);
-            insurePremiumRequest.setBiContract(biContractReq);
-        }
-    }
-
-    /**
-     * 处理重复投保
-     *
-     * @param insurePremiumRequest
-     * @param insurePremiumResponse
-     * @param httpHeaders
-     */
-    private void repeatCoverhandler(InsurePremiumRequest insurePremiumRequest,
-                                    InsurePremiumResponse insurePremiumResponse,
-                                    HttpHeaders httpHeaders,String url) {
-        if(!ResponseCode.R_000.getCode().equals(insurePremiumResponse.getCode()) && insurePremiumResponse.getMessage().contains("重复投保")){
-            String err = insurePremiumResponse.getMessage();
-            List<String> errList = Arrays.asList(err.split("。"));
-            if(CollUtil.isEmpty(errList)){ return; }
-            errList.stream().forEach(a ->{
-                if (a.contains("交强险平台") && a.contains("重复投保")){
-                    InsurePremiumRequest.CiContractDTO ciContract = insurePremiumRequest.getCiContract();
-                    InsurePremiumRequest.CiContractDTO.ContractMainDTO contractMain = ciContract.getContractMain();
-                    Map<String, String> timeMap = this.timeHandler(a, contractMain.getExpiryDate());
-                    contractMain.setValidDate(timeMap.get("startTime"));
-                    contractMain.setExpiryDate(timeMap.get("endTime"));
-                    ciContract.setContractMain(contractMain);
-                    insurePremiumRequest.setCiContract(ciContract);
+            if (Objects.nonNull(biQuestion)) {
+                bodyMap.put("syImage", biQuestion);
+            }
+            String sendBody = JSON.toJSONString(bodyMap);
+            if (!"{}".equals(sendBody)) {
+                String ocrStr = HttpUtil.sendPost("http://39.98.41.104:8088/getres", sendBody);
+                CheckCodeResp resp = JSONUtil.toBean(ocrStr, CheckCodeResp.class);
+                if(StringUtils.isNotEmpty(resp.getJqImageCode())){
+                     quoteVo.setCiTransferCode(resp.getJqImageCode().replace("0", "O"));
                 }
-                if (a.contains("商业险险平台") && a.contains("重复投保")){
-                    InsurePremiumRequest.BiContractDTO biContract = insurePremiumRequest.getBiContract();
-                    InsurePremiumRequest.BiContractDTO.ContractMainDTO contractMain = biContract.getContractMain();
-                    Map<String, String> timeMap = this.timeHandler(a, contractMain.getExpiryDate());
-                    contractMain.setValidDate(timeMap.get("startTime"));
-                    contractMain.setExpiryDate(timeMap.get("endTime"));
-                    biContract.setContractMain(contractMain);
-                    insurePremiumRequest.setBiContract(biContract);
+                if(StringUtils.isNotEmpty(resp.getSyImageCode())){
+                      quoteVo.setBiTransferCode(resp.getSyImageCode().replace("0", "O"));
                 }
-            });
-            insurePremiumResponse = chengTaiRequestApiComponent.calculatePremium(insurePremiumRequest,httpHeaders,chengTaiApiProperties.getPartnerCode(),url);
-        }
-    }
-
-    /**
-     * 重复投保时间处理再报价
-     * @param errStr
-     * @param expiryDate
-     * @return
-     */
-    private Map<String, String> timeHandler(String errStr, String expiryDate) {
-        // 定义时间格式
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
-        LocalDateTime dateTime = null;
-        if(errStr.contains("终保日期")){
-            String startTime = errStr.substring(errStr.indexOf("终保日期")+5,errStr.indexOf("终保日期")+21);
-            // 解析原始时间
-            dateTime =  LocalDateTime.parse(startTime, formatter1);
-        }else{
-            String startTime = expiryDate;
-            // 解析原始时间
-            dateTime = LocalDateTime.parse(startTime, formatter);
-        }
-        LocalDateTime tomorrowMidnight = dateTime;
-        //判断是否是整点  如果是整点则不进行明天的零点操作
-        if(dateTime.getHour() != 0 || dateTime.getMinute() != 0 || dateTime.getSecond() != 0)
-        {
-            tomorrowMidnight = dateTime.toLocalDate().plusDays(1).atStartOfDay();
+                premiumCalculationRequest = new PremiumCalculationRequest(quoteVo,carActualValue,parameters,vehicle,orderNumber);
+                premiumCalculationResponse = chengTaiRequestApiComponent.premiumCalculation(premiumCalculationRequest, apiUrl);
+            }
         }
-        LocalDateTime end = tomorrowMidnight.plusYears(1L);
-        String startTime = DateTimeUtil.format(tomorrowMidnight, DateTimeUtil.DATETIME_PATTERN);
-        LocalDateTime localDateTime = end.minusSeconds(1L);
-        String endTime = DateTimeUtil.format(localDateTime, DateTimeUtil.DATETIME_PATTERN);
-        Map<String, String> timeMap = new HashMap<String, String>();
-        timeMap.put("startTime", startTime);
-        timeMap.put("endTime", endTime);
-        return timeMap;
+        return premiumCalculationResponse;
     }
 
     @Override
-    public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) {
+    public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) throws Exception {
         OrderBase orderBase = underwritingVo.getOrder();
-        String url = getApiUrl(orderBase.getInsuranceCompanyId());
-        ChengTaiApiOrder chengTaiApiOrder = chengTaiCrawlerOrderService.getById(orderBase.getOrdersNo());
+        String apiUrl = getApiUrl(orderBase.getInsuranceCompanyId());
         // 配置信息
-        ChengTaiApiConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ChengTaiApiConfigureParameters.class, orderBase
+        ChengTaiApiParameters parameters = ConfigureParametersConversion.conversionEntity(ChengTaiApiParameters.class, orderBase
                 .getAttributionInformationVo()
                 .getConfigInfo());
-        HttpHeaders httpHeaders = chengTaiRequestApiComponent.getHttpHeaders(parameters,url);
+        // 车型
+        CarInfoVo carInfoVo = new CarInfoVo(underwritingVo.getInsOrdersCarInfo());
+        CarModelQueryRequest carInfoRequest = new CarModelQueryRequest(underwritingVo.getInsOrdersCarInfo().getBrandName());
+        CarModelQueryResponse carModelQueryResponse = chengTaiRequestApiComponent.carModelQuery(carInfoRequest,apiUrl);
+        // 过滤车型
+        CarModelQueryResponse.vehicle vehicle = CarModelsFilterUtils.to(carModelQueryResponse.getVehicleList(), carInfoVo);
+
         UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
-        // 投保保存
-        SubmitVerifyRequest submitVerifyRequest = new SubmitVerifyRequest(chengTaiApiProperties.getPartnerCode(),
-                underwritingVo, chengTaiApiOrder);
-        SubmitVerifyResponse submitVerifyResponse = chengTaiRequestApiComponent.underwritingSave(submitVerifyRequest,httpHeaders,chengTaiApiProperties.getPartnerCode(),url);
         // 核保
-        UnderwritingRequest underwritingRequest = new UnderwritingRequest(chengTaiApiProperties.getPartnerCode(),underwritingVo.getOrder().getCompanyOrderNo());
-        UnderwritingResponse underwritingResponse = chengTaiRequestApiComponent.underwriting(underwritingRequest,httpHeaders,chengTaiApiProperties.getPartnerCode(),url);
-        if(OrderStatusEnum.A2000.getCode().equals(underwritingResponse.getFinalRuleResult())){
-            // 查询投保结果
-            SubmitVerifyResultRequest submitVerifyResultRequest = new SubmitVerifyResultRequest(chengTaiApiProperties.getPartnerCode(),submitVerifyResponse.getOrderId());
-            SubmitVerifyResultResponse submitVerifyResultResponse = chengTaiRequestApiComponent.underwritingSaveResult(submitVerifyResultRequest,httpHeaders,chengTaiApiProperties.getPartnerCode(),url);
-            List<SubmitVerifyResultResponse.DataDTO> data = submitVerifyResultResponse.getData();
-            if(CollUtil.isNotEmpty(data)){
-                for (SubmitVerifyResultResponse.DataDTO dataDTO : data) {
-                    if(RiskCodeEnum.R1002.getCode().equals(dataDTO.getRiskCode())){
-                        underwritingResultsVo.setJqPolicyno(dataDTO.getPolicyCode());
-                        underwritingResultsVo.setJqApplyNo(dataDTO.getInsCode());
-                    }
-                    if (RiskCodeEnum.R0821.getCode().equals(dataDTO.getRiskCode())) {
-                        underwritingResultsVo.setSyPolicyno(dataDTO.getPolicyCode());
-                        underwritingResultsVo.setSyApplyNo(dataDTO.getInsCode());
-                    }
-                    if (RiskCodeEnum.R1116.getCode().equals(dataDTO.getRiskCode())) {
-                        underwritingResultsVo.setJyPolicyno(dataDTO.getPolicyCode());
-                        underwritingResultsVo.setJyApplyNo(dataDTO.getInsCode());
-                    }
-                }
-            }
+        SubmitRequest submitRequest = new SubmitRequest(underwritingVo,vehicle, parameters);
+        SubmitResponse submitResponse = chengTaiRequestApiComponent.submit(submitRequest,apiUrl);
+        if (!submitResponse.getHead().getErrorMessage().equals("成功") || !submitResponse.getHead().getResponseCode().equals("0000")) {
+            underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
+            underwritingResultsVo.setUnderwritingResult(submitResponse.getHead().getErrorMessage());
+            return underwritingResultsVo;
+        }
+        // 支付链接参数组装
+        PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
+        paymentLinkVo.setOrder(underwritingVo.getOrder());
+        paymentLinkVo.setInsOrdersAccidentalDriving(underwritingVo.getInsOrdersAccidentalDriving());
+        paymentLinkVo.setInsOrders(underwritingVo.getInsOrders());
+        paymentLinkVo.setInsOrdersCosts(underwritingVo.getInsOrdersCosts());
+        paymentLinkVo.setInsOrdersPolicy(underwritingVo.getPolicy());
+        // 双险审核通过
+        if (submitResponse.getProposal().getUnderWriteInd().equals("1")
+                || submitResponse.getProposal().getUnderWriteInd().equals("3")
+                || submitResponse.getProposal().getUnderWriteInd().equals("5")) {
             underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
+            underwritingResultsVo.setJqApplyNo(submitResponse.getProposal().getCompProposalNo());
+            underwritingResultsVo.setSyApplyNo(submitResponse.getProposal().getCommProposalNo());
+            if (submitResponse.getProposal().getNoCarProposalNo() != null) {
+               underwritingResultsVo.setJyApplyNo(submitResponse.getProposal().getNoCarProposalNo());
+            }
             // 获取支付链接
-            PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
-            paymentLinkVo.setOrder(underwritingVo.getOrder());
             PaymentLinkResultsVo paymentLinkResultsVo = getPaymentLink(paymentLinkVo);
             underwritingResultsVo.setPaymentLink(paymentLinkResultsVo.getPaymentLink());
-            underwritingResultsVo.setCompanyOrderNo(orderBase.getOrdersNo());
-        }else{
-            if(OrderStatusEnum.A2002.getCode().equals(underwritingResponse.getFinalRuleResult())){
-                underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.STAFF_PROCESS);
-                if(CollUtil.isNotEmpty(underwritingResponse.getData())){
-                    underwritingResultsVo.setUnderwritingResult(underwritingResponse.getData().get(0).getReasondescription());
-                }else{
-                    underwritingResultsVo.setUnderwritingResult("人工处理");
-                }
-            } else {
-                underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
-                if(CollUtil.isNotEmpty(underwritingResponse.getData())){
-                    underwritingResultsVo.setUnderwritingResult(underwritingResponse.getData().get(0).getReasondescription());
-                }else{
-                    OrderStatusEnum orderStatusEnum = Enum.valueOf(OrderStatusEnum.class, underwritingResponse.getFinalRuleResult());
-                    underwritingResultsVo.setUnderwritingResult(orderStatusEnum.getDesc());
-                }
+        }
+        // 人工核保
+        if (submitResponse.getProposal().getUnderWriteInd().equals("8")
+                || submitResponse.getProposal().getUnderWriteInd().equals("9")) {
+            underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.WAIT_AUDIT);
+            underwritingResultsVo.setJqApplyNo(submitResponse.getProposal().getCompProposalNo());
+            underwritingResultsVo.setSyApplyNo(submitResponse.getProposal().getCommProposalNo());
+            if (submitResponse.getProposal().getNoCarProposalNo() != null) {
+                underwritingResultsVo.setJyApplyNo(submitResponse.getProposal().getNoCarProposalNo());
             }
+            // 获取支付链接
+            String message = submitResponse.getHead().getErrorMessage();
+            underwritingResultsVo.setUnderwritingResult(message);
+            PaymentLinkResultsVo paymentLinkResultsVo = getPaymentLink(paymentLinkVo);
+            underwritingResultsVo.setPaymentLink(paymentLinkResultsVo.getPaymentLink());
         }
         return underwritingResultsVo;
     }
 
-    @Override
-    public PaymentLinkResultsVo getPaymentLink(PaymentLinkVo paymentLinkVo) {
-        ChengTaiApiOrder chengTaiApiOrder = chengTaiCrawlerOrderService.getById(paymentLinkVo.getOrder().getOrdersNo());
-        // 配置信息
-        String url = getApiUrl(paymentLinkVo.getOrder().getInsuranceCompanyId());
-        ChengTaiApiConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ChengTaiApiConfigureParameters.class, paymentLinkVo.getOrder()
-                .getAttributionInformationVo()
-                .getConfigInfo());
-        HttpHeaders httpHeaders = chengTaiRequestApiComponent.getHttpHeaders(parameters,url);
-
-        // 获取支付链接
-        PayUrlRequest payUrlRequest = new PayUrlRequest(chengTaiApiProperties.getPartnerCode(),chengTaiApiOrder.getOrderNo());
-        PayUrlResponse payUrlResponse = chengTaiRequestApiComponent.getPayUrl(payUrlRequest, httpHeaders,chengTaiApiProperties.getPartnerCode(),url);
-        PaymentLinkResultsVo paymentLinkResultsVo = new PaymentLinkResultsVo();
-        paymentLinkResultsVo.setPaymentLink(payUrlResponse.getSmsUrl());
-        return paymentLinkResultsVo;
+    public PaymentLinkResultsVo getPaymentLink(PaymentLinkVo paymentLinkVo) throws Exception {
+        String apiUrl = getApiUrl(paymentLinkVo.getOrder().getInsuranceCompanyId());
+        PaymentRequest paymentRequest = new PaymentRequest(paymentLinkVo);
+        String payLink = chengTaiRequestApiComponent.payment(paymentRequest,apiUrl);
+        return new PaymentLinkResultsVo(true,payLink,null);
     }
 
     @Override
     public void uploadImage(InsuranceUploadImageVo insuranceUploadImageVo) {
+        String apiUrl = getApiUrl(insuranceUploadImageVo.getOrder().getInsuranceCompanyId());
         OrderBase orderBase = insuranceUploadImageVo.getOrder();
-        String url = getApiUrl(orderBase.getInsuranceCompanyId());
-        ChengTaiApiOrder chengTaiApiOrder = chengTaiCrawlerOrderService.getById(orderBase.getOrdersNo());
-        // 配置信息
-        ChengTaiApiConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ChengTaiApiConfigureParameters.class, orderBase
+        ChengTaiApiParameters parameters = ConfigureParametersConversion.conversionEntity(ChengTaiApiParameters.class, orderBase
                 .getAttributionInformationVo()
                 .getConfigInfo());
-        HttpHeaders httpHeaders = chengTaiRequestApiComponent.getHttpHeaders(parameters,url);
-
-        // 上传影像信息
+        String orderNumber = orderBase.getCompanyOrderNo();
         List<InsuranceImageVo> imageVoList = insuranceUploadImageVo.getImageVoList();
-        imageVoList.forEach(imageVo -> {
-            UploadFileRequest uploadFileRequest = new UploadFileRequest(imageVo, chengTaiApiOrder.getOrderNo(), chengTaiApiProperties.getPartnerCode());
-            try {
-                UploadFileResponse uploadFileResponse = chengTaiRequestApiComponent.submitImage(uploadFileRequest,httpHeaders,chengTaiApiProperties.getPartnerCode(),url);
-            } catch (Exception e) {
-                throw new SystemException("上传途中异常,请重新上传或截取图片上传");
+        for (InsuranceImageVo imageVo : imageVoList) {
+            for (InsuranceImageVo.ImageDTO insTaskImagesBase64 : imageVo.getImageBase64List()) {
+
+                String upLoadResponse;
+                SysUploadFiles sysUploadFiles = platformClient.getUploadFile(insTaskImagesBase64.getImageId());
+                String fileName = sysUploadFiles.getFileName();
+                InputStream inputStream = minioUtils.getObject("jzg", fileName);
+                byte[] fileBytes = null;
+                try {
+                    fileBytes = IOUtils.toByteArray(inputStream);
+                } catch (IOException e) {
+                    throw new RuntimeException(e);
+                }
+                insTaskImagesBase64.setImageBase64Str(Base64.getEncoder().encodeToString(fileBytes));
+                UpLoadRequest upLoadRequest = new UpLoadRequest(parameters, orderNumber, imageVo,insTaskImagesBase64);
+                upLoadResponse  = chengTaiRequestApiComponent.upLoad(upLoadRequest,apiUrl);
+                if (!"影像上传成功".equals(upLoadResponse)) {
+                    throw new SystemException(upLoadResponse);
+               }
             }
-        });
+        }
     }
 
     @Override
@@ -414,101 +332,105 @@ public class ChengTaiApiRequestImpl implements ChengTaiApiRequest {
     @Override
     public DownloadPolicyResultVo downloadPolicy(DownloadPolicyVo downloadPolicyVo) {
         // 配置信息
-        String url = getApiUrl(downloadPolicyVo.getOrder().getInsuranceCompanyId());
-        ChengTaiApiConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ChengTaiApiConfigureParameters.class, downloadPolicyVo.getOrder()
+        String apiUrl = getApiUrl(downloadPolicyVo.getOrder().getInsuranceCompanyId());
+        ChengTaiApiParameters parameters = ConfigureParametersConversion.conversionEntity(ChengTaiApiParameters.class, downloadPolicyVo.getOrder()
                 .getAttributionInformationVo()
                 .getConfigInfo());
-        HttpHeaders httpHeaders = chengTaiRequestApiComponent.getHttpHeaders(parameters,url);
-
+        PolicyElectronicRequest policyElectronicRequest = new PolicyElectronicRequest(parameters, downloadPolicyVo.getOrder());
+        PolicyElectronicResponse policyElectronicResponse = chengTaiRequestApiComponent.policyElectronic(policyElectronicRequest,apiUrl);
+        PolicyElectronicResponse.ResponseBody.ElectronicPolicy electronicPolicy = policyElectronicResponse.getResponseBody().getElectronicPolicy();
         DownloadPolicyResultVo downloadPolicyResultVo = new DownloadPolicyResultVo();
         String jqPolicyNo = downloadPolicyVo.getPolicie().getJqPolicyNo();
         if(Objects.nonNull(jqPolicyNo)) {
-            queryPolicy(jqPolicyNo, chengTaiApiProperties.getPartnerCode(), httpHeaders,downloadPolicyResultVo,url);
+            downloadPolicyResultVo.setJqUrl(electronicPolicy.getCiDownLoad());
+            downloadPolicyResultVo.setJqFlagUrl(electronicPolicy.getBzDownLoad());
         }
         String syPolicyNo = downloadPolicyVo.getPolicie().getSyPolicyNo();
         if(Objects.nonNull(syPolicyNo)) {
-            queryPolicy(syPolicyNo,chengTaiApiProperties.getPartnerCode(), httpHeaders,downloadPolicyResultVo,url);
+            downloadPolicyResultVo.setSyUrl(electronicPolicy.getBiDownLoad());
         }
         String jyPolicyNo = downloadPolicyVo.getPolicie().getJyPolicyNo();
         if(Objects.nonNull(jyPolicyNo)) {
-            queryPolicy(jyPolicyNo,chengTaiApiProperties.getPartnerCode(), httpHeaders,downloadPolicyResultVo,url);
-        }
-
-        return downloadPolicyResultVo;
-    }
-
-    /**
-     * 查询保单
-     * @param policyNo
-     * @param partnerCode
-     */
-    private void queryPolicy(String policyNo,String partnerCode,HttpHeaders httpHeaders, DownloadPolicyResultVo downloadPolicyResultVo,String url){
-        DownLoadDocumentUrlRequest request = new DownLoadDocumentUrlRequest(chengTaiApiProperties.getPartnerCode(),policyNo);
-        DownLoadDocumentUrlResponse response = chengTaiRequestApiComponent.downLoadDocumentUrl(request, httpHeaders,partnerCode,url);
-        if(ResponseCode.R_000.getCode().equals(response.getCode())){
-            if (StringUtils.isNotEmpty(response.getCiDownLoad())) {
-                String jqUrl = response.getCiDownLoad();
-                downloadPolicyResultVo.setJqUrl(jqUrl);
-            }
-            if (StringUtils.isNotEmpty(response.getBiDownLoad())) {
-                String syUrl = response.getCiDownLoad();
-                downloadPolicyResultVo.setSyUrl(syUrl);
-            }
-            if (StringUtils.isNotEmpty(response.getAhiDownLoad())) {
-                String jyUrl = response.getAhiDownLoad();
-                downloadPolicyResultVo.setJyUrl(jyUrl);
+            FcPolicyElectronicRequest fcPolicyElectronicRequest = new FcPolicyElectronicRequest(parameters, jyPolicyNo);
+            FcPolicyElectronicResponse fcPolicyElectronicResponse = chengTaiRequestApiComponent.fcPolicyElectronic(fcPolicyElectronicRequest,apiUrl);
+            if (fcPolicyElectronicResponse.getHead().getResCode().equals("0000")) {
+                downloadPolicyResultVo.setJyUrl(fcPolicyElectronicResponse.getBody().getPolicyUrl());
+            } else {
+                throw new SystemException(fcPolicyElectronicResponse.getHead().getResMsg());
             }
-        } else {
-            throw new SystemException(response.message);
         }
+        return downloadPolicyResultVo;
     }
-
-
     @Override
-    public OrderStatusResultVo queryOrderState(OrderStatusVo orderStatusVo) {
+    public OrderStatusResultVo queryOrderState(OrderStatusVo orderStatusVo) throws Exception {
         OrderStatusResultVo orderStatusResultVo = new OrderStatusResultVo();
+        StringBuilder errorMessage = new StringBuilder();
         // 配置信息
-        String url = getApiUrl(orderStatusVo.getOrder().getInsuranceCompanyId());
-        ChengTaiApiConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ChengTaiApiConfigureParameters.class, orderStatusVo.getOrder()
+        String apiUrl = getApiUrl(orderStatusVo.getOrder().getInsuranceCompanyId());
+        ChengTaiApiParameters parameters = ConfigureParametersConversion.conversionEntity(ChengTaiApiParameters.class, orderStatusVo.getOrder()
                 .getAttributionInformationVo()
                 .getConfigInfo());
-        HttpHeaders httpHeaders = chengTaiRequestApiComponent.getHttpHeaders(parameters,url);
-
-        SubmitVerifyResultRequest submitVerifyResultRequest = new SubmitVerifyResultRequest(chengTaiApiProperties.getPartnerCode(),orderStatusVo.getOrder().getCompanyOrderNo());
-        SubmitVerifyResultResponse submitVerifyResultResponse = chengTaiRequestApiComponent.auditSaveResult(submitVerifyResultRequest,httpHeaders,chengTaiApiProperties.getPartnerCode(),url);
 
-        // 查询核保结果
-        UnderwritingResultRequest resultRequest = new UnderwritingResultRequest(chengTaiApiProperties.getPartnerCode(),orderStatusVo.getOrder().getCompanyOrderNo());
-        UnderwritingResultResponse underwritingResultResponse = chengTaiRequestApiComponent.auditResult(resultRequest,httpHeaders,chengTaiApiProperties.getPartnerCode(),url);
-        if (OrderStatusEnum.A7005.getCode().equals(submitVerifyResultResponse.getPolicyProsts())
-                || OrderStatusEnum.A7004.getCode().equals(submitVerifyResultResponse.getPolicyProsts())) {
-            // 获取支付链接
+        PolicyStatusRequest policyStatusRequest = new PolicyStatusRequest(parameters,orderStatusVo.getOrder().getCompanyOrderNo());
+        PolicyStatusResponse policyStatusResponse = chengTaiRequestApiComponent.policyStatus(policyStatusRequest,apiUrl);
+        if (policyStatusResponse.getResponseHead().getResponseCode().equals("0000")) {
+            PolicyStatusResponse.ResponseBody.EBCallbackData ebCallbackData = null;
+            PolicyStatusResponse.ResponseBody.EBCallbackData jqEbCallbackData =
+                    policyStatusResponse.getResponseBody().getEBCallbackData().stream().filter(item -> item.getRiskCode().equals("0801")).findFirst().orElse(null);
+            PolicyStatusResponse.ResponseBody.EBCallbackData syEbCallbackData =
+                    policyStatusResponse.getResponseBody().getEBCallbackData().stream().filter(item -> item.getRiskCode().equals("0808")).findFirst().orElse(null);
+            String jyPolicyNo = policyStatusResponse.getResponseBody().getNvhlPolicyNo();
+            if (jqEbCallbackData != null) {
+                ebCallbackData = jqEbCallbackData;
+            } else {
+                ebCallbackData = syEbCallbackData;
+            }
+            // 支付链接参数组装
             PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
             paymentLinkVo.setOrder(orderStatusVo.getOrder());
-            PaymentLinkResultsVo paymentLinkResultsVo = getPaymentLink(paymentLinkVo);
-            orderStatusResultVo.setPaymentLink(paymentLinkResultsVo.getPaymentLink());
-
-            List<SubmitVerifyResultResponse.DataDTO> data = submitVerifyResultResponse.getData();
-            if(CollUtil.isNotEmpty(data)){
-                for (SubmitVerifyResultResponse.DataDTO dataDTO : data) {
-                    if(RiskCodeEnum.R1002.getCode().equals(dataDTO.getRiskCode())){
-                        orderStatusResultVo.setJqPolicyno(dataDTO.getPolicyCode());
-                        orderStatusResultVo.setJqApplyNo(dataDTO.getInsCode());
-                    }
-                    if (RiskCodeEnum.R0821.getCode().equals(dataDTO.getRiskCode())) {
-                        orderStatusResultVo.setSyPolicyno(dataDTO.getPolicyCode());
-                        orderStatusResultVo.setSyApplyNo(dataDTO.getInsCode());
-                    }
-                    if (RiskCodeEnum.R1116.getCode().equals(dataDTO.getRiskCode())) {
-                        orderStatusResultVo.setJyPolicyno(dataDTO.getPolicyCode());
-                        orderStatusResultVo.setJyApplyNo(dataDTO.getInsCode());
-                    }
+            paymentLinkVo.setInsOrdersAccidentalDriving(orderStatusVo.getInsOrdersAccidentalDriving());
+            paymentLinkVo.setInsOrders(orderStatusVo.getInsOrders());
+            paymentLinkVo.setInsOrdersCosts(orderStatusVo.getInsOrdersCosts());
+            paymentLinkVo.setInsOrdersPolicy(orderStatusVo.getInsOrdersPolicy());
+            // 核保通过
+            if (ebCallbackData.getUnderWriteInd().equals("1")
+                    || ebCallbackData.getUnderWriteInd().equals("3")
+                    || ebCallbackData.getUnderWriteInd().equals("5")) {
+                orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.PAY_PENDING);
+                PaymentLinkResultsVo paymentLinkResultsVo = getPaymentLink(paymentLinkVo);
+                orderStatusResultVo.setPaymentLink(paymentLinkResultsVo.getPaymentLink());
+                if (jqEbCallbackData != null) {
+                    orderStatusResultVo.setJqApplyNo(jqEbCallbackData.getProposalNo());
+                }
+                if (syEbCallbackData != null) {
+                    orderStatusResultVo.setSyApplyNo(syEbCallbackData.getProposalNo());
                 }
             }
-        }else{
-            //失败原因
+            // 人工核保
+            if (ebCallbackData.getUnderWriteInd().equals("8") || ebCallbackData.getUnderWriteInd().equals("9")) {
+                orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.STAFF_PROCESS);
+            }
+            // 已承保
+            if (ebCallbackData.getUnderWriteInd().equals("6")) {
+                orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.UNDERWRITED);
+                if (jqEbCallbackData != null) {
+                    orderStatusResultVo.setJqPolicyno(jqEbCallbackData.getPolicyNo());
+                }
+                if (syEbCallbackData != null) {
+                    orderStatusResultVo.setSyPolicyno(syEbCallbackData.getPolicyNo());
+                }
+                if (jyPolicyNo != null) {
+                    orderStatusResultVo.setJyPolicyno(jyPolicyNo);
+                }
+            }
+            // 下发修改 拒保
+            if (ebCallbackData.getUnderWriteInd().equals("2") || ebCallbackData.getUnderWriteInd().equals("4")) {
+                errorMessage.append(ebCallbackData.getOperateText());
+            }
+        }
+        if (!errorMessage.toString().equals("")) {
+            orderStatusResultVo.setErrorMsg(errorMessage.toString());
             orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.AUDIT_FAIL);
-            orderStatusResultVo.setErrorMsg(submitVerifyResultResponse.getMessage());
         }
         return orderStatusResultVo;
     }

+ 6 - 18
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/service/impl/ChengTaiCrawlerOrderServiceImpl.java

@@ -3,7 +3,7 @@ package com.jzg.quotation.chengtai.api.service.impl;
 import cn.hutool.core.collection.CollUtil;
 import com.alibaba.fastjson.JSON;
 import com.jzg.quotation.chengtai.api.entity.po.ChengTaiApiOrder;
-import com.jzg.quotation.chengtai.api.entity.response.InsurePremiumResponse;
+import com.jzg.quotation.chengtai.api.entity.response.PremiumCalculationResponse;
 import com.jzg.quotation.chengtai.api.repository.ChengTaiApiOrderRepository;
 import com.jzg.quotation.chengtai.api.service.ChengTaiCrawlerOrderService;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
@@ -22,26 +22,14 @@ public class ChengTaiCrawlerOrderServiceImpl implements ChengTaiCrawlerOrderServ
     private final ChengTaiApiOrderRepository chengTaiApiOrderRepository;
 
     @Override
-    public void saveOrderInfo(QuoteVo quoteVo, InsurePremiumResponse insurePremiumResponse) {
+    public void saveOrderInfo(QuoteVo quoteVo, PremiumCalculationResponse premiumCalculationResponse) {
         // 存储信息
         ChengTaiApiOrder chengTaiApiOrder = new ChengTaiApiOrder();
         chengTaiApiOrder.setId(quoteVo.getOrder().getOrdersNo());
-        chengTaiApiOrder.setOrderNo(insurePremiumResponse.getOrderId());
-        // 交强特约
-        if(Objects.nonNull(insurePremiumResponse.getCiContract())){
-            List<InsurePremiumResponse.CiContractDTO.EngageDTO> ciEngageDTOS = insurePremiumResponse.getCiContract().getEngage();
-            if(CollUtil.isNotEmpty(ciEngageDTOS)){
-                chengTaiApiOrder.setJqappoint(JSON.toJSONString(ciEngageDTOS));
-            }
-        }
-
-        // 商业特约
-        if(Objects.nonNull(insurePremiumResponse.getBiContract())){
-            List<InsurePremiumResponse.BiContractDTO.EngageDTO> biEngageDTOS = insurePremiumResponse.getBiContract().getEngage();
-            if(CollUtil.isNotEmpty(biEngageDTOS)){
-                chengTaiApiOrder.setSyappoint(JSON.toJSONString(biEngageDTOS));
-            }
-        }
+        String orderNumber = premiumCalculationResponse.getCompRisk() != null
+                ? premiumCalculationResponse.getCompRisk().getFtrno().getOrderNumber()
+                : premiumCalculationResponse.getCommRisk().getFtrno().getOrderNumber();
+        chengTaiApiOrder.setOrderNo(orderNumber);
         chengTaiApiOrderRepository.save(chengTaiApiOrder);
     }
 

+ 75 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/utils/XmlDateTimeFormatter.java

@@ -0,0 +1,75 @@
+package com.jzg.quotation.chengtai.api.utils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+import java.util.regex.Pattern;
+
+/**
+ * @author quchen
+ * @date 2026/4/20 15:33
+ */
+
+public class XmlDateTimeFormatter {
+    // 正则:匹配纯日期(yyyy-MM-dd)
+    private static final Pattern DATE_PATTERN = Pattern.compile("^\\d{4}-\\d{2}-\\d{2}$");
+    // 正则:匹配带时间的日期(yyyy-MM-dd HH:mm:ss)
+    private static final Pattern DATETIME_PATTERN = Pattern.compile("^\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2}$");
+    // 东八区时区
+    private static final String TIMEZONE_OFFSET = "+08:00";
+    // 纯日期默认补充的时间
+    private static final String DEFAULT_TIME = "00:00:00";
+    public static String format(String dateStr) {
+        return format(dateStr, DEFAULT_TIME);
+    }
+    public static String format(String dateStr, String defaultTime) {
+        // 1. 空值/非字符串直接返回空
+        if (dateStr == null || dateStr.trim().isEmpty()) {
+            return "";
+        }
+        String trimStr = dateStr.trim();
+
+        // 2. 匹配纯日期(yyyy-MM-dd)
+        if (DATE_PATTERN.matcher(trimStr).matches()) {
+            try {
+                // 拼接默认时间,转换为带时间的格式
+                String fullDatetime = trimStr + " " + (defaultTime == null ? DEFAULT_TIME : defaultTime);
+                return convertToXmlFormat(fullDatetime);
+            } catch (Exception e) {
+                // 异常时返回空,避免影响主流程
+                System.err.println("纯日期格式化失败:" + dateStr + ",错误:" + e.getMessage());
+                return "";
+            }
+        }
+
+        // 3. 匹配带时间的日期(yyyy-MM-dd HH:mm:ss)
+        if (DATETIME_PATTERN.matcher(trimStr).matches()) {
+            try {
+                return convertToXmlFormat(trimStr);
+            } catch (Exception e) {
+                System.err.println("带时间日期格式化失败:" + dateStr + ",错误:" + e.getMessage());
+                return "";
+            }
+        }
+
+        // 4. 不匹配任何格式,返回原始值(避免破坏原有逻辑)
+        System.err.println("日期格式不支持:" + dateStr + ",仅支持 yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss");
+        return dateStr;
+    }
+
+    private static String convertToXmlFormat(String datetimeStr) throws ParseException {
+        // 验证时间格式合法性(避免无效时间如 25:61:61)
+        SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        inputFormat.setLenient(false); // 严格校验时间格式
+        Date date = inputFormat.parse(datetimeStr);
+
+        // 格式化为带T分隔符的字符串(yyyy-MM-dd'T'HH:mm:ss)
+        SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
+        outputFormat.setTimeZone(TimeZone.getTimeZone("GMT+8")); // 东八区
+        String tSeparated = outputFormat.format(date);
+
+        // 拼接时区偏移
+        return tSeparated + TIMEZONE_OFFSET;
+    }
+}

+ 0 - 5
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/service/impl/ChengTaiCrawlerQuoteProcessServiceImpl.java

@@ -3,19 +3,16 @@ package com.jzg.quotation.chengtai.crawler.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.jzg.commons.constants.quote.enums.base.ExpenseRequestUrl;
-import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.entity.quote.vo.identify.SliderCaptchaVo;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.StringUtils;
-import com.jzg.quotation.chengtai.api.entity.constants.enums.RiskCodeEnum;
 import com.jzg.quotation.chengtai.crawler.component.ChengTaiCrawlerCacheComponent;
 import com.jzg.quotation.chengtai.crawler.component.ChengTaiRequestCrawlerComponent;
 import com.jzg.quotation.chengtai.crawler.entity.ChengTaiCrawlerConfigureParameters;
 import com.jzg.quotation.chengtai.crawler.entity.bo.ChengTaiSaleInfoBo;
 import com.jzg.quotation.chengtai.crawler.entity.request.*;
 import com.jzg.quotation.chengtai.crawler.entity.response.*;
-import com.jzg.quotation.chengtai.crawler.repository.ChengTaiCrawlerOrderRepository;
 import com.jzg.quotation.chengtai.crawler.service.ChengTaiCrawlerQuoteProcessService;
 import com.jzg.quotation.chengtai.crawler.utils.CarDepreciationCalculator;
 import com.jzg.quotation.chengtai.utils.CryptoUtils;
@@ -33,9 +30,7 @@ import org.springframework.stereotype.Service;
 
 import java.beans.PropertyDescriptor;
 import java.math.BigDecimal;
-import java.time.LocalDate;
 import java.util.*;
-import java.util.stream.Collectors;
 
 @Service
 @RequiredArgsConstructor

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

@@ -147,6 +147,16 @@ public final class TimeProcessing {
     public static String tomorrowDateTime() {
         return LocalDateTime.of(LocalDate.now().plusDays(1), LocalTime.MIN).format(DATE_TIME_FORMATTER);
     }
+    public static String tomorrowDateTime(String time) {
+        // 解析传入的时间字符串
+        LocalDateTime localDateTime = LocalDateTime.parse(time, DATE_TIME_FORMATTER);
+
+        // 加1天,并设置为 00:00:00
+        return localDateTime.plusDays(1)
+                .toLocalDate()
+                .atStartOfDay()
+                .format(DATE_TIME_FORMATTER);
+    }
 
     public static String tomorrowDate() {
         return LocalDate.now().plusDays(1).format(DATE_FORMATTER);

+ 7 - 1
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/entity/Request/NonAutoInsOrderRequest.java

@@ -259,7 +259,13 @@ public class NonAutoInsOrderRequest {
 
                 public OrderMainDTO(List<RiskInfoVo> riskList, GuoRenAccidentalDrivingVo accidentalDrivingVo, String operatorCode, String carPriceUuid) {
                     this.amount = accidentalDrivingVo.getAmount();
-                    this.premium = new BigDecimal(accidentalDrivingVo.getPremium()).multiply(new BigDecimal(accidentalDrivingVo.getQuantity())).toString();
+                    String premium = accidentalDrivingVo.getPremium();
+                    Integer quantity = accidentalDrivingVo.getQuantity();
+                    if (premium == null || quantity == null) {
+                        this.premium = "0";
+                    } else {
+                        this.premium = new BigDecimal(premium).multiply(new BigDecimal(quantity)).toString();
+                    }
                     this.goodsCode = accidentalDrivingVo.getGoodsCode();
                     this.prodCode = accidentalDrivingVo.getProdCode();
                     this.uwCount = accidentalDrivingVo.getQuantity();

+ 22 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java

@@ -132,6 +132,15 @@ public class UnifyOrderManager {
     @Autowired
     private InsOrderRightsInfoService insOrderRightsInfoService;
 
+    @Autowired
+    private InsOrdersTaxService insOrdersTaxService;
+
+    @Autowired
+    private InsOrdersKindService insOrdersKindService;
+
+    @Autowired
+    private InsOrdersAccidentalDrivingService insOrdersAccidentalDrivingService;
+
     private String getSystemCode() {
         //如果是APP登录的话 则传递SystemCode的头部字段
         if (baseController.getUserSystemCode().equals("APP")) {
@@ -286,6 +295,9 @@ public class UnifyOrderManager {
 
         InsOrdersCosts insOrdersCosts = insOrdersCostsService.getById(insOrders.getId());
         InsOrdersPolicy insOrdersPolicy = insOrdersPolicyService.getById(insOrders.getId());
+        InsOrdersTax insOrdersTax = insOrdersTaxService.getById(insOrders.getId());
+        List<InsOrdersKind> insOrdersKindList = insOrdersKindService.list(new LambdaQueryWrapper<InsOrdersKind>().eq(InsOrdersKind::getOrderNo,insOrders.getId()));
+        InsOrdersAccidentalDriving insOrdersAccidentalDriving = insOrdersAccidentalDrivingService.getByOrderId(insOrders.getId());
         // 核保之前判断是否是待核保  或 核保失败
         StateResult stateResult;
         if (insOrders.getOrderStatus().equals(InsOrderStatusEnum.WAIT_AUDIT.getCode()) || insOrders.getOrderStatus().equals(InsOrderStatusEnum.AUDIT_FAIL.getCode())) {
@@ -307,6 +319,9 @@ public class UnifyOrderManager {
         underwritingVo.setInsOrdersRiskList(riskList);
         underwritingVo.setInsOrdersCosts(insOrdersCosts);
         underwritingVo.setPolicy(insOrdersPolicy);
+        underwritingVo.setInsOrdersTax(insOrdersTax);
+        underwritingVo.setInsOrdersKindList(insOrdersKindList);
+        underwritingVo.setInsOrdersAccidentalDriving(insOrdersAccidentalDriving);
         underwritingVo.getOrder().setCompanyOrderNo(insOrders.getCompanyOrderNo());
 
         // 特约查询
@@ -440,6 +455,7 @@ public class UnifyOrderManager {
         insuranceUploadImageVo.getOrder().setInsuranceCompanyCode(esmInsCompanyHttpResult.getData().getCompanyCode());
         insuranceUploadImageVo.getOrder().setInsuranceCompanyId(esmInsCompanyHttpResult.getData().getId());
         insuranceUploadImageVo.getOrder().setApiType(Integer.parseInt(insOrders.getApiType()));
+        insuranceUploadImageVo.getOrder().setCompanyOrderNo(insOrders.getCompanyOrderNo());
         QuotationBaseService quoteService = companyFactory.getImageUploadService(insuranceUploadImageVo);
 
         quoteService.uploadImage(insuranceUploadImageVo);
@@ -522,6 +538,12 @@ public class UnifyOrderManager {
         orderStatusVo.setCarInfo(insOrdersCarInfoService.getByOrderId(insOrders.getId()));
         InsOrdersPolicy insOrdersPolicy = insOrdersPolicyService.getById(insOrders.getId());
         orderStatusVo.setInsOrdersPolicy(insOrdersPolicy);
+        List<InsOrdersCarUserInfo> insOrdersCarUserInfos = insOrdersCarUserInfoService.getByOrderId(insOrders.getId());
+        orderStatusVo.setInsOrdersCarUserInfoList(insOrdersCarUserInfos);
+        InsOrdersCosts insOrdersCosts = insOrdersCostsService.getById(insOrders.getId());
+        orderStatusVo.setInsOrdersCosts(insOrdersCosts);
+        InsOrdersAccidentalDriving insOrdersAccidentalDriving = insOrdersAccidentalDrivingService.getByOrderId(insOrders.getId());
+        orderStatusVo.setInsOrdersAccidentalDriving(insOrdersAccidentalDriving);
         OrderStatusResultVo orderStatusResultVo = orderStatusService.queryOrderState(orderStatusVo);
 
         // 保存状态查询结果

+ 2 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersAccidentalDrivingService.java

@@ -7,4 +7,6 @@ import com.jzg.commons.entity.quote.vo.QuoteVo;
 
 public interface InsOrdersAccidentalDrivingService extends IService<InsOrdersAccidentalDriving> {
     void createAccidentalDriving(InsOrders insOrders, QuoteVo quoteVo);
+
+    InsOrdersAccidentalDriving getByOrderId(String orderId);
 }

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

@@ -1,5 +1,6 @@
 package com.jzg.quotation.summary.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.entity.orders.po.InsOrders;
 import com.jzg.commons.entity.orders.po.InsOrdersAccidentalDriving;
@@ -26,12 +27,18 @@ public class InsOrdersAccidentalDrivingServiceImpl extends ServiceImpl<InsOrders
         for (AccidentalDrivingVo insOrdersAccidental : insOrdersAccidentalDrivings) {
             InsOrdersAccidentalDriving insOrdersAccidentalDriving = new InsOrdersAccidentalDriving();
             insOrdersAccidentalDriving.setOrderNo(insOrders.getId());
-            insOrdersAccidentalDriving.setRiskCode(insOrdersAccidental.getRiskCode());
-            insOrdersAccidentalDriving.setRiskName(insOrdersAccidental.getRiskName());
+            insOrdersAccidentalDriving.setRiskCode(insOrdersAccidental.getProductCode());
+            insOrdersAccidentalDriving.setRiskName(insOrdersAccidental.getProductName());
             insOrdersAccidentalDriving.setQuantity(insOrdersAccidental.getQuantity());
             insOrdersAccidentalDriving.setAmount(insOrdersAccidental.getPremium());
             insOrdersAccidentalDrivingList.add(insOrdersAccidentalDriving);
         }
         this.saveBatch(insOrdersAccidentalDrivingList);
     }
+
+    @Override
+    public InsOrdersAccidentalDriving getByOrderId(String orderId) {
+        return baseMapper.selectOne(new LambdaQueryWrapper<InsOrdersAccidentalDriving>()
+                .eq(InsOrdersAccidentalDriving::getOrderNo, orderId));
+    }
 }

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

@@ -711,6 +711,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         AssertionUtils.isFail(Objects.isNull(insOrders), "订单不存在");
 
         InsOrdersCarInfo carInfo = ordersCarInfoService.getByOrderId(insOrders.getId());
+        carInfo.setActualValue(quoteResponse.getCarActualValue());
+        ordersCarInfoService.saveOrUpdate(carInfo);
         //设置订单状态
         StateResult stateResult = orderStateListener.statusChange(quoteResponse.getQuoteStatusEnum(), insOrders.getOrderStatus());
         insOrders.setOrderStatus(String.valueOf(stateResult.getCurrentState()));

+ 2 - 5
tenant/insurance/quotation-summary/src/main/resources/application-prod.yaml

@@ -29,7 +29,6 @@ baidu:
 
 data-scope:
   tables:
-    - sys_organization_user_link
 
 
 image:
@@ -90,10 +89,8 @@ yangguang:
 #诚泰财险 生产api
 chengtai:
   api:
-    ctPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvuUnoPTFin84nDdpNZFDiGZgUKn6d9fbp6F4/fqrb6pFoJX/wLMr0IsheP0ZnVCPpLGKLjflPNHJo/P9WRRTSM67D8fRD8GKoq+7CtSJkdIticASpN/U8AgJiNV6xdReJcMkaAWJ1ZbOQ+nYLg9OE0qQ6cuXqhy/wVrqx72CrvwIDAQAB
-    publicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCyVlpqmibguria884GdAYEuqCV4aQRl2N21+7l8Vxocoyz+M8KYyXqmlLKqApNL/U5pUVTjS6vpC6ojS+wvNbawijeMsm8r2NOlTHBnQ5vN0azjjPPtSrxgHL8/EYBa4lmBcexdmcUrUyWjAIYqfO8dlY+RuXvbiw7fBHZ7xpAvQIDAQAB
-    privateKey: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALJWWmqaJuC6uJrzzgZ0BgS6oJXhpBGXY3bX7uXxXGhyjLP4zwpjJeqaUsqoCk0v9TmlRVONLq+kLqiNL7C81trCKN4yybyvY06VMcGdDm83RrOOM8+1KvGAcvz8RgFriWYFx7F2ZxStTJaMAhip87x2Vj5G5e9uLDt8EdnvGkC9AgMBAAECgYEAsEOHdEvOV1pWMdj9bgVpGW14YQu3RSfTSFheqGkpg5aMmSk3QbYDeOB1KhZysB3Ri9tdLRqi5TkqYK/DTjUnSUMs0iMhx0XaY2z3w16AMpvuJ0FZ4S2h8oAFfOWe4F6bpUYU8qmXANAaXcMm6HjU8k1QuTbjlSOeLujl8W7zk8ECQQDlHbUQ911kWmsSo8NE4S1+dq/6T+yIGCJlXzlNh/z6giMpjp8Dzm3fxDHLeZa+DCrhpT1qe6O3oGwx3HeR/85NAkEAx0NUy6pX5WolV+YAoLNHAmcCP26wQTB7LZ7mXbxww4yNNH9CWHE9PaBuV4Ws4NxSAnRDxrgArkz5+wgqnXzUMQJAHr16orkdra43+XtBYsd3jCUufT4l9SiPzNwW2yEovw+g2h2JlkAnG8O+DpfUstD9G+NItzW5hJSgj5wN6ufQbQJACEtdND0a+4m3lDkWvZm40vjGty08WPpTpkp+/FfjucAYAJ9re5L7IZ2T+kCuOY3yO/fq+lKedKLvpOtqGrQfgQJBAJ1wMccz+1ez8qpyTWbzj2h0O+GV+YDHqJ9SwRWcSacZOeAyO7UMgIZEwoYfs4nhye7DZH9e4BfkwBmFHJKwJNs=
-    partnerCode: JZG_TYTQ_SX
+    codeKey: TYTQBX
+    url: https://echac.champion-ic.com/
 
 #大家财险api
 dajia:

+ 1 - 1
tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/entity/po/YangGuangApiOrder.java

@@ -35,5 +35,5 @@ public class YangGuangApiOrder {
     /**
      * 非车信息
      */
-    private JSONArray crossInsurance;
+    private String crossInsurance;
 }

+ 5 - 2
tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/entity/request/YangGuangAccuracyCalculateRequest.java

@@ -706,12 +706,15 @@ public class YangGuangAccuracyCalculateRequest extends YangGuangBaseRequest{
         @JSONField(name = "InvoicePrice")
         private String InvoicePrice;
 
-        public ItemCarInfoDTO(CarInfoVo carInfoVo, YangGuangQueryVehicleModelResponse.carmodellist carmodellist) {
+        public
+        ItemCarInfoDTO(CarInfoVo carInfoVo, YangGuangQueryVehicleModelResponse.carmodellist carmodellist) {
             if (carInfoVo.getLicenseNo() != null) {
                 this.LicenseColor = "01";
             }
             this.LicenseType = carInfoVo.getLicenseKindCode();
-
+            if (!carInfoVo.getLicenseKindCode().equals("02")) {
+                this.LicenseType = "52";
+            }
             //车辆种类
             YangGuangCarType yangGuangCarType = Enum.valueOf(YangGuangCarType.class,carInfoVo.getCarTypeCode());
             this.VehicleType = yangGuangCarType.getCode();

+ 1 - 1
tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/entity/request/YangGuangGetNonVehicleProductsRequest.java

@@ -100,7 +100,7 @@ public class YangGuangGetNonVehicleProductsRequest extends YangGuangBaseRequest
         this.AgentCode = ygConfigureParameters.getAgentCode();
         this.ServiceArea = ygConfigureParameters.getServiceArea() == null ? "" : ygConfigureParameters.getServiceArea();
         this.Seatcount = carInfoVo.getSeatCount();
-        this.UseNatureCode = YgUseNatureCodeMapping.getYgUseNatureCode(carInfoVo.getVehicleUseCode());
+        this.UseNatureCode = carInfoVo.getVehicleUseCode();
 //        String cartype = jsonObject.getString("cartype");
         //车辆种类
         YangGuangCarType yangGuangCarType = Enum.valueOf(YangGuangCarType.class,carInfoVo.getCarTypeCode());

+ 2 - 1
tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/entity/request/YangGuangSubmitRequest.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.yangguang.api.entity.request;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.annotation.JSONField;
 import com.jzg.commons.entity.orders.po.InsOrders;
@@ -165,7 +166,7 @@ public class YangGuangSubmitRequest extends YangGuangBaseRequest{
         }
         InsOrdersCosts insOrdersCosts = underwritingVo.getInsOrdersCosts();
         if (insOrdersCosts.getJyPremium().compareTo(BigDecimal.ZERO) > 0) {
-            this.NonVehicleProductInformationList = JSONArray.parseArray(yangGuangApiOrder.getCrossInsurance().toJSONString(), YangGuangSubmitRequest.NonVehicleProductInformationList.class);
+            this.NonVehicleProductInformationList = JSON.parseArray(yangGuangApiOrder.getCrossInsurance(), NonVehicleProductInformationList.class);
             this.CasualtyFlag = "1";
         } else {
             this.CasualtyFlag = "0";

+ 1 - 2
tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/service/impl/YangGuangApiOrderServiceImpl.java

@@ -29,8 +29,7 @@ public class YangGuangApiOrderServiceImpl implements YangGuangApiOrderService {
         yangGuangApiOrder.setOrdersNo(quoteVo.getOrder().getOrdersNo());
         yangGuangApiOrder.setProductsCode(quoteVo.getProductId());
         List<YangGuangAccuracyCalculateResponse.PtptNonVehicleProductInformationList> list = yangGuangAccuracyCalculateResponse.getPtptNonVehicleProductInformationList();
-        JSONArray array = JSONArray.parseArray(JSON.toJSONString(list));
-        yangGuangApiOrder.setCrossInsurance(array);
+        yangGuangApiOrder.setCrossInsurance(list.toString());
         yangGuangApiOrder.setInfotransNo(yangGuangAccuracyCalculateResponse.getInfotransNo());
         yangGuangApiOrderRepository.save(yangGuangApiOrder);
     }

+ 4 - 2
tenant/insurance/quotation-yangguang/src/main/java/com/jzg/quotation/yangguang/api/service/impl/YangGuangApiRequestImpl.java

@@ -100,7 +100,7 @@ public class YangGuangApiRequestImpl implements YangGuangApiRequest {
                                           YangGuangConfigureParameters parameters,String url) throws JsonProcessingException {
 
         YangGuangAccuracyCalculateResponse response = yangGuangApiRequestComponent.accuracyCalculaye(request,url);
-        if (!response.getErrorCode().equals("0")) {
+        if (!response.getErrorCode().equals("0") || StringUtils.isNotEmpty(response.getRemarkCi())) {
             String endDate = extractEndDate(response);
             // 交强重复投保处理
             if (endDate != null) {
@@ -376,13 +376,15 @@ public class YangGuangApiRequestImpl implements YangGuangApiRequest {
                 // 获取缴费地址
                 PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
                 paymentLinkVo.setOrder(orderStatusVo.getOrder());
+                paymentLinkVo.setInsOrdersCarUserInfoList(orderStatusVo.getInsOrdersCarUserInfoList());
+                paymentLinkVo.setInsOrdersCosts(orderStatusVo.getInsOrdersCosts());
                 PaymentLinkResultsVo paymentLinkResultsVo = getPaymentLink(paymentLinkVo);
                 orderStatusResultVo.setPaymentLink(paymentLinkResultsVo.getPaymentLink());
             }
             // 缴费成功 获取保单号
             String jqPolicyNo = yangGuangProposalStatusQueryResponse.getCiPolicyNo();
             String syPolicyNo = yangGuangProposalStatusQueryResponse.getBiPolicyNo();
-            if (jqPolicyNo != null || syPolicyNo != null) {
+            if (!jqPolicyNo.equals("") || !syPolicyNo.equals("")) {
                 orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.UNDERWRITED);
                 orderStatusResultVo.setJqPolicyno(jqPolicyNo);
                 orderStatusResultVo.setSyPolicyno(syPolicyNo);

+ 1 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlSchemeServiceImpl.java

@@ -522,6 +522,7 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
                     kind.setAmount(kind.getOptions().get(0).getValue());
                     kind.setUnitAmount(kind.getOptions().get(0).getValue());
                     kind.setServiceTimes(kind.getOptions().get(0).getValue());
+                    kind.setDeductibleRate(kind.getOptions().get(0).getValue());
                 }
             });
         });