Przeglądaj źródła

update:
1. 大家财险报价流程添加参数
2. 修改报价流程参数不全问题

wks 1 rok temu
rodzic
commit
8e8ea145b5
24 zmienionych plików z 355 dodań i 109 usunięć
  1. 1 1
      authentication/src/main/java/com/jzg/config/JzgTokenService.java
  2. 6 6
      authentication/src/main/java/com/jzg/handler/JzgAuthenticationSuccessHandler.java
  3. 3 4
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/service/ChengTaiAPIService.java
  4. 4 0
      tenant/insurance/quotation-chengtai/src/test/java/com/jzg/quotation/chengtai/crawler/service/ChengTaiAPIServiceTest.java
  5. 20 5
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java
  6. 35 6
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/RequestObjectConversion.java
  7. 3 1
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/BuildingAttributionInformation.java
  8. 48 39
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/DaJiaCrawlerRequestComponent.java
  9. 1 0
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/constant/enums/RequestUrl.java
  10. 10 5
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerActualValueRequest.java
  11. 2 0
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerCheckTokenRequest.java
  12. 5 2
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerCompaniesRequest.java
  13. 16 5
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerQuoteProcessServiceImpl.java
  14. 6 9
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerRequestImpl.java
  15. 19 1
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/utils/DESEncryption.java
  16. 41 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/CarInfoVoParameterSettings.java
  17. 28 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/CarKindClassifier.java
  18. 39 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/impl/PassengerCarClassifier.java
  19. 37 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/impl/TruckClassifier.java
  20. 5 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  21. 9 9
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/converter/QuoteInfoConverter.java
  22. 2 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/converter/QuoteRuleConverter.java
  23. 14 14
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/component/ZmCrawlerRequestComponent.java
  24. 1 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlSchemeServiceImpl.java

+ 1 - 1
authentication/src/main/java/com/jzg/config/JzgTokenService.java

@@ -32,7 +32,7 @@ public class JzgTokenService {
         }
 
         RBucket<Object> bucket = redissonClient.getBucket(token);
-        bucket.set(authorization, 2, TimeUnit.HOURS);
+        bucket.set(authorization, 30, TimeUnit.DAYS);
     }
 
     public String getToken(String token){

+ 6 - 6
authentication/src/main/java/com/jzg/handler/JzgAuthenticationSuccessHandler.java

@@ -69,14 +69,14 @@ public class JzgAuthenticationSuccessHandler implements AuthenticationSuccessHan
         response.setContentType("application/json");
         JSONObject json = new JSONObject();
         JSONObject data = new JSONObject();
-//        data.put("token",token);
-//        data.put("isFirst",isFirst);
-//        json.put("code",200);
-//        json.put("msg","login success");
-//        json.put("data",data);
+        data.put("token",token);
+        data.put("isFirst",isFirst);
         json.put("code",200);
         json.put("msg","login success");
-        json.put("data",token);
+        json.put("data",data);
+//        json.put("code",200);
+//        json.put("msg","login success");
+//        json.put("data",token);
         // 将 Token 返回给前端
         response.getWriter().write(json.toJSONString());
 

+ 3 - 4
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/service/ChengTaiAPIService.java

@@ -363,7 +363,7 @@ public class ChengTaiAPIService {
 
         headers.add("token", token);
 
-        Map param = Collections.emptyMap();
+        MultiValueMap<String, String> param = new LinkedMultiValueMap<>();
 
         ChengTaiSystemResult.Response response = requestComponent.get(ChengTaiAPI.System.url(), param, null, ChengTaiSystemResult.Response.class, headers);
 
@@ -381,8 +381,7 @@ public class ChengTaiAPIService {
 
         headers.add("token", token);
 
-        Map param = Collections.emptyMap();
-
+        MultiValueMap<String, String> param = new LinkedMultiValueMap<>();
         ChengTaiFindAreaConfigResult.Response response = requestComponent.get(ChengTaiAPI.FindAreaConfig.url(), param, null, ChengTaiFindAreaConfigResult.Response.class, headers);
 
         if (response == null) {
@@ -435,7 +434,7 @@ public class ChengTaiAPIService {
         HttpHeaders headers = new HttpHeaders();
         headers.add("token", token);
 
-        Map param = Collections.emptyMap();
+        MultiValueMap<String, String> param = new LinkedMultiValueMap<>();
 
         ChengTaiInsureResult.Response response = requestComponent.get(ChengTaiAPI.Insure.url().replace("{uuid}", uuid), param, null, ChengTaiInsureResult.Response.class, headers);
 

+ 4 - 0
tenant/insurance/quotation-chengtai/src/test/java/com/jzg/quotation/chengtai/crawler/service/ChengTaiAPIServiceTest.java

@@ -16,7 +16,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
+import org.springframework.http.client.reactive.ClientHttpRequest;
 import org.springframework.http.client.reactive.ReactorClientHttpConnector;
+import org.springframework.web.reactive.function.BodyInserter;
 import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
 import org.springframework.web.reactive.function.client.WebClient;
 import reactor.core.publisher.Mono;
@@ -76,6 +78,8 @@ public class ChengTaiAPIServiceTest {
                                     .forEach((key, values) -> {
                                         logger.info("请求头: {}: {}", key, values);
                                     });
+                            BodyInserter<?, ? super ClientHttpRequest> body = clientRequest.body();
+
                             return Mono.just(clientRequest);
                         }
                 ))

+ 20 - 5
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java

@@ -16,6 +16,8 @@ import org.springframework.stereotype.Component;
 import org.springframework.util.MultiValueMap;
 import org.springframework.web.reactive.function.BodyInserters;
 import org.springframework.web.reactive.function.client.WebClient;
+import org.springframework.web.util.DefaultUriBuilderFactory;
+import org.springframework.web.util.UriComponentsBuilder;
 import reactor.core.publisher.Flux;
 
 import java.io.IOException;
@@ -59,6 +61,18 @@ public class RequestComponent {
         };
     }
 
+    public String buildUrl(String baseUrl, MultiValueMap<String, String> params) {
+        StringBuilder sb = new StringBuilder(baseUrl);
+        if (!params.isEmpty()) {
+            sb.append("?");
+            params.forEach((key, values) -> {
+                values.forEach(value -> sb.append(key).append("=").append(value).append("&"));
+            });
+            sb.deleteCharAt(sb.length() - 1); // 移除末尾多余的&
+        }
+        return sb.toString();
+    }
+
     /**
      * 判断响应体 是否为空
      *
@@ -84,7 +98,7 @@ public class RequestComponent {
      * @param headers       请求头
      * @return 响应
      */
-    public <Response> Response get(String url, Map<String, Object> param, String description, Class<Response> responseClass, HttpHeaders headers) {
+    public <Response> Response get(String url, MultiValueMap<String, String> param, String description, Class<Response> responseClass, HttpHeaders headers) {
         ResponseEntity<Response> responseEntity = baseGet(url, param, responseClass, headers);
         return bodyIsEmpty(responseEntity, description);
     }
@@ -119,9 +133,10 @@ public class RequestComponent {
      * @param <Response>    响应实体
      * @return 响应
      */
-    public <Response> ResponseEntity<Response> baseGet(String url, Map<String, Object> param, Class<Response> responseClass, HttpHeaders headers) {
+    public <Response> ResponseEntity<Response> baseGet(String url, MultiValueMap<String, String> param, Class<Response> responseClass, HttpHeaders headers) {
+        String requestUrl = buildUrl(url, param);
         return webClient.get()
-                .uri(url, param)
+                .uri(requestUrl)
                 .headers(setHeaders(headers))
                 .retrieve()
                 .toEntity(responseClass)
@@ -154,7 +169,7 @@ public class RequestComponent {
      * @param <Response>    响应实体
      * @return 响应
      */
-    public <Response> Response requestGET(String url, Map<String, Object> param, String description, Class<Response> responseClass) {
+    public <Response> Response requestGET(String url, MultiValueMap<String, String> param, String description, Class<Response> responseClass) {
         return get(url, param, description, responseClass, new HttpHeaders());
     }
 
@@ -319,7 +334,7 @@ public class RequestComponent {
      * 下载文件
      *
      * @param url      请求链接
-     * @param param     请求内容
+     * @param param    请求内容
      * @param filePath 文件下载路劲
      * @param headers  请求头
      */

+ 35 - 6
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/RequestObjectConversion.java

@@ -7,6 +7,7 @@ import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
 
 import java.beans.PropertyDescriptor;
+import java.util.Collection;
 import java.util.Map;
 
 /**
@@ -23,24 +24,52 @@ public final class RequestObjectConversion {
     private static final ObjectMapper objectMapper = new ObjectMapper();
 
     public static MultiValueMap<String, Object> convertMultiValueMap(Object obj) {
-        MultiValueMap<String, Object> multiValueMap = new LinkedMultiValueMap<>();
+        MultiValueMap<String, Object> result = new LinkedMultiValueMap<>();
         BeanWrapperImpl wrapper = new BeanWrapperImpl(obj);
         for (PropertyDescriptor pd : wrapper.getPropertyDescriptors()) {
             String key = pd.getName();
+            if ("class".equals(key)) {
+                continue;
+            }
+
             Object value = wrapper.getPropertyValue(key);
-            if (value != null && !"class".equals(key)) {
-                multiValueMap.add(key, value);
+            if (value != null) {
+                if (value instanceof Collection) {
+                    ((Collection<?>) value).forEach(item -> result.add(key, item));
+                } else {
+                    result.add(key, value);
+                }
             }
         }
-        return multiValueMap;
+        return result;
     }
 
+    public static MultiValueMap<String, String> convertMultiValueStringMap(Object obj) {
+        MultiValueMap<String, String> result = new LinkedMultiValueMap<>();
+        BeanWrapperImpl wrapper = new BeanWrapperImpl(obj);
+        for (PropertyDescriptor pd : wrapper.getPropertyDescriptors()) {
+            String key = pd.getName();
+            if ("class".equals(key)) {
+                continue;
+            }
+
+            Object value = wrapper.getPropertyValue(key);
+            if (value != null) {
+                if (value instanceof Collection) {
+                    ((Collection<?>) value).forEach(item -> result.add(key, item != null ? item.toString() : ""));
+                } else {
+                    result.add(key, value.toString());
+                }
+            }
+        }
+        return result;
+    }
+
+
     public static Map<String, Object> convertToMap(Object object) {
         return objectMapper.convertValue(object, new TypeReference<>() {
         });
     }
 
 
-
-
 }

+ 3 - 1
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/BuildingAttributionInformation.java

@@ -25,8 +25,10 @@ public class BuildingAttributionInformation {
     private final DaJiaCrawlerRequestComponent daJiaCrawlerRequestComponent;
 
     public ProposalInfoDTO build(DaJiaCrawlerConfigureParameters parameters, String operatorCode, HttpHeaders headers) {
-        DaJiaCrawlerCompaniesRequest daJiaCrawlerCompaniesRequest = new DaJiaCrawlerCompaniesRequest(parameters.getLoginCompany(), operatorCode);
+        // 机构查询
+        DaJiaCrawlerCompaniesRequest daJiaCrawlerCompaniesRequest = new DaJiaCrawlerCompaniesRequest(parameters.getCDptCde(), parameters.getLoginCompany(), operatorCode);
         DaJiaCrawlerCompaniesResponse.ListDTO companies = daJiaCrawlerRequestComponent.companies(daJiaCrawlerCompaniesRequest, parameters.getCDptCde(), headers);
+        // 渠道套餐查询
         DaJiaCrawlerChannelPackagesRequest daJiaCrawlerChannelPackagesRequest = new DaJiaCrawlerChannelPackagesRequest(parameters, operatorCode);
         DaJiaCrawlerChannelPackagesResponse daJiaCrawlerChannelPackagesResponse = daJiaCrawlerRequestComponent.channelPackages(daJiaCrawlerChannelPackagesRequest, parameters.getChannelPackages(), headers);
         return new ProposalInfoDTO(companies, daJiaCrawlerChannelPackagesResponse);

+ 48 - 39
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/component/DaJiaCrawlerRequestComponent.java

@@ -1,15 +1,13 @@
 package com.jzg.quotation.dajia.crawler.component;
 
 
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.jwt.JWT;
-import cn.hutool.jwt.JWTPayload;
-import cn.hutool.jwt.JWTValidator;
 import com.alibaba.fastjson2.JSON;
 import com.jzg.commons.exception.SystemException;
+import com.jzg.commons.util.AssertionUtils;
 import com.jzg.quotation.commons.component.RequestComponent;
 import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
 import com.jzg.quotation.commons.standard.CrawlerRequestUrlStandard;
+import com.jzg.quotation.commons.utils.RequestObjectConversion;
 import com.jzg.quotation.dajia.crawler.constant.enums.RequestUrl;
 import com.jzg.quotation.dajia.crawler.entity.request.*;
 import com.jzg.quotation.dajia.crawler.entity.response.*;
@@ -17,20 +15,18 @@ import com.jzg.quotation.dajia.crawler.properties.DaJiaCrawlerProperties;
 import com.jzg.quotation.dajia.crawler.utils.DESEncryption;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.beanutils.PropertyUtils;
-import org.springframework.core.ParameterizedTypeReference;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
 import org.springframework.web.reactive.function.BodyInserters;
 import org.springframework.web.reactive.function.client.WebClient;
 import reactor.core.publisher.Mono;
 
-import java.lang.reflect.InvocationTargetException;
 import java.util.Base64;
 import java.util.List;
-import java.util.Map;
 import java.util.UUID;
 
 @Slf4j
@@ -90,7 +86,9 @@ public class DaJiaCrawlerRequestComponent {
         if (frequency <= 0) {
             throw new SystemException("验证码异常");
         }
-        Map<String, Object> map = Map.of("imgId", UUID.randomUUID().toString().replaceAll("-", ""));
+
+        MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
+        map.add("imgId", UUID.randomUUID().toString().replaceAll("-", ""));
         // 请求
         DaJiaCrawlerBaseResponse request = requestComponent.requestGET(RequestUrl.CAPTCHA.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()), map, "", DaJiaCrawlerBaseResponse.class);
         DaJiaCrawlerCaptchaResponse daJiaCrawlerCaptchaResponse = DESEncryption.decryptStrToObject(request.getResult(), DaJiaCrawlerCaptchaResponse.class);
@@ -116,17 +114,16 @@ public class DaJiaCrawlerRequestComponent {
      * @return 唯一机构列表
      */
     public DaJiaCrawlerCompaniesResponse.ListDTO companies(DaJiaCrawlerCompaniesRequest request, String cDptCde, HttpHeaders headers) {
-        try {
-            Map<String, Object> describe = PropertyUtils.describe(request);
-            DaJiaCrawlerCompaniesResponse daJiaCrawlerCompaniesResponse = requestComponent.get(RequestUrl.COMPANIES.getRequestUrl(daJiaCrawlerProperties.getVhlUrl()), describe, "", DaJiaCrawlerCompaniesResponse.class, headers);
-            return daJiaCrawlerCompaniesResponse.getList()
-                    .stream()
-                    .filter(x -> cDptCde.equals(x.getCDptCde()))
-                    .findFirst()
-                    .orElseThrow(() -> new SystemException(""));
-        } catch (InvocationTargetException | IllegalAccessException | NoSuchMethodException e) {
-            throw new SystemException("");
-        }
+        MultiValueMap<String, String> multiValueMap = RequestObjectConversion.convertMultiValueStringMap(request);
+        DaJiaCrawlerBaseResponse response = requestComponent.get(RequestUrl.COMPANIES.getRequestUrl(daJiaCrawlerProperties.getVhlUrl()), multiValueMap, "", DaJiaCrawlerBaseResponse.class, headers);
+        DaJiaCrawlerCompaniesResponse daJiaCrawlerCompaniesResponse = DESEncryption.decryptStrToObject(response.getResult(), DaJiaCrawlerCompaniesResponse.class);
+
+        return daJiaCrawlerCompaniesResponse.getList()
+                .stream()
+                .filter(x -> cDptCde.equals(x.getCDptCde()))
+                .findFirst()
+                .orElseThrow(() -> new SystemException(""));
+
     }
 
     /**
@@ -138,17 +135,13 @@ public class DaJiaCrawlerRequestComponent {
      * @return 套餐信息
      */
     public DaJiaCrawlerChannelPackagesResponse channelPackages(DaJiaCrawlerChannelPackagesRequest request, String packagesName, HttpHeaders headers) {
-        try {
-            Map<String, Object> describe = PropertyUtils.describe(request);
-            List<DaJiaCrawlerChannelPackagesResponse> responses = requestComponent.get(RequestUrl.CAPTCHA.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()), describe, "", new ParameterizedTypeReference<>() {
-            }, headers);
-            return responses.stream()
-                    .filter(x -> packagesName.equals(x.getName()))
-                    .findFirst()
-                    .orElseThrow(() -> new SystemException(""));
-        } catch (InvocationTargetException | IllegalAccessException | NoSuchMethodException e) {
-            throw new SystemException("");
-        }
+        MultiValueMap<String, String> describe = RequestObjectConversion.convertMultiValueStringMap(request);
+        DaJiaCrawlerBaseResponse daJiaCrawlerBaseResponse = requestComponent.get(RequestUrl.CHANNEL_PACKAGES.getRequestUrl(daJiaCrawlerProperties.getVhlUrl()), describe, "", DaJiaCrawlerBaseResponse.class, headers);
+        List<DaJiaCrawlerChannelPackagesResponse> responses = DESEncryption.decryptStrToObjectList(daJiaCrawlerBaseResponse.getResult(), DaJiaCrawlerChannelPackagesResponse.class);
+        return responses.stream()
+                .filter(x -> packagesName.equals(x.getName()))
+                .findFirst()
+                .orElseThrow(() -> new SystemException(""));
     }
 
     /**
@@ -183,12 +176,31 @@ public class DaJiaCrawlerRequestComponent {
         DaJiaCrawlerBaseRequest crawlerBaseRequest = new DaJiaCrawlerBaseRequest(request);
         ResponseEntity<DaJiaCrawlerBaseResponse> responseEntity = requestComponent.objectPost(crawlerRequestUrlStandard.getRequestUrl(daJiaCrawlerProperties.getVhlUrl()), crawlerBaseRequest, DaJiaCrawlerBaseResponse.class, headers);
         DaJiaCrawlerBaseResponse daJiaCrawlerBaseResponse = responseEntity.getBody();
-        assert daJiaCrawlerBaseResponse != null;
+        AssertionUtils.isEmpty(daJiaCrawlerBaseResponse, "请求异常请重试");
+        if (!"200".equals(daJiaCrawlerBaseResponse.getCode())) {
+            throw new SystemException(daJiaCrawlerBaseResponse.getMessage());
+        }
         // 参数解密
         String decrypt = DESEncryption.decrypt(daJiaCrawlerBaseResponse.getResult());
+        log.info("加密前参数:{}", crawlerBaseRequest.getData());
         return JSON.parseObject(decrypt, responseClass);
     }
 
+    /**
+     * 创建token(查看token是否过期前一步)
+     *
+     * @param operatorCode
+     * @param headers      请求头
+     * @return
+     */
+    public String createToken(String operatorCode, HttpHeaders headers) {
+        String url = RequestUrl.CREATE_TOKEN.getRequestUrl(daJiaCrawlerProperties.getBaseUrl());
+        MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
+        map.add("operatorCode", operatorCode);
+        DaJiaCrawlerBaseResponse daJiaCrawlerBaseResponse = requestComponent.get(url, map, "", DaJiaCrawlerBaseResponse.class, headers);
+        return DESEncryption.decrypt(daJiaCrawlerBaseResponse.getResult()).replace("\"", "");
+    }
+
     /**
      * 校验token(获取新的token)
      *
@@ -302,7 +314,8 @@ public class DaJiaCrawlerRequestComponent {
      */
     public String qrcode(String orderNo, String operatorCode, HttpHeaders headers) {
         String url = RequestUrl.QRCODE.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()) + "/" + orderNo + "/1";
-        Map<String, Object> map = Map.of("operatorCode", operatorCode);
+        MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
+        map.add("operatorCode", operatorCode);
         DaJiaCrawlerBaseResponse daJiaCrawlerBaseResponse = requestComponent.get(url, map, "", DaJiaCrawlerBaseResponse.class, headers);
         DaJiaCrawlerQrcodeResponse daJiaCrawlerCaptchaResponse = DESEncryption.decryptStrToObject(daJiaCrawlerBaseResponse.getResult(), DaJiaCrawlerQrcodeResponse.class);
         return daJiaCrawlerCaptchaResponse.getUrl();
@@ -339,12 +352,8 @@ public class DaJiaCrawlerRequestComponent {
      * @return 保单数据
      */
     public DaJiaCrawlerDownloadResponse electronPolicyIODownload(DaJiaCrawlerDownloadRequest request, HttpHeaders headers) {
-        try {
-            Map<String, Object> describe = PropertyUtils.describe(request);
-            return requestComponent.get(RequestUrl.ELECTRON_POLICY_IO_DOWNLOAD.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()), describe, "", DaJiaCrawlerDownloadResponse.class, headers);
-        } catch (InvocationTargetException | IllegalAccessException | NoSuchMethodException e) {
-            throw new SystemException("");
-        }
+        MultiValueMap<String, String> describe = RequestObjectConversion.convertMultiValueStringMap(request);
+        return requestComponent.get(RequestUrl.ELECTRON_POLICY_IO_DOWNLOAD.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()), describe, "", DaJiaCrawlerDownloadResponse.class, headers);
     }
 
 }

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

@@ -15,6 +15,7 @@ public enum RequestUrl implements CrawlerRequestUrlStandard {
     // 登录
     CAPTCHA("captcha", "验证码"),
     AUTHENTICATE("authenticate", "登录"),
+    CREATE_TOKEN("/cabinet/createToken", "创建token"),
     CHECK_TOKEN("checkToken", "校验token(获取新的token)"),
     //归属信息
     COMPANIES("/companies", "承保机构"),

+ 10 - 5
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerActualValueRequest.java

@@ -2,6 +2,7 @@ package com.jzg.quotation.dajia.crawler.entity.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.quotation.commons.utils.TimeProcessing;
 import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerCarResponse;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -59,17 +60,21 @@ public class DaJiaCrawlerActualValueRequest {
     private String operatorCode;
 
 
-    public DaJiaCrawlerActualValueRequest(DaJiaCrawlerCarResponse.ListDTO listDTO, CarInfoVo carInfoVo, String operatorCode) {
+    public DaJiaCrawlerActualValueRequest(DaJiaCrawlerCarResponse.ListDTO listDTO, CarInfoVo carInfoVo, String operatorCode, String combineProductCode) {
         this.purchaseValue = listDTO.getPurchasePrice();
+        // 注册日期
         this.registerDate = carInfoVo.getRegisterDate();
+        // 车辆明细
         this.rideKind = carInfoVo.getCarKindDetailIdCode();
-        this.startDate = startDate;
-        this.usage = usage;
+        this.startDate = TimeProcessing.tomorrowDateTime();
+        // 车辆用途代码
+        this.usage = carInfoVo.getVehicleUseCode();
         this.vehicleName = listDTO.getVehicleName();
-        this.fuelType = fuelType;
+        // 能源种类代码
+        this.fuelType = carInfoVo.getEnergyTypeCode();
         this.combineProductCode = combineProductCode;
         this.seatNumber = carInfoVo.getSeatCount();
-        this.modelEnergyType = modelEnergyType;
+        this.modelEnergyType = "";
         this.operatorCode = operatorCode;
     }
 }

+ 2 - 0
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerCheckTokenRequest.java

@@ -1,6 +1,7 @@
 package com.jzg.quotation.dajia.crawler.entity.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
@@ -10,6 +11,7 @@ import lombok.NoArgsConstructor;
  * @author: wenks
  * @date: 2025/5/21 16:59
  **/
+@AllArgsConstructor
 @NoArgsConstructor
 @Data
 public class DaJiaCrawlerCheckTokenRequest {

+ 5 - 2
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/entity/request/DaJiaCrawlerCompaniesRequest.java

@@ -20,15 +20,18 @@ public class DaJiaCrawlerCompaniesRequest {
 
     private String recommendCode;
 
+    private String loginCompany;
+
     private int pageNum;
 
     private int pageSize;
 
     private String operatorCode;
 
-    public DaJiaCrawlerCompaniesRequest(String companyPrefix, String operatorCode) {
+    public DaJiaCrawlerCompaniesRequest(String companyPrefix, String loginCompany, String operatorCode) {
         this.companyPrefix = companyPrefix;
-        this.companyName = "";
+        this.companyName = null;
+        this.loginCompany = loginCompany;
         this.recommendCode = operatorCode;
         this.pageNum = 1;
         this.pageSize = 10;

+ 16 - 5
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerQuoteProcessServiceImpl.java

@@ -35,14 +35,14 @@ public class DaJiaCrawlerQuoteProcessServiceImpl implements DaJiaCrawlerQuotePro
             DaJiaCrawlerBaseResponse response = Optional.of(responseEntity)
                     .map(ResponseEntity::getBody)
                     .orElseThrow();
+
             if ("200".equals(response.getCode())) {
                 DaJiaCrawlerAuthenticateResponse daJiaCrawlerCaptchaResponse = DESEncryption.decryptStrToObject(response.getResult(), DaJiaCrawlerAuthenticateResponse.class);
-                DaJiaCrawlerCheckTokenRequest daJiaCrawlerCheckTokenRequest = new DaJiaCrawlerCheckTokenRequest();
-                HttpHeaders headers = new HttpHeaders();
-                headers.set(HttpHeaders.AUTHORIZATION, daJiaCrawlerCaptchaResponse.getIdToken());
-                DaJiaCrawlerCheckTokenResponse daJiaCrawlerCheckTokenResponse = daJiaCrawlerRequestComponent.checkToken(daJiaCrawlerCheckTokenRequest, headers);
-                return daJiaCrawlerCacheComponent.cacheAuthorization(daJiaCrawlerCheckTokenResponse.getIdToken(), daJiaCrawlerCaptchaResponse.getUserCode(), username);
+                // 校验token
+                String token = checkToken(daJiaCrawlerCaptchaResponse.getUserCode(), daJiaCrawlerCaptchaResponse.getIdToken());
+                return daJiaCrawlerCacheComponent.cacheAuthorization(token, daJiaCrawlerCaptchaResponse.getUserCode(), username);
             }
+
             String message = Optional.ofNullable(responseEntity.getBody())
                     .map(DaJiaCrawlerBaseResponse::getMessage)
                     .orElseThrow(() -> new SystemException("登录失败"));
@@ -64,4 +64,15 @@ public class DaJiaCrawlerQuoteProcessServiceImpl implements DaJiaCrawlerQuotePro
         return headers;
     }
 
+    public String checkToken(String userCode, String token) {
+        HttpHeaders httpHeaders = new HttpHeaders();
+        httpHeaders.set(HttpHeaders.AUTHORIZATION, "Bearer " + token);
+        // 创建token
+        String tokenId = daJiaCrawlerRequestComponent.createToken(userCode, httpHeaders);
+        DaJiaCrawlerCheckTokenRequest daJiaCrawlerCheckTokenRequest = new DaJiaCrawlerCheckTokenRequest(tokenId, userCode);
+        // 校验token
+        DaJiaCrawlerCheckTokenResponse daJiaCrawlerCheckTokenResponse = daJiaCrawlerRequestComponent.checkToken(daJiaCrawlerCheckTokenRequest, httpHeaders);
+        return  daJiaCrawlerCheckTokenResponse.getIdToken();
+    }
+
 }

+ 6 - 9
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/impl/DaJiaCrawlerRequestImpl.java

@@ -51,9 +51,7 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) {
         // 1.0获取token的请求头
-        AttributionInformationVo attributionInformationVo = quoteVo
-                .getOrder()
-                .getAttributionInformationVo();
+        AttributionInformationVo attributionInformationVo = quoteVo.getOrder().getAttributionInformationVo();
         HttpHeaders headers = daJiaCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
         String userCode = daJiaCrawlerCacheComponent.getUserCode(attributionInformationVo.getUsername());
         // 1.1 配置信息
@@ -67,7 +65,7 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         // 2.1 获取相同的车型
         DaJiaCrawlerCarResponse.ListDTO listDTO = CarModelsFilterUtils.to(car, quoteVo.getCarInfoVo());
         // 2.2 计算折旧价格
-        DaJiaCrawlerActualValueRequest daJiaCrawlerActualValueRequest = new DaJiaCrawlerActualValueRequest(listDTO, quoteVo.getCarInfoVo(), userCode);
+        DaJiaCrawlerActualValueRequest daJiaCrawlerActualValueRequest = new DaJiaCrawlerActualValueRequest(listDTO, quoteVo.getCarInfoVo(), userCode, parameters.getCombineProductCode());
         DaJiaCrawlerActualValueResponse daJiaCrawlerActualValueResponse = daJiaCrawlerRequestComponent.actualValue(daJiaCrawlerActualValueRequest, headers);
 
         // 3.0 保费计算
@@ -77,7 +75,8 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         DaJiaCrawlerSaveRequest daJiaCrawlerSaveRequest = new DaJiaCrawlerSaveRequest(crawlerPriceResponse, userCode);
         DaJiaCrawlerSaveResponse daJiaCrawlerSaveResponse = daJiaCrawlerRequestComponent.save(daJiaCrawlerSaveRequest, headers);
         // 3.2 缓存数据
-        daJiaCrawlerCacheComponent.cacheDaJiaCrawlerSaveResponse(daJiaCrawlerSaveResponse, quoteVo.getOrder().getOrdersNo());
+        daJiaCrawlerCacheComponent.cacheDaJiaCrawlerSaveResponse(daJiaCrawlerSaveResponse, quoteVo.getOrder()
+                .getOrdersNo());
 
         // 4.0 保存数据
         daJiaCrawlerOrderService.saveOrderInfo(quoteVo, daJiaCrawlerSaveResponse);
@@ -88,9 +87,7 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
 
     @Override
     public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) {
-        AttributionInformationVo attributionInformationVo = underwritingVo
-                .getOrder()
-                .getAttributionInformationVo();
+        AttributionInformationVo attributionInformationVo = underwritingVo.getOrder().getAttributionInformationVo();
         HttpHeaders headers = daJiaCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
 
         DaJiaCrawlerSaveResponse daJiaCrawlerSaveResponse = daJiaCrawlerCacheComponent.getDaJiaCrawlerSaveResponse(underwritingVo.getOrder()
@@ -106,7 +103,7 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         DaJiaCrawlerOrder daJiaCrawlerOrder = daJiaCrawlerOrderService.getById(paymentLinkVo.getOrder().getOrdersNo());
         HttpHeaders headers = daJiaCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
         String userCode = daJiaCrawlerCacheComponent.getUserCode(attributionInformationVo.getUsername());
-        daJiaCrawlerRequestComponent.qrcode(daJiaCrawlerOrder.getOrdersNo(),userCode, headers);
+        daJiaCrawlerRequestComponent.qrcode(daJiaCrawlerOrder.getOrdersNo(), userCode, headers);
         return new PaymentLinkResultsVo();
     }
 

+ 19 - 1
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/utils/DESEncryption.java

@@ -7,16 +7,19 @@ import cn.hutool.crypto.Padding;
 import cn.hutool.crypto.symmetric.DES;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.tomcat.util.buf.HexUtils;
 
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
+import java.util.List;
 
 /**
  * @description: 大家财险 DES ECB 加密解密
  * @author: wenks
  * @date: 2025/2/11 15:36
  **/
+@Slf4j
 public final class DESEncryption {
 
     private DESEncryption() {
@@ -58,7 +61,9 @@ public final class DESEncryption {
     public static String decrypt(String data) {
         init();
         byte[] bytes = HexUtils.fromHexString(data);
-        return DES.decryptStr(bytes);
+        String decrypt = DES.decryptStr(bytes);
+        log.info("解密后参数:{}", decrypt);
+        return decrypt;
     }
 
     /**
@@ -74,6 +79,19 @@ public final class DESEncryption {
         return JSON.parseObject(decrypt, tClass);
     }
 
+    /**
+     * 解密并且转码
+     *
+     * @param data   加密参数
+     * @param tClass json转换后的类型
+     * @param <T>    json转换后的泛型
+     * @return 解密后的类
+     */
+    public static <T> List<T> decryptStrToObjectList(String data, Class<T> tClass) {
+        String decrypt = decrypt(data);
+        return JSON.parseArray(decrypt, tClass);
+    }
+
     /**
      * 将对象转为json并加密
      *

+ 41 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/CarInfoVoParameterSettings.java

@@ -0,0 +1,41 @@
+package com.jzg.quotation.summary.classifier;
+
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.quotation.commons.constant.enums.quote.CarKindCode;
+import com.jzg.quotation.commons.constant.enums.quote.CarKindDetailIdCode;
+import com.jzg.quotation.summary.classifier.impl.PassengerCarClassifier;
+import com.jzg.quotation.summary.classifier.impl.TruckClassifier;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @description: 车辆类型选择器
+ * @author: wenks
+ * @date: 2025/5/22 16:41
+ **/
+public final class CarInfoVoParameterSettings  {
+
+    private static final Map<String, CarKindClassifier> CAR_KIND_CLASSIFIER_MAP = new HashMap<>();
+
+    static {
+        CAR_KIND_CLASSIFIER_MAP.put(CarKindCode.CAR_KIND_CODE_A0.getCode(), new PassengerCarClassifier());
+        CAR_KIND_CLASSIFIER_MAP.put(CarKindCode.CAR_KIND_CODE_A1.getCode(), new TruckClassifier());
+    }
+
+    /**
+     * 设置车辆明细
+     * @param carInfoVo
+     */
+    private static void setCarKindCode(CarInfoVo carInfoVo) {
+        CarKindClassifier carKindClassifier = CAR_KIND_CLASSIFIER_MAP.get(carInfoVo.getCarKindCode());
+        carKindClassifier.matches(carInfoVo);
+        CarKindDetailIdCode kind = carKindClassifier.getKind(carInfoVo);
+        carInfoVo.setCarKindCode(kind.getCode());
+    }
+
+    public static void setParameterSettings(CarInfoVo carInfoVo) {
+        setCarKindCode(carInfoVo);
+    }
+
+}

+ 28 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/CarKindClassifier.java

@@ -0,0 +1,28 @@
+package com.jzg.quotation.summary.classifier;
+
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.quotation.commons.constant.enums.quote.CarKindDetailIdCode;
+
+/**
+ * @version
+ * @description: 车型分类器
+ * @author: wenks
+ * @date: 2025/5/22 16:33
+ **/
+public interface CarKindClassifier {
+
+    /**
+     * 比较是否符合要求
+     * @param car 车辆参数
+     * @return
+     */
+    void matches(CarInfoVo car);
+
+    /**
+     * 返回车险明细代码
+     * @return 车辆明细代码
+     */
+    CarKindDetailIdCode getKind(CarInfoVo car);
+
+
+}

+ 39 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/impl/PassengerCarClassifier.java

@@ -0,0 +1,39 @@
+package com.jzg.quotation.summary.classifier.impl;
+
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.commons.exception.SystemException;
+import com.jzg.quotation.commons.constant.enums.quote.CarKindDetailIdCode;
+import com.jzg.quotation.summary.classifier.CarKindClassifier;
+
+public class PassengerCarClassifier implements CarKindClassifier {
+
+    @Override
+    public void matches(CarInfoVo car) {
+        try {
+            int seats = Integer.parseInt(car.getSeatCount());
+            if (seats > 0) {
+                return;
+            }
+        } catch (NumberFormatException ignored) {
+        }
+        throw new SystemException("客车需有座位数");
+    }
+
+    @Override
+    public CarKindDetailIdCode getKind(CarInfoVo car) {
+        int seats = Integer.parseInt(car.getSeatCount());
+        if (seats <= 6) {
+            return CarKindDetailIdCode.K01;
+        }
+        if (seats <= 10) {
+            return CarKindDetailIdCode.K02;
+        }
+        if (seats <= 20) {
+            return CarKindDetailIdCode.K03;
+        }
+        if (seats <= 36) {
+            return CarKindDetailIdCode.K04;
+        }
+        return CarKindDetailIdCode.K05;
+    }
+}

+ 37 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/classifier/impl/TruckClassifier.java

@@ -0,0 +1,37 @@
+package com.jzg.quotation.summary.classifier.impl;
+
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.commons.exception.SystemException;
+import com.jzg.quotation.commons.constant.enums.quote.CarKindDetailIdCode;
+import com.jzg.quotation.summary.classifier.CarKindClassifier;
+
+public class TruckClassifier implements CarKindClassifier {
+
+    @Override
+    public void matches(CarInfoVo car) {
+        try {
+            double mass = Double.parseDouble(car.getCompleteKerbMass());
+            if (mass > 0) {
+                return;
+            }
+        } catch (NumberFormatException ignored) {
+        }
+        throw new SystemException("货车需有整备质量");
+    }
+
+    @Override
+    public CarKindDetailIdCode getKind(CarInfoVo car) {
+        double mass = car.getTonCountDouble();
+        if (mass <= 2) {
+            return CarKindDetailIdCode.H01;
+        }
+        if (mass <= 5) {
+            return CarKindDetailIdCode.H02;
+        }
+        if (mass <= 10) {
+            return CarKindDetailIdCode.H03;
+        }
+        return CarKindDetailIdCode.H04;
+    }
+
+}

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

@@ -24,6 +24,7 @@ import com.jzg.quotation.commons.entity.vo.aggregated.*;
 import com.jzg.quotation.commons.entity.vo.orders.InsOrdersVo;
 import com.jzg.quotation.commons.service.QuotationBaseService;
 import com.jzg.quotation.commons.utils.SnowFlakeUtil;
+import com.jzg.quotation.summary.classifier.CarInfoVoParameterSettings;
 import com.jzg.quotation.summary.converter.QuoteInfoConverter;
 import com.jzg.quotation.summary.entity.po.QuoteRuleMapping;
 import com.jzg.quotation.summary.factory.CompanyFactory;
@@ -187,6 +188,7 @@ public class UnifyOrderManager {
         PtlAgreement ptlAgreement = byCompanyId.getData().get(0);
         quoteVo.getOrder().setAgreementId(ptlAgreement.getId());
         quoteVo.getOrder().setApiType(Integer.valueOf(ptlAgreement.getApiType()));
+
         //获取保司实体
         QuotationBaseService quoteService = companyFactory.getQuoteService(esmInsCompanyHttpResult.getData()
                 .getCompanyCode(), quoteVo.getOrder()
@@ -204,6 +206,9 @@ public class UnifyOrderManager {
             QuoteInfoConverter.converterKindInfoVo(quoteVo.getKindInfoVo(), quoteKindMappingMap.get(QuoteRuleCategory.KIND.getCode()), quoteVo.getCarInfoVo());
         }
 
+        // 添加车辆没有的参数: 车辆明细、
+        CarInfoVoParameterSettings.setParameterSettings(quoteVo.getCarInfoVo());
+
         // 报价
         QuoteResultsVo quoteResultsVo = quoteService.quote(quoteVo);
         quoteResultsVo.setKindInfoVo(quoteVo.getKindInfoVo());

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

@@ -28,23 +28,23 @@ public class QuoteInfoConverter {
 
         QuoteRuleConverter quoteRuleConverter = new QuoteRuleConverter(groupCodeMap, carInfoVo);
         // 使用性质
-        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_NATURE.getCode(), CarInfoVo::setCarNatureCode, CarInfoVo::setCarNatureName);
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_NATURE.getCode(), carInfoVo.getCarNatureCode(), CarInfoVo::setCarNatureCode, CarInfoVo::setCarNatureName);
         // 车辆用途
-        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.VEHICLE_USE.getCode(), CarInfoVo::setVehicleUseCode, CarInfoVo::setVehicleUseName);
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.VEHICLE_USE.getCode(), carInfoVo.getVehicleUseCode(), CarInfoVo::setVehicleUseCode, CarInfoVo::setVehicleUseName);
         // 车辆种类
-        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_KIND.getCode(), CarInfoVo::setCarKindCode, CarInfoVo::setCarKindName);
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_KIND.getCode(), carInfoVo.getCarKindCode(), CarInfoVo::setCarKindCode, CarInfoVo::setCarKindName);
         // 能源类型
-        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.ENERGY_TYPE.getCode(), CarInfoVo::setEnergyTypeCode, CarInfoVo::setEnergyTypeName);
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.ENERGY_TYPE.getCode(), carInfoVo.getEnergyTypeCode(), CarInfoVo::setEnergyTypeCode, CarInfoVo::setEnergyTypeName);
         // 车辆类型 有的保险公司不需要映射
-        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_TYPE.getCode(), CarInfoVo::setCarTypeCode, CarInfoVo::setCarTypeName);
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_TYPE.getCode(), carInfoVo.getCarTypeCode(), CarInfoVo::setCarTypeCode, CarInfoVo::setCarTypeName);
         // 所属性质
-        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.PROPERTY.getCode(), CarInfoVo::setPropertyCode, CarInfoVo::setPropertyName);
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.PROPERTY.getCode(), carInfoVo.getPropertyCode(), CarInfoVo::setPropertyCode, CarInfoVo::setPropertyName);
         // 车辆明细
-        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_KIND_DETAIL.getCode(), CarInfoVo::setCarKindDetailIdCode, CarInfoVo::setCarKindDetailIdName);
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_KIND_DETAIL.getCode(), carInfoVo.getCarKindDetailIdCode(), CarInfoVo::setCarKindDetailIdCode, CarInfoVo::setCarKindDetailIdName);
         // 号牌颜色
-        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.LICENSE_COLOR.getCode(), CarInfoVo::setLicenseColorCode, CarInfoVo::setLicenseColorName);
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.LICENSE_COLOR.getCode(), carInfoVo.getLicenseColorCode(), CarInfoVo::setLicenseColorCode, CarInfoVo::setLicenseColorName);
         // 号牌种类
-        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.LICENSE_COLOR.getCode(), CarInfoVo::setLicenseKindCode, CarInfoVo::setLicenseKindName);
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.LICENSE_COLOR.getCode(), carInfoVo.getLicenseColorCode(), CarInfoVo::setLicenseKindCode, CarInfoVo::setLicenseKindName);
     }
 
     /**

+ 2 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/converter/QuoteRuleConverter.java

@@ -30,10 +30,10 @@ public final class QuoteRuleConverter {
      * @param codeSetter 编码set
      * @param nameSetter 名称set
      */
-    public void applyRuleMapping(String groupCode, BiConsumer<CarInfoVo, String> codeSetter, BiConsumer<CarInfoVo, String> nameSetter) {
+    public void applyRuleMapping(String groupCode, String code,  BiConsumer<CarInfoVo, String> codeSetter, BiConsumer<CarInfoVo, String> nameSetter) {
         Optional.ofNullable(groupCodeMap)
                 .map(map -> map.get(groupCode))
-                .map(ruleMap -> ruleMap.get(carInfoVo.getCarNatureCode()))
+                .map(ruleMap -> ruleMap.get(code))
                 .ifPresent(mapping -> {
                     codeSetter.accept(carInfoVo, mapping.getRuleCode());
                     nameSetter.accept(carInfoVo, mapping.getRuleName());

+ 14 - 14
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/component/ZmCrawlerRequestComponent.java

@@ -393,16 +393,16 @@ public class ZmCrawlerRequestComponent {
      * </root>
      */
     public String getUploadedImages(String userCode, String batchId) {
-        Map<String, Object> params = new HashMap<>();
-        params.put("a", "");
-        params.put("_", System.currentTimeMillis() * 1000);//毫秒级时间戳
-        params.put("appCode", ZmCrawlerImageConstant.ZM_IMAGE_APP_CODE);
-        params.put("appName", ZmCrawlerImageConstant.ZM_IMAGE_APP_NAME);
-        params.put("userCode", userCode);
-        params.put("batchId", batchId);//批次号
-        params.put("batchVer", "");//提交图片数量
-        params.put("orgCode", ZmCrawlerImageConstant.ZM_IMAGE_ORG_CODE);
-        params.put("newBatch", "");
+        MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+        params.add("a", "");
+        params.add("_", System.currentTimeMillis() * 1000 + "");//毫秒级时间戳
+        params.add("appCode", ZmCrawlerImageConstant.ZM_IMAGE_APP_CODE);
+        params.add("appName", ZmCrawlerImageConstant.ZM_IMAGE_APP_NAME);
+        params.add("userCode", userCode);
+        params.add("batchId", batchId);//批次号
+        params.add("batchVer", "");//提交图片数量
+        params.add("orgCode", ZmCrawlerImageConstant.ZM_IMAGE_ORG_CODE);
+        params.add("newBatch", "");
 
         String responseXml = requestComponent.get(RequestUrl.GET_UPLOADED_IMAGE.getRequestUrl(zmCrawlerProperties.getImageUrl()), params, "", String.class, null);
         return responseXml;
@@ -635,16 +635,16 @@ public class ZmCrawlerRequestComponent {
         //解析已上传的图片url
         Document document = XmlUtil.readXML(uploadedImageXml.replace("\t", "").replace("\n", ""));
         Node responseCode = document.getElementsByTagName(ZmCrawlerImageConstant.ZM_IMAGE_UPLOADED_RES_NODE).item(0);
-        Map<String, Object> params = new HashMap<>();
+        MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
         if ("200".equals(responseCode.getTextContent())) {
             Node sydNode = document.getElementsByTagName("SYD").item(0);
             String sydNodeStr = XmlUtil.toStr(sydNode.getFirstChild());
 
             //组装提交图片xml字符串
             String submitImageXml = buildSubmitXml(sydNodeStr, parameters, userCode, docCodeAndImage, crawlerOrder);
-            params.put("xmlStr", submitImageXml);
-            params.put("svrIp", ZmCrawlerImageConstant.ZM_IMAGE_SUBMIT_IP);
-            params.put("svrPort", ZmCrawlerImageConstant.ZM_IMAGE_SUBMIT_PORT);
+            params.add("xmlStr", submitImageXml);
+            params.add("svrIp", ZmCrawlerImageConstant.ZM_IMAGE_SUBMIT_IP);
+            params.add("svrPort", ZmCrawlerImageConstant.ZM_IMAGE_SUBMIT_PORT);
         } else {
             Node resMsg = document.getElementsByTagName(ZmCrawlerImageConstant.ZM_IMAGE_UPLOADED_RES_MSG).item(0);
             throw new SystemException(resMsg.getTextContent());

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

@@ -364,6 +364,7 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
         SchemeResultVo schemeResultVo = new SchemeResultVo();
         //基础方案
         SchemeResultVo.SchemeVo schemeVo = schemeInsuranceInfo.stream().filter(x -> x.getSchemeType().equals("1")).findFirst().orElse(null);
+        assert schemeVo != null;
         schemeResultVo.setSchemes(schemeVo.getInfos());
         //把基础方案的商业险的value 赋值
         schemeResultVo.getSchemes().forEach(schemeInfoVo -> {