Browse Source

update: 优化报价流程

wks 1 year ago
parent
commit
c75cbecfba

+ 30 - 2
commons/src/main/java/com/jzg/commons/entity/quote/vo/CarInfoVo.java

@@ -26,7 +26,7 @@ public class CarInfoVo implements Serializable {
     @Serial
     private static final long serialVersionUID = -1999956887911522472L;
 
-    @TableId(value = "order_no",type = IdType.ASSIGN_ID)
+    @TableId(value = "order_no", type = IdType.ASSIGN_ID)
     private String orderNo;
 
     /**
@@ -96,6 +96,12 @@ public class CarInfoVo implements Serializable {
     @Schema(description = "使用性质代码")
     private String carNatureCode;
 
+    /**
+     * 使用性质名称
+     */
+    @Schema(description = "使用性质名称")
+    private String carNatureName;
+
     /**
      * @see com.jzg.quotation.commons.constant.enums.quote.VehicleUseCode
      * 车辆用途代码
@@ -103,6 +109,9 @@ public class CarInfoVo implements Serializable {
     @Schema(description = "车辆用途代码")
     private String vehicleUseCode;
 
+    @Schema(description = "车辆用途名称")
+    private String vehicleUseName;
+
     /**
      * 保司的车辆类型编码都一直 传入code即可
      * 例如 K33 轿车 H31 轻型普通货车
@@ -111,6 +120,8 @@ public class CarInfoVo implements Serializable {
     @Schema(description = "车辆类型代码")
     private String carTypeCode;
 
+    @Schema(description = "车辆类型名称")
+    private String carTypeName;
     /**
      * @see com.jzg.quotation.commons.constant.enums.quote.CarKindCode
      * 车辆种类代码
@@ -118,30 +129,44 @@ public class CarInfoVo implements Serializable {
     @Schema(description = "车辆种类代码")
     private String carKindCode;
 
+    @Schema(description = "车辆种类名称")
+    private String carKindName;
     /**
      * @see com.jzg.quotation.commons.constant.enums.quote.EnergyTypeCode
      * 能源种类代码
      */
     @Schema(description = "能源种类代码")
     private String energyTypeCode;
+
+    @Schema(description = "能源种类名称")
+    private String energyTypeName;
     /**
      * @see com.jzg.quotation.commons.constant.enums.quote.PropertyCode
      * 所属性质代码
      */
     @Schema(description = "所属性质代码")
     private String propertyCode;
+
+    @Schema(description = "所属性质名称")
+    private String propertyName;
     /**
      * @see com.jzg.quotation.commons.constant.enums.quote.LicenseColorCode
      * 号牌颜色代码
      */
     @Schema(description = "号牌颜色代码")
     private String licenseColorCode;
+
+    @Schema(description = "号牌颜色名称")
+    private String licenseColorName;
     /**
      * @see com.jzg.quotation.commons.constant.enums.quote.CarKindDetailIdCode
      * 车种明细
      */
     @Schema(description = "车种明细")
     private String carKindDetailIdCode;
+
+    @Schema(description = "车种明细")
+    private String carKindDetailIdName;
     /**
      * @see com.jzg.quotation.commons.constant.enums.quote.LicenseKindCode
      * 号牌种类
@@ -149,6 +174,8 @@ public class CarInfoVo implements Serializable {
     @Schema(description = "号牌种类")
     private String licenseKindCode;
 
+    @Schema(description = "号牌种类名称")
+    private String licenseKindName;
     /**
      * 注册日期
      */
@@ -223,9 +250,10 @@ public class CarInfoVo implements Serializable {
 
     /**
      * InsOrdersCarInfo 转换 CarInfoVo
+     *
      * @param carInfo
      */
-    public CarInfoVo(InsOrdersCarInfo carInfo){
+    public CarInfoVo(InsOrdersCarInfo carInfo) {
         this.licenseNo = carInfo.getLicenseNo();
         this.vinNo = carInfo.getVinNo();
         this.brandName = carInfo.getBrandName();

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

@@ -2,7 +2,6 @@ package com.jzg.quotation.dajia.crawler.component;
 
 
 import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.quotation.commons.component.RequestComponent;
 import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
@@ -20,13 +19,15 @@ import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
 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.*;
+import java.util.Base64;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
 
 @Slf4j
 @Component
@@ -41,12 +42,9 @@ public class DaJiaCrawlerRequestComponent {
 
     private final DaJiaCrawlerProperties daJiaCrawlerProperties;
 
-    private final DaJiaCrawlerCacheComponent daJiaCrawlerCacheComponent;
-
     // 循环次数
     public static final int CIRCULATE_NUMBER = 3;
-    // 登陆次数
-    public static final int LOGINS_NUMBER = 3;
+
 
     public int processCaptcha(String res) {
         // 检查字符串长度是否足够,并且第三个字符不是'='
@@ -91,7 +89,7 @@ public class DaJiaCrawlerRequestComponent {
         Map<String, Object> map = Map.of("imgId", UUID.randomUUID().toString().replaceAll("-", ""));
         // 请求
         DaJiaCrawlerBaseResponse request = requestComponent.requestGET(RequestUrl.CAPTCHA.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()), map, "", DaJiaCrawlerBaseResponse.class);
-        DaJiaCrawlerCaptchaResponse daJiaCrawlerCaptchaResponse = DESEncryption.decrypt(request.getResult(), DaJiaCrawlerCaptchaResponse.class);
+        DaJiaCrawlerCaptchaResponse daJiaCrawlerCaptchaResponse = DESEncryption.decryptStrToObject(request.getResult(), DaJiaCrawlerCaptchaResponse.class);
         // 识别验证码
         String s = exteriorUtilsRequest.captchaIdentify(daJiaCrawlerCaptchaResponse.getImg());
         try {
@@ -152,50 +150,17 @@ public class DaJiaCrawlerRequestComponent {
     /**
      * 登录次数
      *
-     * @param username     用户名
-     * @param password     密码
-     * @param loginsNumber 登录次数
+     * @param username 用户名
+     * @param password 密码
      * @return token
      */
-    public String authenticate(String username, String password, int loginsNumber) {
+    public ResponseEntity<DaJiaCrawlerBaseResponse> authenticate(String username, String password) {
         // 登录验证码获取
         DaJiaCrawlerCaptchaResponse captcha = captcha(CIRCULATE_NUMBER);
         // 登录存入缓存当中
         DaJiaCrawlerAuthenticateRequest request = new DaJiaCrawlerAuthenticateRequest(captcha, username, password);
-
-        String jsonString = JSONObject.toJSONString(request);
-        String data = DESEncryption.encrypt(jsonString);
-        DaJiaCrawlerBaseRequest crawlerBaseRequest = new DaJiaCrawlerBaseRequest(data);
-        ResponseEntity<DaJiaCrawlerBaseResponse> responseEntity = requestComponent.objectPost(RequestUrl.AUTHENTICATE.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()), crawlerBaseRequest, DaJiaCrawlerBaseResponse.class);
-        DaJiaCrawlerBaseResponse response = Optional.of(responseEntity).map(ResponseEntity::getBody).orElseThrow();
-
-        if ("200".equals(response.getCode())) {
-            DaJiaCrawlerAuthenticateResponse daJiaCrawlerCaptchaResponse = DESEncryption.decrypt(response.getResult(), DaJiaCrawlerAuthenticateResponse.class);
-            return daJiaCrawlerCacheComponent.cacheAuthorization(daJiaCrawlerCaptchaResponse.getIdToken(), daJiaCrawlerCaptchaResponse.getUserCode(), username);
-        }
-        loginsNumber = loginsNumber - 1;
-        if (loginsNumber <= 0) {
-            String message = Optional.ofNullable(responseEntity.getBody())
-                    .map(DaJiaCrawlerBaseResponse::getMessage)
-                    .orElseThrow(() -> new SystemException("登录失败"));
-            throw new SystemException(message);
-        }
-        return authenticate(username, password, loginsNumber);
-    }
-
-    /**
-     * 获取请求头
-     *
-     * @return
-     */
-    public HttpHeaders getHeaders(String username, String password) {
-        String authorization = daJiaCrawlerCacheComponent.getAuthorization(username);
-        if (!StringUtils.hasLength(authorization)) {
-            authorization = authenticate(username, password, LOGINS_NUMBER);
-        }
-        HttpHeaders headers = new HttpHeaders();
-        headers.set(HttpHeaders.AUTHORIZATION , authorization);
-        return headers;
+        DaJiaCrawlerBaseRequest crawlerBaseRequest = new DaJiaCrawlerBaseRequest(request);
+        return requestComponent.objectPost(RequestUrl.AUTHENTICATE.getRequestUrl(daJiaCrawlerProperties.getBaseUrl()), crawlerBaseRequest, DaJiaCrawlerBaseResponse.class);
     }
 
     public <DaJiaResponse> DaJiaResponse requestUnencrypted(CrawlerRequestUrlStandard crawlerRequestUrlStandard, Object request, Class<DaJiaResponse> responseClass, HttpHeaders headers) {
@@ -312,16 +277,16 @@ public class DaJiaCrawlerRequestComponent {
     /**
      * 支付
      *
-     * @param orderNo 订单号
+     * @param orderNo      订单号
      * @param operatorCode
-     * @param headers 请求头
+     * @param headers      请求头
      * @return
      */
     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);
         DaJiaCrawlerBaseResponse daJiaCrawlerBaseResponse = requestComponent.get(url, map, "", DaJiaCrawlerBaseResponse.class, headers);
-        DaJiaCrawlerQrcodeResponse daJiaCrawlerCaptchaResponse = DESEncryption.decrypt(daJiaCrawlerBaseResponse.getResult(), DaJiaCrawlerQrcodeResponse.class);
+        DaJiaCrawlerQrcodeResponse daJiaCrawlerCaptchaResponse = DESEncryption.decryptStrToObject(daJiaCrawlerBaseResponse.getResult(), DaJiaCrawlerQrcodeResponse.class);
         return daJiaCrawlerCaptchaResponse.getUrl();
     }
 

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

@@ -2,6 +2,7 @@ package com.jzg.quotation.dajia.crawler.entity.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerCaptchaResponse;
+import com.jzg.quotation.dajia.crawler.utils.DESEncryption;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -62,7 +63,7 @@ public class DaJiaCrawlerAuthenticateRequest implements Serializable {
 
     public DaJiaCrawlerAuthenticateRequest(DaJiaCrawlerCaptchaResponse captcha, String username, String password) {
         this.username = username;
-        this.password = password;
+        this.password = DESEncryption.encrypt(password);
         this.checkCode = captcha.getImg();
         this.imgId = captcha.getUuid();
         this.operatorId = username;

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

@@ -1,5 +1,6 @@
 package com.jzg.quotation.dajia.crawler.entity.request;
 
+import com.jzg.quotation.dajia.crawler.utils.DESEncryption;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -23,4 +24,8 @@ public class DaJiaCrawlerBaseRequest implements Serializable {
 
     private String data;
 
+    public DaJiaCrawlerBaseRequest(Object data) {
+        this.data = DESEncryption.encryptObjectToStr(data);
+    }
+
 }

+ 31 - 0
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/crawler/service/DaJiaCrawlerQuoteProcessService.java

@@ -0,0 +1,31 @@
+package com.jzg.quotation.dajia.crawler.service;
+
+import org.springframework.http.HttpHeaders;
+
+/**
+ * @description: 大家财险 【爬虫】报价流程 功能组件
+ * @author: wenks
+ * @date: 2025/5/20 15:09
+ **/
+public interface DaJiaCrawlerQuoteProcessService {
+
+    /**
+     * 登录
+     *
+     * @param username 用户名
+     * @param password 密码
+     * @return 登录信息
+     */
+    String login(String username, String password);
+
+    /**
+     * 获取请求头信息
+     *
+     * @param username 用户名
+     * @param password 密码
+     * @return 请求头
+     */
+    HttpHeaders getHeaders(String username, String password);
+
+
+}

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

@@ -0,0 +1,61 @@
+package com.jzg.quotation.dajia.crawler.service.impl;
+
+import com.jzg.commons.exception.SystemException;
+import com.jzg.quotation.dajia.crawler.component.DaJiaCrawlerCacheComponent;
+import com.jzg.quotation.dajia.crawler.component.DaJiaCrawlerRequestComponent;
+import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerAuthenticateResponse;
+import com.jzg.quotation.dajia.crawler.entity.response.DaJiaCrawlerBaseResponse;
+import com.jzg.quotation.dajia.crawler.service.DaJiaCrawlerQuoteProcessService;
+import com.jzg.quotation.dajia.crawler.utils.DESEncryption;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.Optional;
+
+@Service
+@RequiredArgsConstructor
+public class DaJiaCrawlerQuoteProcessServiceImpl implements DaJiaCrawlerQuoteProcessService {
+
+    private final DaJiaCrawlerCacheComponent daJiaCrawlerCacheComponent;
+
+    private final DaJiaCrawlerRequestComponent daJiaCrawlerRequestComponent;
+
+    // 登陆次数
+    public static final int LOGINS_NUMBER = 3;
+
+    @Override
+    public String login(String username, String password) {
+        for (int i = 0; i < LOGINS_NUMBER; i++) {
+            ResponseEntity<DaJiaCrawlerBaseResponse> responseEntity = daJiaCrawlerRequestComponent.authenticate(username, password);
+            DaJiaCrawlerBaseResponse response = Optional.of(responseEntity)
+                    .map(ResponseEntity::getBody)
+                    .orElseThrow();
+            if ("200".equals(response.getCode())) {
+                DaJiaCrawlerAuthenticateResponse daJiaCrawlerCaptchaResponse = DESEncryption.decryptStrToObject(response.getResult(), DaJiaCrawlerAuthenticateResponse.class);
+                return daJiaCrawlerCacheComponent.cacheAuthorization(daJiaCrawlerCaptchaResponse.getIdToken(), daJiaCrawlerCaptchaResponse.getUserCode(), username);
+            }
+            String message = Optional.ofNullable(responseEntity.getBody())
+                    .map(DaJiaCrawlerBaseResponse::getMessage)
+                    .orElseThrow(() -> new SystemException("登录失败"));
+            if(!StringUtils.hasLength(message)) {
+                throw new SystemException(message);
+            }
+        }
+        throw new SystemException("登录失败");
+    }
+
+    @Override
+    public HttpHeaders getHeaders(String username, String password) {
+        String authorization = daJiaCrawlerCacheComponent.getAuthorization(username);
+        if (!StringUtils.hasLength(authorization)) {
+            authorization = login(username, password);
+        }
+        HttpHeaders headers = new HttpHeaders();
+        headers.set(HttpHeaders.AUTHORIZATION, authorization);
+        return headers;
+    }
+
+}

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

@@ -19,6 +19,7 @@ import com.jzg.quotation.dajia.crawler.entity.request.*;
 import com.jzg.quotation.dajia.crawler.entity.request.quote.ProposalInfoDTO;
 import com.jzg.quotation.dajia.crawler.entity.response.*;
 import com.jzg.quotation.dajia.crawler.service.DaJiaCrawlerOrderService;
+import com.jzg.quotation.dajia.crawler.service.DaJiaCrawlerQuoteProcessService;
 import com.jzg.quotation.dajia.crawler.service.DaJiaCrawlerRequest;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.HttpHeaders;
@@ -40,10 +41,11 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
 
     private final DaJiaCrawlerOrderService daJiaCrawlerOrderService;
 
+    private final DaJiaCrawlerQuoteProcessService daJiaCrawlerQuoteProcessService;
 
     @Override
     public void login(LoginBase loginBase) {
-        daJiaCrawlerRequestComponent.authenticate(loginBase.getUsername(), loginBase.getPassword(), DaJiaCrawlerRequestComponent.LOGINS_NUMBER);
+        daJiaCrawlerQuoteProcessService.login(loginBase.getUsername(), loginBase.getPassword());
     }
 
     @Override
@@ -52,7 +54,7 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         AttributionInformationVo attributionInformationVo = quoteVo
                 .getOrder()
                 .getAttributionInformationVo();
-        HttpHeaders headers = daJiaCrawlerRequestComponent.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
+        HttpHeaders headers = daJiaCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
         String userCode = daJiaCrawlerCacheComponent.getUserCode(attributionInformationVo.getUsername());
         // 1.1 配置信息
         DaJiaCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(DaJiaCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
@@ -86,7 +88,7 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
         AttributionInformationVo attributionInformationVo = underwritingVo
                 .getOrder()
                 .getAttributionInformationVo();
-        HttpHeaders headers = daJiaCrawlerRequestComponent.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
+        HttpHeaders headers = daJiaCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
 
         DaJiaCrawlerSaveResponse daJiaCrawlerSaveResponse = daJiaCrawlerCacheComponent.getDaJiaCrawlerSaveResponse(underwritingVo.getOrder()
                 .getOrdersNo());
@@ -99,7 +101,7 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
     public PaymentLinkResultsVo getPaymentLink(PaymentLinkVo paymentLinkVo) {
         AttributionInformationVo attributionInformationVo = paymentLinkVo.getOrder().getAttributionInformationVo();
         DaJiaCrawlerOrder daJiaCrawlerOrder = daJiaCrawlerOrderService.getById(paymentLinkVo.getOrder().getOrdersNo());
-        HttpHeaders headers = daJiaCrawlerRequestComponent.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
+        HttpHeaders headers = daJiaCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
         String userCode = daJiaCrawlerCacheComponent.getUserCode(attributionInformationVo.getUsername());
         daJiaCrawlerRequestComponent.qrcode(daJiaCrawlerOrder.getOrdersNo(),userCode, headers);
         return new PaymentLinkResultsVo();
@@ -109,7 +111,7 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
     public void uploadImage(InsuranceUploadImageVo insuranceUploadImageVo) {
         AttributionInformationVo attributionInformationVo = insuranceUploadImageVo.getOrder()
                 .getAttributionInformationVo();
-        HttpHeaders headers = daJiaCrawlerRequestComponent.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
+        HttpHeaders headers = daJiaCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
         String userCode = daJiaCrawlerCacheComponent.getUserCode(attributionInformationVo.getUsername());
         DaJiaCrawlerOrder daJiaCrawlerOrder = daJiaCrawlerOrderService.getById(insuranceUploadImageVo.getOrder()
                 .getOrdersNo());
@@ -144,7 +146,7 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
     @Override
     public DownloadPolicyResultVo downloadPolicy(DownloadPolicyVo orderBase) {
         AttributionInformationVo attributionInformationVo = orderBase.getOrder().getAttributionInformationVo();
-        HttpHeaders headers = daJiaCrawlerRequestComponent.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
+        HttpHeaders headers = daJiaCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
 
         DaJiaCrawlerDownloadRequest daJiaCrawlerDownloadRequest = new DaJiaCrawlerDownloadRequest();
         DaJiaCrawlerDownloadResponse response = daJiaCrawlerRequestComponent.electronPolicyIODownload(daJiaCrawlerDownloadRequest, headers);
@@ -154,7 +156,7 @@ public class DaJiaCrawlerRequestImpl implements DaJiaCrawlerRequest {
     @Override
     public OrderStatusResultVo queryOrderState(OrderStatusVo orderStatusVo) {
         AttributionInformationVo attributionInformationVo = orderStatusVo.getOrder().getAttributionInformationVo();
-        HttpHeaders headers = daJiaCrawlerRequestComponent.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
+        HttpHeaders headers = daJiaCrawlerQuoteProcessService.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
         String userCode = daJiaCrawlerCacheComponent.getUserCode(attributionInformationVo.getUsername());
 
         DaJiaCrawlerOrderListRevisedRequest daJiaCrawlerOrderListRevisedRequest = new DaJiaCrawlerOrderListRevisedRequest();

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

@@ -6,6 +6,7 @@ import cn.hutool.crypto.Mode;
 import cn.hutool.crypto.Padding;
 import cn.hutool.crypto.symmetric.DES;
 import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
 import org.apache.tomcat.util.buf.HexUtils;
 
 import java.time.LocalDate;
@@ -68,9 +69,20 @@ public final class DESEncryption {
      * @param <T>    json转换后的泛型
      * @return 解密后的类
      */
-    public static <T> T decrypt(String data, Class<T> tClass) {
+    public static <T> T decryptStrToObject(String data, Class<T> tClass) {
         String decrypt = decrypt(data);
         return JSON.parseObject(decrypt, tClass);
     }
 
+    /**
+     * 将对象转为json并加密
+     *
+     * @param data Object 对象
+     * @return 加密字符串
+     */
+    public static String encryptObjectToStr(Object data) {
+        String jsonString = JSONObject.toJSONString(data);
+        return encrypt(jsonString);
+    }
+
 }

+ 1 - 7
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/SummaryQuotationApplication.java

@@ -15,13 +15,7 @@ import org.springframework.data.mongodb.repository.support.SimpleMongoRepository
 @SpringBootApplication(scanBasePackages = {"com.jzg"})
 @MapperScan({"com.jzg.quotation.summary.mapper", "com.jzg.commons.mapper"})
 @EnableFeignClients(basePackages = "com.jzg.quotation.commons.client")
-@ComponentScan(basePackages = {
-        "com.jzg.commons",
-        "com.jzg.quotation",
-        "com.jzg.quotation.commons",
-        "com.jzg.quotation.summary"},
-        nameGenerator = QuoteServiceProcessor.class
-)
+@ComponentScan(basePackages = {"com.jzg"}, nameGenerator = QuoteServiceProcessor.class)
 @EnableConfigurationProperties(YcConfigurationProperties.class)
 @EnableMongoRepositories(
         basePackages = "com.jzg.quotation.**.repository",

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

@@ -4,7 +4,6 @@ import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.quotation.commons.constant.enums.base.QuoteRuleGroup;
 import com.jzg.quotation.summary.entity.po.QuoteRuleMapping;
-import org.springframework.util.StringUtils;
 
 import java.util.List;
 import java.util.Map;
@@ -24,71 +23,28 @@ public class QuoteInfoConverter {
      * @param quoteRuleMappingList 报价规则映射
      */
     public static void converterCarInfoVo(CarInfoVo carInfoVo, List<QuoteRuleMapping> quoteRuleMappingList) {
-        Map<String, Map<String, String>> groupCodeMap = quoteRuleMappingList
-                .stream()
-                .collect(Collectors.groupingBy(QuoteRuleMapping::getGroupCode, Collectors.toMap(QuoteRuleMapping::getPlatformCode, QuoteRuleMapping::getRuleCode)));
+        Map<String, Map<String, QuoteRuleMapping>> groupCodeMap = quoteRuleMappingList.stream()
+                .collect(Collectors.groupingBy(QuoteRuleMapping::getGroupCode, Collectors.toMap(QuoteRuleMapping::getPlatformCode, quoteRuleMapping -> quoteRuleMapping)));
+
+        QuoteRuleConverter quoteRuleConverter = new QuoteRuleConverter(groupCodeMap, carInfoVo);
         // 使用性质
-        if(groupCodeMap.containsKey(QuoteRuleGroup.CAR_NATURE.getCode())){
-            carInfoVo.setCarNatureCode(groupCodeMap
-                    .get(QuoteRuleGroup.CAR_NATURE.getCode())
-                    .get(carInfoVo.getCarNatureCode()));
-        }
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_NATURE.getCode(), CarInfoVo::setCarNatureCode, CarInfoVo::setCarNatureName);
         // 车辆用途
-        if(groupCodeMap.containsKey(QuoteRuleGroup.VEHICLE_USE.getCode())){
-            carInfoVo.setVehicleUseCode(groupCodeMap
-                    .get(QuoteRuleGroup.VEHICLE_USE.getCode())
-                    .get(carInfoVo.getVehicleUseCode()));
-        }
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.VEHICLE_USE.getCode(), CarInfoVo::setVehicleUseCode, CarInfoVo::setVehicleUseName);
         // 车辆种类
-        if(groupCodeMap.containsKey(QuoteRuleGroup.CAR_KIND.getCode())){
-            carInfoVo.setCarKindCode(groupCodeMap
-                    .get(QuoteRuleGroup.CAR_KIND.getCode())
-                    .get(carInfoVo.getCarKindCode()));
-        }
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_KIND.getCode(), CarInfoVo::setCarKindCode, CarInfoVo::setCarKindName);
         // 能源类型
-        if(groupCodeMap.containsKey(QuoteRuleGroup.ENERGY_TYPE.getCode())){
-            carInfoVo.setEnergyTypeCode(groupCodeMap
-                    .get(QuoteRuleGroup.ENERGY_TYPE.getCode())
-                    .get(carInfoVo.getEnergyTypeCode()));
-        }
-
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.ENERGY_TYPE.getCode(), CarInfoVo::setEnergyTypeCode, CarInfoVo::setEnergyTypeName);
         // 车辆类型 有的保险公司不需要映射
-        if(groupCodeMap.containsKey(QuoteRuleGroup.CAR_TYPE.getCode())){
-            String carType = groupCodeMap
-                    .get(QuoteRuleGroup.CAR_TYPE.getCode())
-                    .get(carInfoVo.getCarTypeCode());
-            if (StringUtils.hasText(carType)) {
-                carInfoVo.setCarTypeCode(carType);
-            }
-        }
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_TYPE.getCode(), CarInfoVo::setCarTypeCode, CarInfoVo::setCarTypeName);
         // 所属性质
-        if(groupCodeMap.containsKey(QuoteRuleGroup.PROPERTY.getCode())){
-            carInfoVo.setPropertyCode(groupCodeMap
-                    .get(QuoteRuleGroup.PROPERTY.getCode())
-                    .get(carInfoVo.getPropertyCode()));
-        }
-
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.PROPERTY.getCode(), CarInfoVo::setPropertyCode, CarInfoVo::setPropertyName);
         // 车辆明细
-        if(groupCodeMap.containsKey(QuoteRuleGroup.CAR_KIND_DETAIL.getCode())){
-            carInfoVo.setLicenseColorCode(groupCodeMap
-                    .get(QuoteRuleGroup.CAR_KIND_DETAIL.getCode())
-                    .get(carInfoVo.getLicenseColorCode()));
-        }
-
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.CAR_KIND_DETAIL.getCode(), CarInfoVo::setCarKindDetailIdCode, CarInfoVo::setCarKindDetailIdName);
         // 号牌颜色
-        if(groupCodeMap.containsKey(QuoteRuleGroup.LICENSE_COLOR.getCode())){
-            carInfoVo.setLicenseColorCode(groupCodeMap
-                    .get(QuoteRuleGroup.LICENSE_COLOR.getCode())
-                    .get(carInfoVo.getLicenseColorCode()));
-        }
-
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.LICENSE_COLOR.getCode(), CarInfoVo::setLicenseColorCode, CarInfoVo::setLicenseColorName);
         // 号牌种类
-        if(groupCodeMap.containsKey(QuoteRuleGroup.LICENSE_KIND.getCode())){
-            carInfoVo.setLicenseKindCode(groupCodeMap
-                    .get(QuoteRuleGroup.LICENSE_KIND.getCode())
-                    .get(carInfoVo.getLicenseKindCode()));
-        }
-
+        quoteRuleConverter.applyRuleMapping(QuoteRuleGroup.LICENSE_COLOR.getCode(), CarInfoVo::setLicenseKindCode, CarInfoVo::setLicenseKindName);
     }
 
     /**
@@ -98,10 +54,10 @@ public class QuoteInfoConverter {
      */
     public static void converterKindInfoVo(List<KindInfoVo> kindInfoVo, List<QuoteRuleMapping> quoteRuleMappingList, CarInfoVo carInfoVo) {
 
-        String groupCode = carInfoVo.getEnergyTypeCode().equals("0") ?
-                QuoteRuleGroup.BUS_KIND.getCode():QuoteRuleGroup.NEW_ENERGY_KIND.getCode();
-        Map<String, QuoteRuleMapping> ruleMappingMap = quoteRuleMappingList
-                .stream().filter(x -> x.getGroupCode().equals(groupCode))
+        String groupCode = carInfoVo.getEnergyTypeCode()
+                .equals("0") ? QuoteRuleGroup.BUS_KIND.getCode() : QuoteRuleGroup.NEW_ENERGY_KIND.getCode();
+        Map<String, QuoteRuleMapping> ruleMappingMap = quoteRuleMappingList.stream()
+                .filter(x -> x.getGroupCode().equals(groupCode))
                 .collect(Collectors.toMap(QuoteRuleMapping::getPlatformCode, x -> x));
         kindInfoVo.forEach(kind -> {
             QuoteRuleMapping quoteRuleMapping = ruleMappingMap.get(kind.getKindCode());

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

@@ -0,0 +1,43 @@
+package com.jzg.quotation.summary.converter;
+
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.quotation.summary.entity.po.QuoteRuleMapping;
+
+import java.util.Map;
+import java.util.Optional;
+import java.util.function.BiConsumer;
+
+/**
+ * @description: 报价参数规则转换
+ * @author: wenks
+ * @date: 2025/5/20 18:49
+ **/
+public final class QuoteRuleConverter {
+
+    private final Map<String, Map<String, QuoteRuleMapping>> groupCodeMap;
+
+    private final CarInfoVo carInfoVo;
+
+    public QuoteRuleConverter(Map<String, Map<String, QuoteRuleMapping>> groupCodeMap, CarInfoVo carInfoVo) {
+        this.groupCodeMap = groupCodeMap;
+        this.carInfoVo = carInfoVo;
+    }
+
+    /**
+     * 应用规则映射
+     *
+     * @param groupCode  规则标识
+     * @param codeSetter 编码set
+     * @param nameSetter 名称set
+     */
+    public void applyRuleMapping(String groupCode, BiConsumer<CarInfoVo, String> codeSetter, BiConsumer<CarInfoVo, String> nameSetter) {
+        Optional.ofNullable(groupCodeMap)
+                .map(map -> map.get(groupCode))
+                .map(ruleMap -> ruleMap.get(carInfoVo.getCarNatureCode()))
+                .ifPresent(mapping -> {
+                    codeSetter.accept(carInfoVo, mapping.getRuleCode());
+                    nameSetter.accept(carInfoVo, mapping.getRuleName());
+                });
+    }
+
+}