Parcourir la source

update
1.安盛天平报价问题
2.报价获取参数问题

wks il y a 1 an
Parent
commit
3966fdbbc5
33 fichiers modifiés avec 2640 ajouts et 130 suppressions
  1. 5 0
      commons/src/main/java/com/jzg/commons/entity/quote/vo/base/OrderBase.java
  2. 14 5
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/build/AnShengCrawlerQuoteResultsVoBuild.java
  3. 33 2
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/component/AnShengCrawlerCacheComponent.java
  4. 72 21
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/component/AnShengCrawlerRequestComponent.java
  5. 74 0
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/constant/enums/DepartmentPlanCode.java
  6. 2 1
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/constant/enums/RequestUrl.java
  7. 0 17
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/constant/enums/RiskCodeInfo.java
  8. 376 39
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/request/AnShengCrawlerCalculatePremiumApplyMessage.java
  9. 31 0
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/request/AnShengCrawlerInsureAddRequest.java
  10. 18 2
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/request/AnShengCrawlerSearchVehicleByVinRequest.java
  11. 6 1
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerApplyApplicationResponse.java
  12. 6 1
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerAutoSpecialPromiseResponse.java
  13. 19 0
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerBaseResponse.java
  14. 7 1
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerCalculatePremiumApplyResponse.java
  15. 6 1
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerFileUploadResponse.java
  16. 6 1
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerGetUserDetailResponse.java
  17. 1642 0
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerInsureAddResponse.java
  18. 6 1
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerPaymentResponse.java
  19. 6 1
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerQueryDocumentsInformationResponse.java
  20. 6 1
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerSearchVehicleByVinResponse.java
  21. 9 1
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerVerifyResponse.java
  22. 3 1
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/AnShengCrawlerLoginService.java
  23. 28 0
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/AnShengCrawlerQuoteProcessService.java
  24. 23 7
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/impl/AnShengCrawlerLoginServiceImpl.java
  25. 55 0
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/impl/AnShengCrawlerQuoteProcessServiceImpl.java
  26. 25 8
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/impl/AnShengCrawlerRequestImpl.java
  27. 25 0
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/utils/CheckVehicleCodeSecretGenerateUtils.java
  28. 103 0
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/utils/CustomerNegotiatePriceUtils.java
  29. 2 4
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RedissonComponent.java
  30. 22 9
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/RequestObjectConversion.java
  31. 8 3
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  32. 1 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/converter/QuoteInfoConverter.java
  33. 1 1
      tenant/organization/src/main/java/com/jzg/organization/client/EsmInsCompanyClient.java

+ 5 - 0
commons/src/main/java/com/jzg/commons/entity/quote/vo/base/OrderBase.java

@@ -41,6 +41,11 @@ public class OrderBase implements Serializable {
      */
     private String insuranceCompanyCode;
 
+    /**
+     * 保险公司ID
+     */
+    private String insuranceCompanyId;
+
     /**
      * 归属信息
      */

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

@@ -1,11 +1,12 @@
 package com.jzg.quotation.ansheng.crawler.build;
 
 
+import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
-import com.jzg.quotation.ansheng.crawler.constant.enums.RiskCodeInfo;
+import com.jzg.quotation.ansheng.crawler.constant.enums.DepartmentPlanCode;
 import com.jzg.quotation.ansheng.crawler.entity.response.AnShengCrawlerCalculatePremiumApplyResponse;
 import com.jzg.quotation.commons.component.ConversionOfQuoteInformation;
 
@@ -34,15 +35,23 @@ public final class AnShengCrawlerQuoteResultsVoBuild {
 
         contracts.forEach(contract -> {
             // 交强险
-            if (RiskCodeInfo.R105002.getCode().equals(contract.getPolicyBase().getProductCode())) {
+            if (DepartmentPlanCode.PLAN_105.getCode().equals(contract.getPolicyBase().getPlanCode())) {
                 buildRiskInfoVo(quoteVo.getCiRiskInfoVo(), contract.getPolicyBase());
-                // 商业险
-            } else if (RiskCodeInfo.R109002.getCode().equals(contract.getPolicyBase().getProductCode())) {
+                quoteResultsVo.getCosts().setCiPremium(String.valueOf(contract.getPolicyBase().getTotalActualPremium()));
+                quoteResultsVo.getCosts().setVvTax(String.valueOf(contract.getTargets().get(0).getVehicleTax().getVehicleTaxAmount()));
+            // 商业险
+            } else if (DepartmentPlanCode.PLAN_109.getCode()
+                    .equals(contract.getPolicyBase().getPlanCode()) || DepartmentPlanCode.PLAN_113.getCode()
+                    .equals(contract.getPolicyBase().getPlanCode())) {
+                quoteResultsVo.getCosts().setBiPremium(String.valueOf(contract.getPolicyBase().getTotalActualPremium()));
                 buildRiskInfoVo(quoteVo.getBiRiskInfoVo(), contract.getPolicyBase());
                 // 商业险信息
                 buildKindInfo(quoteResultsVo.getKindInfoVo(), contract.getPolicyCoverages());
             }
         });
+
+
+        quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.WAIT_AUDIT);
         return quoteResultsVo;
     }
 
@@ -64,7 +73,7 @@ public final class AnShengCrawlerQuoteResultsVoBuild {
      * @param coverage   保司返回商业险险种信息
      */
     private static void buildKindInfo(List<KindInfoVo> kindInfoVo, List<AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO.PolicyCoveragesDTO> coverage) {
-         ConversionOfQuoteInformation.mapCoverageToKinds(
+        ConversionOfQuoteInformation.mapCoverageToKinds(
                 kindInfoVo,
                 coverage,
                 AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO.PolicyCoveragesDTO::getDutyCode,

+ 33 - 2
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/component/AnShengCrawlerCacheComponent.java

@@ -24,16 +24,47 @@ public class AnShengCrawlerCacheComponent {
 
     public static final long AS_QUOTE_RESPONSE_TIME = 3L;
 
+    public static String AS_LOGIN_COOKIE = "ansheng:login:cookie";
+
+    public static final long AS_LOGIN_COOKIE_TIME = 6L;
+
+    public static final String ACCOUNT_LOCKOUT = "ansheng:account:lockout";
+
+    public static final String AGENT_DEFINE = "ansheng:agent:define:";
+
+    public static final long AGENT_DEFINE_TIME = 6L;
+
     private final RedissonClient redissonClient;
 
+    /**
+     * 缓存登录的信息
+     *
+     * @param username 用户名
+     * @param cookie   登陆cookie
+     */
+    public void cacheAuthorization(String username, String cookie) {
+        redissonClient.getBucket(AS_LOGIN_COOKIE + username).set(cookie, Duration.ofDays(AS_LOGIN_COOKIE_TIME));
+    }
+
+    /**
+     * 获取登录的信息
+     *
+     * @param username 用户名
+     * @return 登录cookie
+     */
+    public String getAuthorization(String username) {
+        return (String) redissonClient.getBucket(AS_LOGIN_COOKIE + username).get();
+    }
+
+
     /**
      * 缓存订单报价信息
      *
-     * @param orderNo  订单号
+     * @param orderNo             订单号
      * @param premiumApplyMessage 报价请求信息
      */
     public void cacheQuoteRequest(String orderNo,
-                                   AnShengCrawlerCalculatePremiumApplyMessage premiumApplyMessage){
+                                  AnShengCrawlerCalculatePremiumApplyMessage premiumApplyMessage) {
         String responseStr = JSONObject.toJSONString(premiumApplyMessage);
         redissonClient.getBucket(AS_QUOTE_RESPONSE + orderNo).set(responseStr, Duration.ofDays(AS_QUOTE_RESPONSE_TIME));
     }

+ 72 - 21
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/component/AnShengCrawlerRequestComponent.java

@@ -11,8 +11,9 @@ import com.jzg.quotation.commons.component.RequestComponent;
 import com.jzg.quotation.commons.utils.CookieParseUtils;
 import com.jzg.quotation.commons.utils.RequestObjectConversion;
 import lombok.RequiredArgsConstructor;
-import org.jetbrains.annotations.NotNull;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.core.io.FileSystemResource;
+import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
@@ -27,6 +28,7 @@ import java.util.*;
  * @author: wenks
  * @date: 2025/3/31 15:15
  **/
+@Slf4j
 @Component
 @RequiredArgsConstructor
 public class AnShengCrawlerRequestComponent {
@@ -36,10 +38,21 @@ public class AnShengCrawlerRequestComponent {
     private final AnShengCrawlerProperties anShengCrawlerProperties;
 
 
-    public <Response> Response post(RequestUrl requestUrl, Object body, Class<Response> responseClass, HttpHeaders headers) {
-        Map<String, String> message = Map.of("message", JSON.toJSONString(body));
-        ResponseEntity<Response> responseResponseEntity = requestComponent.objectPost(requestUrl.getRequestUrl(anShengCrawlerProperties.getUrl()), message, responseClass, headers);
-        return null;
+    public <Response extends AnShengCrawlerBaseResponse> Response post(RequestUrl requestUrl, Object body, Class<Response> responseClass, HttpHeaders headers) {
+        String jsonString = JSON.toJSONString(body);
+        log.info("请求内容{}", jsonString);
+        MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
+        map.set("message", jsonString);
+        ResponseEntity<Response> responseResponseEntity = requestComponent.formData(requestUrl.getRequestUrl(anShengCrawlerProperties.getUrl()), map, responseClass, headers);
+
+        Response response = Optional.ofNullable(responseResponseEntity)
+                .map(HttpEntity::getBody)
+                .orElseThrow(() -> new SystemException("程序异常请联系管理员"));
+
+        if(response.getCode() == 200){
+            return response;
+        }
+        throw new SystemException(response.getMessage());
     }
 
     /**
@@ -65,7 +78,9 @@ public class AnShengCrawlerRequestComponent {
      */
     public boolean checkVerification(AnShengCrawlerCheckVerificationRequest request, HttpHeaders headers) {
         MultiValueMap<String, String> map = RequestObjectConversion.convertMultiValueStringMap(request);
-        return requestComponent.get(RequestUrl.CHECK_VERIFICATION.getRequestUrl(anShengCrawlerProperties.getUrl()), map, "", Boolean.class, headers);
+        ResponseEntity<Boolean> response = requestComponent.baseGet(RequestUrl.CHECK_VERIFICATION.getRequestUrl(anShengCrawlerProperties.getUrl()), map, Boolean.class, headers);
+        conversionCookies(headers, response);
+        return Boolean.TRUE.equals(response.getBody());
     }
 
     /**
@@ -77,19 +92,20 @@ public class AnShengCrawlerRequestComponent {
     public void login(AnShengCrawlerCheckLoginRequest request, HttpHeaders headers) {
         MultiValueMap<String, Object> multiValueMap = RequestObjectConversion.convertMultiValueMap(request);
         ResponseEntity<String> response = requestComponent.formData(RequestUrl.LOGIN.getRequestUrl(anShengCrawlerProperties.getUrl()), multiValueMap, String.class, headers);
-        conversionCookies(headers, response, CookieParseUtils.JSESSIONID);
+        conversionCookies(headers, response);
     }
 
-    private static void conversionCookies(HttpHeaders headers, ResponseEntity<String> response, String cookieName) {
+
+    public static <T> void conversionCookies(HttpHeaders headers, ResponseEntity<T> response) {
         List<String> strings = response.getHeaders().get(CookieParseUtils.SET_COOKIE);
         Map<String, String> loginCookie = CookieParseUtils.parseCookie(strings);
-        Map<String, String> rawCookie = CookieParseUtils.parseCookie(Objects.requireNonNull(headers.get(CookieParseUtils.COOKIE)).get(0));
-
-        if(CookieParseUtils.AUTHORIZATION.equals(cookieName)){
-            rawCookie.put(cookieName, CookieParseUtils.BEARER + loginCookie.get(cookieName));
-        }else {
-            rawCookie.put(cookieName, loginCookie.get(cookieName));
+        Map<String, String> rawCookie = Optional.ofNullable(headers.get(CookieParseUtils.COOKIE))
+                .map(x -> CookieParseUtils.parseCookie(x.get(0)))
+                .orElse(new HashMap<>());
+        for (String s : loginCookie.keySet()) {
+            rawCookie.put(s, loginCookie.get(s));
         }
+
         String cookie = CookieParseUtils.toStringCookie(rawCookie);
         headers.set(CookieParseUtils.COOKIE, cookie);
     }
@@ -99,15 +115,37 @@ public class AnShengCrawlerRequestComponent {
      *
      * @param headers 请求头
      */
-    public void authorize(HttpHeaders headers) {
-        LinkedMultiValueMap<String, String> map = new LinkedMultiValueMap<>();
-        map.put("client_id", List.of("ast-prod"));
-        map.put("response_type", List.of("code"));
-
+    public String authorize(HttpHeaders headers) {
         ResponseEntity<String> response = requestComponent.baseGet(RequestUrl.OAUTH_AUTHORIZE.getRequestUrl(anShengCrawlerProperties.getUrl()), new LinkedMultiValueMap<>(), String.class, headers);
-        conversionCookies(headers, response, CookieParseUtils.AUTHORIZATION);
+        conversionCookies(headers, response);
+        return response.getHeaders().getLocation().toString();
     }
 
+    /**
+     * 验证
+     *
+     * @param headers 请求头
+     */
+    public void securityCheck(String url, HttpHeaders headers) {
+        url = url.replace("http", "https");
+        ResponseEntity<String> response = requestComponent.baseGet(url, new LinkedMultiValueMap<>(), String.class, headers);
+        conversionCookies(headers, response);
+    }
+
+    /**
+     * 验证
+     *
+     * @param headers 请求头
+     */
+    public String securityCheck(HttpHeaders headers) {
+        ResponseEntity<String> response = requestComponent.baseGet(RequestUrl.SECURITY_CHECK.getRequestUrl(anShengCrawlerProperties.getUrl()), new LinkedMultiValueMap<>(), String.class, headers);
+        List<String> strings = response.getHeaders().get(CookieParseUtils.SET_COOKIE);
+        Map<String, String> map = CookieParseUtils.parseCookie(strings);
+        String authorization = map.get(CookieParseUtils.AUTHORIZATION);
+        return CookieParseUtils.BEARER + Optional.ofNullable(authorization)
+                .filter(x -> !x.isEmpty())
+                .orElseThrow(() -> new SystemException("登录失败"));
+    }
 
     /**
      * 获取归属信息
@@ -116,12 +154,25 @@ public class AnShengCrawlerRequestComponent {
      * @return 归属信息
      */
     public AnShengCrawlerGetUserDetailResponse.DataDTO getUserDetailResponse(HttpHeaders headers) {
-        ResponseEntity<AnShengCrawlerGetUserDetailResponse> response = requestComponent.stringPost(RequestUrl.GET_USER_DETAIL.getRequestUrl(anShengCrawlerProperties.getUrl()), "", AnShengCrawlerGetUserDetailResponse.class, headers);
+        ResponseEntity<AnShengCrawlerGetUserDetailResponse> response = requestComponent.formData(RequestUrl.GET_USER_DETAIL.getRequestUrl(anShengCrawlerProperties.getUrl()), new LinkedMultiValueMap<>(), AnShengCrawlerGetUserDetailResponse.class, headers);
         return Optional.ofNullable(response.getBody())
                 .map(AnShengCrawlerGetUserDetailResponse::getData)
                 .orElseThrow(() -> new SystemException("找不到归属信息"));
     }
 
+    /**
+     *
+     * @param request 请求内容
+     * @param headers 请求头
+     * @return
+     */
+    public AnShengCrawlerInsureAddResponse.DataDTO insureAdd(AnShengCrawlerInsureAddRequest request, HttpHeaders headers){
+        ResponseEntity<AnShengCrawlerInsureAddResponse> responseEntity = requestComponent.formData(RequestUrl.INSURE_ADD.getRequestUrl(anShengCrawlerProperties.getUrl()), request, AnShengCrawlerInsureAddResponse.class, headers);;
+        return Optional.ofNullable(responseEntity.getBody())
+                .map(AnShengCrawlerInsureAddResponse::getData)
+                .orElseThrow(() -> new SystemException("添加险种失败"));
+    }
+
     /**
      * 保费计算
      *

+ 74 - 0
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/constant/enums/DepartmentPlanCode.java

@@ -0,0 +1,74 @@
+package com.jzg.quotation.ansheng.crawler.constant.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @description: 大家财险险种
+ * @author: wenks
+ * @date: 2025/7/17 14:56
+ **/
+@AllArgsConstructor
+@Getter
+public enum DepartmentPlanCode {
+
+    PLAN_103("103", "机动车单程提车保险", ""),
+    PLAN_105("105", "机动车辆交强险", "105002"),
+    PLAN_107("107", "摩托车交强险", ""),
+    PLAN_109("109", "机动车辆综合险保险", "109002"),
+    PLAN_110("110", "摩托车、拖拉机商业险", ""),
+    PLAN_111("111", "特种车商业险", ""),
+    PLAN_113("113", "新能源车商业险", "113001"),
+    PLAN_516("516", "安盛天平家财险标准产品升级款", ""),
+    PLAN_518("518", "安盛天平盛享安居家庭财产保险", ""),
+    PLAN_521("521", "卓越家居综合保险升级版", ""),
+    PLAN_610("610", "道路客运承运人责任保险", ""),
+    PLAN_712("712", "团体人身意外伤害保险", ""),
+    PLAN_718("718", "安盛天平驾乘意外伤害保险", ""),
+    PLAN_788("788", "卓越全意保交通工具意外伤害保险", ""),
+    PLAN_888("888", "安盛天平旅行意外伤害保险", ""),
+    PLAN_889("889", "安盛天平旅游意外伤害保险标准版", ""),
+    PLAN_890("890", "安盛天平旅游意外伤害保险旅行社定制版", ""),
+    PLAN_895("895", "安盛天平户外运动保险", ""),
+    PLAN_CFF("CFF", "盛放人生·尊享守慧住院医疗保险", ""),
+    PLAN_G01("G01", "“盛业保”安盛天平团体保险", ""),
+    PLAN_GAP("GAP", "机动车置换费用补偿保险", ""),
+    PLAN_GH1("GH1", "安盛天平团体保险产品", ""),
+    PLAN_GPI("GPI", "“尚越”环球个人高端医疗保险", ""),
+    PLAN_H01("H01", "安盛天平个人医疗保险", ""),
+    PLAN_H09("H09", "中端医疗及重疾医药费用补偿保险", ""),
+    PLAN_H17("H17", "中端门诊住院医疗保险", ""),
+    PLAN_H18("H18", "安盛天平个人综合补充医疗保险", ""),
+    PLAN_H19("H19", "卓越孝欣老年综合医疗保险(个人版)", ""),
+    PLAN_H20("H20", "个人综合医疗保险(水滴版)", ""),
+    PLAN_H21("H21", "个人一年期重大疾病保险", ""),
+    PLAN_H23("H23", "盛世臻选医疗保险", ""),
+    PLAN_H24("H24", "个人百万住院医疗保险", ""),
+    PLAN_H25("H25", "盛世守护珍爱版健康保险", ""),
+    PLAN_H27("H27", "卓越守护百万住院医疗保险2022升级版", ""),
+    PLAN_H29("H29", "馨选无忧医疗保险", ""),
+    PLAN_H86("H86", "安盛天平综合团体保险", ""),
+    PLAN_H90("H90", "团体医疗保险", ""),
+    PLAN_H91("H91", "镁信团体医疗保险", ""),
+    PLAN_H92("H92", "卓越孝欣老年综合医疗保险(团体版)", ""),
+    PLAN_H93("H93", "社保补充医疗保险", ""),
+    PLAN_H96("H96", "团体医疗保险", ""),
+    PLAN_H98("H98", "健康险通用分入", ""),
+    PLAN_H99("H99", "个人百万住院医疗保险(线上渠道专用)", ""),
+    PLAN_P01("P01", "安盛天平个人意外险标准产品", ""),
+    PLAN_P03("P03", "安盛天平交通意外险标准产品", ""),
+    PLAN_P12("P12", "乐驾畅行 驾乘意外保险", ""),
+    PLAN_P13("P13", "乐行天下 驾乘意外保险", ""),
+    PLAN_P15("P15", "驾乘人员意外伤害保险", ""),
+    PLAN_P20("P20", "学生平安保险", ""),
+    PLAN_P23("P23", "卓越全意保交通工具意外伤害保险", ""),
+    PLAN_P24("P24", "老年人意外险", ""),
+    PLAN_P95("P95", "团体意外险", "");
+
+    private final String code;
+
+    private final String message;
+
+    private final String productCode;
+
+}

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

@@ -16,9 +16,10 @@ public enum RequestUrl implements CrawlerRequestUrlStandard {
     CHECK_VERIFICATION("/ssooauth2/captcha/check/verification/result", "验证验证码"),
     LOGIN("/ssooauth2/login", "登录"),
     OAUTH_AUTHORIZE("/ssooauth2/oauth/authorize?client_id=ast-prod&response_type=code", "oauth验证"),
-
+    SECURITY_CHECK("/ast/j_spring_security_check", "验证"),
     // 保费计算
     GET_USER_DETAIL("/portalapi/getUserDetail", "获取归属"),
+    INSURE_ADD("/portalapi/insure_add", "保险添加"),
     QUERY_AUTO_MATCH_PRICE_RATIO("portalapi/queryAutoMatchPriceRatio", ""),
     SEARCH_VEHICLE_BY_VIN("/portalapi/searchVehicleByVIN", "车架号查询"),
     CALCULATE_PREMIUM_APPLY("/portalapi/calculatePremiumApply", "保费计算"),

+ 0 - 17
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/constant/enums/RiskCodeInfo.java

@@ -1,17 +0,0 @@
-package com.jzg.quotation.ansheng.crawler.constant.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-@Getter
-@AllArgsConstructor
-public enum RiskCodeInfo {
-
-    R105002("105002", "交强险"),
-    R109002("109002", "交强险");
-
-    private final String code;
-
-    private final String desc;
-
-}

Fichier diff supprimé car celui-ci est trop grand
+ 376 - 39
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/request/AnShengCrawlerCalculatePremiumApplyMessage.java


+ 31 - 0
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/request/AnShengCrawlerInsureAddRequest.java

@@ -0,0 +1,31 @@
+package com.jzg.quotation.ansheng.crawler.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class AnShengCrawlerInsureAddRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -3126131783171831874L;
+
+    @JsonProperty("formType")
+    private String formType;
+
+    @JsonProperty("departmentCode")
+    private String departmentCode;
+
+    @JsonProperty("planCode")
+    private String planCode;
+
+    @JsonProperty("productCode")
+    private String productCode;
+
+}

+ 18 - 2
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/request/AnShengCrawlerSearchVehicleByVinRequest.java

@@ -2,6 +2,8 @@ package com.jzg.quotation.ansheng.crawler.entity.request;
 
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.quotation.ansheng.crawler.constant.enums.DepartmentPlanCode;
 import lombok.Data;
 
 @Data
@@ -23,7 +25,7 @@ public class AnShengCrawlerSearchVehicleByVinRequest {
     private String usageAttributeCode;
 
     @JsonProperty("initWeigth")
-    private String initWeigth;
+    private Boolean initWeigth;
 
     @JsonProperty("vehicleDBFlag")
     private String vehicleDBFlag;
@@ -40,5 +42,19 @@ public class AnShengCrawlerSearchVehicleByVinRequest {
     @JsonProperty("customerSourceCode")
     private String customerSourceCode;
 
-
+    public AnShengCrawlerSearchVehicleByVinRequest(CarInfoVo carInfoVo, String departmentCode, String agentCode) {
+        this.vin = carInfoVo.getVinNo();
+        this.priceType = "04";
+        if(carInfoVo.isNewEnergyMark()){
+            this.planCode = DepartmentPlanCode.PLAN_113.getCode();
+        }else {
+            this.planCode = DepartmentPlanCode.PLAN_109.getCode();
+        }
+        this.departmentCode = departmentCode;
+        this.usageAttributeCode = carInfoVo.getCarNatureCode();
+        this.initWeigth = false;
+        this.vehicleDBFlag = "1";
+        this.vehicleType = carInfoVo.getCarKindCode();
+        this.agentCode = agentCode;
+    }
 }

+ 6 - 1
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerApplyApplicationResponse.java

@@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.util.List;
 
 /**
@@ -14,7 +16,10 @@ import java.util.List;
  **/
 @NoArgsConstructor
 @Data
-public class AnShengCrawlerApplyApplicationResponse {
+public class AnShengCrawlerApplyApplicationResponse implements Serializable, AnShengCrawlerBaseResponse{
+
+    @Serial
+    private static final long serialVersionUID = 6331492566958906790L;
 
     @JsonProperty("code")
     private Integer code;

+ 6 - 1
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerAutoSpecialPromiseResponse.java

@@ -4,12 +4,17 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.util.List;
 
 
 @NoArgsConstructor
 @Data
-public class AnShengCrawlerAutoSpecialPromiseResponse {
+public class AnShengCrawlerAutoSpecialPromiseResponse  implements Serializable, AnShengCrawlerBaseResponse{
+
+    @Serial
+    private static final long serialVersionUID = 2445352145300683315L;
 
     @JsonProperty("code")
     private Integer code;

+ 19 - 0
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerBaseResponse.java

@@ -0,0 +1,19 @@
+package com.jzg.quotation.ansheng.crawler.entity.response;
+
+public interface AnShengCrawlerBaseResponse {
+
+    /**
+     * 获取响应码
+     *
+     * @return 响应码
+     */
+    Integer getCode();
+
+    /**
+     * 获取报错信息
+     *
+     * @return 报错信息
+     */
+    String getMessage();
+
+}

+ 7 - 1
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerCalculatePremiumApplyResponse.java

@@ -4,11 +4,16 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.util.List;
 
 @NoArgsConstructor
 @Data
-public class AnShengCrawlerCalculatePremiumApplyResponse {
+public class AnShengCrawlerCalculatePremiumApplyResponse  implements Serializable, AnShengCrawlerBaseResponse{
+
+    @Serial
+    private static final long serialVersionUID = -1402526729326608631L;
 
     @JsonProperty("code")
     private Integer code;
@@ -896,6 +901,7 @@ public class AnShengCrawlerCalculatePremiumApplyResponse {
             @NoArgsConstructor
             @Data
             public static class TargetsDTO {
+
                 @JsonProperty("page")
                 private Integer page;
                 @JsonProperty("pageSize")

+ 6 - 1
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerFileUploadResponse.java

@@ -5,11 +5,16 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.util.List;
 
 @NoArgsConstructor
 @Data
-public class AnShengCrawlerFileUploadResponse {
+public class AnShengCrawlerFileUploadResponse  implements Serializable, AnShengCrawlerBaseResponse{
+
+    @Serial
+    private static final long serialVersionUID = -2718527375138193717L;
 
     @JsonProperty("code")
     private Integer code;

+ 6 - 1
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerGetUserDetailResponse.java

@@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.util.List;
 
 /**
@@ -14,7 +16,10 @@ import java.util.List;
  **/
 @NoArgsConstructor
 @Data
-public class AnShengCrawlerGetUserDetailResponse {
+public class AnShengCrawlerGetUserDetailResponse  implements Serializable, AnShengCrawlerBaseResponse{
+
+    @Serial
+    private static final long serialVersionUID = -2847469836204002666L;
 
     @JsonProperty("code")
     private Integer code;

+ 1642 - 0
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerInsureAddResponse.java

@@ -0,0 +1,1642 @@
+package com.jzg.quotation.ansheng.crawler.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+@NoArgsConstructor
+@Data
+public class AnShengCrawlerInsureAddResponse implements Serializable, AnShengCrawlerBaseResponse {
+
+    @Serial
+    private static final long serialVersionUID = 5450262195823655540L;
+    @JsonProperty("code")
+    private Integer code;
+    @JsonProperty("simpleMessage")
+    private String simpleMessage;
+    @JsonProperty("message")
+    private String message;
+    @JsonProperty("data")
+    private DataDTO data;
+
+    @NoArgsConstructor
+    @Data
+    public static class DataDTO {
+        @JsonProperty("policyCoverageList")
+        private List<PolicyCoverageListDTO> policyCoverageList;
+        @JsonProperty("policyRatioList")
+        private List<PolicyRatioListDTO> policyRatioList;
+        @JsonProperty("floatDiscountConfigList")
+        private List<FloatDiscountConfigListDTO> floatDiscountConfigList;
+        @JsonProperty("overlayPlanList")
+        private List<OverlayPlanListDTO> overlayPlanList;
+        @JsonProperty("departmentDefine")
+        private DepartmentDefineDTO departmentDefine;
+        @JsonProperty("planDefine")
+        private PlanDefineDTO planDefine;
+        @JsonProperty("checkVehicleCode")
+        private String checkVehicleCode;
+        @JsonProperty("compulsoryInsureFlag")
+        private Boolean compulsoryInsureFlag;
+        @JsonProperty("virtualProductFlag")
+        private Boolean virtualProductFlag;
+        @JsonProperty("businessInsureFlag")
+        private Boolean businessInsureFlag;
+        @JsonProperty("vehicle")
+        private VehicleDTO vehicle;
+        @JsonProperty("policyBase")
+        private PolicyBaseDTO policyBase;
+        @JsonProperty("isShangHaiPlatform")
+        private String isShangHaiPlatform;
+        @JsonProperty("showPayAddAndDeleteBtn")
+        private Boolean showPayAddAndDeleteBtn;
+        @JsonProperty("payTaxesChooseFlag")
+        private String payTaxesChooseFlag;
+        @JsonProperty("pmVehicleSearchFlag")
+        private Boolean pmVehicleSearchFlag;
+        @JsonProperty("policyInfoSendPlatform")
+        private Boolean policyInfoSendPlatform;
+        @JsonProperty("platfromTimeAutoChoose")
+        private Boolean platfromTimeAutoChoose;
+        @JsonProperty("agentCode")
+        private String agentCode;
+        @JsonProperty("forceVehicleSearch")
+        private Boolean forceVehicleSearch;
+        @JsonProperty("floatCustomerNegotiatePrice")
+        private Boolean floatCustomerNegotiatePrice;
+        @JsonProperty("sysErrorCustomerPriceExceedFlag")
+        private Boolean sysErrorCustomerPriceExceedFlag;
+        @JsonProperty("autoUnderwritingRuleFlag")
+        private Boolean autoUnderwritingRuleFlag;
+        @JsonProperty("clearTaxFlag")
+        private Boolean clearTaxFlag;
+        @JsonProperty("fromTaxRegisterNoFlag")
+        private Boolean fromTaxRegisterNoFlag;
+        @JsonProperty("abstemiousCarTaxFlag")
+        private String abstemiousCarTaxFlag;
+        @JsonProperty("vehicleStateFlag")
+        private Boolean vehicleStateFlag;
+        @JsonProperty("personCertFlag")
+        private Boolean personCertFlag;
+        @JsonProperty("certDepartmentNameFlag")
+        private Boolean certDepartmentNameFlag;
+        @JsonProperty("taxVehicleTypeFlag")
+        private Boolean taxVehicleTypeFlag;
+        @JsonProperty("registerDateFlag")
+        private Boolean registerDateFlag;
+        @JsonProperty("runCardCertificateDateFlag")
+        private Boolean runCardCertificateDateFlag;
+        @JsonProperty("lastYearEndDateFlag")
+        private Boolean lastYearEndDateFlag;
+        @JsonProperty("useBeijingNewVehicletaxPlanformFlag")
+        private Boolean useBeijingNewVehicletaxPlanformFlag;
+        @JsonProperty("showReparationsPremiumFlag")
+        private Boolean showReparationsPremiumFlag;
+        @JsonProperty("payNoFlag")
+        private Boolean payNoFlag;
+        @JsonProperty("payFreeStateFlag")
+        private Boolean payFreeStateFlag;
+        @JsonProperty("deductionDueCodeFlag")
+        private Boolean deductionDueCodeFlag;
+        @JsonProperty("deductionDueTypeFlag")
+        private Boolean deductionDueTypeFlag;
+        @JsonProperty("defaultBillTypePaper")
+        private Boolean defaultBillTypePaper;
+        @JsonProperty("deductionDueProportionFlag")
+        private Boolean deductionDueProportionFlag;
+        @JsonProperty("deductionFlag")
+        private Boolean deductionFlag;
+        @JsonProperty("freeNoFlag")
+        private Boolean freeNoFlag;
+        @JsonProperty("openPlatformVehicleTaxProcessFlag")
+        private Boolean openPlatformVehicleTaxProcessFlag;
+        @JsonProperty("abstemiousCarTaxDerateFlag")
+        private Boolean abstemiousCarTaxDerateFlag;
+        @JsonProperty("isFDDLockFlag")
+        private String isFDDLockFlag;
+        @JsonProperty("autoBusinessTypeFlag")
+        private String autoBusinessTypeFlag;
+        @JsonProperty("policyPricing")
+        private PolicyPricingDTO policyPricing;
+        @JsonProperty("oneCarOnePriceInformation")
+        private OneCarOnePriceInformationDTO oneCarOnePriceInformation;
+        @JsonProperty("targetType")
+        private String targetType;
+        @JsonProperty("pageLinkageConfigurationList")
+        private List<PageLinkageConfigurationListDTO> pageLinkageConfigurationList;
+        @JsonProperty("shRealNameSwitch")
+        private Boolean shRealNameSwitch;
+        @JsonProperty("isAriRatioSpecialValue")
+        private String isAriRatioSpecialValue;
+        @JsonProperty("showVehicleCertificateDate")
+        private Boolean showVehicleCertificateDate;
+        @JsonProperty("mainVersionNoMap")
+        private MainVersionNoMapDTO mainVersionNoMap;
+        @JsonProperty("peccancyTimeButtonSwitch")
+        private Boolean peccancyTimeButtonSwitch;
+        @JsonProperty("isPolicyPaymentSwitch")
+        private String isPolicyPaymentSwitch;
+        @JsonProperty("systemCommonParameter")
+        private SystemCommonParameterDTO systemCommonParameter;
+        @JsonProperty("isCustomerGroupLabelFlag")
+        private String isCustomerGroupLabelFlag;
+        @JsonProperty("isShowGroupClaimRatio")
+        private String isShowGroupClaimRatio;
+        @JsonProperty("isDoubleRecordSwitch")
+        private String isDoubleRecordSwitch;
+        @JsonProperty("saleAgentPage")
+        private SaleAgentPageDTO saleAgentPage;
+        @JsonProperty("businessTypePage")
+        private BusinessTypePageDTO businessTypePage;
+        @JsonProperty("issueRealNamePage")
+        private IssueRealNamePageDTO issueRealNamePage;
+        @JsonProperty("groupAgentPage")
+        private GroupAgentPageDTO groupAgentPage;
+        @JsonProperty("addPlan")
+        private String addPlan;
+        @JsonProperty("isOriginFrameSwitch")
+        private String isOriginFrameSwitch;
+        @JsonProperty("manualInputFreeNoFlag")
+        private Boolean manualInputFreeNoFlag;
+        @JsonProperty("isNcdDisplaySwitchFlag")
+        private Boolean isNcdDisplaySwitchFlag;
+        @JsonProperty("ownerInformationProcessing")
+        private Boolean ownerInformationProcessing;
+        @JsonProperty("realDuomControlFlag")
+        private String realDuomControlFlag;
+        @JsonProperty("isFloatPriceSplit")
+        private Boolean isFloatPriceSplit;
+        @JsonProperty("isSearchVehicleRTA")
+        private Boolean isSearchVehicleRTA;
+        @JsonProperty("detailAddrFlag")
+        private Boolean detailAddrFlag;
+        @JsonProperty("breakRules")
+        private Boolean breakRules;
+        @JsonProperty("displayServiceSwitchTimes")
+        private String displayServiceSwitchTimes;
+        @JsonProperty("isNeedCheckAddress")
+        private String isNeedCheckAddress;
+        @JsonProperty("configCertDepartment")
+        private Boolean configCertDepartment;
+        @JsonProperty("taxBeginDateNoControlFlag")
+        private Boolean taxBeginDateNoControlFlag;
+        @JsonProperty("searchVehicleRTA")
+        private Boolean searchVehicleRTA;
+        @JsonProperty("openAlienVehicle")
+        private Boolean openAlienVehicle;
+        @JsonProperty("disputedSettleMode")
+        private Boolean disputedSettleMode;
+        @JsonProperty("customerPriceExceed")
+        private Boolean customerPriceExceed;
+        @JsonProperty("floatPriceSplit")
+        private Boolean floatPriceSplit;
+        @JsonProperty("priceOfNewAndOldCarsHandle")
+        private Boolean priceOfNewAndOldCarsHandle;
+        @JsonProperty("showIndustryVehicleInfo")
+        private Boolean showIndustryVehicleInfo;
+        @JsonProperty("showGroupSalesGroup")
+        private Boolean showGroupSalesGroup;
+        @JsonProperty("needCustomerInfo")
+        private Boolean needCustomerInfo;
+        @JsonProperty("institutionCQ")
+        private Boolean institutionCQ;
+        @JsonProperty("showIdCard")
+        private Boolean showIdCard;
+        @JsonProperty("dutyAmountFlag")
+        private Boolean dutyAmountFlag;
+        @JsonProperty("showFloatCommisionFlag")
+        private Boolean showFloatCommisionFlag;
+        @JsonProperty("vehicleTypeDiff")
+        private Boolean vehicleTypeDiff;
+        @JsonProperty("ncdDisplaySwitchFlag")
+        private Boolean ncdDisplaySwitchFlag;
+        @JsonProperty("motoPRatioFlag")
+        private Boolean motoPRatioFlag;
+
+        @NoArgsConstructor
+        @Data
+        public static class DepartmentDefineDTO {
+            @JsonProperty("createdBy")
+            private String createdBy;
+            @JsonProperty("createdDate")
+            private String createdDate;
+            @JsonProperty("updatedBy")
+            private String updatedBy;
+            @JsonProperty("updatedDate")
+            private String updatedDate;
+            @JsonProperty("page")
+            private Integer page;
+            @JsonProperty("pageSize")
+            private Integer pageSize;
+            @JsonProperty("departmentCode")
+            private String departmentCode;
+            @JsonProperty("internalDepartmentCode")
+            private String internalDepartmentCode;
+            @JsonProperty("departmentChineseName")
+            private String departmentChineseName;
+            @JsonProperty("departmentAbbrName")
+            private String departmentAbbrName;
+            @JsonProperty("departmentLevel")
+            private Integer departmentLevel;
+            @JsonProperty("foundDate")
+            private String foundDate;
+            @JsonProperty("chineseAddress")
+            private String chineseAddress;
+            @JsonProperty("postCode")
+            private String postCode;
+            @JsonProperty("departmentEnglishName")
+            private String departmentEnglishName;
+            @JsonProperty("englishAddress")
+            private String englishAddress;
+            @JsonProperty("telephone")
+            private String telephone;
+            @JsonProperty("fax")
+            private String fax;
+            @JsonProperty("upperDepartmentCode")
+            private String upperDepartmentCode;
+            @JsonProperty("linkManCode")
+            private String linkManCode;
+            @JsonProperty("levelDepCode")
+            private String levelDepCode;
+            @JsonProperty("regulatoryDepartmentCode")
+            private String regulatoryDepartmentCode;
+            @JsonProperty("secondBranchCode")
+            private String secondBranchCode;
+            @JsonProperty("thirdBranchCode")
+            private String thirdBranchCode;
+            @JsonProperty("needValidateFour")
+            private String needValidateFour;
+            @JsonProperty("pigeonholeDeptCode")
+            private String pigeonholeDeptCode;
+            @JsonProperty("revenueRegisterNo")
+            private String revenueRegisterNo;
+            @JsonProperty("standareasCode")
+            private String standareasCode;
+            @JsonProperty("departmentPrintName")
+            private String departmentPrintName;
+            @JsonProperty("agentRatioSetupRule")
+            private String agentRatioSetupRule;
+            @JsonProperty("validateAttachment")
+            private String validateAttachment;
+            @JsonProperty("noticeBill")
+            private String noticeBill;
+            @JsonProperty("taxPayNo")
+            private String taxPayNo;
+            @JsonProperty("instalment")
+            private Integer instalment;
+            @JsonProperty("reportBeforeRegister")
+            private String reportBeforeRegister;
+            @JsonProperty("alarmMark")
+            private String alarmMark;
+            @JsonProperty("vehicleReportTelephone")
+            private String vehicleReportTelephone;
+            @JsonProperty("vehicleLiscenceCodePrefix")
+            private String vehicleLiscenceCodePrefix;
+            @JsonProperty("financeDepartmentCode")
+            private String financeDepartmentCode;
+            @JsonProperty("claimAddress")
+            private String claimAddress;
+            @JsonProperty("invoicePdf")
+            private String invoicePdf;
+            @JsonProperty("claimDealDepartmentCode")
+            private String claimDealDepartmentCode;
+            @JsonProperty("platform")
+            private String platform;
+            @JsonProperty("reCancelPolicy")
+            private String reCancelPolicy;
+            @JsonProperty("isCanclePolicy")
+            private String isCanclePolicy;
+            @JsonProperty("isQueryBackcode")
+            private String isQueryBackcode;
+            @JsonProperty("isPutChangedPremium")
+            private String isPutChangedPremium;
+            @JsonProperty("uploadHistoryPolicy")
+            private String uploadHistoryPolicy;
+            @JsonProperty("genRestricFlag")
+            private String genRestricFlag;
+            @JsonProperty("invoicePrint")
+            private String invoicePrint;
+            @JsonProperty("printStampTax")
+            private String printStampTax;
+            @JsonProperty("endorseInvoicePrint")
+            private String endorseInvoicePrint;
+            @JsonProperty("checkCar")
+            private String checkCar;
+            @JsonProperty("createPolicyLabel")
+            private String createPolicyLabel;
+            @JsonProperty("needValidate")
+            private String needValidate;
+            @JsonProperty("factorRatio")
+            private String factorRatio;
+            @JsonProperty("bussinessTax")
+            private String bussinessTax;
+            @JsonProperty("personnelTax")
+            private String personnelTax;
+            @JsonProperty("isForsePrint")
+            private String isForsePrint;
+            @JsonProperty("premiumPaymentMode")
+            private String premiumPaymentMode;
+            @JsonProperty("outerPaymentFlag")
+            private String outerPaymentFlag;
+            @JsonProperty("hrDepartmentCode")
+            private String hrDepartmentCode;
+            @JsonProperty("canReturnVehicletax")
+            private Integer canReturnVehicletax;
+            @JsonProperty("modifyVehicletax")
+            private Integer modifyVehicletax;
+            @JsonProperty("paymentNoticPrint")
+            private Integer paymentNoticPrint;
+            @JsonProperty("policyInvoiceRemarkPrint")
+            private String policyInvoiceRemarkPrint;
+            @JsonProperty("affiliatedCharacter")
+            private Integer affiliatedCharacter;
+            @JsonProperty("splitPolicy")
+            private Integer splitPolicy;
+            @JsonProperty("validChargeAffirmControl")
+            private Integer validChargeAffirmControl;
+            @JsonProperty("specialPromisePay")
+            private Integer specialPromisePay;
+            @JsonProperty("chequeInsureDeferredDays")
+            private Integer chequeInsureDeferredDays;
+            @JsonProperty("centralizedEvaluateFlag")
+            private String centralizedEvaluateFlag;
+            @JsonProperty("vehiclePriceType")
+            private String vehiclePriceType;
+            @JsonProperty("usePlatform")
+            private Integer usePlatform;
+            @JsonProperty("platformDestin")
+            private Integer platformDestin;
+            @JsonProperty("messageType")
+            private Integer messageType;
+            @JsonProperty("platformRequestType")
+            private Integer platformRequestType;
+            @JsonProperty("coverageInsured")
+            private Integer coverageInsured;
+            @JsonProperty("coverageLimit")
+            private Integer coverageLimit;
+            @JsonProperty("validateApplyUnderwrite")
+            private Integer validateApplyUnderwrite;
+            @JsonProperty("platformVehiclepriceType")
+            private String platformVehiclepriceType;
+            @JsonProperty("modifySpecialPromise")
+            private Integer modifySpecialPromise;
+            @JsonProperty("enableStandardFactorratio")
+            private String enableStandardFactorratio;
+            @JsonProperty("fillupMoney")
+            private String fillupMoney;
+            @JsonProperty("ministerFund")
+            private String ministerFund;
+            @JsonProperty("localHistoryPlatformDays")
+            private String localHistoryPlatformDays;
+            @JsonProperty("hiddenCustomerPhone")
+            private String hiddenCustomerPhone;
+            @JsonProperty("autoCardPrint")
+            private String autoCardPrint;
+            @JsonProperty("insurancePeriodJoinTips")
+            private String insurancePeriodJoinTips;
+            @JsonProperty("telQualityRule")
+            private Integer telQualityRule;
+            @JsonProperty("runcardCertificateDate")
+            private String runcardCertificateDate;
+            @JsonProperty("localPondPlatformDays")
+            private String localPondPlatformDays;
+            @JsonProperty("localPondPlatformTimes")
+            private String localPondPlatformTimes;
+            @JsonProperty("canUsePlatformAtApply")
+            private String canUsePlatformAtApply;
+            @JsonProperty("platformCacheQueryMode")
+            private String platformCacheQueryMode;
+            @JsonProperty("queryCacheFlag")
+            private String queryCacheFlag;
+            @JsonProperty("exeRuleType")
+            private String exeRuleType;
+            @JsonProperty("rateFactorDisplayControl")
+            private String rateFactorDisplayControl;
+            @JsonProperty("eposFormat")
+            private String eposFormat;
+            @JsonProperty("taxFieldConfig")
+            private String taxFieldConfig;
+            @JsonProperty("needValidateSecond")
+            private String needValidateSecond;
+            @JsonProperty("lockedFactorRatio")
+            private String lockedFactorRatio;
+            @JsonProperty("areaFlag")
+            private String areaFlag;
+            @JsonProperty("ruleRemote")
+            private String ruleRemote;
+            @JsonProperty("printControl")
+            private String printControl;
+            @JsonProperty("platformRequestCode")
+            private String platformRequestCode;
+            @JsonProperty("usePlatformVersion")
+            private String usePlatformVersion;
+            @JsonProperty("checkRepeatApply")
+            private String checkRepeatApply;
+            @JsonProperty("checkRenewPolicy")
+            private String checkRenewPolicy;
+            @JsonProperty("addressCheckModeScript")
+            private String addressCheckModeScript;
+            @JsonProperty("factorCheckFlag")
+            private String factorCheckFlag;
+            @JsonProperty("factorMinRatioFlag")
+            private String factorMinRatioFlag;
+            @JsonProperty("riskScoreType")
+            private String riskScoreType;
+            @JsonProperty("riskScoreCheck")
+            private String riskScoreCheck;
+            @JsonProperty("riskScoreShow")
+            private String riskScoreShow;
+            @JsonProperty("isAutoDrawback")
+            private String isAutoDrawback;
+            @JsonProperty("decisionScript")
+            private String decisionScript;
+            @JsonProperty("invoicePrintAbbrName")
+            private String invoicePrintAbbrName;
+            @JsonProperty("companyName")
+            private String companyName;
+            @JsonProperty("companyCurtailName")
+            private String companyCurtailName;
+            @JsonProperty("needValidateThird")
+            private String needValidateThird;
+            @JsonProperty("countryCode")
+            private String countryCode;
+            @JsonProperty("state")
+            private String state;
+            @JsonProperty("city")
+            private String city;
+            @JsonProperty("documentObsoleteNum")
+            private String documentObsoleteNum;
+            @JsonProperty("taxAmount")
+            private String taxAmount;
+            @JsonProperty("platformVinAddress")
+            private String platformVinAddress;
+            @JsonProperty("ditchFactor")
+            private String ditchFactor;
+            @JsonProperty("queryCacheNewFlag")
+            private String queryCacheNewFlag;
+            @JsonProperty("myScoreBasicConfig")
+            private String myScoreBasicConfig;
+            @JsonProperty("endorseRateDate")
+            private String endorseRateDate;
+            @JsonProperty("signCode")
+            private String signCode;
+            @JsonProperty("epolicyStartDate")
+            private String epolicyStartDate;
+            @JsonProperty("epolicyCommonCode")
+            private String epolicyCommonCode;
+            @JsonProperty("certificationChannelId")
+            private String certificationChannelId;
+            @JsonProperty("duomControlSwitch")
+            private String duomControlSwitch;
+            @JsonProperty("platformAreaCode")
+            private String platformAreaCode;
+            @JsonProperty("registerDateFlag")
+            private Boolean registerDateFlag;
+            @JsonProperty("eInvoiceSwitchTrack")
+            private String eInvoiceSwitchTrack;
+            @JsonProperty("searchPlatformDriver")
+            private Boolean searchPlatformDriver;
+            @JsonProperty("searchVehicleRTA")
+            private Boolean searchVehicleRTA;
+            @JsonProperty("openAlienVehicle")
+            private Boolean openAlienVehicle;
+            @JsonProperty("disputedSettleMode")
+            private Boolean disputedSettleMode;
+            @JsonProperty("levelDepCodeFirstLevel")
+            private String levelDepCodeFirstLevel;
+            @JsonProperty("customerPriceExceed")
+            private Boolean customerPriceExceed;
+            @JsonProperty("sysErrorCustomerPriceExceed")
+            private Boolean sysErrorCustomerPriceExceed;
+            @JsonProperty("floatPriceSplit")
+            private Boolean floatPriceSplit;
+            @JsonProperty("dispRiskPricing")
+            private Boolean dispRiskPricing;
+            @JsonProperty("showModelDiscount")
+            private Boolean showModelDiscount;
+            @JsonProperty("autoUnderwritingRuleFlag")
+            private Boolean autoUnderwritingRuleFlag;
+            @JsonProperty("premiumVehicle")
+            private Boolean premiumVehicle;
+            @JsonProperty("floatCustomerNegotiatePrice")
+            private Boolean floatCustomerNegotiatePrice;
+            @JsonProperty("priceOfNewAndOldCarsHandle")
+            private Boolean priceOfNewAndOldCarsHandle;
+            @JsonProperty("allowRepeatApplyPolicy")
+            private Boolean allowRepeatApplyPolicy;
+            @JsonProperty("departmentCashFlag")
+            private String departmentCashFlag;
+            @JsonProperty("queryNeedAccessControl")
+            private Boolean queryNeedAccessControl;
+            @JsonProperty("deptEndorseNotCalulateVehicletex")
+            private Boolean deptEndorseNotCalulateVehicletex;
+            @JsonProperty("openPlatformVehicleTaxProcess")
+            private Boolean openPlatformVehicleTaxProcess;
+            @JsonProperty("dispRiskError")
+            private Boolean dispRiskError;
+            @JsonProperty("idCardColletControl")
+            private Boolean idCardColletControl;
+            @JsonProperty("goodDriver")
+            private Boolean goodDriver;
+            @JsonProperty("registerDate")
+            private Boolean registerDate;
+            @JsonProperty("viewDriver")
+            private Boolean viewDriver;
+            @JsonProperty("nationalPlatformThirdQuarter22")
+            private Boolean nationalPlatformThirdQuarter22;
+            @JsonProperty("payTaxesChoose")
+            private Boolean payTaxesChoose;
+            @JsonProperty("nationwideSecondQuarterFlag")
+            private Boolean nationwideSecondQuarterFlag;
+            @JsonProperty("useBeijingNewVehicletaxPlanform")
+            private Boolean useBeijingNewVehicletaxPlanform;
+            @JsonProperty("abstemiousCarTaxDerate")
+            private Boolean abstemiousCarTaxDerate;
+            @JsonProperty("runCardCertificateDate")
+            private Boolean runCardCertificateDate;
+            @JsonProperty("antiFraudJS")
+            private Boolean antiFraudJS;
+            @JsonProperty("needCheckAddress")
+            private Boolean needCheckAddress;
+            @JsonProperty("antiFraud")
+            private Boolean antiFraud;
+            @JsonProperty("realNameCheckForEpos")
+            private Boolean realNameCheckForEpos;
+            @JsonProperty("autoUploadHistoryPolicy")
+            private Boolean autoUploadHistoryPolicy;
+            @JsonProperty("detailsAddrFlag")
+            private Boolean detailsAddrFlag;
+            @JsonProperty("breakRules")
+            private Boolean breakRules;
+            @JsonProperty("oldPlanCodeEndorseUsePlatform")
+            private Boolean oldPlanCodeEndorseUsePlatform;
+            @JsonProperty("personnelNameDetails")
+            private Boolean personnelNameDetails;
+            @JsonProperty("motorFullEndorse")
+            private Boolean motorFullEndorse;
+            @JsonProperty("taxBeginDateNoControl")
+            private Boolean taxBeginDateNoControl;
+            @JsonProperty("showFloatCommision")
+            private Boolean showFloatCommision;
+            @JsonProperty("showGroupClaimRatio")
+            private Boolean showGroupClaimRatio;
+            @JsonProperty("customerGroupLabelFlag")
+            private Boolean customerGroupLabelFlag;
+            @JsonProperty("disputedSettleModeArbitrate")
+            private Boolean disputedSettleModeArbitrate;
+            @JsonProperty("paymentTypeControl")
+            private Boolean paymentTypeControl;
+            @JsonProperty("defaultBrandType")
+            private String defaultBrandType;
+            @JsonProperty("newCarNeedApplyQuery")
+            private Boolean newCarNeedApplyQuery;
+            @JsonProperty("steerCardVehicleTypeLockedByExhaustCapability")
+            private Boolean steerCardVehicleTypeLockedByExhaustCapability;
+            @JsonProperty("checkReturnCode")
+            private Boolean checkReturnCode;
+            @JsonProperty("policyFormat")
+            private Boolean policyFormat;
+            @JsonProperty("bargainingByPlanform")
+            private Boolean bargainingByPlanform;
+            @JsonProperty("needCustomerInfo")
+            private Boolean needCustomerInfo;
+            @JsonProperty("institutionCQ")
+            private Boolean institutionCQ;
+            @JsonProperty("vehicleSafetyInspection")
+            private Boolean vehicleSafetyInspection;
+            @JsonProperty("showPayAddAndDeleteBtn")
+            private Boolean showPayAddAndDeleteBtn;
+            @JsonProperty("showReparationsPremium")
+            private Boolean showReparationsPremium;
+            @JsonProperty("vehicleStateFlag")
+            private Boolean vehicleStateFlag;
+            @JsonProperty("personCert")
+            private Boolean personCert;
+            @JsonProperty("certDepartmentName")
+            private Boolean certDepartmentName;
+            @JsonProperty("taxVehicleType")
+            private Boolean taxVehicleType;
+            @JsonProperty("lastYearEndDateFlag")
+            private Boolean lastYearEndDateFlag;
+            @JsonProperty("payNo")
+            private Boolean payNo;
+            @JsonProperty("payFreeState")
+            private Boolean payFreeState;
+            @JsonProperty("deductionDueCode")
+            private Boolean deductionDueCode;
+            @JsonProperty("deductionDueType")
+            private Boolean deductionDueType;
+            @JsonProperty("deductionDueProportion")
+            private Boolean deductionDueProportion;
+            @JsonProperty("deduction")
+            private Boolean deduction;
+            @JsonProperty("freeNo")
+            private Boolean freeNo;
+            @JsonProperty("defaultBillTypePaper")
+            private Boolean defaultBillTypePaper;
+            @JsonProperty("clearTaxFlag")
+            private Boolean clearTaxFlag;
+            @JsonProperty("fromTaxRegisterNo")
+            private Boolean fromTaxRegisterNo;
+            @JsonProperty("vehicleTypeDiff")
+            private Boolean vehicleTypeDiff;
+            @JsonProperty("ncdDisplaySwitchFlag")
+            private Boolean ncdDisplaySwitchFlag;
+            @JsonProperty("manualInputFreeNoFlag")
+            private Boolean manualInputFreeNoFlag;
+            @JsonProperty("platfromTimeAutoChoose")
+            private Boolean platfromTimeAutoChoose;
+            @JsonProperty("configCertDepartment")
+            private Boolean configCertDepartment;
+            @JsonProperty("printOrderFlag")
+            private Boolean printOrderFlag;
+            @JsonProperty("runCardCertificateAndFirstRegister")
+            private Boolean runCardCertificateAndFirstRegister;
+            @JsonProperty("depCodeSubStrThree")
+            private String depCodeSubStrThree;
+            @JsonProperty("vocationPriceCanModified")
+            private Boolean vocationPriceCanModified;
+            @JsonProperty("usePreciseService")
+            private Boolean usePreciseService;
+            @JsonProperty("axaApplyPolicyFormat")
+            private Boolean axaApplyPolicyFormat;
+            @JsonProperty("enableEndorseFind")
+            private Boolean enableEndorseFind;
+            @JsonProperty("agentBusiness")
+            private Boolean agentBusiness;
+            @JsonProperty("needCertCardValidityDate")
+            private Boolean needCertCardValidityDate;
+            @JsonProperty("runcardCertificateDateInput")
+            private Boolean runcardCertificateDateInput;
+            @JsonProperty("showPersonnelInfoCheck")
+            private Boolean showPersonnelInfoCheck;
+            @JsonProperty("lockTaxBeginDate")
+            private Boolean lockTaxBeginDate;
+            @JsonProperty("vehicleTaxStatusMode")
+            private String vehicleTaxStatusMode;
+            @JsonProperty("epolicyNeedEmail")
+            private Boolean epolicyNeedEmail;
+            @JsonProperty("taxPaymentBeginTimeChoose")
+            private String taxPaymentBeginTimeChoose;
+            @JsonProperty("policyAssociationQuotation")
+            private Boolean policyAssociationQuotation;
+            @JsonProperty("showPureRiskPremium")
+            private Boolean showPureRiskPremium;
+            @JsonProperty("duomControlFlag")
+            private Boolean duomControlFlag;
+            @JsonProperty("nationalPlatformThirdQuarter23")
+            private Boolean nationalPlatformThirdQuarter23;
+            @JsonProperty("vinFromBasicOrPlatform")
+            private Boolean vinFromBasicOrPlatform;
+            @JsonProperty("steerCardVehicleType")
+            private String steerCardVehicleType;
+            @JsonProperty("businessChangePlatform")
+            private String businessChangePlatform;
+            @JsonProperty("policyInfoSendPlatform")
+            private String policyInfoSendPlatform;
+            @JsonProperty("trafficDataPlatform")
+            private String trafficDataPlatform;
+            @JsonProperty("PriceTypeDefault")
+            private String priceTypeDefault;
+            @JsonProperty("beCoveredWithVehicle")
+            private Boolean beCoveredWithVehicle;
+            @JsonProperty("peccancyTimeValueMode")
+            private String peccancyTimeValueMode;
+            @JsonProperty("isBeijingNewProcessOfCollector")
+            private Boolean isBeijingNewProcessOfCollector;
+            @JsonProperty("vehicleTaxCalculationWay")
+            private String vehicleTaxCalculationWay;
+            @JsonProperty("areaVehicleTax")
+            private String areaVehicleTax;
+            @JsonProperty("realNameIntercept")
+            private Boolean realNameIntercept;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PlanDefineDTO {
+            @JsonProperty("createdBy")
+            private String createdBy;
+            @JsonProperty("createdDate")
+            private String createdDate;
+            @JsonProperty("updatedBy")
+            private String updatedBy;
+            @JsonProperty("updatedDate")
+            private String updatedDate;
+            @JsonProperty("page")
+            private Integer page;
+            @JsonProperty("pageSize")
+            private Integer pageSize;
+            @JsonProperty("planCode")
+            private String planCode;
+            @JsonProperty("planType")
+            private String planType;
+            @JsonProperty("planChineseName")
+            private String planChineseName;
+            @JsonProperty("targetType")
+            private String targetType;
+            @JsonProperty("targetName")
+            private String targetName;
+            @JsonProperty("riskUnitName")
+            private String riskUnitName;
+            @JsonProperty("needValidate")
+            private String needValidate;
+            @JsonProperty("effectiveDateDelay")
+            private Integer effectiveDateDelay;
+            @JsonProperty("productType")
+            private String productType;
+            @JsonProperty("planSeries")
+            private String planSeries;
+            @JsonProperty("index")
+            private String index;
+            @JsonProperty("hasVehicleTax")
+            private String hasVehicleTax;
+            @JsonProperty("autoPlan")
+            private Boolean autoPlan;
+            @JsonProperty("compulsoryNotMoto")
+            private Boolean compulsoryNotMoto;
+            @JsonProperty("dutyAmount")
+            private Boolean dutyAmount;
+            @JsonProperty("businessInsure")
+            private Boolean businessInsure;
+            @JsonProperty("compulsoryInsure")
+            private Boolean compulsoryInsure;
+            @JsonProperty("virtualProduct")
+            private Boolean virtualProduct;
+            @JsonProperty("axa")
+            private Boolean axa;
+            @JsonProperty("autoBusinessType")
+            private String autoBusinessType;
+            @JsonProperty("businessMotorcycle")
+            private Boolean businessMotorcycle;
+            @JsonProperty("autoAccident")
+            private Boolean autoAccident;
+            @JsonProperty("healthPlanCode")
+            private Boolean healthPlanCode;
+            @JsonProperty("axaTour")
+            private Boolean axaTour;
+            @JsonProperty("axaAccident")
+            private Boolean axaAccident;
+            @JsonProperty("disputedSettleModeArbitrate")
+            private Boolean disputedSettleModeArbitrate;
+            @JsonProperty("forSale")
+            private Boolean forSale;
+            @JsonProperty("vehiclePurchasePrice")
+            private Boolean vehiclePurchasePrice;
+            @JsonProperty("nonCarRetailPlanCode")
+            private Boolean nonCarRetailPlanCode;
+            @JsonProperty("oldDutyOdamount")
+            private Boolean oldDutyOdamount;
+            @JsonProperty("personnalAccidentProduct")
+            private Boolean personnalAccidentProduct;
+            @JsonProperty("nonAutoCalculateModeProduct")
+            private Boolean nonAutoCalculateModeProduct;
+            @JsonProperty("premiumRateUnits")
+            private Double premiumRateUnits;
+            @JsonProperty("existPolicyExtendProduct")
+            private Boolean existPolicyExtendProduct;
+            @JsonProperty("ecardProduct")
+            private Boolean ecardProduct;
+            @JsonProperty("needAttachmentProduct")
+            private Boolean needAttachmentProduct;
+            @JsonProperty("insureTermRelate")
+            private Boolean insureTermRelate;
+            @JsonProperty("noTargetProduct")
+            private Boolean noTargetProduct;
+            @JsonProperty("equitmentInsure")
+            private Boolean equitmentInsure;
+            @JsonProperty("useMailNo")
+            private Boolean useMailNo;
+            @JsonProperty("noWriteInsure")
+            private Boolean noWriteInsure;
+            @JsonProperty("groupInsure")
+            private Boolean groupInsure;
+            @JsonProperty("chargesingleInsure")
+            private Boolean chargesingleInsure;
+            @JsonProperty("motorcycleInsure")
+            private Boolean motorcycleInsure;
+            @JsonProperty("limitAcceptAge")
+            private Boolean limitAcceptAge;
+            @JsonProperty("telSaleSpecial")
+            private Boolean telSaleSpecial;
+            @JsonProperty("needReturnCerti")
+            private Boolean needReturnCerti;
+            @JsonProperty("upOneYear")
+            private Boolean upOneYear;
+            @JsonProperty("shortRateCalculate")
+            private String shortRateCalculate;
+            @JsonProperty("premiumCarry")
+            private String premiumCarry;
+            @JsonProperty("upOneYearPlan")
+            private Boolean upOneYearPlan;
+            @JsonProperty("changeSelectedTargetTable")
+            private Boolean changeSelectedTargetTable;
+            @JsonProperty("immediateEffect")
+            private Boolean immediateEffect;
+            @JsonProperty("autoBusiness")
+            private Boolean autoBusiness;
+            @JsonProperty("motorcycleCompulsory")
+            private Boolean motorcycleCompulsory;
+            @JsonProperty("telSalesBusiness")
+            private Boolean telSalesBusiness;
+            @JsonProperty("compulsoryMoto")
+            private Boolean compulsoryMoto;
+            @JsonProperty("planCode504")
+            private Boolean planCode504;
+            @JsonProperty("riAmountMode")
+            private String riAmountMode;
+            @JsonProperty("axaFamily")
+            private Boolean axaFamily;
+            @JsonProperty("axaGolf")
+            private Boolean axaGolf;
+            @JsonProperty("useReverse")
+            private Boolean useReverse;
+            @JsonProperty("autoRenewal")
+            private Boolean autoRenewal;
+            @JsonProperty("showEndoresMemoPaymentWay")
+            private Boolean showEndoresMemoPaymentWay;
+            @JsonProperty("reportEngine")
+            private String reportEngine;
+            @JsonProperty("tireRisk")
+            private Boolean tireRisk;
+            @JsonProperty("masterAdditionControl")
+            private Boolean masterAdditionControl;
+            @JsonProperty("axaLiability")
+            private Boolean axaLiability;
+            @JsonProperty("productVersion")
+            private Boolean productVersion;
+            @JsonProperty("nonCarRetail")
+            private Boolean nonCarRetail;
+            @JsonProperty("useXslfo")
+            private Boolean useXslfo;
+            @JsonProperty("applyUseXslfo")
+            private Boolean applyUseXslfo;
+            @JsonProperty("underwritePlanSeries")
+            private String underwritePlanSeries;
+            @JsonProperty("enonmotorPlan")
+            private Boolean enonmotorPlan;
+            @JsonProperty("planReApplyWay")
+            private String planReApplyWay;
+            @JsonProperty("reinsCededPlan")
+            private Boolean reinsCededPlan;
+            @JsonProperty("nonNeedCertNo")
+            private Boolean nonNeedCertNo;
+            @JsonProperty("groupTravel")
+            private Boolean groupTravel;
+            @JsonProperty("enonmotor")
+            private Boolean enonmotor;
+            @JsonProperty("groupHealth")
+            private Boolean groupHealth;
+            @JsonProperty("checkAmount")
+            private Boolean checkAmount;
+            @JsonProperty("getByRule")
+            private Boolean getByRule;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class VehicleDTO {
+            @JsonProperty("page")
+            private Integer page;
+            @JsonProperty("pageSize")
+            private Integer pageSize;
+            @JsonProperty("priceType")
+            private String priceType;
+            @JsonProperty("vehicleTax")
+            private VehicleTaxDTO vehicleTax;
+            @JsonProperty("departmentCode")
+            private String departmentCode;
+            @JsonProperty("local")
+            private Boolean local;
+            @JsonProperty("targetTotalActualPremium")
+            private Integer targetTotalActualPremium;
+
+            @NoArgsConstructor
+            @Data
+            public static class VehicleTaxDTO {
+                @JsonProperty("page")
+                private Integer page;
+                @JsonProperty("pageSize")
+                private Integer pageSize;
+                @JsonProperty("startDate")
+                private String startDate;
+                @JsonProperty("endDate")
+                private String endDate;
+                @JsonProperty("lateDay")
+                private Integer lateDay;
+                @JsonProperty("taxTableNo")
+                private String taxTableNo;
+                @JsonProperty("urgentState")
+                private Boolean urgentState;
+                @JsonProperty("endorseChange")
+                private Boolean endorseChange;
+                @JsonProperty("taxDocumentDateString")
+                private String taxDocumentDateString;
+                @JsonProperty("startDateString")
+                private String startDateString;
+                @JsonProperty("endDateString")
+                private String endDateString;
+                @JsonProperty("ableShowVehicleStates")
+                private String ableShowVehicleStates;
+                @JsonProperty("unableShowField")
+                private UnableShowFieldDTO unableShowField;
+                @JsonProperty("disableField")
+                private DisableFieldDTO disableField;
+                @JsonProperty("recordVehicleTax")
+                private Boolean recordVehicleTax;
+                @JsonProperty("payTaxe")
+                private Boolean payTaxe;
+                @JsonProperty("lowercaseVehicleTaxAmount")
+                private Integer lowercaseVehicleTaxAmount;
+
+                @NoArgsConstructor
+                @Data
+                public static class UnableShowFieldDTO {
+                    @JsonProperty("P")
+                    private String p;
+                    @JsonProperty("T")
+                    private String t;
+                }
+
+                @NoArgsConstructor
+                @Data
+                public static class DisableFieldDTO {
+                    @JsonProperty("P")
+                    private String p;
+                    @JsonProperty("T")
+                    private String t;
+                }
+            }
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PolicyBaseDTO {
+            @JsonProperty("page")
+            private Integer page;
+            @JsonProperty("pageSize")
+            private Integer pageSize;
+            @JsonProperty("inputByName")
+            private String inputByName;
+            @JsonProperty("inputBy")
+            private String inputBy;
+            @JsonProperty("planCode")
+            private String planCode;
+            @JsonProperty("departmentCode")
+            private String departmentCode;
+            @JsonProperty("includeSubDep")
+            private Boolean includeSubDep;
+            @JsonProperty("insuranceBeginTime")
+            private String insuranceBeginTime;
+            @JsonProperty("insuranceEndTime")
+            private String insuranceEndTime;
+            @JsonProperty("businessClass")
+            private String businessClass;
+            @JsonProperty("rateScale")
+            private Integer rateScale;
+            @JsonProperty("rateTwoScale")
+            private Integer rateTwoScale;
+            @JsonProperty("insuranceBeginTimeSY")
+            private String insuranceBeginTimeSY;
+            @JsonProperty("disputedSettleMode")
+            private String disputedSettleMode;
+            @JsonProperty("claimRecordBizSize")
+            private Integer claimRecordBizSize;
+            @JsonProperty("claimRecordSize")
+            private Integer claimRecordSize;
+            @JsonProperty("allClaimAmountBiz")
+            private Integer allClaimAmountBiz;
+            @JsonProperty("allClaimAmount")
+            private Integer allClaimAmount;
+            @JsonProperty("illegalInsuredCertFlag")
+            private Boolean illegalInsuredCertFlag;
+            @JsonProperty("immediateEffectFlag")
+            private String immediateEffectFlag;
+            @JsonProperty("isOverdue")
+            private Boolean isOverdue;
+            @JsonProperty("minRatioMode")
+            private String minRatioMode;
+            @JsonProperty("factorScale")
+            private String factorScale;
+            @JsonProperty("insuranceEndTimeSY")
+            private String insuranceEndTimeSY;
+            @JsonProperty("shortTimeCoefficientShow")
+            private Boolean shortTimeCoefficientShow;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PolicyPricingDTO {
+            @JsonProperty("page")
+            private Integer page;
+            @JsonProperty("pageSize")
+            private Integer pageSize;
+            @JsonProperty("autoRuleRatioOD")
+            private Double autoRuleRatioOD;
+            @JsonProperty("autoRuleRatioTP")
+            private Double autoRuleRatioTP;
+            @JsonProperty("autoRuleRatioTHEFT")
+            private Double autoRuleRatioTHEFT;
+            @JsonProperty("autoRuleRatioOTHER")
+            private Double autoRuleRatioOTHER;
+            @JsonProperty("autoFloatHandingCost")
+            private Integer autoFloatHandingCost;
+            @JsonProperty("isMortgage")
+            private String isMortgage;
+            @JsonProperty("businessInOrOut")
+            private String businessInOrOut;
+            @JsonProperty("ruleRatioOD")
+            private Double ruleRatioOD;
+            @JsonProperty("ruleRatioTP")
+            private Double ruleRatioTP;
+            @JsonProperty("ruleRatioTHEFT")
+            private Double ruleRatioTHEFT;
+            @JsonProperty("ruleRatioOTHER")
+            private Double ruleRatioOTHER;
+            @JsonProperty("comprehensiveScore")
+            private Integer comprehensiveScore;
+            @JsonProperty("electronicCertInfo")
+            private List<ElectronicCertInfoDTO> electronicCertInfo;
+            @JsonProperty("newColor")
+            private String newColor;
+
+            @NoArgsConstructor
+            @Data
+            public static class ElectronicCertInfoDTO {
+                @JsonProperty("name")
+                private String name;
+            }
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class OneCarOnePriceInformationDTO {
+            @JsonProperty("page")
+            private Integer page;
+            @JsonProperty("pageSize")
+            private Integer pageSize;
+            @JsonProperty("vehiclePriceDiscount")
+            private Integer vehiclePriceDiscount;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class MainVersionNoMapDTO {
+            @JsonProperty("compulsoryVersionNo")
+            private String compulsoryVersionNo;
+            @JsonProperty("versionNo")
+            private String versionNo;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class SystemCommonParameterDTO {
+            @JsonProperty("page")
+            private Integer page;
+            @JsonProperty("pageSize")
+            private Integer pageSize;
+            @JsonProperty("companyName")
+            private String companyName;
+            @JsonProperty("companyCurtailName")
+            private String companyCurtailName;
+            @JsonProperty("officialWebsite")
+            private String officialWebsite;
+            @JsonProperty("serviceTel1")
+            private String serviceTel1;
+            @JsonProperty("serviceTel2")
+            private String serviceTel2;
+            @JsonProperty("autoImageServiceUrlNew")
+            private String autoImageServiceUrlNew;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class SaleAgentPageDTO {
+            @JsonProperty("page")
+            private Integer page;
+            @JsonProperty("pageSize")
+            private Integer pageSize;
+            @JsonProperty("commonParameterList")
+            private List<CommonParameterListDTO> commonParameterList;
+            @JsonProperty("isChecked")
+            private IsCheckedDTO isChecked;
+            @JsonProperty("saleGroupCode")
+            private String saleGroupCode;
+            @JsonProperty("saleGroupName")
+            private String saleGroupName;
+            @JsonProperty("disabled")
+            private Boolean disabled;
+
+            @NoArgsConstructor
+            @Data
+            public static class IsCheckedDTO {
+                @JsonProperty("page")
+                private Integer page;
+                @JsonProperty("pageSize")
+                private Integer pageSize;
+                @JsonProperty("valueCode")
+                private String valueCode;
+                @JsonProperty("valueChineseName")
+                private String valueChineseName;
+                @JsonProperty("userId")
+                private String userId;
+            }
+
+            @NoArgsConstructor
+            @Data
+            public static class CommonParameterListDTO {
+                @JsonProperty("page")
+                private Integer page;
+                @JsonProperty("pageSize")
+                private Integer pageSize;
+                @JsonProperty("valueCode")
+                private String valueCode;
+                @JsonProperty("valueChineseName")
+                private String valueChineseName;
+                @JsonProperty("userId")
+                private String userId;
+            }
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class BusinessTypePageDTO {
+            @JsonProperty("page")
+            private Integer page;
+            @JsonProperty("pageSize")
+            private Integer pageSize;
+            @JsonProperty("commonParameterList")
+            private List<CommonParameterListDTO> commonParameterList;
+            @JsonProperty("isChecked")
+            private IsCheckedDTO isChecked;
+            @JsonProperty("disabled")
+            private Boolean disabled;
+
+            @NoArgsConstructor
+            @Data
+            public static class IsCheckedDTO {
+                @JsonProperty("page")
+                private Integer page;
+                @JsonProperty("pageSize")
+                private Integer pageSize;
+                @JsonProperty("valueCode")
+                private String valueCode;
+                @JsonProperty("valueChineseName")
+                private String valueChineseName;
+                @JsonProperty("businessTypeDetailPage")
+                private BusinessTypeDetailPageDTO businessTypeDetailPage;
+
+                @NoArgsConstructor
+                @Data
+                public static class BusinessTypeDetailPageDTO {
+                    @JsonProperty("page")
+                    private Integer page;
+                    @JsonProperty("pageSize")
+                    private Integer pageSize;
+                    @JsonProperty("commonParameterList")
+                    private List<CommonParameterListDTO> commonParameterList;
+                    @JsonProperty("isChecked")
+                    private Object isChecked;
+                    @JsonProperty("disabled")
+                    private Boolean disabled;
+
+                    @NoArgsConstructor
+                    @Data
+                    public static class CommonParameterListDTO {
+                        @JsonProperty("createdBy")
+                        private String createdBy;
+                        @JsonProperty("createdDate")
+                        private String createdDate;
+                        @JsonProperty("updatedBy")
+                        private String updatedBy;
+                        @JsonProperty("updatedDate")
+                        private String updatedDate;
+                        @JsonProperty("displayNo")
+                        private Integer displayNo;
+                        @JsonProperty("page")
+                        private Integer page;
+                        @JsonProperty("pageSize")
+                        private Integer pageSize;
+                        @JsonProperty("effectiveDate")
+                        private String effectiveDate;
+                        @JsonProperty("departmentCode")
+                        private String departmentCode;
+                        @JsonProperty("collectionCode")
+                        private String collectionCode;
+                        @JsonProperty("collectionName")
+                        private String collectionName;
+                        @JsonProperty("valueCode")
+                        private String valueCode;
+                        @JsonProperty("valueChineseName")
+                        private String valueChineseName;
+                        @JsonProperty("valueChineseAbbrName")
+                        private String valueChineseAbbrName;
+                        @JsonProperty("valueEnglishName")
+                        private String valueEnglishName;
+                        @JsonProperty("valueEnglishAbbrName")
+                        private String valueEnglishAbbrName;
+                    }
+                }
+            }
+
+            @NoArgsConstructor
+            @Data
+            public static class CommonParameterListDTO {
+                @JsonProperty("page")
+                private Integer page;
+                @JsonProperty("pageSize")
+                private Integer pageSize;
+                @JsonProperty("valueCode")
+                private String valueCode;
+                @JsonProperty("valueChineseName")
+                private String valueChineseName;
+                @JsonProperty("businessTypeDetailPage")
+                private BusinessTypeDetailPageDTO businessTypeDetailPage;
+
+                @NoArgsConstructor
+                @Data
+                public static class BusinessTypeDetailPageDTO {
+                    @JsonProperty("page")
+                    private Integer page;
+                    @JsonProperty("pageSize")
+                    private Integer pageSize;
+                    @JsonProperty("commonParameterList")
+                    private List<Object> commonParameterList;
+                    @JsonProperty("isChecked")
+                    private IsCheckedDTO isChecked;
+                    @JsonProperty("disabled")
+                    private Boolean disabled;
+
+                    @NoArgsConstructor
+                    @Data
+                    public static class IsCheckedDTO {
+                        @JsonProperty("createdBy")
+                        private String createdBy;
+                        @JsonProperty("createdDate")
+                        private String createdDate;
+                        @JsonProperty("updatedBy")
+                        private String updatedBy;
+                        @JsonProperty("updatedDate")
+                        private String updatedDate;
+                        @JsonProperty("displayNo")
+                        private Integer displayNo;
+                        @JsonProperty("page")
+                        private Integer page;
+                        @JsonProperty("pageSize")
+                        private Integer pageSize;
+                        @JsonProperty("effectiveDate")
+                        private String effectiveDate;
+                        @JsonProperty("departmentCode")
+                        private String departmentCode;
+                        @JsonProperty("collectionCode")
+                        private String collectionCode;
+                        @JsonProperty("collectionName")
+                        private String collectionName;
+                        @JsonProperty("valueCode")
+                        private String valueCode;
+                        @JsonProperty("valueChineseName")
+                        private String valueChineseName;
+                        @JsonProperty("valueChineseAbbrName")
+                        private String valueChineseAbbrName;
+                        @JsonProperty("valueEnglishName")
+                        private String valueEnglishName;
+                        @JsonProperty("valueEnglishAbbrName")
+                        private String valueEnglishAbbrName;
+                    }
+
+                }
+            }
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class IssueRealNamePageDTO {
+            @JsonProperty("page")
+            private Integer page;
+            @JsonProperty("pageSize")
+            private Integer pageSize;
+            @JsonProperty("commonParameterList")
+            private List<?> commonParameterList;
+            @JsonProperty("disabled")
+            private Boolean disabled;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class GroupAgentPageDTO {
+            @JsonProperty("page")
+            private Integer page;
+            @JsonProperty("pageSize")
+            private Integer pageSize;
+            @JsonProperty("commonParameterList")
+            private List<CommonParameterListDTO> commonParameterList;
+            @JsonProperty("isChecked")
+            private IsCheckedDTO isChecked;
+            @JsonProperty("agentLevelCode")
+            private String agentLevelCode;
+            @JsonProperty("agentDefineNameAbbr")
+            private String agentDefineNameAbbr;
+            @JsonProperty("customerNameList")
+            private List<?> customerNameList;
+            @JsonProperty("disabled")
+            private Boolean disabled;
+
+            @NoArgsConstructor
+            @Data
+            public static class IsCheckedDTO {
+                @JsonProperty("page")
+                private Integer page;
+                @JsonProperty("pageSize")
+                private Integer pageSize;
+                @JsonProperty("valueCode")
+                private String valueCode;
+                @JsonProperty("valueChineseName")
+                private String valueChineseName;
+                @JsonProperty("valueChineseAbbrName")
+                private String valueChineseAbbrName;
+            }
+
+            @NoArgsConstructor
+            @Data
+            public static class CommonParameterListDTO {
+                @JsonProperty("page")
+                private Integer page;
+                @JsonProperty("pageSize")
+                private Integer pageSize;
+                @JsonProperty("valueCode")
+                private String valueCode;
+                @JsonProperty("valueChineseName")
+                private String valueChineseName;
+                @JsonProperty("valueChineseAbbrName")
+                private String valueChineseAbbrName;
+            }
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PolicyCoverageListDTO {
+            @JsonProperty("page")
+            private Integer page;
+            @JsonProperty("pageSize")
+            private Integer pageSize;
+            @JsonProperty("dutyCode")
+            private String dutyCode;
+            @JsonProperty("dutyChineseName")
+            private String dutyChineseName;
+            @JsonProperty("seats")
+            private Integer seats;
+            @JsonProperty("premiumRate")
+            private Integer premiumRate;
+            @JsonProperty("deductionAmount")
+            private Integer deductionAmount;
+            @JsonProperty("deductible")
+            private Integer deductible;
+            @JsonProperty("medicalAmount")
+            private Integer medicalAmount;
+            @JsonProperty("dieAmount")
+            private Integer dieAmount;
+            @JsonProperty("propertyAmount")
+            private Integer propertyAmount;
+            @JsonProperty("noFaultMedicalAmount")
+            private Integer noFaultMedicalAmount;
+            @JsonProperty("noFaultDieAmount")
+            private Integer noFaultDieAmount;
+            @JsonProperty("noFaultPropertyAmount")
+            private Integer noFaultPropertyAmount;
+            @JsonProperty("allAmount")
+            private Integer allAmount;
+            @JsonProperty("insuredAmount")
+            private Integer insuredAmount;
+            @JsonProperty("totalStandardPremium")
+            private Integer totalStandardPremium;
+            @JsonProperty("totalAgreePremium")
+            private Integer totalAgreePremium;
+            @JsonProperty("totalActualPremium")
+            private Integer totalActualPremium;
+            @JsonProperty("totalNetPremium")
+            private Integer totalNetPremium;
+            @JsonProperty("addedValueTax")
+            private Integer addedValueTax;
+            @JsonProperty("mainCoverage")
+            private String mainCoverage;
+            @JsonProperty("insuredAmountDescList")
+            private List<InsuredAmountDescListDTO> insuredAmountDescList;
+            @JsonProperty("equipmentInsureAmount")
+            private Integer equipmentInsureAmount;
+            @JsonProperty("newFlag")
+            private Boolean newFlag;
+            @JsonProperty("modifyFlag")
+            private Boolean modifyFlag;
+            @JsonProperty("calculateEndorsePremium")
+            private Integer calculateEndorsePremium;
+            @JsonProperty("checkTotalNetPremium")
+            private Integer checkTotalNetPremium;
+            @JsonProperty("checkAddedValueTax")
+            private Integer checkAddedValueTax;
+            @JsonProperty("checked")
+            private Boolean checked;
+            @JsonProperty("deductionRate")
+            private Integer deductionRate;
+            @JsonProperty("serviceNum")
+            private String serviceNum;
+            @JsonProperty("mileage")
+            private String mileage;
+            @JsonProperty("setMeal")
+            private String setMeal;
+            @JsonProperty("isTelpeson")
+            private String isTelpeson;
+            @JsonProperty("telPhone")
+            private String telPhone;
+            @JsonProperty("initShow")
+            private String initShow;
+            @JsonProperty("refundFlag")
+            private String refundFlag;
+            @JsonProperty("coverageNum")
+            private Integer coverageNum;
+            @JsonProperty("isShareSumDutyFlag")
+            private String isShareSumDutyFlag;
+            @JsonProperty("priority")
+            private String priority;
+            @JsonProperty("ariExpense")
+            private Integer ariExpense;
+            @JsonProperty("newEquipmentList")
+            private List<?> newEquipmentList;
+            @JsonProperty("chargingPostDataList")
+            private List<ChargingPostDataListDTO> chargingPostDataList;
+
+            @NoArgsConstructor
+            @Data
+            public static class InsuredAmountDescListDTO {
+                @JsonProperty("createdBy")
+                private String createdBy;
+                @JsonProperty("updatedBy")
+                private String updatedBy;
+                @JsonProperty("page")
+                private Integer page;
+                @JsonProperty("pageSize")
+                private Integer pageSize;
+                @JsonProperty("factorCode")
+                private String factorCode;
+                @JsonProperty("factorName")
+                private String factorName;
+                @JsonProperty("startContent")
+                private String startContent;
+                @JsonProperty("unit")
+                private String unit;
+                @JsonProperty("orderId")
+                private String orderId;
+                @JsonProperty("tagType")
+                private String tagType;
+                @JsonProperty("dieAmount")
+                private String dieAmount;
+                @JsonProperty("classValue")
+                private String classValue;
+                @JsonProperty("medicalAmount")
+                private String medicalAmount;
+                @JsonProperty("propertyAmount")
+                private String propertyAmount;
+                @JsonProperty("noFaultDieAmount")
+                private String noFaultDieAmount;
+                @JsonProperty("noFaultMedicalAmount")
+                private String noFaultMedicalAmount;
+                @JsonProperty("noFaultPropertyAmount")
+                private String noFaultPropertyAmount;
+            }
+
+            @NoArgsConstructor
+            @Data
+            public static class ChargingPostDataListDTO {
+                @JsonProperty("displayNo")
+                private Integer displayNo;
+                @JsonProperty("page")
+                private Integer page;
+                @JsonProperty("pageSize")
+                private Integer pageSize;
+                @JsonProperty("dutyCode")
+                private String dutyCode;
+                @JsonProperty("detailCode")
+                private String detailCode;
+                @JsonProperty("detailName")
+                private String detailName;
+            }
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PolicyRatioListDTO {
+            @JsonProperty("page")
+            private Integer page;
+            @JsonProperty("pageSize")
+            private Integer pageSize;
+            @JsonProperty("dutyCode")
+            private String dutyCode;
+            @JsonProperty("factorCode")
+            private String factorCode;
+            @JsonProperty("factorName")
+            private String factorName;
+            @JsonProperty("factorValue")
+            private String factorValue;
+            @JsonProperty("ratioOd")
+            private Double ratioOd;
+            @JsonProperty("ratioTp")
+            private Double ratioTp;
+            @JsonProperty("ratioTheft")
+            private Double ratioTheft;
+            @JsonProperty("ratioOther")
+            private Double ratioOther;
+            @JsonProperty("ratiototal")
+            private Double ratiototal;
+            @JsonProperty("tagType")
+            private String tagType;
+            @JsonProperty("collectionCode")
+            private String collectionCode;
+            @JsonProperty("viewFlag")
+            private Boolean viewFlag;
+            @JsonProperty("ratioMap")
+            private RatioMapDTO ratioMap;
+            @JsonProperty("labelName")
+            private String labelName;
+            @JsonProperty("isVehicleRatio")
+            private String isVehicleRatio;
+            @JsonProperty("averageRatio")
+            private Double averageRatio;
+
+            @NoArgsConstructor
+            @Data
+            public static class RatioMapDTO {
+            }
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class FloatDiscountConfigListDTO {
+            @JsonProperty("createdBy")
+            private String createdBy;
+            @JsonProperty("updatedBy")
+            private String updatedBy;
+            @JsonProperty("page")
+            private Integer page;
+            @JsonProperty("pageSize")
+            private Integer pageSize;
+            @JsonProperty("floatId")
+            private String floatId;
+            @JsonProperty("floatName")
+            private String floatName;
+            @JsonProperty("floatValue")
+            private Double floatValue;
+            @JsonProperty("departmentCode")
+            private String departmentCode;
+            @JsonProperty("departmentName")
+            private String departmentName;
+            @JsonProperty("displayFlag")
+            private String displayFlag;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class OverlayPlanListDTO {
+            @JsonProperty("departmentProductList")
+            private List<DepartmentProductListDTO> departmentProductList;
+            @JsonProperty("planSeries")
+            private String planSeries;
+            @JsonProperty("planChineseName")
+            private String planChineseName;
+            @JsonProperty("personFlag")
+            private String personFlag;
+            @JsonProperty("planCode")
+            private String planCode;
+
+            @NoArgsConstructor
+            @Data
+            public static class DepartmentProductListDTO {
+                @JsonProperty("productCode")
+                private String productCode;
+                @JsonProperty("productName")
+                private String productName;
+            }
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PageLinkageConfigurationListDTO {
+            @JsonProperty("createdBy")
+            private String createdBy;
+            @JsonProperty("updatedBy")
+            private String updatedBy;
+            @JsonProperty("page")
+            private Integer page;
+            @JsonProperty("pageSize")
+            private Integer pageSize;
+            @JsonProperty("productCode")
+            private String productCode;
+            @JsonProperty("dutyCode")
+            private String dutyCode;
+            @JsonProperty("disabledFalseValue")
+            private String disabledFalseValue;
+        }
+    }
+}

+ 6 - 1
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerPaymentResponse.java

@@ -4,11 +4,16 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.util.List;
 
 @NoArgsConstructor
 @Data
-public class AnShengCrawlerPaymentResponse {
+public class AnShengCrawlerPaymentResponse  implements Serializable, AnShengCrawlerBaseResponse{
+
+    @Serial
+    private static final long serialVersionUID = 1984827116922572490L;
 
     @JsonProperty("code")
     private Integer code;

+ 6 - 1
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerQueryDocumentsInformationResponse.java

@@ -4,11 +4,16 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.util.List;
 
 @NoArgsConstructor
 @Data
-public class AnShengCrawlerQueryDocumentsInformationResponse {
+public class AnShengCrawlerQueryDocumentsInformationResponse  implements Serializable, AnShengCrawlerBaseResponse{
+
+    @Serial
+    private static final long serialVersionUID = 2696657582396262794L;
 
     @JsonProperty("code")
     private Integer code;

+ 6 - 1
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerSearchVehicleByVinResponse.java

@@ -5,11 +5,16 @@ import com.jzg.quotation.commons.filter.CarModelsFilter;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.util.List;
 
 @NoArgsConstructor
 @Data
-public class AnShengCrawlerSearchVehicleByVinResponse {
+public class AnShengCrawlerSearchVehicleByVinResponse  implements Serializable, AnShengCrawlerBaseResponse{
+
+    @Serial
+    private static final long serialVersionUID = -8125744778727890408L;
 
     @JsonProperty("code")
     private Integer code;

+ 9 - 1
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerVerifyResponse.java

@@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serial;
+import java.io.Serializable;
 
 
 /**
@@ -14,11 +16,17 @@ import lombok.NoArgsConstructor;
  **/
 @NoArgsConstructor
 @Data
-public class AnShengCrawlerVerifyResponse {
+public class AnShengCrawlerVerifyResponse  implements Serializable, AnShengCrawlerBaseResponse {
+
+    @Serial
+    private static final long serialVersionUID = -6434401526148231621L;
 
     @JsonProperty("code")
     private Integer code;
 
+    @JsonProperty("message")
+    private String message;
+
     @JsonProperty("data")
     private DataDTO data;
 

+ 3 - 1
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/AnShengCrawlerLoginService.java

@@ -1,5 +1,7 @@
 package com.jzg.quotation.ansheng.crawler.service;
 
+import org.springframework.http.HttpHeaders;
+
 public interface AnShengCrawlerLoginService {
 
     /**
@@ -8,6 +10,6 @@ public interface AnShengCrawlerLoginService {
      * @param userName 用户名
      * @param password 密码
      */
-    void login(String userName, String password);
+    String login(String userName, String password);
 
 }

+ 28 - 0
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/AnShengCrawlerQuoteProcessService.java

@@ -0,0 +1,28 @@
+package com.jzg.quotation.ansheng.crawler.service;
+
+import com.jzg.quotation.ansheng.crawler.entity.response.AnShengCrawlerGetUserDetailResponse;
+import org.springframework.http.HttpHeaders;
+
+public interface AnShengCrawlerQuoteProcessService {
+
+    /**
+     * 获取请求头信息
+     *
+     * @param username 用户名
+     * @param password 密码
+     * @return 请求头
+     */
+    HttpHeaders getHttpHeaders(String username, String password);
+
+
+    /**
+     * 获取归属信息
+     *
+     * @param agreementId 协议好
+     * @param headers     请求头
+     * @return 归属信息
+     */
+    AnShengCrawlerGetUserDetailResponse.DataDTO.AgentDefineDTO getUserDetailResponse(String agreementId, HttpHeaders headers);
+
+
+}

+ 23 - 7
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/impl/AnShengCrawlerLoginServiceImpl.java

@@ -1,6 +1,8 @@
 package com.jzg.quotation.ansheng.crawler.service.impl;
 
 import com.jzg.commons.entity.quote.vo.identify.SliderCaptchaVo;
+import com.jzg.commons.exception.SystemException;
+import com.jzg.quotation.ansheng.crawler.component.AnShengCrawlerCacheComponent;
 import com.jzg.quotation.ansheng.crawler.component.AnShengCrawlerRequestComponent;
 import com.jzg.quotation.ansheng.crawler.entity.request.AnShengCrawlerCheckLoginRequest;
 import com.jzg.quotation.ansheng.crawler.entity.request.AnShengCrawlerCheckVerificationRequest;
@@ -8,11 +10,14 @@ import com.jzg.quotation.ansheng.crawler.entity.request.AnShengCrawlerVerifyRequ
 import com.jzg.quotation.ansheng.crawler.entity.response.AnShengCrawlerVerifyResponse;
 import com.jzg.quotation.ansheng.crawler.service.AnShengCrawlerLoginService;
 import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
+import com.jzg.quotation.commons.utils.CookieParseUtils;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.HttpHeaders;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Map;
 
 @Service
 @RequiredArgsConstructor
@@ -22,18 +27,23 @@ public class AnShengCrawlerLoginServiceImpl implements AnShengCrawlerLoginServic
 
     private final ExteriorUtilsRequest exteriorUtilsRequest;
 
+    private final AnShengCrawlerCacheComponent anShengCrawlerCacheComponent;
+
+    // 登录次数
     private static final int LOGIN_NUMBER = 3;
 
+
     @Override
-    public void login(String username, String password) {
+    public String login(String username, String password) {
         HttpHeaders httpHeaders = new HttpHeaders();
-        // 获取验证码
+
+        // 遍历登录次数
         for (int i = 0; i < LOGIN_NUMBER; i++) {
+            // 获取验证码
             AnShengCrawlerVerifyRequest anShengCrawlerVerifyRequest = new AnShengCrawlerVerifyRequest(username, password);
             AnShengCrawlerVerifyResponse.DataDTO dataDTO = anShengCrawlerRequestComponent.crawlerVerify(anShengCrawlerVerifyRequest, httpHeaders);
-
-            AnShengCrawlerVerifyResponse.DataDTO.ImageVerificationDTO imageVerification = dataDTO.getImageVerification();
             // 滑块验证码识别
+            AnShengCrawlerVerifyResponse.DataDTO.ImageVerificationDTO imageVerification = dataDTO.getImageVerification();
             List<Integer> integers = exteriorUtilsRequest.sliderCaptchaIdentify(new SliderCaptchaVo(imageVerification.getOriginImage(), imageVerification.getShadeImage()));
             // 验证验证码
             AnShengCrawlerCheckVerificationRequest anShengCrawlerCheckVerificationRequest = new AnShengCrawlerCheckVerificationRequest(integers.get(0)
@@ -43,11 +53,17 @@ public class AnShengCrawlerLoginServiceImpl implements AnShengCrawlerLoginServic
                 // 登录
                 AnShengCrawlerCheckLoginRequest anShengCrawlerCheckLoginRequest = new AnShengCrawlerCheckLoginRequest(imageVerification.getUserFlag(), username, password);
                 anShengCrawlerRequestComponent.login(anShengCrawlerCheckLoginRequest, httpHeaders);
-                //  授权
-                anShengCrawlerRequestComponent.authorize(httpHeaders);
-                break;
+                // 验证登录
+                String authorizeUrl = anShengCrawlerRequestComponent.authorize(httpHeaders);
+                anShengCrawlerRequestComponent.securityCheck(authorizeUrl, httpHeaders);
+                String cookies = anShengCrawlerRequestComponent.securityCheck(httpHeaders);
+                // 缓存登录信息
+                anShengCrawlerCacheComponent.cacheAuthorization(username, cookies);
+                return cookies;
             }
         }
+
+        throw new SystemException("登录失败,请重新登录");
     }
 
 }

+ 55 - 0
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/impl/AnShengCrawlerQuoteProcessServiceImpl.java

@@ -0,0 +1,55 @@
+package com.jzg.quotation.ansheng.crawler.service.impl;
+
+import com.jzg.commons.exception.SystemException;
+import com.jzg.commons.util.StringUtils;
+import com.jzg.quotation.ansheng.crawler.component.AnShengCrawlerCacheComponent;
+import com.jzg.quotation.ansheng.crawler.component.AnShengCrawlerRequestComponent;
+import com.jzg.quotation.ansheng.crawler.entity.response.AnShengCrawlerGetUserDetailResponse;
+import com.jzg.quotation.ansheng.crawler.service.AnShengCrawlerLoginService;
+import com.jzg.quotation.ansheng.crawler.service.AnShengCrawlerQuoteProcessService;
+import com.jzg.quotation.commons.component.DistributedLockComponent;
+import com.jzg.quotation.commons.component.RedissonComponent;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.HttpHeaders;
+import org.springframework.stereotype.Service;
+
+import java.time.Duration;
+
+@Service
+@RequiredArgsConstructor
+public class AnShengCrawlerQuoteProcessServiceImpl implements AnShengCrawlerQuoteProcessService {
+
+    private final AnShengCrawlerLoginService anShengCrawlerLoginService;
+
+    private final AnShengCrawlerCacheComponent anShengCrawlerCacheComponent;
+
+    private final DistributedLockComponent distributedLockComponent;
+
+    private final AnShengCrawlerRequestComponent anShengCrawlerRequestComponent;
+
+    private final RedissonComponent redissonComponent;
+
+    @Override
+    public HttpHeaders getHttpHeaders(String username, String password) {
+        HttpHeaders httpHeaders = new HttpHeaders();
+        String authorization = anShengCrawlerCacheComponent.getAuthorization(username);
+        if (!StringUtils.hasText(authorization)) {
+            try {
+                authorization = distributedLockComponent.blockingExecute(AnShengCrawlerCacheComponent.ACCOUNT_LOCKOUT + username, () -> anShengCrawlerLoginService.login(username, password));
+            } catch (Exception e) {
+                throw new SystemException("登录失败");
+            }
+        }
+        httpHeaders.set("Authorization", authorization);
+        return httpHeaders;
+    }
+
+    @Override
+    public AnShengCrawlerGetUserDetailResponse.DataDTO.AgentDefineDTO getUserDetailResponse(String agreementId, HttpHeaders headers) {
+        return redissonComponent.cacheJson(AnShengCrawlerCacheComponent.AGENT_DEFINE + agreementId, () -> {
+            AnShengCrawlerGetUserDetailResponse.DataDTO userDetailResponse = anShengCrawlerRequestComponent.getUserDetailResponse(headers);
+            return userDetailResponse.getAgentDefine();
+        }, AnShengCrawlerGetUserDetailResponse.DataDTO.AgentDefineDTO.class, Duration.ofHours(AnShengCrawlerCacheComponent.AGENT_DEFINE_TIME));
+    }
+
+}

+ 25 - 8
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/impl/AnShengCrawlerRequestImpl.java

@@ -8,12 +8,15 @@ import com.jzg.commons.entity.quote.vo.base.LoginBase;
 import com.jzg.quotation.ansheng.crawler.build.AnShengCrawlerQuoteResultsVoBuild;
 import com.jzg.quotation.ansheng.crawler.component.AnShengCrawlerCacheComponent;
 import com.jzg.quotation.ansheng.crawler.component.AnShengCrawlerRequestComponent;
+import com.jzg.quotation.ansheng.crawler.constant.enums.DepartmentPlanCode;
 import com.jzg.quotation.ansheng.crawler.entity.po.AnShengCrawlerOrder;
 import com.jzg.quotation.ansheng.crawler.entity.request.*;
 import com.jzg.quotation.ansheng.crawler.entity.response.*;
 import com.jzg.quotation.ansheng.crawler.service.AnShengCrawlerLoginService;
 import com.jzg.quotation.ansheng.crawler.service.AnShengCrawlerOrderService;
+import com.jzg.quotation.ansheng.crawler.service.AnShengCrawlerQuoteProcessService;
 import com.jzg.quotation.ansheng.crawler.service.AnShengCrawlerRequest;
+import com.jzg.quotation.ansheng.crawler.utils.CheckVehicleCodeSecretGenerateUtils;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
@@ -40,6 +43,8 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
 
     private final AnShengCrawlerCacheComponent anShengCrawlerCacheComponent;
 
+    private final AnShengCrawlerQuoteProcessService anShengCrawlerQuoteProcessService;
+
     private static final CopyOptions COPY_OPTIONS = CopyOptions.create().setPropertiesFilter((x, y) -> {
         if (x.getType() == String.class && !StringUtils.hasLength((String) y)) {
             return false;
@@ -57,29 +62,41 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
     public QuoteResultsVo quote(QuoteVo quoteVo) {
         // 订单号
         final String ordersNo = quoteVo.getOrder().getOrdersNo();
+        // 请求头信息
+        HttpHeaders httpHeaders = anShengCrawlerQuoteProcessService.getHttpHeaders(quoteVo.getOrder()
+                .getAttributionInformationVo()
+                .getUsername(), quoteVo.getOrder().getAttributionInformationVo().getPassword());
+        // 归属信息
+        AnShengCrawlerGetUserDetailResponse.DataDTO.AgentDefineDTO userDetailResponse = anShengCrawlerQuoteProcessService.getUserDetailResponse(quoteVo.getOrder()
+                .getAgreementId(), httpHeaders);
+
+        DepartmentPlanCode departmentPlanCode = DepartmentPlanCode.PLAN_109;
+        // 新能源
+        if(quoteVo.getCarInfoVo().isNewEnergyMark()){
+            departmentPlanCode = DepartmentPlanCode.PLAN_113;
+        }
 
-        anShengCrawlerLoginService.login(quoteVo.getOrder().getAttributionInformationVo().getUsername(), quoteVo.getOrder().getAttributionInformationVo().getPassword());
+        AnShengCrawlerInsureAddRequest anShengCrawlerInsureAddRequest = new AnShengCrawlerInsureAddRequest("1", userDetailResponse.getDepartmentCode(), departmentPlanCode.getCode(), departmentPlanCode.getProductCode());
+        AnShengCrawlerInsureAddResponse.DataDTO insureAdd = anShengCrawlerRequestComponent.insureAdd(anShengCrawlerInsureAddRequest, httpHeaders);
+        String checkVehicleCode = insureAdd.getCheckVehicleCode();
+        String checkVehicleCodeSecretGenerate = CheckVehicleCodeSecretGenerateUtils.getCheckVehicleCodeSecretGenerate(checkVehicleCode, userDetailResponse.getUserId());
 
-        HttpHeaders httpHeaders = new HttpHeaders();
         // 车架号查询
-        AnShengCrawlerSearchVehicleByVinRequest anShengCrawlerSearchVehicleByVinRequest = new AnShengCrawlerSearchVehicleByVinRequest();
+        AnShengCrawlerSearchVehicleByVinRequest anShengCrawlerSearchVehicleByVinRequest = new AnShengCrawlerSearchVehicleByVinRequest(quoteVo.getCarInfoVo(), userDetailResponse.getDepartmentCode(), userDetailResponse.getAgentCode());
         List<AnShengCrawlerSearchVehicleByVinResponse.DataDTO> dataDTOS = anShengCrawlerRequestComponent.searchVehicleByVin(anShengCrawlerSearchVehicleByVinRequest, httpHeaders);
         AnShengCrawlerSearchVehicleByVinResponse.DataDTO dataDTO = CarModelsFilterUtils.to(dataDTOS, quoteVo.getCarInfoVo());
-        String customerNegotiatePrice = "";
         // 报价
-        AnShengCrawlerCalculatePremiumApplyMessage crawlerCalculatePremiumApply = new AnShengCrawlerCalculatePremiumApplyMessage(quoteVo, dataDTO, customerNegotiatePrice);
+        AnShengCrawlerCalculatePremiumApplyMessage crawlerCalculatePremiumApply = new AnShengCrawlerCalculatePremiumApplyMessage(quoteVo, dataDTO, userDetailResponse, departmentPlanCode, checkVehicleCodeSecretGenerate);
         AnShengCrawlerCalculatePremiumApplyResponse calculatePremiumApply = anShengCrawlerRequestComponent.calculatePremiumApply(crawlerCalculatePremiumApply, httpHeaders);
-
         // 缓存报价信息
         AnShengCrawlerCalculatePremiumApplyMessage crawlerCalculatePremiumApplyMessage = new AnShengCrawlerCalculatePremiumApplyMessage();
-
         // 拷贝结果数据
         BeanUtil.copyProperties(calculatePremiumApply, crawlerCalculatePremiumApplyMessage, COPY_OPTIONS);
         // 拷贝报价数据
         BeanUtil.copyProperties(crawlerCalculatePremiumApply, crawlerCalculatePremiumApplyMessage, COPY_OPTIONS);
         // 缓存数据
         anShengCrawlerCacheComponent.cacheQuoteRequest(ordersNo, crawlerCalculatePremiumApplyMessage);
-
+        // 构造返回参数
         return AnShengCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(ordersNo, quoteVo, calculatePremiumApply);
     }
 

+ 25 - 0
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/utils/CheckVehicleCodeSecretGenerateUtils.java

@@ -0,0 +1,25 @@
+package com.jzg.quotation.ansheng.crawler.utils;
+
+import cn.hutool.crypto.SecureUtil;
+import cn.hutool.crypto.symmetric.AES;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
+public final class CheckVehicleCodeSecretGenerateUtils {
+
+    public CheckVehicleCodeSecretGenerateUtils(){
+        throw new IllegalStateException("Utility class");
+    }
+
+    private static final String KEY = "TPAICAST";
+
+    public static String getCheckVehicleCodeSecretGenerate(String checkCode, String userId){
+        String format = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+        String  iv = KEY + format;
+        String s = checkCode + userId;
+        AES aes = SecureUtil.aes(iv.getBytes());
+        return aes.encryptBase64(s);
+    }
+
+}

+ 103 - 0
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/utils/CustomerNegotiatePriceUtils.java

@@ -0,0 +1,103 @@
+package com.jzg.quotation.ansheng.crawler.utils;
+
+import com.jzg.commons.exception.SystemException;
+import com.jzg.quotation.ansheng.crawler.constant.enums.DepartmentPlanCode;
+import com.jzg.quotation.commons.utils.TimeProcessing;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+
+public final class CustomerNegotiatePriceUtils {
+
+    public CustomerNegotiatePriceUtils() {
+        throw new IllegalStateException("Utility class");
+    }
+
+    public static String calculateTheDepreciationValue(String planCode,
+                                                       String energyType,
+                                                       String carPrice,
+                                                       String warrantyTime,
+                                                       String registerDateTime) {
+        BigDecimal bigDecimal = calculateType(planCode, energyType, carPrice);
+        return calculateTheDepreciationValue(new BigDecimal(carPrice), TimeProcessing.dateTimeToDate(warrantyTime), registerDateTime, bigDecimal);
+    }
+
+    private static BigDecimal calculateType(String planCode, String energyType, String carPrice) {
+        BigDecimal type = BigDecimal.ZERO;
+
+        // 将x转换为整数(如果x为null或空字符串,则使用0)
+        int xValue = 0;
+        if (carPrice != null && !carPrice.isEmpty()) {
+            try {
+                xValue = Integer.parseInt(carPrice);
+            } catch (NumberFormatException e) {
+                throw new SystemException("车价异常");
+            }
+        }
+
+        // 根据planCode和energyType计算type值
+        if (DepartmentPlanCode.PLAN_109.getCode().equals(planCode)) {
+            type = new BigDecimal("0.006");
+        } else if (DepartmentPlanCode.PLAN_113.getCode().equals(planCode)) {
+            if ("1".equals(energyType)) {
+                if (xValue <= 100000) {
+                    type = new BigDecimal("0.0082");
+                } else if (xValue <= 200000) {
+                    type = new BigDecimal("0.0077");
+                } else if (xValue <= 300000) {
+                    type = new BigDecimal("0.0072");
+                } else {
+                    type = new BigDecimal("0.0068");
+                }
+            } else {
+                type = new BigDecimal("0.0063");
+            }
+        }
+
+        return type;
+    }
+
+
+    private static String calculateTheDepreciationValue(BigDecimal carPrice, String warrantyTime,
+                                                        String registerDateTime, BigDecimal type) {
+        BigDecimal e = BigDecimal.ZERO;
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        LocalDate startDate = LocalDate.parse(warrantyTime, formatter);
+        LocalDate registerDate = LocalDate.parse(registerDateTime, formatter);
+
+        // 计算月份差
+        long monthsBetween = ChronoUnit.MONTHS.between(
+                registerDate.withDayOfMonth(1),
+                startDate.withDayOfMonth(1)
+        );
+        int l = (int) monthsBetween;
+
+        // 如果注册日期的日部分大于保险开始日期的日部分,则月份差减1
+        if (registerDate.getDayOfMonth() > startDate.getDayOfMonth()) {
+            l -= 1;
+        }
+
+        BigDecimal c = BigDecimal.ONE; // 折扣系数,默认1.0
+        // 当月份差大于0且r存在时(r不为空)
+        if (l > 0) {
+            // c = 1 - l * type
+            c = BigDecimal.ONE.subtract(new BigDecimal(l).multiply(type));
+            // 如果c小于0.2,则置为0.2
+            if (c.compareTo(new BigDecimal("0.2")) < 0) {
+                c = new BigDecimal("0.2");
+            }
+        }
+
+        // 如果基础值t不为0,则计算e = t * c,保留两位小数(四舍五入)
+        if (carPrice.compareTo(BigDecimal.ZERO) != 0) {
+            e = carPrice.multiply(c).setScale(2, RoundingMode.HALF_UP);
+        }
+
+        return e.toString();
+    }
+
+
+}

+ 2 - 4
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RedissonComponent.java

@@ -1,8 +1,6 @@
 package com.jzg.quotation.commons.component;
 
 import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
-import com.alibaba.fastjson2.TypeReference;
 import com.jzg.commons.util.StringUtils;
 import lombok.RequiredArgsConstructor;
 import org.redisson.api.RBucket;
@@ -19,14 +17,14 @@ public class RedissonComponent {
     private final RedissonClient redissonClient;
 
     /**
-     * 带返回值的锁操作
+     * 缓存操作结果数据
      *
      * @param cacheName 缓存名称
      * @param supplier  业务逻辑
      * @param duration  缓存时间
      * @return 业务执行结果
      */
-    public <T> T cacheJson(String cacheName, Supplier<T> supplier,Class<T> tClass,  Duration duration) {
+    public <T> T cacheJson(String cacheName, Supplier<T> supplier, Class<T> tClass, Duration duration) {
         RBucket<String> bucket = redissonClient.getBucket(cacheName);
         String json = bucket.get();
         if (StringUtils.hasText(json)) {

+ 22 - 9
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/RequestObjectConversion.java

@@ -1,12 +1,16 @@
 package com.jzg.quotation.commons.utils;
 
+import com.alibaba.fastjson2.JSONObject;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.beans.BeanWrapperImpl;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
+import org.springframework.util.ObjectUtils;
 
 import java.beans.PropertyDescriptor;
+import java.lang.reflect.Field;
 import java.util.Collection;
 import java.util.Map;
 
@@ -25,20 +29,29 @@ public final class RequestObjectConversion {
 
     public static MultiValueMap<String, Object> convertMultiValueMap(Object obj) {
         MultiValueMap<String, Object> result = new LinkedMultiValueMap<>();
-        BeanWrapperImpl wrapper = new BeanWrapperImpl(obj);
-        for (PropertyDescriptor pd : wrapper.getPropertyDescriptors()) {
-            String key = pd.getName();
-            if ("class".equals(key)) {
+        Class<?> aClass = obj.getClass();
+        Field[] fields = aClass.getDeclaredFields();
+        for (Field field : fields) {
+            JsonProperty annotation = field.getAnnotation(JsonProperty.class);
+            if(ObjectUtils.isEmpty(annotation)){
                 continue;
             }
 
-            Object value = wrapper.getPropertyValue(key);
-            if (value != null) {
-                if (value instanceof Collection) {
-                    ((Collection<?>) value).forEach(item -> result.add(key, item));
+            String value = annotation.value();
+            field.setAccessible(true);
+            try {
+                Object fieldValue = field.get(obj);
+                if(fieldValue == null){
+                    continue;
+                }
+
+                if (fieldValue instanceof Collection) {
+                    ((Collection<?>) fieldValue).forEach(item -> result.add(value, item));
                 } else {
-                    result.add(key, value);
+                    result.add(value, fieldValue);
                 }
+            }catch (IllegalAccessException e){
+                    e.printStackTrace();
             }
         }
         return result;

+ 8 - 3
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java

@@ -263,7 +263,8 @@ public class UnifyOrderManager {
         InsOrders insOrders = insOrdersService.getById(underwritingVo.getOrder().getOrdersNo());
         AssertionUtils.isFail(Objects.isNull(insOrders), "订单不存在");
         HttpResult<EsmInsCompany> esmInsCompanyHttpResult = platformClient.findById(insOrders.getCompanyId(), baseController.getToken());
-        underwritingVo.getOrder().setInsuranceCompanyCode(esmInsCompanyHttpResult.getData().getId());
+        underwritingVo.getOrder().setInsuranceCompanyCode(esmInsCompanyHttpResult.getData().getCompanyCode());
+        underwritingVo.getOrder().setInsuranceCompanyId(esmInsCompanyHttpResult.getData().getId());
         QuotationBaseService quoteService = companyFactory.getUnderwritingService(insOrders, esmInsCompanyHttpResult.getData()
                 .getCompanyCode(), baseController, underwritingVo);
 
@@ -339,7 +340,9 @@ public class UnifyOrderManager {
         AssertionUtils.isFail(Objects.isNull(insOrders), "订单不存在");
         InsOrdersCarInfo insOrdersCarInfo = insOrdersCarInfoService.getByOrderId(insOrders.getId());
         HttpResult<EsmInsCompany> esmInsCompanyHttpResult = platformClient.findById(insOrders.getCompanyId(), baseController.getToken());
+        paymentLinkVo.getOrder().setInsuranceCompanyCode(esmInsCompanyHttpResult.getData().getCompanyCode());
         paymentLinkVo.getOrder().setInsuranceCompanyCode(esmInsCompanyHttpResult.getData().getId());
+
         QuotationBaseService quoteService = companyFactory.getPaymentLinkService(insOrders, esmInsCompanyHttpResult.getData()
                 .getCompanyCode(), baseController, paymentLinkVo);
 
@@ -377,7 +380,8 @@ public class UnifyOrderManager {
             AssertionUtils.isFail(true, "保司未配置协议");
         }
         insuranceUploadImageVo.getOrder().setAgreementId(byCompanyId.getData().get(0).getId());
-        insuranceUploadImageVo.getOrder().setInsuranceCompanyCode(esmInsCompanyHttpResult.getData().getId());
+        insuranceUploadImageVo.getOrder().setInsuranceCompanyCode(esmInsCompanyHttpResult.getData().getCompanyCode());
+        insuranceUploadImageVo.getOrder().setInsuranceCompanyId(esmInsCompanyHttpResult.getData().getId());
         insuranceUploadImageVo.getOrder().setApiType(Integer.parseInt(insOrders.getApiType()));
         QuotationBaseService quoteService = companyFactory.getImageUploadService(insuranceUploadImageVo, baseController);
 
@@ -403,7 +407,8 @@ public class UnifyOrderManager {
         AssertionUtils.isFail(Objects.isNull(insOrders), "订单不存在");
         HttpResult<EsmInsCompany> esmInsCompanyHttpResult = platformClient.findById(insOrders.getCompanyId(), baseController.getToken());
         orderStatusVo.getOrder().setAgreementId(insOrders.getAgreementId());
-        orderStatusVo.getOrder().setInsuranceCompanyCode(esmInsCompanyHttpResult.getData().getId());
+        orderStatusVo.getOrder().setInsuranceCompanyCode(esmInsCompanyHttpResult.getData().getCompanyCode());
+        orderStatusVo.getOrder().setInsuranceCompanyId(esmInsCompanyHttpResult.getData().getId());
         orderStatusVo.getOrder().setCompanyOrderNo(insOrders.getCompanyOrderNo());
         orderStatusVo.getOrder().setApiType(Integer.parseInt(insOrders.getApiType()));
         orderStatusVo.setInsOrders(insOrders);

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

@@ -61,7 +61,7 @@ public class QuoteInfoConverter {
         // 号牌颜色
         quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.LICENSE_COLOR.getCode(), carInfoVo.getLicenseColorCode(), carInfoVo, CarInfoVo::setLicenseColorCode, CarInfoVo::setLicenseColorName);
         // 号牌种类
-        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.LICENSE_COLOR.getCode(), carInfoVo.getLicenseKindCode(), carInfoVo, CarInfoVo::setLicenseKindCode, CarInfoVo::setLicenseKindName);
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.LICENSE_KIND.getCode(), carInfoVo.getLicenseKindCode(), carInfoVo, CarInfoVo::setLicenseKindCode, CarInfoVo::setLicenseKindName);
     }
 
     /**

+ 1 - 1
tenant/organization/src/main/java/com/jzg/organization/client/EsmInsCompanyClient.java

@@ -10,7 +10,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
 
-@FeignClient(name="jzg-platform",url = "http://192.168.0.19:8001/")
+@FeignClient(name="jzg-platform",url = "http://192.168.0.115:8001/")
 public interface EsmInsCompanyClient {
 
 

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff