Просмотр исходного кода

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

jiakai 1 месяц назад
Родитель
Сommit
205f069ac4
27 измененных файлов с 2013 добавлено и 136 удалено
  1. 1 1
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/OrgClient.java
  2. 0 1
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java
  3. 0 8
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/config/WebClientConfig.java
  4. 5 4
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/component/HengBangCrawlerRequestComponent.java
  5. 3 0
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/service/Impl/HengBangCrawlerRequestImpl.java
  6. 0 9
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/FactorMatch.java
  7. 2 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/OrderOperationLogAspect.java
  8. 1 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  9. 1 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/mapper/InsOrdersMapper.java
  10. 2 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersService.java
  11. 4 4
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  12. 5 5
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml
  13. 3 6
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/build/TaiPingCrawlerQuoteResultsVoBuild.java
  14. 68 9
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/component/TaiPingCrawlerRequestComponent.java
  15. 4 0
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/constant/RequestUrl.java
  16. 25 0
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/request/TaiPingCrawlerGetNoCarProductListRequest.java
  17. 497 0
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/request/TaiPingCrawlerNoCarCalculateRequest.java
  18. 630 8
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/request/TaiPingCrawlerPremiumCalculateRequest.java
  19. 1 1
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/request/TaiPingCrawlerVehicleForPRPQueryRequest.java
  20. 1 1
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/response/TaiPingCrawlerFindSolutionCodeData.java
  21. 608 0
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/response/TaiPingCrawlerGetNoCarProductListData.java
  22. 14 0
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/response/TaiPingCrawlerNoCarCalculateData.java
  23. 65 64
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/response/TaiPingCrawlerPremiumCalculateData.java
  24. 28 0
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/response/TaiPingCrawlerRefreshFcProductPageData.java
  25. 12 3
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/impl/TaipingCrawlerRequestImpl.java
  26. 32 6
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/utils/AESEncryption.java
  27. 1 1
      tenant/organization/src/main/java/com/jzg/organization/controller/PtlAreaLicenseController.java

+ 1 - 1
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/OrgClient.java

@@ -274,5 +274,5 @@ public interface OrgClient {
      * @return 1401,1402
      */
     @GetMapping("/plt/areaLicense/getAreaLicenseCode")
-    HttpResult<String> convertLicense2AreaNumber(String licenseNo);
+    HttpResult<String> convertLicense2AreaNumber(@RequestParam("licenseNo") String licenseNo);
 }

+ 0 - 1
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java

@@ -620,7 +620,6 @@ public class RequestComponent {
 
     public <Response> ResponseEntity<Response> postTaiping(String url, String body, HttpHeaders headers) {
         body = Optional.ofNullable(body).orElse("");
-        log.info("URL的值:{},body的值:{}", url, body);
         WebClient webClient = selectNoSSLWebClient();
         try {
             HttpHeaders requestHeaders = new HttpHeaders();

+ 0 - 8
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/config/WebClientConfig.java

@@ -21,17 +21,9 @@ import reactor.netty.http.client.HttpClient;
 import reactor.netty.resources.ConnectionProvider;
 import reactor.netty.transport.ProxyProvider;
 
-import org.springframework.http.client.SimpleClientHttpRequestFactory;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSession;
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.X509TrustManager;
-import java.net.HttpURLConnection;
 import java.net.InetSocketAddress;
-import java.net.Proxy;
 import java.security.cert.X509Certificate;
 
 import javax.net.ssl.SSLException;

+ 5 - 4
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/component/HengBangCrawlerRequestComponent.java

@@ -233,7 +233,7 @@ public class HengBangCrawlerRequestComponent {
         cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
         byte[] decrypted = cipher.doFinal(ciphertext);
 
-        return new String(decrypted, "UTF-8");
+        return new String(decrypted, StandardCharsets.UTF_8);
     }
 
     /**
@@ -333,9 +333,11 @@ public class HengBangCrawlerRequestComponent {
                         String time = extractDuplicateEndTime(detail);
                         if (time != null) {
                             String utcTime = DateUtil.toUtcDateTime(time);
+                            // 保司返回的终保时间直接作为起保时间会仍然重叠,统一调整为次日北京时间0点(已0点则不变)
+                            utcTime = DateUtil.getNextDayMidnightUtc(utcTime);
                             // 根据重复投保类型分别设置起保时间:交强险只改 begintimeCi,商业险只改 begintimeBi
                             // 注意:商业险错误信息不含"商业险平台返回",故通过"交强险平台返回"反推
-                            if (detail.contains("交强险平台提示")) {
+                            if (detail.contains("交强险平台返回")) {
                                 calculationRequest.setBegintimeCi(utcTime);
                             } else {
                                 calculationRequest.setBegintimeBi(utcTime);
@@ -421,8 +423,7 @@ public class HengBangCrawlerRequestComponent {
         try {
             encryptPlyappno = HengBangAESUtil.encryptStr(plyappno);
             System.out.println("encryptPlyappno1 ===========" + encryptPlyappno);
-            encryptPlyappno = new StringBuilder(RequestConstant.ENCRYPTPRE).append(encryptPlyappno)
-                    .toString();
+            encryptPlyappno = RequestConstant.ENCRYPTPRE + encryptPlyappno;
             System.out.println("encryptPlyappno2 ===========" + encryptPlyappno);
         } catch (Exception e) {
             throw new SystemException(e.getMessage());

+ 3 - 0
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/service/Impl/HengBangCrawlerRequestImpl.java

@@ -191,6 +191,9 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
                 break;
             }
             String utcTime = DateUtil.toUtcDateTime(time);
+            // 保司返回的begintimeCi/begintimeBi实质是老保单终保时间,直接作为起保时间会仍然重叠;
+            // 统一调整为次日北京时间0点(已0点则不变),避免继续判定为重复投保
+            utcTime = DateUtil.getNextDayMidnightUtc(utcTime);
 
             // 根据重复投保类型分别设置起保时间:交强险只改 begintimeCi,商业险只改 begintimeBi
             // 注意:商业险错误信息不含"商业险平台返回",故通过"交强险平台返回"反推

+ 0 - 9
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/FactorMatch.java

@@ -109,15 +109,6 @@ public class FactorMatch {
                 if (CollUtil.isNotEmpty(undwrtRulesDictList) && ptlAgreementProductCostsAttrLink != null) {
                     String minStr = ptlAgreementProductCostsAttrLink.getMin();
                     if (minStr != null && !minStr.isEmpty()) {
-                        // 拆出 rule 里所有 code
-                        Set<String> ruleCodes = Arrays.stream(minStr.split(","))
-                                .map(String::trim).filter(s -> !s.isEmpty()).collect(Collectors.toSet());
-                        // 在全量 dict 里找 code 匹配的 label
-                        for (PtlAgreementUndwrtRulesDictLabal label : undwrtRulesDictList) {
-                            if (ruleCodes.contains(label.getCode())) {
-                                codeToNameMap.put(label.getCode(), label.getName());
-                            }
-                        }
                         // 如果还是空的(rule 里 code 在 dict 都不存在),fallback 用 attrMeta 的 dictId 再查一遍
                         if (codeToNameMap.isEmpty() && ptlAgreementUndwrtRulesAttr != null && ptlAgreementUndwrtRulesAttr.getDictId() != null) {
                             Integer dictId = ptlAgreementUndwrtRulesAttr.getDictId();

+ 2 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/OrderOperationLogAspect.java

@@ -99,7 +99,8 @@ public class OrderOperationLogAspect {
                 InsOrders mainOrders = orderService.getMainOrders(
                         quoteVo.getOrder().getInsuranceCompanyCode(),
                         quoteVo.getCarInfoVo().getLicenseNo(),
-                        quoteVo.getCarInfoVo().getVinNo());
+                        quoteVo.getCarInfoVo().getVinNo(),
+                        quoteVo.getProductId());
                 boolean isExistsMainOrder = false;
                 if (Objects.nonNull(mainOrders))
                 {

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

@@ -295,7 +295,7 @@ public class UnifyOrderManager {
                 .getApiType(), sysQuoteConfigService, sysQuoteRedisService, platformClient, baseController);
 
         // 生成主订单及子订单  返回子订单id
-        String ordersNo = insOrdersService.generateOrders(quoteVo, companyName,systemCode);
+        String ordersNo = insOrdersService.generateOrders(quoteVo, companyName,systemCode, quoteVo.getProductId());
 
         // 添加车辆没有的参数: 车辆明细、
         QuoteInfoParameterFilling.setParameterSettings(quoteVo, esmInsCompanyHttpResult.getData().getCompanyCode());

+ 1 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/mapper/InsOrdersMapper.java

@@ -67,7 +67,7 @@ public interface InsOrdersMapper extends BaseMapper<InsOrders> {
      * @param vinNo
      * @return
      */
-    InsOrders getBaseOrders(String companyId, String licenseNo, String vinNo);
+    InsOrders getBaseOrders(String companyId, String licenseNo, String vinNo, String productId);
 
     /**
      * 获取最新报价的订单信息

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

@@ -66,7 +66,7 @@ public interface InsOrdersService extends IService<InsOrders> {
      * @param systemCode 租户代码
      * @return String
      */
-    String generateOrders(QuoteVo quoteVo, String companyName, String systemCode);
+    String generateOrders(QuoteVo quoteVo, String companyName, String systemCode,String productId);
 
 
     /**
@@ -77,7 +77,7 @@ public interface InsOrdersService extends IService<InsOrders> {
      * @param vinNo
      * @return
      */
-    InsOrders getMainOrders(String companyId, String licenseNo, String vinNo);
+    InsOrders getMainOrders(String companyId, String licenseNo, String vinNo, String productId);
 
     /**
      * 设置人员地址

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

@@ -1042,8 +1042,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     }
 
     @Override
-    public InsOrders getMainOrders(String companyId, String licenseNo, String vinNo) {
-        return baseMapper.getBaseOrders(companyId, licenseNo, vinNo);
+    public InsOrders getMainOrders(String companyId, String licenseNo, String vinNo,String productId) {
+        return baseMapper.getBaseOrders(companyId, licenseNo, vinNo, productId);
     }
 
 
@@ -1640,12 +1640,12 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
      */
     @Override
     @Transactional
-    public String generateOrders(QuoteVo quoteVo, String companyName, String systemCode) {
+    public String generateOrders(QuoteVo quoteVo, String companyName, String systemCode,String productId) {
         // 生成订单的条件
         // 1个保险公司只有一个主订单   不区分险种
         // 唯一性的判定标准:保险公司编号+ 车牌号 + 车架号
         log.info("生成一个主订单和多个子订单:systemCode=[{}], quoteVo=[{}],companyName=[{}]", systemCode, JSONUtil.toJsonStr(quoteVo), companyName);
-        InsOrders mainOrders = this.getMainOrders(quoteVo.getOrder().getInsuranceCompanyCode(), quoteVo.getCarInfoVo().getLicenseNo(), quoteVo.getCarInfoVo().getVinNo());
+        InsOrders mainOrders = this.getMainOrders(quoteVo.getOrder().getInsuranceCompanyCode(), quoteVo.getCarInfoVo().getLicenseNo(), quoteVo.getCarInfoVo().getVinNo(), productId);
         boolean isExistsMainOrder = Objects.nonNull(mainOrders);
         String mainOrderNo;
         // 如果订单号为0 则生成主订单

+ 5 - 5
tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml

@@ -939,7 +939,7 @@
         ) x WHERE x.rn = 1
         ) ioa1 ON io.id = ioa1.order_no
         <where>
-            and io.is_delete = 0 and io.parent_id != '0' and sujis.type_attr NOT IN (1,2,3,4,5)
+            and io.is_delete = 0 and io.parent_id != '0' and sujis.type_attr NOT IN (1,2,3,4)
             <if test="insOrdersParam.jzgInfoId != null and insOrdersParam.jzgInfoId != ''">
                 and io.real_quote_user_id in (select bbb.mobile from sys_user bbb where bbb.id in ( select ss.user_id
                 from sys_user_jzg_info ss where 1 =1 and (ss.leader_id = #{insOrdersParam.jzgInfoId} or ss.id
@@ -1128,7 +1128,7 @@
         ) x WHERE x.rn = 1
         ) ioa1 ON io.id = ioa1.order_no
         <where>
-            and io.is_delete = 0 and sujis.type_attr NOT IN (1,2,3,4,5)
+            and io.is_delete = 0 and sujis.type_attr NOT IN (1,2,3,4)
             <if test="insOrdersParam.orderNo != null and insOrdersParam.orderNo != ''">
                 AND io.id = #{insOrdersParam.orderNo}
             </if>
@@ -1336,7 +1336,7 @@
         ) x WHERE x.rn = 1
         ) ioa1 ON io.id = ioa1.order_no
         <where>
-            and io.is_delete = 0 and io.parent_id != '0' and sujis.type_attr NOT IN (1,2,3,4,5)
+            and io.is_delete = 0 and io.parent_id != '0' and sujis.type_attr NOT IN (1,2,3,4)
             <if test="insOrdersParam.jzgInfoId != null and insOrdersParam.jzgInfoId != ''">
                 and io.real_quote_user_id in (select bbb.mobile from sys_user bbb where bbb.id in ( select ss.user_id
                 from sys_user_jzg_info ss where 1 =1 and (ss.leader_id = #{insOrdersParam.jzgInfoId} or ss.id
@@ -1549,7 +1549,7 @@
             ) x WHERE x.rn = 1
             ) ioa1 ON io.id = ioa1.order_no
             <where>
-                and io.is_delete = 0 and io.parent_id != '0' and sujis.type_attr NOT IN (1,2,3,4,5)
+                and io.is_delete = 0 and io.parent_id != '0' and sujis.type_attr NOT IN (1,2,3,4)
                 <if test="insOrdersParam.jzgInfoId != null and insOrdersParam.jzgInfoId != ''">
                     and io.real_quote_user_id in (select bbb.mobile from sys_user bbb where bbb.id in ( select ss.user_id
                     from sys_user_jzg_info ss where 1 =1 and (ss.leader_id = #{insOrdersParam.jzgInfoId} or ss.id
@@ -1751,9 +1751,9 @@
         <where>
             and o.is_delete = 0
             and o.parent_id = 0
-            AND o.company_id = #{companyId}
             AND c.license_no = #{licenseNo}
             AND c.vin_no = #{vinNo}
+            AND o.product_id = #{productId}
         </where>
     </select>
 

+ 3 - 6
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/build/TaiPingCrawlerQuoteResultsVoBuild.java

@@ -93,16 +93,13 @@ public class TaiPingCrawlerQuoteResultsVoBuild {
                 .stream().filter(riskDto -> riskDto.getRiskCode().equals("0802"))
                 .mapToDouble(TaiPingCrawlerPremiumCalculateData.PfRiskDtoListDTO::getSumPriceTaxTotal)
                 .sum();
-//        double jyPremium = premiumCalculateData.getPfRiskDtoList()
-//                .stream().filter(riskDto -> riskDto.getRiskCode().equals("0803"))
-//                .mapToDouble(TaiPingCrawlerPremiumCalculateData.PfRiskDtoListDTO::getSumPriceTaxTotal)
-//                .sum();
+        double jyPremium = premiumCalculateData.getFcPrice();
         double vvTax = premiumCalculateData.getPfCarShipTax().getSumPayTax();
         quoteResultsVo.getCosts().setCiPremium(String.valueOf(ciPremium));
         quoteResultsVo.getCosts().setBiPremium(String.valueOf(biPremium));
-        quoteResultsVo.getCosts().setNiPremium("");
+        quoteResultsVo.getCosts().setNiPremium(String.valueOf(jyPremium));
         quoteResultsVo.getCosts().setVvTax(String.valueOf(premiumCalculateData.getPfCarShipTax().getSumPayTax()));
-        quoteResultsVo.getCosts().setSumPremium(String.valueOf(ciPremium+biPremium+vvTax));
+        quoteResultsVo.getCosts().setSumPremium(String.valueOf(ciPremium+biPremium+vvTax+jyPremium));
     }
 
     private static List<KindInfoVo> buildKindInfoVo(List<TaiPingCrawlerPremiumCalculateData.PfItemKindDto0802ListDTO> pfItemKindDto0802List, List<KindInfoVo> kindInfoVo) {

+ 68 - 9
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/component/TaiPingCrawlerRequestComponent.java

@@ -1,11 +1,14 @@
 package com.jzg.quotation.taiping.crawler.component;
 
-import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson2.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.jzg.commons.constants.quote.enums.base.InsuranceEnum;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.quotation.commons.component.RequestComponent;
 import com.jzg.commons.entity.quote.vo.base.R;
+import com.jzg.quotation.commons.utils.InsuranceLog;
 import com.jzg.quotation.taiping.crawler.constant.RequestUrl;
 import com.jzg.quotation.taiping.crawler.entity.TaipingCrawlerConfigureParameters;
 import com.jzg.quotation.taiping.crawler.entity.request.*;
@@ -59,7 +62,7 @@ public class TaiPingCrawlerRequestComponent {
 
     public <Response> Response requestPostStrDecrypt(RequestUrl requestUrl, Object body, TypeReference<Response> tTypeReference, HttpHeaders headers,TaipingCrawlerConfigureParameters parameters) {
         String tpck = postTpck(parameters.getUsername(),parameters.getXxuhoztF0eZsO(),parameters.getTk());
-        String bodyStr = JSON.toJSONString(body);
+        String bodyStr = JSON.toJSONString(body, SerializerFeature.WriteMapNullValue);
         headers.set("Cookie", tpck);
         String encryptBody = AESEncryption.encrypt(bodyStr);
         String url = requestUrl.getRequestUrl(taiPingCrawlerProperties.getUrl());
@@ -70,7 +73,7 @@ public class TaiPingCrawlerRequestComponent {
         }
         ResponseEntity<String> post = requestComponent.postTaiping(finallyUrl, encryptBody, headers);
         String responseBody = post.getBody();
-        return AESEncryption.decrypt(responseBody, tTypeReference);
+        return AESEncryption.decrypt(responseBody, tTypeReference,requestUrl.getDescription());
     }
 
     public String postTpck(String username, String ck, String token) {
@@ -279,6 +282,8 @@ public class TaiPingCrawlerRequestComponent {
      * @return 销售信息子代码列表
      */
     public TaiPingCrawlerFindSolutionCodeData.RecordsDTO findSolutionCode(TaiPingCrawlerFindSolutionCodeRequest request, HttpHeaders httpHeaders,TaipingCrawlerConfigureParameters parameters) {
+        InsuranceLog.infoLog(InsuranceEnum.TPIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                "获取销售信息子代码", RequestUrl.FIND_SOLUTION_CODE.getRequestUrl(taiPingCrawlerProperties.getUrl()),JSON.toJSONString(request));
         TaiPingCrawlerBaseResponse<List<TaiPingCrawlerFindSolutionCodeData.RecordsDTO>> response
                 = requestPostStrDecrypt(RequestUrl.FIND_SOLUTION_CODE, request, new TypeReference<>(){}, httpHeaders,parameters);
         return response.getData()
@@ -295,6 +300,8 @@ public class TaiPingCrawlerRequestComponent {
      * @return 决策单元代码列表
      */
     public TaiPingCrawlerFindApplyNoResponse.GsApplyInfoMainDto findApplyNo(TaiPingCrawlerFindApplyNoRequest request, HttpHeaders httpHeaders,TaipingCrawlerConfigureParameters parameters) {
+        InsuranceLog.infoLog(InsuranceEnum.TPIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                "决策单元代码", RequestUrl.FIND_APPLY_NO.getRequestUrl(taiPingCrawlerProperties.getUrl()),JSON.toJSONString(request));
         TaiPingCrawlerBaseResponse<TaiPingCrawlerFindApplyNoResponse> response
                 = requestPostStrDecrypt(RequestUrl.FIND_APPLY_NO, request, new TypeReference<>(){}, httpHeaders,parameters);
         return response.getData()
@@ -311,8 +318,10 @@ public class TaiPingCrawlerRequestComponent {
      * @param httpHeaders 请求头
      * @return 查询归属信息
      */
-    public TaiPingCrawlerFindByProductCodeResponse findProductCode(RequestUrl requestUrl,TaiPingCrawlerFindByProductCodeRequest request, HttpHeaders httpHeaders,TaipingCrawlerConfigureParameters parameters) {
-        return requestPostStrDecrypt(requestUrl, request, new TypeReference<>() {
+    public TaiPingCrawlerFindByProductCodeResponse findProductCode(TaiPingCrawlerFindByProductCodeRequest request, HttpHeaders httpHeaders,TaipingCrawlerConfigureParameters parameters) {
+        InsuranceLog.infoLog(InsuranceEnum.TPIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                "查询归属信息", RequestUrl.FIND_PRODUCECODE.getRequestUrl(taiPingCrawlerProperties.getUrl()),JSON.toJSONString(request));
+        return requestPostStrDecrypt(RequestUrl.FIND_PRODUCECODE, request, new TypeReference<>() {
         }, httpHeaders,parameters);
     }
 
@@ -324,6 +333,8 @@ public class TaiPingCrawlerRequestComponent {
      * @return 订单号
      */
     public String orderCreate(TaiPingCrawlerCreateOrderRequest request, HttpHeaders httpHeaders,TaipingCrawlerConfigureParameters parameters) {
+        InsuranceLog.infoLog(InsuranceEnum.TPIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                "创建订单号", RequestUrl.CREATE_ORDER.getRequestUrl(taiPingCrawlerProperties.getUrl()),JSON.toJSONString(request));
         TaiPingCrawlerBaseResponse<String> response = requestPostStrDecrypt(RequestUrl.CREATE_ORDER, request, new TypeReference<>() {
         }, httpHeaders,parameters);
         return response.getData();
@@ -336,6 +347,8 @@ public class TaiPingCrawlerRequestComponent {
      * @param httpHeaders 请求头
      */
     public Double getCarDepreRate(TaiPingCrawlerGetCarDepreRateRequest taiPingCrawlerGetCarDepreRateRequest, HttpHeaders httpHeaders,TaipingCrawlerConfigureParameters parameters) {
+        InsuranceLog.infoLog(InsuranceEnum.TPIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                "车型折旧率查询", RequestUrl.GET_CAR_DEPRE_RATE.getRequestUrl(taiPingCrawlerProperties.getUrl()),JSON.toJSONString(taiPingCrawlerGetCarDepreRateRequest));
         TaiPingCrawlerBaseResponse<Double> response = requestPostStrDecrypt(RequestUrl.GET_CAR_DEPRE_RATE, taiPingCrawlerGetCarDepreRateRequest, new TypeReference<>() {
         }, httpHeaders,parameters);
         return response.getData();
@@ -345,13 +358,43 @@ public class TaiPingCrawlerRequestComponent {
     /**
      * 车型查询
      *
-     * @param requestUrl  车型查询链接
      * @param request     车型查询请求
      * @param httpHeaders 请求头
      * @return 车型查询响应体
      */
-    public TaiPingCrawlerBaseResponse<TaiPingCrawlerBrandNameQueryData> queryBrand(RequestUrl requestUrl, TaiPingCrawlerBrandNameQueryRequest request, HttpHeaders httpHeaders,TaipingCrawlerConfigureParameters parameters) {
-        return requestPostStrDecrypt(requestUrl, request, new TypeReference<>() {
+    public TaiPingCrawlerBaseResponse<TaiPingCrawlerBrandNameQueryData> queryBrand(TaiPingCrawlerBrandNameQueryRequest request, HttpHeaders httpHeaders,TaipingCrawlerConfigureParameters parameters) {
+        InsuranceLog.infoLog(InsuranceEnum.TPIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                "车型查询", RequestUrl.BRAND_NAME_QUERY.getRequestUrl(taiPingCrawlerProperties.getUrl()),JSON.toJSONString(request));
+        return requestPostStrDecrypt(RequestUrl.BRAND_NAME_QUERY, request, new TypeReference<>() {
+        }, httpHeaders,parameters);
+    }
+
+    /**
+     * 刷新非车险列表
+     */
+    public TaiPingCrawlerBaseResponse refreshFcProductPageData(TaiPingCrawlerPremiumCalculateRequest request, HttpHeaders httpHeaders, TaipingCrawlerConfigureParameters parameters) {
+        InsuranceLog.infoLog(InsuranceEnum.TPIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                "刷新非车险列表", RequestUrl.REFRESH_FC_PRODUCT_PAGE.getRequestUrl(taiPingCrawlerProperties.getUrl()),JSON.toJSONString(request));
+        return requestPostStrDecrypt(RequestUrl.REFRESH_FC_PRODUCT_PAGE, request, new TypeReference<>() {
+        }, httpHeaders, parameters);
+    }
+
+
+
+    /**
+     * 获取选择非车险详情
+     */
+    public TaiPingCrawlerGetNoCarProductListData getNoCarProductListData(TaiPingCrawlerGetNoCarProductListRequest request, HttpHeaders httpHeaders, TaipingCrawlerConfigureParameters parameters) {
+        InsuranceLog.infoLog(InsuranceEnum.TPIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                "获取选择非车险详情", RequestUrl.GET_NO_CAR_PRODUCT_LIST.getRequestUrl(taiPingCrawlerProperties.getUrl()),JSON.toJSONString(request));
+        return requestPostStrDecrypt(RequestUrl.GET_NO_CAR_PRODUCT_LIST, request, new TypeReference<>() {
+        }, httpHeaders, parameters);
+    }
+
+    public TaiPingCrawlerRefreshFcProductPageData noCarCalculate(TaiPingCrawlerNoCarCalculateRequest request, HttpHeaders httpHeaders, TaipingCrawlerConfigureParameters parameters) {
+        InsuranceLog.infoLog(InsuranceEnum.TPIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                "非车险保费计算", RequestUrl.NO_CAR_CALCULATE.getRequestUrl(taiPingCrawlerProperties.getUrl()),JSON.toJSONString(request));
+        return requestPostStrDecrypt(RequestUrl.NO_CAR_CALCULATE, request, new TypeReference<>() {
         }, httpHeaders,parameters);
     }
 
@@ -363,6 +406,8 @@ public class TaiPingCrawlerRequestComponent {
      * @return 保费计算响应
      */
     public TaiPingCrawlerBaseResponse<TaiPingCrawlerPremiumCalculateData> premiumCalculate(TaiPingCrawlerPremiumCalculateRequest request, HttpHeaders httpHeaders,TaipingCrawlerConfigureParameters parameters) {
+        InsuranceLog.infoLog(InsuranceEnum.TPIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                "保费计算", RequestUrl.PREMIUM_CALCULATE.getRequestUrl(taiPingCrawlerProperties.getUrl()),JSON.toJSONString(request));
         return requestPostStrDecrypt(RequestUrl.PREMIUM_CALCULATE, request, new TypeReference<>() {
         }, httpHeaders,parameters);
     }
@@ -384,6 +429,8 @@ public class TaiPingCrawlerRequestComponent {
      * @return 查询精确车型
      */
     public TaiPingCrawlerBaseResponse<TaiPingCrawlerVehicleForPRPQueryResponse> vehicleForPRPQuery(TaiPingCrawlerVehicleForPRPQueryRequest request, HttpHeaders httpHeaders,TaipingCrawlerConfigureParameters parameters) {
+        InsuranceLog.infoLog(InsuranceEnum.TPIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                "查询精确车型请求", RequestUrl.VEHICLE_FOR_PRP_QUERY.getRequestUrl(taiPingCrawlerProperties.getUrl()),JSON.toJSONString(request));
         return requestPostStrDecrypt(RequestUrl.VEHICLE_FOR_PRP_QUERY, request, new TypeReference<>() {
         }, httpHeaders,parameters);
     }
@@ -395,7 +442,9 @@ public class TaiPingCrawlerRequestComponent {
      * @param httpHeaders 请求头
      * @return 验证响应
      */
-    public TaiPingCrawlerBaseResponse<TaiPingCrawlerSubmitValidateData> submitValidate(TaiPingCrawlerPremiumCalculateData request, HttpHeaders httpHeaders,TaipingCrawlerConfigureParameters parameters) {
+    public TaiPingCrawlerBaseResponse<TaiPingCrawlerSubmitValidateData> submitValidate(TaiPingCrawlerSubmitValidateRequest request, HttpHeaders httpHeaders,TaipingCrawlerConfigureParameters parameters) {
+        InsuranceLog.infoLog(InsuranceEnum.TPIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                "核保提交验证", RequestUrl.SUBMIT_VALIDATE.getRequestUrl(taiPingCrawlerProperties.getUrl()),JSON.toJSONString(request));
         return requestPostStrDecrypt(RequestUrl.SUBMIT_VALIDATE, request, new TypeReference<>() {
         }, httpHeaders,parameters);
     }
@@ -408,6 +457,8 @@ public class TaiPingCrawlerRequestComponent {
      * @return 上传影像响应
      */
     public TaiPingCrawlerBaseResponse<TaiPingCrawlerImageIntoOneFileResponse> imageIntoOneFile(TaiPingCrawlerImageIntoOneFileRequest request, HttpHeaders httpHeaders,TaipingCrawlerConfigureParameters parameters) {
+        InsuranceLog.infoLog(InsuranceEnum.TPIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                "上传影像", RequestUrl.IMAGE_INTO_ONE_FILE.getRequestUrl(taiPingCrawlerProperties.getUrl()),JSON.toJSONString(request));
         return requestPostStrDecrypt(RequestUrl.IMAGE_INTO_ONE_FILE, request, new TypeReference<>() {
         }, httpHeaders,parameters);
     }
@@ -420,6 +471,8 @@ public class TaiPingCrawlerRequestComponent {
      * @return ocr 识别影像返回信息
      */
     public TaiPingCrawlerBaseResponse<TaiPingCrawlerOCRResultConfirmData> ocrResultConfirm(TaiPingCrawlerOCRResultConfirmRequest request, HttpHeaders httpHeaders,TaipingCrawlerConfigureParameters parameters) {
+        InsuranceLog.infoLog(InsuranceEnum.TPIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                "ocr识别影像", RequestUrl.OCR_RESULT_CONFIRM.getRequestUrl(taiPingCrawlerProperties.getUrl()),JSON.toJSONString(request));
         return requestPostStrDecrypt(RequestUrl.OCR_RESULT_CONFIRM, request, new TypeReference<>() {
         }, httpHeaders,parameters);
     }
@@ -433,6 +486,8 @@ public class TaiPingCrawlerRequestComponent {
      * @return 提交核保响应
      */
     public TaiPingCrawlerBaseResponse<TaiPingCrawlersSubmitToAuditData> submitToAudit(TaiPingCrawlersSubmitToAuditRequest request, HttpHeaders httpHeaders,TaipingCrawlerConfigureParameters parameters) {
+        InsuranceLog.infoLog(InsuranceEnum.TPIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                "提交核保", RequestUrl.SUBMIT_TO_AUDIT.getRequestUrl(taiPingCrawlerProperties.getUrl()),JSON.toJSONString(request));
         return requestPostStrDecrypt(RequestUrl.SUBMIT_TO_AUDIT, request, new TypeReference<>() {
         }, httpHeaders,parameters);
     }
@@ -446,6 +501,8 @@ public class TaiPingCrawlerRequestComponent {
      * @return 支付二维码
      */
     public TaiPingCrawlerBaseResponse<TaiPingCrawlerSendSMSData> sendSMS(TaiPingCrawlerSendSMSRequest request, HttpHeaders httpHeaders,TaipingCrawlerConfigureParameters parameters) {
+        InsuranceLog.infoLog(InsuranceEnum.TPIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                "获取支付二维码", RequestUrl.SEND_SMS.getRequestUrl(taiPingCrawlerProperties.getUrl()),JSON.toJSONString(request));
         return requestPostStrDecrypt(RequestUrl.SEND_SMS, request, new TypeReference<>() {
         }, httpHeaders,parameters);
     }
@@ -458,6 +515,8 @@ public class TaiPingCrawlerRequestComponent {
      * @return 订单信息
      */
     public List<TaiPingCrawlerQueryListData.RecordsDTO> queryListNsp(TaiPingCrawlerQueryListRequest request, HttpHeaders httpHeaders,TaipingCrawlerConfigureParameters parameters) {
+        InsuranceLog.infoLog(InsuranceEnum.TPIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+                "查询订单", RequestUrl.QUERY_LIST_NSP.getRequestUrl(taiPingCrawlerProperties.getUrl()),JSON.toJSONString(request));
         TaiPingCrawlerBaseResponse<TaiPingCrawlerQueryListData> response = requestPostStrDecrypt(RequestUrl.QUERY_LIST_NSP, request, new TypeReference<>() {
         }, httpHeaders,parameters);
         return response.getData().getRecords();

+ 4 - 0
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/constant/RequestUrl.java

@@ -24,6 +24,10 @@ public enum RequestUrl implements CrawlerRequestUrlStandard {
     GET_CAR_DEPRE_RATE("/proposalform/proposalDefaultData/getCarDepreRate", "车辆折旧率查询"),
     QUERY_RENEWAL("/proposalform/intelligentRetrieval/process2/QueryRenewal", "历史保单查询"),
     VEHICLE_FOR_PRP_QUERY("/proposalform/vehicleForPRPQuery", "精准查车查询"),
+
+    REFRESH_FC_PRODUCT_PAGE("/proposalform/fcProposal/refreshFcProductPage","刷新非车险列表"),
+    GET_NO_CAR_PRODUCT_LIST("/nocar/api/v1/nocar/pc/getNoCarProductList","获取选择非车详情"),
+    NO_CAR_CALCULATE("/nocar/api/v1/nocar/pc/calculate", "非车险计算"),
     PREMIUM_CALCULATE("/proposalform/premiumCalculate/premiumCalculateEntrace", "保费计算"),
     //上传影像
     IMAGE_INTO_ONE_FILE("/image/imgServer/imageIntoOneFile", "上传影像"),

+ 25 - 0
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/request/TaiPingCrawlerGetNoCarProductListRequest.java

@@ -0,0 +1,25 @@
+package com.jzg.quotation.taiping.crawler.entity.request;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author quchen
+ * @date 2026/8/21 18:30
+ */
+
+@Data
+@NoArgsConstructor
+public class TaiPingCrawlerGetNoCarProductListRequest {
+    private String orderNo;
+
+    private String productLabel;
+
+    private String salesMode;
+
+    public TaiPingCrawlerGetNoCarProductListRequest(String orderNo) {
+        this.orderNo = orderNo;
+        this.productLabel = "";
+        this.salesMode = "Y";
+    }
+}

+ 497 - 0
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/request/TaiPingCrawlerNoCarCalculateRequest.java

@@ -0,0 +1,497 @@
+package com.jzg.quotation.taiping.crawler.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
+import com.jzg.commons.entity.quote.vo.QuoteVo;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ThreadLocalRandom;
+
+/**
+ * @author quchen
+ * @date 2026/8/22 11:45
+ */
+
+@Data
+@NoArgsConstructor
+@JsonInclude(JsonInclude.Include.ALWAYS)
+public class TaiPingCrawlerNoCarCalculateRequest {
+    @JsonProperty("orderNo")
+    private String orderNo;
+
+    @JsonProperty("productLabel")
+    private String productLabel;
+
+    @JsonProperty("salesMode")
+    private String salesMode;
+
+    @JsonProperty("policyInsuredNoCarList")
+    private List<PolicyInsuredNoCarListDTO> policyInsuredNoCarList;
+
+    @JsonProperty("productList")
+    private List<ProductListDTO> productList;
+
+    @JsonProperty("addPolicy")
+    private String addPolicy;
+
+    @Data
+    @NoArgsConstructor
+    @JsonInclude(JsonInclude.Include.ALWAYS)
+    public static class PolicyInsuredNoCarListDTO {
+        @JsonProperty("id")
+        private Integer id;
+        @JsonProperty("insuredFlag")
+        private String insuredFlag;
+        @JsonProperty("unchangedFields")
+        private List<?> unchangedFields;
+        @JsonProperty("policyInsuredTypeList")
+        private List<?> policyInsuredTypeList;
+
+        @JsonProperty("customerType")
+        private String customerType;
+        @JsonProperty("name")
+        private String name;
+        @JsonProperty("certType")
+        private String certType;
+        @JsonProperty("certNo")
+        private String certNo;
+        @JsonProperty("gender")
+        private String gender;
+        @JsonProperty("birthday")
+        private String birthday;
+        @JsonProperty("age")
+        private Integer age;
+        @JsonProperty("email")
+        private String email;
+        @JsonProperty("certStartDate")
+        private String certStartDate;
+        @JsonProperty("certEndDate")
+        private String certEndDate;
+        @JsonProperty("mobile")
+        private String mobile;
+        @JsonProperty("nativeplace")
+        private String nativeplace;
+        @JsonProperty("province")
+        private String province;
+        @JsonProperty("city")
+        private String city;
+        @JsonProperty("county")
+        private String county;
+        @JsonProperty("address")
+        private String address;
+        @JsonProperty("postCode")
+        private String postCode;
+        @JsonProperty("socialInsuFlag")
+        private String socialInsuFlag;
+        @JsonProperty("occupationType")
+        private String occupationType;
+        @JsonProperty("occupationName")
+        private String occupationName;
+        @JsonProperty("occupationCode")
+        private String occupationCode;
+        @JsonProperty("relationToAppnt")
+        private String relationToAppnt;
+        @JsonProperty("relationToMainInsured")
+        private String relationToMainInsured;
+        @JsonProperty("orgNature")
+        private String orgNature;
+        @JsonProperty("isCarSync")
+        private String isCarSync;
+        @JsonProperty("isNotEdit")
+        private String isNotEdit;
+        @JsonProperty("personType")
+        private String personType;
+        @JsonProperty("initHouseAddress")
+        private String initHouseAddress;
+
+        public PolicyInsuredNoCarListDTO(TaiPingCrawlerPremiumCalculateRequest.PfRelatedPartyDtoDTO pfRelatedPartyDto){
+            this.id = ThreadLocalRandom.current().nextInt(100000000, 1000000000);
+            this.insuredFlag = null;
+            this.unchangedFields = null;
+            this.policyInsuredTypeList = null;
+            this.customerType = "1";
+            this.name = pfRelatedPartyDto.getAppliName();
+            this.certType = pfRelatedPartyDto.getIdentifyType();
+            this.certNo = pfRelatedPartyDto.getIdentifyNumber();
+            this.gender = pfRelatedPartyDto.getSex();
+            this.birthday = pfRelatedPartyDto.getBirthDate();
+            this.age = pfRelatedPartyDto.getAppliAge();
+            this.email = pfRelatedPartyDto.getEmail();
+            this.certStartDate = pfRelatedPartyDto.getIdentifyStartDate();
+            this.certEndDate = pfRelatedPartyDto.getIdentifyEndDate();
+            this.mobile = pfRelatedPartyDto.getMobilePhone();
+            this.nativeplace = "CHN";
+            this.province = pfRelatedPartyDto.getItemProvinceCode();
+            this.city = pfRelatedPartyDto.getItemCityCode();
+            this.county = pfRelatedPartyDto.getCountyCode();
+            this.address = pfRelatedPartyDto.getAppliAddress();
+            this.postCode = null;
+            this.socialInsuFlag = null;
+            this.occupationType = null;
+            this.occupationName = null;
+            this.occupationCode = null;
+            this.relationToAppnt = "1";
+            this.relationToMainInsured = "1";
+            // 100-个人
+            this.orgNature = "100";
+            this.isCarSync = "Y";
+            this.isNotEdit = "Y";
+            this.personType = null;
+            this.initHouseAddress = null;
+        }
+    }
+
+    @Data
+    @NoArgsConstructor
+    @JsonInclude(JsonInclude.Include.ALWAYS)
+    public static class ProductListDTO {
+        @JsonProperty("id")
+        private Integer id;
+        @JsonProperty("productCode")
+        private String productCode;
+        @JsonProperty("productName")
+        private String productName;
+
+        @JsonProperty("saleProductCode")
+        private String saleProductCode;
+        @JsonProperty("saleProductName")
+        private String saleProductName;
+
+        @JsonProperty("productMode")
+        private String productMode;
+
+        @JsonProperty("planCode")
+        private String planCode;
+
+        @JsonProperty("planVersion")
+        private String planVersion;
+
+        @JsonProperty("planName")
+        private String planName;
+
+        @JsonProperty("fixedPlanMaximum")
+        private String fixedPlanMaximum;
+
+        @JsonProperty("payFlag")
+        private String payFlag;
+
+        @JsonProperty("discountRate")
+        private Integer discountRate;
+
+        @JsonProperty("sumPremium")
+        private Integer sumPremium;
+
+        @JsonProperty("perSignPremium")
+        private Object perSignPremium;
+
+        @JsonProperty("sumInsured")
+        private Integer sumInsured;
+
+        @JsonProperty("isHouseAddress")
+        private String isHouseAddress;
+
+        @JsonProperty("acceptSystem")
+        private String acceptSystem;
+
+        @JsonProperty("isUniteProduct")
+        private String isUniteProduct;
+
+        @JsonProperty("insuredFlag")
+        private String insuredFlag;
+
+        @JsonProperty("serialNo")
+        private Integer serialNo;
+
+        @JsonProperty("isChoose")
+        private String isChoose;
+        @JsonProperty("riskProductRelList")
+        private List<RiskProductRel> riskProductRelList;
+
+        @JsonProperty("remark")
+        private String remark;
+
+        @JsonProperty("insurantAgeMax")
+        private Object insurantAgeMax;
+
+        @JsonProperty("insurantAgeMaxUnit")
+        private Object insurantAgeMaxUnit;
+
+        @JsonProperty("insurantAgeMin")
+        private Object insurantAgeMin;
+
+        @JsonProperty("insurantAgeMinUnit")
+        private Object insurantAgeMinUnit;
+
+        @JsonProperty("currency")
+        private String currency;
+
+        @JsonProperty("riskClass")
+        private String riskClass;
+
+        @JsonProperty("planLabel")
+        private Object planLabel;
+
+        @JsonProperty("scopeRelatedRequire")
+        private String scopeRelatedRequire;
+
+        @JsonProperty("needAdditionalInsured")
+        private String needAdditionalInsured;
+
+        @JsonProperty("needPremiumCalculate")
+        private String needPremiumCalculate;
+
+        @JsonProperty("needMultiInsured")
+        private String needMultiInsured;
+
+        @JsonProperty("carPremiumMin")
+        private Integer carPremiumMin;
+
+        @JsonProperty("carPremiumMax")
+        private Integer carPremiumMax;
+
+        @JsonProperty("isStandardProduct")
+        private String isStandardProduct;
+
+        @JsonProperty("productLabels")
+        private Object productLabels;
+
+        @JsonProperty("planMinPremium")
+        private Object planMinPremium;
+
+        @JsonProperty("newOldCarTag")
+        private Object newOldCarTag;
+
+        @JsonProperty("productClass")
+        private String productClass;
+
+        @JsonProperty("productFactorRelList")
+        private List<?> productFactorRelList;
+
+        @JsonProperty("productFactorRelValueMap")
+        private Map<String, ?> productFactorRelValueMap;
+
+        @JsonProperty("isChecked")
+        private String isChecked;
+
+        @JsonProperty("copies")
+        private Integer copies;
+
+        @JsonProperty("startTime")
+        private Object startTime;
+
+        @JsonProperty("endTime")
+        private Object endTime;
+
+        @JsonProperty("adjustStartTime")
+        private Object adjustStartTime;
+
+        @JsonProperty("adjustEndTime")
+        private Object adjustEndTime;
+
+        @JsonProperty("addPolicy")
+        private String addPolicy;
+
+        @JsonProperty("policyInsuredNoCarList")
+        private List<PolicyInsured> policyInsuredNoCarList;
+
+        @JsonProperty("uwFailReasons")
+        private Object uwFailReasons;
+
+        @JsonProperty("policyId")
+        private Object policyId;
+
+        @JsonProperty("proposalNo")
+        private Object proposalNo;
+
+        @JsonProperty("virtualPersonFlag")
+        private Object virtualPersonFlag;
+
+        @JsonProperty("isPlusNProduct")
+        private String isPlusNProduct;
+
+        @JsonProperty("isImmediateIssueConfig")
+        private String isImmediateIssueConfig;
+
+        @JsonProperty("isImmediateIssue")
+        private String isImmediateIssue;
+
+        @JsonProperty("oldPolicyTipsFlag")
+        private String oldPolicyTipsFlag;
+
+        @JsonProperty("oldPolicyEndTime")
+        private Object oldPolicyEndTime;
+
+        @JsonProperty("socialFlag")
+        private String socialFlag;
+
+        @JsonProperty("_frontEndIsHaveSupplement")
+        private Boolean _frontEndIsHaveSupplement;
+
+        @Data
+        @NoArgsConstructor
+        @JsonInclude(JsonInclude.Include.ALWAYS)
+        public static class RiskProductRel {
+            @JsonProperty("riskCode")
+            private String riskCode;
+
+            @JsonProperty("riskName")
+            private String riskName;
+
+            @JsonProperty("subProductCode")
+            private Object subProductCode;
+
+            @JsonProperty("subProductName")
+            private Object subProductName;
+        }
+
+        @Data
+        @NoArgsConstructor
+        @JsonInclude(JsonInclude.Include.ALWAYS)
+        public static class PolicyInsured {
+            @JsonProperty("id")
+            private Integer id;
+
+            @JsonProperty("insuredFlag")
+            private String insuredFlag;
+
+            @JsonProperty("unchangedFields")
+            private List<String> unchangedFields;
+
+            @JsonProperty("policyInsuredTypeList")
+            private List<PolicyInsuredType> policyInsuredTypeList;
+
+            @Data
+            @NoArgsConstructor
+            @JsonInclude(JsonInclude.Include.ALWAYS)
+            public static class PolicyInsuredType {
+                @JsonProperty("supplementTypeId")
+                private Integer supplementTypeId;
+
+                @JsonProperty("insuredType")
+                private String insuredType;
+                @JsonProperty("insuredTypeCode")
+                private String insuredTypeCode;
+
+                @JsonProperty("insuredTypeName")
+                private String insuredTypeName;
+
+                @JsonProperty("insuredTypeValues")
+                private Map<String, String> insuredTypeValues;
+
+                @JsonProperty("unchangedFields")
+                private List<String> unchangedFields;
+
+                @JsonProperty("houseAddressIsChange")
+                private Object houseAddressIsChange;
+            }
+            public PolicyInsured(CarInfoVo carInfoVo, PolicyInsuredNoCarListDTO policyInsuredNoCarListDTO) {
+                this.id = policyInsuredNoCarListDTO.getId();
+                this.insuredFlag = "2";
+                PolicyInsuredType policyInsuredType = new PolicyInsuredType();
+                policyInsuredType.setHouseAddressIsChange(null);
+                policyInsuredType.setInsuredType("4");
+                policyInsuredType.setInsuredTypeCode("BF0003");
+                policyInsuredType.setInsuredTypeName("车辆");
+                HashMap<String, String> insuredTypeValues = new HashMap<>();
+                insuredTypeValues.put("JCPH", carInfoVo.getLicenseNo());
+                insuredTypeValues.put("JDCZL", carInfoVo.getCarKindCode());
+                if (Integer.parseInt(carInfoVo.getSeatCount()) < 6) {
+                    insuredTypeValues.put("JDJCZCL", "11");
+                } else {
+                    insuredTypeValues.put("JDJCZCL", "12");
+                }
+
+                insuredTypeValues.put("HDZK",carInfoVo.getSeatCount());
+                if (carInfoVo.getCarNatureCode().equals("02")) {
+                    insuredTypeValues.put("JCLSYXZ","2");
+                } else {
+                    insuredTypeValues.put("JCLSYXZ","1");
+                }
+                insuredTypeValues.put("JCLYT",carInfoVo.getVehicleUseCode());
+                insuredTypeValues.put("SZBDM",carInfoVo.getVinNo());
+                policyInsuredType.setInsuredTypeValues(insuredTypeValues);
+                this.policyInsuredTypeList = List.of(policyInsuredType);
+            }
+        }
+        public ProductListDTO(TaiPingCrawlerPremiumCalculateRequest.FcProductListDto fcProductListDto, QuoteVo quoteVo,PolicyInsuredNoCarListDTO policyInsuredNoCarListDTO) {
+            this.id = Integer.valueOf(fcProductListDto.getFcOrderNo());
+            this.productCode = fcProductListDto.getProductCode();
+            this.productName = fcProductListDto.getProductName();
+            this.saleProductCode = fcProductListDto.getSaleProductCode();
+            this.saleProductName = fcProductListDto.getSaleProductName();
+            this.productMode = fcProductListDto.getProductMode();
+            this.planCode = fcProductListDto.getProjectCode();
+            this.planVersion = fcProductListDto.getProductVersion();
+            this.planName = fcProductListDto.getProductName();
+            this.fixedPlanMaximum = "1";
+            this.payFlag = "Y";
+            this.discountRate = 1;
+            this.sumPremium = fcProductListDto.getPrice();
+            this.perSignPremium = null;
+            this.sumInsured = fcProductListDto.getSumInsured();
+            this.isHouseAddress = "N";
+            this.acceptSystem = "01";
+            this.isUniteProduct = "N";
+            this.insuredFlag = "N";
+            this.serialNo = 10;
+            this.isChoose = "N";
+            this.currency = "CNY";
+            this.riskClass = fcProductListDto.getRiskClass();
+            this.needAdditionalInsured = "N";
+            this.needPremiumCalculate = "N";
+            this.needMultiInsured = "N";
+            this.carPremiumMin = 0;
+            this.carPremiumMax = 100000000;
+            this.isStandardProduct = "Y";
+            this.productClass = "1";
+            this.isChecked = "Y";
+            this.copies = 1;
+            this.startTime = null;
+            this.endTime = null;
+            this.adjustStartTime = null;
+            this.adjustEndTime = null;
+            this.addPolicy = "N";
+            this.uwFailReasons = null;
+            this.policyId = null;
+            this.proposalNo = null;
+            this.virtualPersonFlag = null;
+            this.isPlusNProduct = "N";
+            this.isImmediateIssueConfig = "N";
+            this.isImmediateIssue = "Y";
+            this.oldPolicyTipsFlag = "N";
+            this.oldPolicyEndTime = null;
+            this.socialFlag = "";
+            this._frontEndIsHaveSupplement = true;
+            this.productFactorRelList = new ArrayList<>();
+            this.productFactorRelValueMap = new HashMap<>();
+            this.policyInsuredNoCarList = List.of(new PolicyInsured(quoteVo.getCarInfoVo(), policyInsuredNoCarListDTO));
+            RiskProductRel riskProductRel = new RiskProductRel();
+            riskProductRel.setRiskCode(fcProductListDto.getRiskCode());
+            riskProductRel.setRiskName("驾乘人员意外伤害保险");
+            riskProductRel.setSubProductCode(null);
+            riskProductRel.setSubProductName(null);
+            this.riskProductRelList = List.of(riskProductRel);
+        }
+    }
+    public TaiPingCrawlerNoCarCalculateRequest(String orderNo, TaiPingCrawlerPremiumCalculateRequest taiPingCrawlerPremiumCalculateRequest,TaiPingCrawlerPremiumCalculateRequest.FcProductListDto fcProductListDto,QuoteVo quoteVo) {
+        this.orderNo = orderNo;
+        this.productLabel = "";
+        this.salesMode = "Y";
+        TaiPingCrawlerPremiumCalculateRequest.PfRelatedPartyDtoDTO pfRelatedPartyDto = taiPingCrawlerPremiumCalculateRequest.getPfRelatedPartyDto();
+        List<TaiPingCrawlerNoCarCalculateRequest.PolicyInsuredNoCarListDTO> policyInsuredNoCarList = new ArrayList<>();
+        TaiPingCrawlerNoCarCalculateRequest.PolicyInsuredNoCarListDTO policyInsuredNoCarListDTO = new TaiPingCrawlerNoCarCalculateRequest.PolicyInsuredNoCarListDTO(pfRelatedPartyDto);
+        policyInsuredNoCarList.add(policyInsuredNoCarListDTO);
+        this.policyInsuredNoCarList = policyInsuredNoCarList;
+        List<TaiPingCrawlerNoCarCalculateRequest.ProductListDTO> productList = new ArrayList<>();
+        TaiPingCrawlerNoCarCalculateRequest.ProductListDTO productListDTO = new TaiPingCrawlerNoCarCalculateRequest.ProductListDTO(fcProductListDto, quoteVo, policyInsuredNoCarListDTO);
+        productList.add(productListDTO);
+        this.productList = productList;
+        this.addPolicy = "N";
+    }
+}

+ 630 - 8
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/request/TaiPingCrawlerPremiumCalculateRequest.java

@@ -11,8 +11,11 @@ import org.springframework.util.StringUtils;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.OffsetDateTime;
+import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @NoArgsConstructor
 @Data
@@ -70,7 +73,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
     private String demandNoBusi;
 
     @JsonProperty("fcProductList")
-    private List<Object> fcProductList;
+    private List<FcProductListDto> fcProductList;
 
     @JsonProperty("cjcSaleInfoDto")
     private Object cjcSaleInfoDto;
@@ -93,6 +96,9 @@ public class TaiPingCrawlerPremiumCalculateRequest {
     @JsonProperty("isMatchClause")
     private Boolean isMatchClause;
 
+    @JsonProperty("isStandardProduct")
+    private String isStandardProduct;
+
 
     public TaiPingCrawlerPremiumCalculateRequest(QuoteVo quoteVo, TaipingCrawlerConfigureParameters parameters, String orderNo,
                                                  TaiPingCrawlerBrandNameQueryData.ItemMotorDtoListDTO motor, String carActualValue,
@@ -127,13 +133,19 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         this.pfRiskRelatedPartyDto = new PfRiskRelatedPartyDtoDTO(quoteVo.getInsuredPersonInfo());
         this.pfProposalCarShipTaxDto = new PfProposalCarShipTaxDtoDTO(quoteVo.getVehicleAndVesselTaxVo(),quoteVo.getCarInfoVo());
         this.pfPolicyInfoDto = new PfPolicyInfoDtoDTO(quoteVo);
-        this.incrementServiceMatchFlag = Boolean.FALSE;
+        if (quoteVo.getAccidentalDrivings() != null && quoteVo.getAccidentalDrivings().size() > 0) {
+            this.incrementServiceMatchFlag = true;
+            this.isStandardProduct = "Y";
+        } else {
+            this.incrementServiceMatchFlag = false;
+            this.isStandardProduct = "N";
+        }
         this.demandNoForce = "";
         this.demandNoBusi = "";
         // 驾意险
         this.fcProductList = new ArrayList<>();
         this.cjcSaleInfoDto = new Object();
-        this.fCsaleinfoDto = new Object();
+        this.fCsaleinfoDto = new FCsaleinfoDTO(record, parameters,taiPingCrawlerFindSolutionCodeData,orderNo);
         this.businessType = "Proposal";
         this.optType = "N";
         this.personInd = "C";
@@ -199,7 +211,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         @JsonProperty("cooperateSiteName")
         private String cooperateSiteName;
         @JsonProperty("creditPeriod")
-        private String creditPeriod;
+        private Integer creditPeriod;
         @JsonProperty("decisionMakingUnit")
         private String decisionMakingUnit;
         @JsonProperty("departmentCode")
@@ -257,7 +269,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         @JsonProperty("isSpecialCarFlag")
         private String isSpecialCarFlag;
         @JsonProperty("itemAddress")
-        private String itemAddress;
+        private List<String> itemAddress;
         @JsonProperty("label")
         private String label;
         @JsonProperty("lables")
@@ -376,7 +388,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
             this.departmentCode = "";
             this.departmentName = "";
             this.governmentType = "";
-            this.itemAddress = "";
+            this.itemAddress = new ArrayList<>();
             this.governmentServiceType = "";
             this.agreementTypeName = record.getAgreementTypeName();
             this.lables = record.getLables();
@@ -752,7 +764,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
             this.contactName = "";
             this.contactMobile = "";
             this.contactType = "1";
-            this.occupationCode = "";
+            this.occupationCode = "30110";
             this.countryCode = "CN";
             this.contactIdentifyType = "01";
             this.contactIdentifyNumber = "";
@@ -1490,7 +1502,7 @@ public class TaiPingCrawlerPremiumCalculateRequest {
             this.contactName = "";
             this.contactMobile = "";
             this.contactType = "1";
-            this.occupationCode = "";
+            this.occupationCode = "30110";
             this.contactIdentifyType = "01";
             this.contactIdentifyNumber = "";
             this.insuredPhoneHolderName = "";
@@ -2411,4 +2423,614 @@ public class TaiPingCrawlerPremiumCalculateRequest {
         }
     }
 
+    @NoArgsConstructor
+    @Data
+    public static class FCsaleinfoDTO {
+        @JsonProperty("businessType")
+        private String businessType;
+
+        @JsonProperty("businessChannel")
+        private String businessChannel;
+
+        @JsonProperty("businessMode")
+        private String businessMode;
+
+        @JsonProperty("channelDetailCode")
+        private String channelDetailCode;
+
+        @JsonProperty("channelDetailName")
+        private String channelDetailName;
+
+        @JsonProperty("creditPeriod")
+        private Integer creditPeriod;
+
+        @JsonProperty("channelTip")
+        private String channelTip;
+
+        @JsonProperty("channelTipName")
+        private String channelTipName;
+
+        @JsonProperty("companyCode")
+        private String companyCode;
+
+        @JsonProperty("companyName")
+        private String companyName;
+
+        @JsonProperty("salesmanCode")
+        private String salesmanCode;
+
+        @JsonProperty("salesmanName")
+        private String salesmanName;
+
+        @JsonProperty("teamManager")
+        private String teamManager;
+
+        @JsonProperty("teamManagerName")
+        private String teamManagerName;
+
+        @JsonProperty("cooperateSiteCode")
+        private String cooperateSiteCode;
+
+        @JsonProperty("cooperateSiteCName")
+        private String cooperateSiteCName;
+
+        @JsonProperty("agreementNo")
+        private String agreementNo;
+
+        @JsonProperty("businessSource")
+        private String businessSource;
+
+        @JsonProperty("businessSourceName")
+        private String businessSourceName;
+
+        @JsonProperty("intermediaryCode")
+        private String intermediaryCode;
+
+        @JsonProperty("intermediaryCName")
+        private String intermediaryCName;
+
+        @JsonProperty("solutionCode")
+        private String solutionCode;
+
+        @JsonProperty("outerUserCode")
+        private String outerUserCode;
+
+        @JsonProperty("outerUserCName")
+        private String outerUserCName;
+
+        @JsonProperty("outerCompanyCode")
+        private String outerCompanyCode;
+
+        @JsonProperty("outerCompanyName")
+        private String outerCompanyName;
+
+        @JsonProperty("departmentCode")
+        private String departmentCode;
+
+        @JsonProperty("departmentName")
+        private String departmentName;
+
+        @JsonProperty("pioneerCode")
+        private String pioneerCode;
+
+        @JsonProperty("pioneerName")
+        private String pioneerName;
+
+        @JsonProperty("interSalesmanCode")
+        private String interSalesmanCode;
+
+        @JsonProperty("interSalesmanName")
+        private String interSalesmanName;
+
+        @JsonProperty("salesmanRegisterNo")
+        private String salesmanRegisterNo;
+
+        @JsonProperty("interSalesmanRegisterNo")
+        private String interSalesmanRegisterNo;
+
+        @JsonProperty("cooperateSiteName")
+        private String cooperateSiteName;
+
+        @JsonProperty("priInd")
+        private String priInd;
+
+        @JsonProperty("agreementTypeName")
+        private String agreementTypeName;
+
+        @JsonProperty("lables")
+        private String lables;
+
+        @JsonProperty("agreementCode")
+        private String agreementCode;
+
+        @JsonProperty("source")
+        private String source;
+
+        @JsonProperty("producerName")
+        private String producerName;
+
+        @JsonProperty("intermediaryCNName")
+        private String intermediaryCNName;
+
+        @JsonProperty("hengSangInd")
+        private String hengSangInd;
+
+        @JsonProperty("channelSortName")
+        private String channelSortName;
+
+        @JsonProperty("sourceId")
+        private String sourceId;
+
+        @JsonProperty("channelSort")
+        private String channelSort;
+
+        @JsonProperty("teamName")
+        private String teamName;
+
+        @JsonProperty("registerNo")
+        private String registerNo;
+
+        @JsonProperty("taxRegistryNumber")
+        private String taxRegistryNumber;
+
+        @JsonProperty("value")
+        private String value;
+
+        @JsonProperty("label")
+        private String label;
+
+        @JsonProperty("operatorCode")
+        private String operatorCode;
+
+        @JsonProperty("orderNo")
+        private String orderNo;
+
+        public FCsaleinfoDTO(TaiPingCrawlerFindByProductCodeResponse.Record record,TaipingCrawlerConfigureParameters parameters,
+                             TaiPingCrawlerFindSolutionCodeData.RecordsDTO taiPingCrawlerFindSolutionCodeData,String orderNo){
+            this.businessType = "1";
+            this.businessChannel = "1";
+            this.businessMode = "2";
+            this.channelDetailCode = record.getChannelSort();
+            this.channelDetailName = record.getChannelSortName();
+            this.creditPeriod = 15;
+            this.channelTip = record.getChannelTip();
+            this.channelTipName = record.getChannelTipName();
+            this.companyCode = parameters.getCompanyCode();
+            this.companyName = record.getCompanyName();
+            this.salesmanCode = parameters.getSalesmanCode();
+            this.salesmanName = taiPingCrawlerFindSolutionCodeData.getSalesmanName();
+            this.teamManager = taiPingCrawlerFindSolutionCodeData.getTeamManager();
+            this.teamManagerName = taiPingCrawlerFindSolutionCodeData.getTeamName();
+            this.cooperateSiteCode = taiPingCrawlerFindSolutionCodeData.getCooperateSiteCode();
+            this.cooperateSiteCName = taiPingCrawlerFindSolutionCodeData.getCooperateSiteName();
+            this.agreementNo = record.getAgreementNo();
+            this.businessSource = record.getBusinessSource();
+            this.businessSourceName = "";
+            this.intermediaryCode = record.getIntermediaryCode();
+            this.intermediaryCName = record.getIntermediaryCNName();
+            this.solutionCode = taiPingCrawlerFindSolutionCodeData.getSolutionCode();
+            this.outerUserCode = "";
+            this.outerUserCName = "";
+            this.outerCompanyCode = "";
+            this.outerCompanyName = "";
+            this.departmentCode = "";
+            this.departmentName = "";
+            this.pioneerCode = "";
+            this.pioneerName = "";
+            this.interSalesmanCode = "00";
+            this.interSalesmanName = "0";
+            this.salesmanRegisterNo = parameters.getSalesmanRegisterNo();
+            this.interSalesmanRegisterNo = parameters.getInterSalesmanRegisterNo();
+            this.cooperateSiteName = taiPingCrawlerFindSolutionCodeData.getCooperateSiteName();
+            this.priInd = "3";
+            this.agreementTypeName = record.getAgreementTypeName();
+            this.lables = record.getLables();
+            this.agreementCode = record.getAgreementCode();
+            this.source = record.getSource();
+            this.producerName = record.getProducerName();
+            this.intermediaryCNName = record.getIntermediaryCNName();
+            this.hengSangInd = record.getHengSangInd();
+            this.channelSortName = record.getChannelSortName();
+            this.sourceId = record.getSourceId();
+            this.channelSort = record.getChannelSort();
+            this.teamName = taiPingCrawlerFindSolutionCodeData.getTeamName();
+            this.registerNo = taiPingCrawlerFindSolutionCodeData.getRegisterNo();
+            this.taxRegistryNumber = taiPingCrawlerFindSolutionCodeData.getTaxRegistryNumber();
+            this.value = parameters.getSolutionCode();
+            this.label = parameters.getSolutionCode() +"-"+taiPingCrawlerFindSolutionCodeData.getSalesmanName() +"-"+taiPingCrawlerFindSolutionCodeData.getCooperateSiteName();
+            this.operatorCode = parameters.getUsername();
+            this.orderNo = orderNo;
+        }
+
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class FcProductListDto {
+        @JsonProperty("orderNo")
+        private String orderNo;
+
+        @JsonProperty("fcOrderNo")
+        private String fcOrderNo;
+
+        @JsonProperty("productCode")
+        private String productCode;
+
+        @JsonProperty("productVersion")
+        private String productVersion;
+
+        @JsonProperty("productName")
+        private String productName;
+
+        @JsonProperty("status")
+        private String status;
+
+        @JsonProperty("quantity")
+        private String quantity;
+
+        @JsonProperty("price")
+        private Integer price;
+
+        @JsonProperty("poaserialNo")
+        private String poaserialNo;
+
+        @JsonProperty("fcPolicyno")
+        private String fcPolicyno;
+
+        @JsonProperty("createTime")
+        private String createTime;
+
+        @JsonProperty("addr")
+        private String addr;
+
+        @JsonProperty("paymentInd")
+        private String paymentInd;
+
+        @JsonProperty("projectCode")
+        private String projectCode;
+
+        @JsonProperty("saleProductCode")
+        private String saleProductCode;
+
+        @JsonProperty("saleProductName")
+        private String saleProductName;
+
+        @JsonProperty("sumInsured")
+        private Integer sumInsured;
+
+        @JsonProperty("riskCode")
+        private String riskCode;
+
+        @JsonProperty("tradeNo")
+        private String tradeNo;
+
+        @JsonProperty("insuredType")
+        private String insuredType;
+
+        @JsonProperty("insuredCount")
+        private String insuredCount;
+
+        @JsonProperty("startDate")
+        private String startDate;
+
+        @JsonProperty("endDate")
+        private String endDate;
+
+        @JsonProperty("applicant")
+        private String applicant;
+
+        @JsonProperty("insured")
+        private String insured;
+
+        @JsonProperty("identifyType")
+        private String identifyType;
+
+        @JsonProperty("identifyNumber")
+        private String identifyNumber;
+
+        @JsonProperty("productType")
+        private String productType;
+
+        @JsonProperty("isPay")
+        private String isPay;
+
+        @JsonProperty("waitingPeriod")
+        private String waitingPeriod;
+
+        @JsonProperty("quotaType")
+        private String quotaType;
+
+        @JsonProperty("clauseContext")
+        private String clauseContext;
+
+        @JsonProperty("itemProvinceCode")
+        private String itemProvinceCode;
+
+        @JsonProperty("itemProvinceCName")
+        private String itemProvinceCName;
+
+        @JsonProperty("itemCityCode")
+        private String itemCityCode;
+
+        @JsonProperty("itemCityCName")
+        private String itemCityCName;
+
+        @JsonProperty("countyCode")
+        private String countyCode;
+
+        @JsonProperty("countyCName")
+        private String countyCName;
+
+        @JsonProperty("clauseCode")
+        private String clauseCode;
+
+        @JsonProperty("clauseContextRemark")
+        private String clauseContextRemark;
+
+        @JsonProperty("isGroupProduct")
+        private String isGroupProduct;
+
+        @JsonProperty("insuredFlag")
+        private String insuredFlag;
+
+        @JsonProperty("isNewCoreProduct")
+        private String isNewCoreProduct;
+
+        @JsonProperty("riskClass")
+        private String riskClass;
+
+        @JsonProperty("homeAddressFlag")
+        private String homeAddressFlag;
+
+        @JsonProperty("fcProposalNo")
+        private String fcProposalNo;
+
+        @JsonProperty("fcProposalFlag")
+        private String fcProposalFlag;
+
+        @JsonProperty("groupFCProposalNo")
+        private String groupFCProposalNo;
+
+        @JsonProperty("fcQueryFlag")
+        private String fcQueryFlag;
+
+        @JsonProperty("canFoldFcQuotation")
+        private String canFoldFcQuotation;
+
+        @JsonProperty("remark")
+        private String remark;
+
+        @JsonProperty("productMode")
+        private String productMode;
+
+        @JsonProperty("occupationType")
+        private String occupationType;
+
+        @JsonProperty("choiceSocialSecurity")
+        private String choiceSocialSecurity;
+
+        @JsonProperty("occupationCode")
+        private String occupationCode;
+
+        @JsonProperty("haveSocialSecurity")
+        private String haveSocialSecurity;
+
+        @JsonProperty("scopeRelatedRequire")
+        private String scopeRelatedRequire;
+
+        @JsonProperty("needAdditionalInsured")
+        private String needAdditionalInsured;
+
+        @JsonProperty("needPremiumCalculate")
+        private String needPremiumCalculate;
+
+        @JsonProperty("relationToAppnt")
+        private String relationToAppnt;
+
+        @JsonProperty("fcProposalNewFlag")
+        private String fcProposalNewFlag;
+
+        @JsonProperty("productFlag")
+        private String productFlag;
+
+        @JsonProperty("mergeOrderNo")
+        private String mergeOrderNo;
+
+        @JsonProperty("id")
+        private String id;
+
+        @JsonProperty("rationType")
+        private String rationType;
+
+        @JsonProperty("rationName")
+        private String rationName;
+
+        @JsonProperty("seatCount")
+        private String seatCount;
+
+        @JsonProperty("count")
+        private Integer count;
+
+        @JsonProperty("fCkindConfigList")
+        private List<FCkindConfigListDto> fCkindConfigList;
+
+        @JsonProperty("specialInstruction")
+        private String specialInstruction;
+
+        @JsonProperty("productUnitInsured")
+        private Integer productUnitInsured;
+
+        @JsonProperty("productUnitPremium")
+        private Integer productUnitPremium;
+
+        @JsonProperty("affiliateList")
+        private List<Object> affiliateList;
+
+        @Data
+        @NoArgsConstructor
+        public static class FCkindConfigListDto {
+            @JsonProperty("id")
+            private String id;
+
+            @JsonProperty("kindCode")
+            private String kindCode;
+
+            @JsonProperty("insuredComputeType")
+            private String insuredComputeType;
+
+            @JsonProperty("premiumComputeType")
+            private String premiumComputeType;
+
+            @JsonProperty("kindName")
+            private String kindName;
+
+            @JsonProperty("insured")
+            private Integer insured;
+
+            @JsonProperty("premium")
+            private Integer premium;
+
+            @JsonProperty("unitInsured")
+            private Integer unitInsured;
+
+            @JsonProperty("unitPremium")
+            private Integer unitPremium;
+
+            @JsonProperty("productId")
+            private String productId;
+
+            @JsonProperty("insuranceDuty")
+            private String insuranceDuty;
+
+            @JsonProperty("franchiseRemark")
+            private String franchiseRemark;
+
+            @JsonProperty("productCode")
+            private String productCode;
+
+            @JsonProperty("planCode")
+            private String planCode;
+
+            @JsonProperty("isServiceClause")
+            private String isServiceClause;
+
+            @JsonProperty("sumInsuredDescription")
+            private String sumInsuredDescription;
+
+            @JsonProperty("orderIndex")
+            private String orderIndex;
+        }
+        public FcProductListDto(String orderNo, TaiPingCrawlerGetNoCarProductListData taiPingCrawlerGetNoCarProductListDataDTO,QuoteVo quoteVo) {
+            AccidentalDrivingVo drivingVo = quoteVo.getAccidentalDrivings().get(0);
+            String productCode = drivingVo.getProductCode();
+            List<TaiPingCrawlerGetNoCarProductListData.DataDTO.ProductListDTO> productListDTO = taiPingCrawlerGetNoCarProductListDataDTO.getData().getProductList();
+            TaiPingCrawlerGetNoCarProductListData.DataDTO.ProductListDTO product = productListDTO.stream().filter(p -> p.getPlanCode().equals(productCode))
+                    .findFirst()
+                    .orElse(null);
+            this.orderNo = orderNo;
+            this.fcOrderNo = String.valueOf(product.getId());
+            this.productCode = product.getProductCode();
+            this.productVersion = product.getPlanVersion();
+            this.saleProductCode = product.getSaleProductCode();
+            this.saleProductName = product.getSaleProductName();
+            this.productName = product.getPlanName();
+            this.status = "1";
+            this.quantity = "1";
+            this.price = product.getSumPremium();
+            this.poaserialNo = "";
+            this.fcPolicyno = null;
+            this.createTime = OffsetDateTime.now(ZoneOffset.UTC).toString();
+            this.addr = null;
+            this.paymentInd = "0";
+            this.projectCode = product.getPlanCode();
+            this.sumInsured = product.getSumInsured();
+            this.riskCode = product.getProductCode();
+            this.tradeNo = null;
+            this.insuredType = null;
+            this.insuredCount = null;
+            if (quoteVo.getBiRiskInfoVo() != null) {
+                RiskInfoVo bi = quoteVo.getBiRiskInfoVo();
+                this.startDate = bi.getStartDate();
+                this.endDate = bi.getEndDate();
+            } else {
+                RiskInfoVo ci = quoteVo.getCiRiskInfoVo();
+                this.startDate = ci.getStartDate();
+                this.endDate = ci.getEndDate();
+            }
+            this.applicant = null;
+            this.insured = null;
+            this.identifyType = null;
+            this.identifyNumber = null;
+            this.productType = null;
+            this.isPay = "1";
+            this.waitingPeriod = null;
+            this.quotaType = null;
+            this.clauseContext = null;
+            this.itemProvinceCode = null;
+            this.itemProvinceCName = null;
+            this.itemCityCode = null;
+            this.itemCityCName = null;
+            this.countyCode = null;
+            this.countyCName = null;
+            this.clauseCode = null;
+            this.clauseContextRemark = null;
+            this.isGroupProduct = null;
+            this.insuredFlag = "2";
+            this.isNewCoreProduct = "1";
+            this.riskClass = product.getRiskClass();
+            this.homeAddressFlag = null;
+            this.fcProposalNo = null;
+            this.fcProposalFlag = "1";
+            this.groupFCProposalNo = null;
+            this.fcQueryFlag = "1";
+            this.canFoldFcQuotation = "0";
+            this.remark = null;
+            this.productMode = product.getProductMode();
+            this.occupationType = null;
+            this.choiceSocialSecurity = null;
+            this.occupationCode = null;
+            this.haveSocialSecurity = null;
+            this.scopeRelatedRequire = null;
+            this.needAdditionalInsured = "N";
+            this.needPremiumCalculate = null;
+            this.relationToAppnt = null;
+            this.fcProposalNewFlag = "1";
+            this.productFlag = "1";
+            this.mergeOrderNo = null;
+            this.id = null;
+            this.rationType = product.getPlanCode();
+            this.rationName = product.getPlanName();
+            this.seatCount = null;
+            this.count = 1;
+            this.fCkindConfigList = product.getLiabilityList().stream()
+                    .map(liabilityListDTO -> {
+                        FcProductListDto.FCkindConfigListDto fCkindConfigListDto = new FcProductListDto.FCkindConfigListDto();
+                        fCkindConfigListDto.setId(null);
+                        fCkindConfigListDto.setKindCode(liabilityListDTO.getLiabilityCode());
+                        fCkindConfigListDto.setInsuredComputeType(liabilityListDTO.getSumInsuredType());
+                        fCkindConfigListDto.setPremiumComputeType(null);
+                        fCkindConfigListDto.setKindName(liabilityListDTO.getLiabilityName());
+                        fCkindConfigListDto.setInsured(liabilityListDTO.getPerSumInsured());
+                        fCkindConfigListDto.setPremium(liabilityListDTO.getPremium());
+                        fCkindConfigListDto.setUnitInsured(liabilityListDTO.getPerSumInsured());
+                        fCkindConfigListDto.setUnitPremium(liabilityListDTO.getPremium());
+                        fCkindConfigListDto.setProductId(null);
+                        fCkindConfigListDto.setInsuranceDuty(null);
+                        fCkindConfigListDto.setFranchiseRemark(null);
+                        fCkindConfigListDto.setProductCode(null);
+                        fCkindConfigListDto.setPlanCode(null);
+                        fCkindConfigListDto.setIsServiceClause(liabilityListDTO.getIsServiceClause());
+                        fCkindConfigListDto.setSumInsuredDescription(null);
+                        fCkindConfigListDto.setOrderIndex(null);
+                        return fCkindConfigListDto;
+                    })
+                    .collect(Collectors.toList());
+            this.specialInstruction = null;
+            this.productUnitInsured = product.getSumInsured();
+            this.productUnitPremium = product.getSumPremium();
+            this.affiliateList = new ArrayList<>();
+        }
+
+    }
+
 }

+ 1 - 1
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/request/TaiPingCrawlerVehicleForPRPQueryRequest.java

@@ -266,7 +266,7 @@ public class TaiPingCrawlerVehicleForPRPQueryRequest {
         @JsonProperty("governmentCountyName")
         private String governmentCountyName;
         @JsonProperty("creditPeriod")
-        private String creditPeriod;
+        private Integer creditPeriod;
         @JsonProperty("teamName")
         private String teamName;
         @JsonProperty("registerNo")

+ 1 - 1
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/response/TaiPingCrawlerFindSolutionCodeData.java

@@ -17,7 +17,7 @@ public class TaiPingCrawlerFindSolutionCodeData {
         private String solutionCode;
 
         @JsonProperty("creditPeriod")
-        private String creditPeriod;
+        private Integer creditPeriod;
 
         @JsonProperty("companyCode")
         private String companyCode;

+ 608 - 0
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/response/TaiPingCrawlerGetNoCarProductListData.java

@@ -0,0 +1,608 @@
+package com.jzg.quotation.taiping.crawler.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @author quchen
+ * @date 2026/8/21 10:57
+ */
+
+@NoArgsConstructor
+@Data
+public class TaiPingCrawlerGetNoCarProductListData {
+    @JsonProperty("status")
+    private String status;
+
+    @JsonProperty("message")
+    private String message;
+
+    @JsonProperty("data")
+    private DataDTO data;
+
+    @Data
+    @NoArgsConstructor
+    public static class DataDTO{
+        @JsonProperty("organizationCode")
+        private String organizationCode;
+
+        @JsonProperty("departmentCode")
+        private String departmentCode;
+
+        @JsonProperty("isShowQuotationType")
+        private String isShowQuotationType;
+
+        @JsonProperty("policyHolderNoCar")
+        private PolicyHolderNoCar policyHolderNoCar;
+
+        @JsonProperty("policyInsuredNoCarList")
+        private List<PolicyInsuredNoCar> policyInsuredNoCarList;
+
+        @JsonProperty("copyPolicyInsuredNoCarList")
+        private Object copyPolicyInsuredNoCarList;
+
+        @JsonProperty("productList")
+        private List<ProductListDTO> productList;
+
+        @JsonProperty("policySalesInfo")
+        private PolicySalesInfo policySalesInfo;
+
+        @JsonProperty("signPremium")
+        private Integer signPremium;
+
+        @JsonProperty("reqId")
+        private String reqId;
+
+        @JsonProperty("msgList")
+        private List<Object> msgList;
+
+        @JsonProperty("policyInsuredTypeMap")
+        private PolicyInsuredTypeMap policyInsuredTypeMap;
+
+        @JsonProperty("carStartTime")
+        private String carStartTime;
+
+        @JsonProperty("carEndTime")
+        private String carEndTime;
+
+        @JsonProperty("operateDate")
+        private String operateDate;
+
+        @Data
+        public static class PolicyHolderNoCar {
+            @JsonProperty("customerType")
+            private String customerType;
+            @JsonProperty("name")
+            private String name;
+            @JsonProperty("certType")
+            private String certType;
+            @JsonProperty("certNo")
+            private String certNo;
+            @JsonProperty("gender")
+            private String gender;
+            @JsonProperty("birthday")
+            private String birthday;
+            @JsonProperty("age")
+            private Integer age;
+            @JsonProperty("email")
+            private String email;
+            @JsonProperty("certStartDate")
+            private String certStartDate;
+            @JsonProperty("certEndDate")
+            private String certEndDate;
+            @JsonProperty("mobile")
+            private String mobile;
+            @JsonProperty("nativeplace")
+            private String nativeplace;
+            @JsonProperty("province")
+            private String province;
+            @JsonProperty("city")
+            private String city;
+            @JsonProperty("county")
+            private String county;
+            @JsonProperty("address")
+            private String address;
+            @JsonProperty("postCode")
+            private String postCode;
+            @JsonProperty("businessType")
+            private String businessType;
+            @JsonProperty("orgNature")
+            private String orgNature;
+            @JsonProperty("orgType")
+            private String orgType;
+            @JsonProperty("businessScope")
+            private String businessScope;
+            @JsonProperty("linkerName")
+            private String linkerName;
+            @JsonProperty("linkerGender")
+            private String linkerGender;
+            @JsonProperty("linkerPhone")
+            private String linkerPhone;
+            @JsonProperty("linkerMobile")
+            private String linkerMobile;
+            @JsonProperty("linkerPosition")
+            private String linkerPosition;
+            @JsonProperty("linkerNativeplace")
+            private String linkerNativeplace;
+            @JsonProperty("linkerProvince")
+            private String linkerProvince;
+            @JsonProperty("linkerCity")
+            private String linkerCity;
+            @JsonProperty("linkerCounty")
+            private String linkerCounty;
+            @JsonProperty("linkerAddress")
+            private String linkerAddress;
+            @JsonProperty("linkerEmail")
+            private String linkerEmail;
+        }
+
+        @Data
+        public static class PolicyInsuredNoCar {
+            @JsonProperty("id")
+            private Long id;
+            @JsonProperty("insuredFlag")
+            private String insuredFlag;
+            @JsonProperty("unchangedFields")
+            private List<String> unchangedFields;
+            @JsonProperty("policyInsuredTypeList")
+            private List<PolicyInsuredType> policyInsuredTypeList;
+            @JsonProperty("customerType")
+            private String customerType;
+            @JsonProperty("name")
+            private String name;
+            @JsonProperty("certType")
+            private String certType;
+            @JsonProperty("certNo")
+            private String certNo;
+            @JsonProperty("gender")
+            private String gender;
+            @JsonProperty("birthday")
+            private String birthday;
+            @JsonProperty("age")
+            private Integer age;
+            @JsonProperty("email")
+            private String email;
+            @JsonProperty("certStartDate")
+            private String certStartDate;
+            @JsonProperty("certEndDate")
+            private String certEndDate;
+            @JsonProperty("mobile")
+            private String mobile;
+            @JsonProperty("nativeplace")
+            private String nativeplace;
+            @JsonProperty("province")
+            private String province;
+            @JsonProperty("city")
+            private String city;
+            @JsonProperty("county")
+            private String county;
+            @JsonProperty("address")
+            private String address;
+            @JsonProperty("postCode")
+            private String postCode;
+            @JsonProperty("socialInsuFlag")
+            private String socialInsuFlag;
+            @JsonProperty("occupationType")
+            private String occupationType;
+            @JsonProperty("occupationName")
+            private String occupationName;
+            @JsonProperty("occupationCode")
+            private String occupationCode;
+            @JsonProperty("relationToAppnt")
+            private String relationToAppnt;
+            @JsonProperty("relationToMainInsured")
+            private String relationToMainInsured;
+            @JsonProperty("orgNature")
+            private String orgNature;
+            @JsonProperty("isCarSync")
+            private String isCarSync;
+            @JsonProperty("isNotEdit")
+            private String isNotEdit;
+            @JsonProperty("personType")
+            private String personType;
+            @JsonProperty("initHouseAddress")
+            private String initHouseAddress;
+        }
+
+        @Data
+        public static class PolicyInsuredType {
+            @JsonProperty("supplementTypeId")
+            private Integer supplementTypeId;
+            @JsonProperty("insuredType")
+            private String insuredType;
+            @JsonProperty("insuredTypeCode")
+            private String insuredTypeCode;
+            @JsonProperty("insuredTypeName")
+            private String insuredTypeName;
+            @JsonProperty("insuredTypeValues")
+            private InsuredTypeValues insuredTypeValues;
+            @JsonProperty("unchangedFields")
+            private List<String> unchangedFields;
+            @JsonProperty("houseAddressIsChange")
+            private String houseAddressIsChange;
+        }
+
+        @Data
+        public static class InsuredTypeValues {
+            @JsonProperty("JCPH")
+            private String jcph;
+            @JsonProperty("JDCZL")
+            private String jdczl;
+            @JsonProperty("HDZK")
+            private String hdzk;
+            @JsonProperty("JCLSYXZ")
+            private String jclsyxz;
+            @JsonProperty("JCLYT")
+            private String jclyt;
+            @JsonProperty("SZBDM")
+            private String szbdm;
+            @JsonProperty("JDJCZCL")
+            private String jdjczcl;
+        }
+
+        @Data
+        public static class ProductListDTO {
+            @JsonProperty("id")
+            private Long id;
+            @JsonProperty("productCode")
+            private String productCode;
+            @JsonProperty("productName")
+            private String productName;
+            @JsonProperty("saleProductCode")
+            private String saleProductCode;
+            @JsonProperty("saleProductName")
+            private String saleProductName;
+            @JsonProperty("productMode")
+            private String productMode;
+            @JsonProperty("planCode")
+            private String planCode;
+            @JsonProperty("planVersion")
+            private String planVersion;
+            @JsonProperty("planName")
+            private String planName;
+            @JsonProperty("fixedPlanMaximum")
+            private String fixedPlanMaximum;
+            @JsonProperty("payFlag")
+            private String payFlag;
+            @JsonProperty("discountRate")
+            private Integer discountRate;
+            @JsonProperty("sumPremium")
+            private Integer sumPremium;
+            @JsonProperty("perSignPremium")
+            private Object perSignPremium;
+            @JsonProperty("sumInsured")
+            private Integer sumInsured;
+            @JsonProperty("isHouseAddress")
+            private String isHouseAddress;
+            @JsonProperty("acceptSystem")
+            private String acceptSystem;
+            @JsonProperty("isUniteProduct")
+            private String isUniteProduct;
+            @JsonProperty("insuredFlag")
+            private String insuredFlag;
+            @JsonProperty("serialNo")
+            private Integer serialNo;
+            @JsonProperty("isChoose")
+            private String isChoose;
+            @JsonProperty("liabilityList")
+            private List<Liability> liabilityList;
+            @JsonProperty("riskProductRelList")
+            private List<RiskProductRel> riskProductRelList;
+            @JsonProperty("remark")
+            private String remark;
+            @JsonProperty("insurantAgeMax")
+            private String insurantAgeMax;
+            @JsonProperty("insurantAgeMaxUnit")
+            private String insurantAgeMaxUnit;
+            @JsonProperty("insurantAgeMin")
+            private String insurantAgeMin;
+            @JsonProperty("insurantAgeMinUnit")
+            private String insurantAgeMinUnit;
+            @JsonProperty("currency")
+            private String currency;
+            @JsonProperty("riskClass")
+            private String riskClass;
+            @JsonProperty("planLabel")
+            private Object planLabel;
+            @JsonProperty("occupationLevel")
+            private String occupationLevel;
+            @JsonProperty("scopeRelatedRequire")
+            private String scopeRelatedRequire;
+            @JsonProperty("needAdditionalInsured")
+            private String needAdditionalInsured;
+            @JsonProperty("needPremiumCalculate")
+            private String needPremiumCalculate;
+            @JsonProperty("needMultiInsured")
+            private String needMultiInsured;
+            @JsonProperty("carPremiumMin")
+            private Integer carPremiumMin;
+            @JsonProperty("carPremiumMax")
+            private Long carPremiumMax;
+            @JsonProperty("isStandardProduct")
+            private String isStandardProduct;
+            @JsonProperty("productLabels")
+            private Object productLabels;
+            @JsonProperty("planMinPremium")
+            private Object planMinPremium;
+            @JsonProperty("newOldCarTag")
+            private Object newOldCarTag;
+            @JsonProperty("productClass")
+            private String productClass;
+            @JsonProperty("supplementTypeList")
+            private List<SupplementType> supplementTypeList;
+            @JsonProperty("productFactorRelList")
+            private Object productFactorRelList;
+            @JsonProperty("productFactorRelValueMap")
+            private Object productFactorRelValueMap;
+            @JsonProperty("isChecked")
+            private String isChecked;
+            @JsonProperty("copies")
+            private Object copies;
+            @JsonProperty("startTime")
+            private Object startTime;
+            @JsonProperty("endTime")
+            private Object endTime;
+            @JsonProperty("adjustStartTime")
+            private Object adjustStartTime;
+            @JsonProperty("adjustEndTime")
+            private Object adjustEndTime;
+            @JsonProperty("addPolicy")
+            private Object addPolicy;
+            @JsonProperty("policyInsuredNoCarList")
+            private List<PolicyInsuredNoCar> policyInsuredNoCarList;
+            @JsonProperty("uwFailReasons")
+            private Object uwFailReasons;
+            @JsonProperty("policyId")
+            private Object policyId;
+            @JsonProperty("proposalNo")
+            private Object proposalNo;
+            @JsonProperty("virtualPersonFlag")
+            private String virtualPersonFlag;
+            @JsonProperty("isPlusNProduct")
+            private String isPlusNProduct;
+            @JsonProperty("isImmediateIssueConfig")
+            private String isImmediateIssueConfig;
+            @JsonProperty("isImmediateIssue")
+            private String isImmediateIssue;
+            @JsonProperty("oldPolicyTipsFlag")
+            private String oldPolicyTipsFlag;
+            @JsonProperty("oldPolicyEndTime")
+            private Object oldPolicyEndTime;
+            @JsonProperty("socialFlag")
+            private String socialFlag;
+        }
+
+        @Data
+        public static class Liability {
+            @JsonProperty("liabilityCode")
+            private String liabilityCode;
+            @JsonProperty("liabilityName")
+            private String liabilityName;
+            @JsonProperty("premium")
+            private Integer premium;
+            @JsonProperty("signPremium")
+            private Object signPremium;
+            @JsonProperty("sumInsured")
+            private Long sumInsured;
+            @JsonProperty("perSumInsured")
+            private Integer perSumInsured;
+            @JsonProperty("sumInsuredType")
+            private String sumInsuredType;
+            @JsonProperty("productCode")
+            private String productCode;
+            @JsonProperty("productName")
+            private String productName;
+            @JsonProperty("planCode")
+            private String planCode;
+            @JsonProperty("riskCode")
+            private String riskCode;
+            @JsonProperty("isServiceClause")
+            private String isServiceClause;
+            @JsonProperty("sumInsuredDescription")
+            private Object sumInsuredDescription;
+            @JsonProperty("packageClauseLiabilityId")
+            private Long packageClauseLiabilityId;
+            @JsonProperty("orderIndex")
+            private Integer orderIndex;
+            @JsonProperty("clauseCode")
+            private String clauseCode;
+            @JsonProperty("clauseName")
+            private String clauseName;
+        }
+
+        @Data
+        public static class RiskProductRel {
+            @JsonProperty("riskCode")
+            private String riskCode;
+            @JsonProperty("riskName")
+            private String riskName;
+            @JsonProperty("subProductCode")
+            private Object subProductCode;
+            @JsonProperty("subProductName")
+            private Object subProductName;
+        }
+
+        @Data
+        public static class SupplementType {
+            @JsonProperty("id")
+            private Integer id;
+            @JsonProperty("supplementType")
+            private String supplementType;
+            @JsonProperty("supplementName")
+            private String supplementName;
+            @JsonProperty("insuredTypeCode")
+            private String insuredTypeCode;
+            @JsonProperty("insuredTypeName")
+            private String insuredTypeName;
+            @JsonProperty("supplementTypeFactorRelList")
+            private List<SupplementTypeFactorRel> supplementTypeFactorRelList;
+        }
+
+        @Data
+        public static class SupplementTypeFactorRel {
+            @JsonProperty("factorCode")
+            private String factorCode;
+            @JsonProperty("factorName")
+            private String factorName;
+            @JsonProperty("factorDataType")
+            private String factorDataType;
+            @JsonProperty("factorDataValueType")
+            private String factorDataValueType;
+            @JsonProperty("factorAccuracy")
+            private Integer factorAccuracy;
+            @JsonProperty("attribute")
+            private String attribute;
+        }
+
+        @Data
+        public static class PolicySalesInfo {
+            @JsonProperty("id")
+            private Object id;
+            @JsonProperty("policyId")
+            private Object policyId;
+            @JsonProperty("relObjType")
+            private Object relObjType;
+            @JsonProperty("relObjId")
+            private Object relObjId;
+            @JsonProperty("businessCategory")
+            private String businessCategory;
+            @JsonProperty("businessType")
+            private String businessType;
+            @JsonProperty("salesmanCode")
+            private String salesmanCode;
+            @JsonProperty("salesmanName")
+            private String salesmanName;
+            @JsonProperty("salesmanCertType")
+            private Object salesmanCertType;
+            @JsonProperty("salesmanCertNo")
+            private Object salesmanCertNo;
+            @JsonProperty("busiDevCertNo")
+            private String busiDevCertNo;
+            @JsonProperty("agentSalesmanCode")
+            private Object agentSalesmanCode;
+            @JsonProperty("agentSalesmanName")
+            private Object agentSalesmanName;
+            @JsonProperty("agentCode")
+            private String agentCode;
+            @JsonProperty("agentName")
+            private String agentName;
+            @JsonProperty("salesOrgCode")
+            private String salesOrgCode;
+            @JsonProperty("salesOrgName")
+            private String salesOrgName;
+            @JsonProperty("addressCname")
+            private Object addressCname;
+            @JsonProperty("businessSourceCode")
+            private String businessSourceCode;
+            @JsonProperty("businessSourceName")
+            private String businessSourceName;
+            @JsonProperty("affiliationBankCode")
+            private String affiliationBankCode;
+            @JsonProperty("affiliationBankName")
+            private String affiliationBankName;
+            @JsonProperty("managementCode")
+            private String managementCode;
+            @JsonProperty("managementName")
+            private String managementName;
+            @JsonProperty("salesAgreementCode")
+            private String salesAgreementCode;
+            @JsonProperty("salesAgreementName")
+            private Object salesAgreementName;
+            @JsonProperty("salesSubAgreementCode")
+            private String salesSubAgreementCode;
+            @JsonProperty("salesSubAgreementName")
+            private Object salesSubAgreementName;
+            @JsonProperty("businessSmallCode")
+            private String businessSmallCode;
+            @JsonProperty("businessSmallName")
+            private String businessSmallName;
+            @JsonProperty("employmentType")
+            private String employmentType;
+            @JsonProperty("businessProjectCode")
+            private String businessProjectCode;
+            @JsonProperty("businessProjectName")
+            private String businessProjectName;
+            @JsonProperty("managerAdminCode")
+            private String managerAdminCode;
+            @JsonProperty("managerAdminName")
+            private String managerAdminName;
+            @JsonProperty("integrationSalesmanCode")
+            private Object integrationSalesmanCode;
+            @JsonProperty("integrationSalesmanName")
+            private Object integrationSalesmanName;
+            @JsonProperty("integrationSalesmanDevCertNo")
+            private String integrationSalesmanDevCertNo;
+            @JsonProperty("integrationBranchCode")
+            private String integrationBranchCode;
+            @JsonProperty("integrationBranchName")
+            private String integrationBranchName;
+            @JsonProperty("integrationOrgCode")
+            private Object integrationOrgCode;
+            @JsonProperty("integrationOrgName")
+            private Object integrationOrgName;
+            @JsonProperty("integrationDepartmentCode")
+            private Object integrationDepartmentCode;
+            @JsonProperty("integrationDepartmentName")
+            private Object integrationDepartmentName;
+            @JsonProperty("payDay")
+            private Integer payDay;
+            @JsonProperty("extraInfo")
+            private String extraInfo;
+            @JsonProperty("policyNo")
+            private Object policyNo;
+            @JsonProperty("salesFeeList")
+            private Object salesFeeList;
+            @JsonProperty("salesFeeDetailList")
+            private Object salesFeeDetailList;
+            @JsonProperty("permitRisk")
+            private String permitRisk;
+            @JsonProperty("mobilePhone")
+            private Object mobilePhone;
+            @JsonProperty("agentStaff")
+            private Object agentStaff;
+            @JsonProperty("permitRiskClass")
+            private String permitRiskClass;
+            @JsonProperty("handlerType")
+            private Object handlerType;
+            @JsonProperty("salesmanGrade")
+            private String salesmanGrade;
+            @JsonProperty("intermediaryGrade")
+            private String intermediaryGrade;
+        }
+
+        @Data
+        public static class PolicyInsuredTypeMap {
+            @JsonProperty("HDZZL")
+            private String hdzzl;
+            @JsonProperty("JDCZL")
+            private String jdczl;
+            @JsonProperty("FDJHM")
+            private String fdjhm;
+            @JsonProperty("HDZK")
+            private String hdzk;
+            @JsonProperty("CAPXH")
+            private String capxh;
+            @JsonProperty("JCLSYXZ")
+            private String jclsyxz;
+            @JsonProperty("JCLSYQR")
+            private String jclsyqr;
+            @JsonProperty("JCPH")
+            private String jcph;
+            @JsonProperty("JCJH")
+            private String jcjh;
+            @JsonProperty("FJDCCP")
+            private String fjdccp;
+            @JsonProperty("JDJCZCL")
+            private String jdjczcl;
+            @JsonProperty("JCLL")
+            private String jcll;
+            @JsonProperty("JCLYT")
+            private String jclyt;
+            @JsonProperty("SZBDM")
+            private String szbdm;
+        }
+    }
+}

+ 14 - 0
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/response/TaiPingCrawlerNoCarCalculateData.java

@@ -0,0 +1,14 @@
+package com.jzg.quotation.taiping.crawler.entity.response;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author quchen
+ * @date 2026/8/22 16:23
+ */
+
+@Data
+@NoArgsConstructor
+public class TaiPingCrawlerNoCarCalculateData {
+}

+ 65 - 64
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/response/TaiPingCrawlerPremiumCalculateData.java

@@ -5,6 +5,7 @@ import com.jzg.quotation.taiping.crawler.entity.request.TaiPingCrawlerPremiumCal
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 @NoArgsConstructor
@@ -100,7 +101,7 @@ public class TaiPingCrawlerPremiumCalculateData {
     @JsonProperty("pfActuaryRiskDtoBusi")
     private Object pfActuaryRiskDtoBusi;
     @JsonProperty("fcPrice")
-    private Double fcPrice;
+    private Integer fcPrice;
     @JsonProperty("bzInformationDetailDto")
     private BzInformationDetailDtoDTO bzInformationDetailDto;
     @JsonProperty("fcProductList")
@@ -240,23 +241,23 @@ public class TaiPingCrawlerPremiumCalculateData {
     @Data
     public static class PfItemKindDto0801DTO {
         @JsonProperty("addTax")
-        private Double addTax;
+        private BigDecimal addTax;
         @JsonProperty("addTaxRate")
-        private Double addTaxRate;
+        private BigDecimal addTaxRate;
         @JsonProperty("additionalRate")
-        private Object additionalRate;
+        private BigDecimal additionalRate;
         @JsonProperty("adjustRate")
-        private Double adjustRate;
+        private Integer adjustRate;
         @JsonProperty("allBrokenRate")
-        private Object allBrokenRate;
+        private BigDecimal allBrokenRate;
         @JsonProperty("assistKindFlag")
-        private Object assistKindFlag;
+        private String assistKindFlag;
         @JsonProperty("basePremium")
-        private Double basePremium;
+        private Integer basePremium;
         @JsonProperty("basePureBenchPremium")
-        private Object basePureBenchPremium;
+        private BigDecimal basePureBenchPremium;
         @JsonProperty("benchmarkPremium")
-        private Double benchmarkPremium;
+        private Integer benchmarkPremium;
         @JsonProperty("calcMedicalModel")
         private String calcMedicalModel;
         @JsonProperty("calculateInd")
@@ -264,35 +265,35 @@ public class TaiPingCrawlerPremiumCalculateData {
         @JsonProperty("currency")
         private String currency;
         @JsonProperty("deductible")
-        private Object deductible;
+        private BigDecimal deductible;
         @JsonProperty("deductibleList")
         private Object deductibleList;
         @JsonProperty("deductibleRate")
-        private Object deductibleRate;
+        private BigDecimal deductibleRate;
         @JsonProperty("discount")
-        private Double discount;
+        private Integer discount;
         @JsonProperty("easyKindName")
-        private Object easyKindName;
+        private String easyKindName;
         @JsonProperty("endDate")
-        private Object endDate;
+        private String endDate;
         @JsonProperty("endorAdjustRate")
-        private Double endorAdjustRate;
+        private Integer endorAdjustRate;
         @JsonProperty("endorPolicyNo")
         private String endorPolicyNo;
         @JsonProperty("firstLossRate")
-        private Object firstLossRate;
+        private BigDecimal firstLossRate;
         @JsonProperty("flag")
-        private Object flag;
+        private String flag;
         @JsonProperty("franchise")
-        private Double franchise;
+        private Integer franchise;
         @JsonProperty("grossPremium")
-        private Double grossPremium;
+        private BigDecimal grossPremium;
         @JsonProperty("isExist")
         private String isExist;
         @JsonProperty("itemCode")
-        private Object itemCode;
+        private String itemCode;
         @JsonProperty("itemDetailCode")
-        private Object itemDetailCode;
+        private String itemDetailCode;
         @JsonProperty("itemDetailList")
         private Object itemDetailList;
         @JsonProperty("itemDetailNo")
@@ -310,107 +311,107 @@ public class TaiPingCrawlerPremiumCalculateData {
         @JsonProperty("liabCode")
         private String liabCode;
         @JsonProperty("loading")
-        private Object loading;
+        private BigDecimal loading;
         @JsonProperty("modeCode")
-        private Object modeCode;
+        private String modeCode;
         @JsonProperty("modeName")
-        private Object modeName;
+        private String modeName;
         @JsonProperty("mustInsureInd")
-        private Object mustInsureInd;
+        private String mustInsureInd;
         @JsonProperty("netPremium")
-        private Double netPremium;
+        private BigDecimal netPremium;
         @JsonProperty("noDebtPremium")
-        private Object noDebtPremium;
+        private BigDecimal noDebtPremium;
         @JsonProperty("nodeBtGrossPremium")
         private Object nodeBtGrossPremium;
         @JsonProperty("orgPriceTaxTotal")
-        private Double orgPriceTaxTotal;
+        private Integer orgPriceTaxTotal;
         @JsonProperty("originGrossPremium")
-        private Double originGrossPremium;
+        private BigDecimal originGrossPremium;
         @JsonProperty("originUWPremium")
-        private Double originUWPremium;
+        private BigDecimal originUWPremium;
         @JsonProperty("premiumFormula")
-        private Object premiumFormula;
+        private String premiumFormula;
         @JsonProperty("premiumType")
-        private Object premiumType;
+        private String premiumType;
         @JsonProperty("priceTaxTotal")
-        private Double priceTaxTotal;
+        private Integer priceTaxTotal;
         @JsonProperty("projectCode")
-        private Object projectCode;
+        private String projectCode;
         @JsonProperty("proposalNo")
         private String proposalNo;
         @JsonProperty("pubInsuredInd")
-        private Object pubInsuredInd;
+        private String pubInsuredInd;
         @JsonProperty("pureBenchPremium")
-        private Object pureBenchPremium;
+        private BigDecimal pureBenchPremium;
         @JsonProperty("quantity")
-        private Object quantity;
+        private Integer quantity;
         @JsonProperty("rate")
-        private Object rate;
+        private BigDecimal rate;
         @JsonProperty("ratePeriod")
-        private Object ratePeriod;
+        private String ratePeriod;
         @JsonProperty("reSpecialInd")
-        private Object reSpecialInd;
+        private String reSpecialInd;
         @JsonProperty("relatedFlagFG2020")
-        private Object relatedFlagFG2020;
+        private String relatedFlagFG2020;
         @JsonProperty("relatedInd")
-        private Object relatedInd;
+        private String relatedInd;
         @JsonProperty("relieveFund")
-        private Double relieveFund;
+        private BigDecimal relieveFund;
         @JsonProperty("remark")
-        private Object remark;
+        private String remark;
         @JsonProperty("riskCode")
         private String riskCode;
         @JsonProperty("riskShareModelSwitch")
-        private Object riskShareModelSwitch;
+        private String riskShareModelSwitch;
         @JsonProperty("scUpdateTime")
         private String scUpdateTime;
         @JsonProperty("serviceTimes")
-        private Object serviceTimes;
+        private Integer serviceTimes;
         @JsonProperty("shareList")
         private Object shareList;
         @JsonProperty("shareModel")
-        private Object shareModel;
+        private String shareModel;
         @JsonProperty("shortRate")
-        private Double shortRate;
+        private Integer shortRate;
         @JsonProperty("shortRateDenominator")
         private Integer shortRateDenominator;
         @JsonProperty("shortRateFlag")
         private String shortRateFlag;
         @JsonProperty("shortRateNumerator")
-        private Double shortRateNumerator;
+        private Integer shortRateNumerator;
         @JsonProperty("specialInd")
-        private Object specialInd;
+        private String specialInd;
         @JsonProperty("startDate")
-        private Object startDate;
+        private String startDate;
         @JsonProperty("subProposalNo")
         private String subProposalNo;
         @JsonProperty("suitProduct")
-        private Object suitProduct;
+        private String suitProduct;
         @JsonProperty("sumInsured")
-        private Double sumInsured;
+        private Integer sumInsured;
         @JsonProperty("sumValue")
-        private Object sumValue;
+        private BigDecimal sumValue;
         @JsonProperty("surrenderInd")
         private String surrenderInd;
         @JsonProperty("unit")
-        private Object unit;
+        private String unit;
         @JsonProperty("unitInsured")
-        private Object unitInsured;
+        private BigDecimal unitInsured;
         @JsonProperty("unitPremium")
-        private Object unitPremium;
+        private BigDecimal unitPremium;
         @JsonProperty("unitValue")
-        private Object unitValue;
+        private BigDecimal unitValue;
         @JsonProperty("useFormula")
-        private Object useFormula;
+        private String useFormula;
         @JsonProperty("uwCount")
-        private Object uwCount;
+        private Integer uwCount;
         @JsonProperty("uwPremium")
-        private Double uwPremium;
+        private BigDecimal uwPremium;
         @JsonProperty("valueType")
-        private Object valueType;
+        private String valueType;
         @JsonProperty("yearPremium")
-        private Object yearPremium;
+        private BigDecimal yearPremium;
     }
 
     @NoArgsConstructor

+ 28 - 0
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/entity/response/TaiPingCrawlerRefreshFcProductPageData.java

@@ -0,0 +1,28 @@
+package com.jzg.quotation.taiping.crawler.entity.response;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author quchen
+ * @date 2026/8/22 10:01
+ */
+
+@Data
+@NoArgsConstructor
+public class TaiPingCrawlerRefreshFcProductPageData {
+    private String status;
+
+    private String message;
+
+    private DataDTO data;
+
+    @Data
+    @NoArgsConstructor
+    public static class DataDTO {
+
+    }
+
+
+
+}

Разница между файлами не показана из-за своего большого размера
+ 12 - 3
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/impl/TaipingCrawlerRequestImpl.java


+ 32 - 6
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/utils/AESEncryption.java

@@ -1,10 +1,17 @@
 package com.jzg.quotation.taiping.crawler.utils;
 
-import cn.hutool.core.codec.Base64;
 import cn.hutool.crypto.SecureUtil;
 import cn.hutool.crypto.symmetric.AES;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.TypeReference;
+import com.alibaba.nacos.api.remote.response.Response;
+import com.jzg.commons.constants.quote.enums.base.InsuranceEnum;
+import com.jzg.quotation.commons.utils.InsuranceLog;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
 
 /**
  * @description: AES 加解密
@@ -16,8 +23,8 @@ public final class AESEncryption {
     private AESEncryption() {
         throw new IllegalStateException("Utility class");
     }
-
-    private final static String KEY = "Fe09wKJJycMKqOKB";
+    private static final String KEY = "Fe09wKJJycMKqOKB";
+    private static final String IV = KEY;
 
     private final static AES AES;
 
@@ -32,8 +39,19 @@ public final class AESEncryption {
      * @return 加密参数
      */
     public static String encrypt(String data) {
-        byte[] decryptedBytes = AES.decrypt(data);
-        return new String(decryptedBytes);
+        try {
+            byte[] keyBytes = KEY.getBytes(StandardCharsets.UTF_8);
+            SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
+
+            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
+            cipher.init(Cipher.ENCRYPT_MODE, keySpec);
+
+            byte[] encrypted = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));
+
+            return Base64.getEncoder().encodeToString(encrypted);
+        } catch (Exception e) {
+        throw new RuntimeException("AES加密失败", e);
+        }
     }
 
     /**
@@ -67,9 +85,17 @@ public final class AESEncryption {
      * @param <T>            json转换后的泛型
      * @return 解密后的类
      */
-    public static <T> T decrypt(String data, TypeReference<T> tTypeReference) {
+    public static <T> T decrypt(String data, TypeReference<T> tTypeReference,String type) {
         String decrypt = decrypt(data);
+        InsuranceLog.infoLog(InsuranceEnum.CHAC.getPinyin(), "\n\t---------> {} \n\t---------> 响应参数:{}", type, decrypt);
         return JSON.parseObject(decrypt, tTypeReference);
     }
 
+    public static void main(String[] args) {
+        String decrypt = decrypt("hiOoKhrU=0Sz9BhqlqWky_A0KB8DLb_XeIIhJNvhxWsU_kgUybH74nObuC3EexrfCBa8HOTuY0qsV7.JWnELxGqggVjmT4eBwuL50BXH5daY3XDn2837nzMp5e.In05yH1sqbeV69WIqZlmHApjWTkc8ZaM2EfIhbz9t4uHGhhNTXoKo4uwDAUsfEbsxhf0e3AFAwNLlk5AcjHXhrzWKZhFVkJPo5Km8_THErt6wkzVVp1dByOVj.N8nuRz11HXAefUknDnQYwrnz_9LFHCZqTInpvUowY.WpfPUKybXVZNYUMVgZ9NOf1hybDR5bWa.elUha5GyIrUeWORfEMjmLqT.LoFpm1c5lYa14teCTFVyFoG7mljW2qpHiBBOEEkUQaFDi5iPl1e9FCh0ZnR9TJTLG3wJWveIVbNNwvEdKb7KhCXXYphfOIe41sbX7BYPRpPcN39eFn1LJxsXS.vmolP4oejkLZaMa4iJUE1RBE5AXb1E7EydgUI5bQdBtWIaS4SM4P3v_fnGVkp_Azer9trGoXRDGAE1cQu91imxjqYR8QmoJ3SDbrQVS26_3YrqdAs5nBf1G95BrEkDU5MkaicyQLc1IGyYuNJCTm2nzz6Qh84zbeQfRnMoxbV__CHCSGoNvTNsgEXajwg9w_Kg4LBqyvoPA9IijTH5hOlWooA5r6RRvhgPYhZbmlHfhI.afI9OkyWg.Loo3e17JgnBkCl9TCJrDpIpvxl6vNVa8_t1CyySFVxBjBAJ0SW4HuN1IIhBLVw2o.VzXbzDZMo3lTP7cng73qsqQqoaqiuAwP3lR7pip7bsiR_t6iN0pPFswiH6iS18rkJ.tQWvFEFEPaOzW7sKU7Y4mNvIfZ1EhbdGFCYeC06sX7aqVHXDvVxG9");
+        TypeReference<Response> tTypeReference = new TypeReference<>() {
+        };
+        System.out.println(JSON.parseObject(decrypt, tTypeReference));
+    }
+
 }

+ 1 - 1
tenant/organization/src/main/java/com/jzg/organization/controller/PtlAreaLicenseController.java

@@ -31,7 +31,7 @@ public class PtlAreaLicenseController {
     @GetMapping("/getAreaLicenseCode")
     HttpResult<String> convertLicense2AreaNumber(@RequestParam(required = false) String licenseNo) {
         String licenseCode = ptlAreaLicenseService.convertLicense2AreaNumber(licenseNo);
-        return HttpResult.ok(licenseCode);
+        return HttpResult.ok("成功",licenseCode);
     }
 
 

Некоторые файлы не были показаны из-за большого количества измененных файлов