Explorar o código

Merge remote-tracking branch 'origin/master'

wks hai 10 meses
pai
achega
e6699dde15
Modificáronse 56 ficheiros con 1045 adicións e 375 borrados
  1. 36 20
      commons/src/main/java/com/jzg/commons/constants/quote/enums/quote/BiVehicleUseCode.java
  2. 3 2
      commons/src/main/java/com/jzg/commons/exception/SystemException.java
  3. 1 0
      platform/src/main/java/com/jzg/service/impl/SysSystemServiceImpl.java
  4. 1 0
      tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/build/BoHaiApiQuoteResultsVoBuild.java
  5. 1 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/UploadFileRequest.java
  6. 3 2
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/client/ChengTaiAPI.java
  7. 16 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/component/ChengTaiCrawlerCacheComponent.java
  8. 39 8
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/component/ChengTaiRequestCrawlerComponent.java
  9. 2 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/ChengTaiCrawlerConfigureParameters.java
  10. 7 3
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/bo/ChengTaiSaleInfoBo.java
  11. 1 1
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiClientIdentifyRequest.java
  12. 4 4
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiFindCarModelRequest.java
  13. 4 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiGetEngageListRequest.java
  14. 79 24
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiPremiumcaRequest.java
  15. 35 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiQueryCarInfoRequest.java
  16. 43 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/response/ChengTaiPremiumcaResponse.java
  17. 109 0
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/response/ChengTaiQueryCarInfoResponse.java
  18. 25 2
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/service/impl/ChengTaiCrawlerQuoteProcessServiceImpl.java
  19. 131 4
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/service/impl/ChengTaiCrawlerRequestImpl.java
  20. 38 1
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java
  21. 6 3
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/build/DaJiaAPIQuoteResultsVoBuild.java
  22. 9 3
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/compoment/DaJiaApiRequestComponent.java
  23. 0 38
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/constant/TypeVehicleMapping.java
  24. 6 0
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/entity/po/DaJiaApiOrder.java
  25. 7 7
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/entity/request/ODR1008Request.java
  26. 4 0
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/entity/response/ODR1010Response.java
  27. 0 3
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/properties/DaJiaApiProperties.java
  28. 3 1
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/service/DaJiaApiOrderService.java
  29. 3 2
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/service/impl/DaJiaApiOrderServiceImpl.java
  30. 11 16
      tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/service/impl/DaJiaApiRequestImpl.java
  31. 10 17
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/build/GuoRenApiQuoteResultsVoBuild.java
  32. 10 8
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/component/GuorenDuplicateInsuranceComponent.java
  33. 12 1
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/entity/GuoRenApiOrder.java
  34. 1 1
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/entity/Request/PayRequest.java
  35. 48 28
      tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/service/Impl/GuoRenApiRequestImpl.java
  36. 1 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/api/component/HuaTaiRequestApiComponent.java
  37. 1 1
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/api/entity/request/HuaTaiQuotedPriceRequest.java
  38. 2 1
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/api/entity/request/HuaTaiSubmitRequest.java
  39. 85 71
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/api/service/Impl/HuaTaiApiRequestImpl.java
  40. 18 11
      tenant/insurance/quotation-summary/pom.xml
  41. 6 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java
  42. 6 9
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  43. 2 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  44. 9 8
      tenant/insurance/quotation-summary/src/main/resources/application-dev.yaml
  45. 0 2
      tenant/insurance/quotation-summary/src/main/resources/application-test.yaml
  46. 1 3
      tenant/insurance/quotation-taikang/pom.xml
  47. 45 45
      tenant/insurance/quotation-taikang/src/test/java/com/jzg/quotation/taikang/crawler/TKHttpAPIServiceTest1.java
  48. 16 9
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/build/ZiJinAPIQuoteResultsVoBuild.java
  49. 3 1
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/component/ZiJinApiRequestComponent.java
  50. 105 3
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/entity/request/CalculatePremiumRequest.java
  51. 9 4
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/entity/request/QueryActualValueRequest.java
  52. 2 2
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/service/Impl/ZiJinApiRequestImpl.java
  53. 1 1
      tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/service/Impl/ZiJinCrawlerOrderServiceImpl.java
  54. 1 2
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementServiceImpl.java
  55. 11 0
      tenant/organization/src/main/resources/application-dev.yml
  56. 13 1
      tenant/organization/src/main/resources/application.yml

+ 36 - 20
commons/src/main/java/com/jzg/commons/constants/quote/enums/quote/BiVehicleUseCode.java

@@ -14,30 +14,46 @@ import lombok.Getter;
 @Getter
 public enum BiVehicleUseCode {
 
-    CI01("CI01", "家庭自用客车"),
-    CI02("CI02", "非营业企业客车"),
-    CI03("CI03", "非营业机关客车"),
-    CI04("CI04", "非营业个人货车"),
-    CI05("CI05", "非营业企业货车"),
-    CI06("CI06", "非营业机关货车"),
-    CI07("CI07", "营业个人.出租.租赁"),
-    CI08("CI08", "营业个人.城市公交"),
-    CI09("CI09", "营业个人.公路客运"),
-    CI10("CI10", "营业个人.货车"),
-    CI11("CI11", "营业企业.出租.租赁"),
-    CI12("CI12", "营业企业.城市公交"),
-    CI13("CI13", "营业企业.公路客运"),
-    CI14("CI14", "营业企业.货车"),
-    CI15("CI15", "营业特种车"),
-    CI16("CI16", "非营业特种车"),
-    CI17("CI17", "营业特种车挂车"),
-    CI18("CI18", "非营业特种车挂车"),
-    CI19("CI19", "营业挂车"),
-    CI20("CI20", "非营业挂车");
+    CI01("CI01", "家庭自用客车", "374001","364001001"),
+    CI02("CI02", "非营业企业客车", "374002", "364002002"),
+    CI03("CI03", "非营业机关客车", "374003", "364002001"),
+    CI04("CI04", "非营业个人货车", "374004", "364004001"),
+    CI05("CI05", "非营业企业货车", "374005", "364004001"),
+    CI06("CI06", "非营业机关货车", "374006", "364004001"),
+    CI07("CI07", "营业个人.出租.租赁", "374007", "364003001"),
+    CI08("CI08", "营业个人.城市公交", "374008", "364003002"),
+    CI09("CI09", "营业个人.公路客运", "374009", "364003003"),
+    CI10("CI10", "营业个人.货车", "374010", "364004002"),
+    CI11("CI11", "营业企业.出租.租赁", "374011", "364003001"),
+    CI12("CI12", "营业企业.城市公交", "374012", "364003002"),
+    CI13("CI13", "营业企业.公路客运", "374013", "364003003"),
+    CI14("CI14", "营业企业.货车", "374014", "364004002"),
+    CI15("CI15", "营业特种车", "374016", "364005001"),
+    CI16("CI16", "非营业特种车", "374017", "364005001"),
+    CI17("CI17", "营业特种车挂车", "374018", "364005001"),
+    CI18("CI18", "非营业特种车挂车", "374019", "364005001"),
+    CI19("CI19", "营业挂车", "374020", "364004001"),
+    CI20("CI20", "非营业挂车", "374021", "364004002");
 
     // 编号
     private final String code;
     // 说明
     private final String desc;
 
+    // 商业
+    private final String cUsageCdeSy;
+
+    // 交强
+    private final String cUsageCdeJq;
+
+
+    public static String getByCode(String code){
+        for (BiVehicleUseCode biVehicleUseCode : values()) {
+            if (biVehicleUseCode.getCUsageCdeSy().equals(code)) {
+                return biVehicleUseCode.getCUsageCdeJq();
+            }
+        }
+        return null;
+    }
+
 }

+ 3 - 2
commons/src/main/java/com/jzg/commons/exception/SystemException.java

@@ -10,11 +10,12 @@ public class SystemException extends RuntimeException {
         this.code = "500";
     }
 
-    public SystemException(String code, String message) {
+    public SystemException(String message,String data) {
         super(message);
-        this.code = code;
+        this.code = "500";
     }
 
+
 //    public SystemException(String code, Throwable cause) {
 //        super(message, cause);
 //        this.code = code;

+ 1 - 0
platform/src/main/java/com/jzg/service/impl/SysSystemServiceImpl.java

@@ -294,6 +294,7 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
             vo.setDivision(areaString.substring(0, areaString.length() - 1));
         }
         SysUser user = sysUserMapper.selectById(system.getUserId());
+        AssertionUtils.isFail(Objects.isNull(user),"租户管理员不存在!");
         SysUserJzgInfo info = sysUserJzgInfoMapper.selectOne(new LambdaQueryWrapper<SysUserJzgInfo>()
                 .eq(SysUserJzgInfo::getUserId, user.getId())
                 .eq(SysUserJzgInfo::getIsDelete, YesNoEnum.NO.getCode())

+ 1 - 0
tenant/insurance/quotation-bohai/src/main/java/com/jzg/quotation/bohai/api/build/BoHaiApiQuoteResultsVoBuild.java

@@ -121,6 +121,7 @@ public class BoHaiApiQuoteResultsVoBuild {
         // 报价失败提示
         quoteResultsVo.setErrorMessage(boHaiQuoteResponse.getResponseMsg());
         quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.QUOTE_FAIL);
+        quoteResultsVo.setQuoteStatus(InsOrderStatusEnum.QUOTE_FAIL.getCode());
         return quoteResultsVo;
     }
 }

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

@@ -50,6 +50,7 @@ public class UploadFileRequest extends BaseRequest{
     public UploadFileRequest(InsuranceImageVo insuranceImageVo, String orderNo, String ppartnerCode){
         super(ppartnerCode);
         this.orderId = orderNo;
+        this.embarkPartnerCode = ppartnerCode;
         String imageType = insuranceImageVo.getImageCode();
 
         InsuranceImageEnum insuranceImageEnum = Enum.valueOf(InsuranceImageEnum.class, imageType);

+ 3 - 2
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/client/ChengTaiAPI.java

@@ -8,13 +8,14 @@ public enum ChengTaiAPI implements CrawlerRequestUrlStandard {
     CHECK_CAPTCHA("/api/upms/captcha/check", "验证验证码"),
     LOGIN("/api/upms/login", "登录"),
     // 归属信息
-    FIND_ATTRIBUTION_ORG_BY_USER("api/vehicle/insure/channel/findAttributionOrgByUser", "查询登录用户可用的业务归属机构"),
+    FIND_ATTRIBUTION_ORG_BY_USER("/api/vehicle/insure/channel/findAttributionOrgByUser", "查询登录用户可用的业务归属机构"),
     FIND_SALE_MAN_VO_BY_DEPT_CODE("/api/vehicle/insure/channel/findSaleManVoByDeptCode", "查询业务人员"),
     FIND_CORE_CONFER_INFO_BY_HANDLE_CODE("/api/vehicle/insure/channel/findCoreConferInfoByHandleCode", "查询务人员可用的中介协议和代理机构"),
     QUERY_RISK_AUTHORITY("/api/vehicle/insure/channel/queryRiskAuthority", "查询业务人员可用的信息"),
 
+    QUERY_CAR_INFO("/api/vehicle/core/queryCarInfo","车辆查询"),
     FIND_CAR_MODEL("/api/vehicle/insure/findCarModel", "查询车型"),
-    GET_CI_MODEL_CODE("api/vehicle/core/getCIModelCode/", "查询车系"),
+    GET_CI_MODEL_CODE("/api/vehicle/core/getCIModelCode/", "查询车系"),
     CLIENT_IDENTIFY("/api/vehicle/core/clientIdentify", "身份识别"),
     PREMIUMCAL("/api/vehicle/core/premiumcal", "保费计算"),
     GET_ENGAGE_LIST("/api/vehicle/core/getEngageList", "特别约定"),

+ 16 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/component/ChengTaiCrawlerCacheComponent.java

@@ -17,6 +17,7 @@ public class ChengTaiCrawlerCacheComponent {
     private final RedissonClient redissonClient;
 
     public static final String CHENGTAI_SAVE = "chengtai:save:";
+    public static final String LOGIN_TOKEN = "login:token";
 
     public static final Duration CHENGTAISAVE_TIME = Duration.ofHours(3L);
 
@@ -42,4 +43,19 @@ public class ChengTaiCrawlerCacheComponent {
         return JSON.parseObject(bucket.get(), ChengTaiUnderwritingRequest.class);
     }
 
+    /**
+     * 登录token
+     * @param token
+     */
+    public void cacheChengTaiLoginToken(String token) {
+        RBucket<String> bucket = redissonClient.getBucket(LOGIN_TOKEN);
+        bucket.set(token, CHENGTAISAVE_TIME);
+    }
+
+    public String getChengTaiLoginToken() {
+        RBucket<String> bucket = redissonClient.getBucket(LOGIN_TOKEN);
+        return bucket.get();
+    }
+
+
 }

+ 39 - 8
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/component/ChengTaiRequestCrawlerComponent.java

@@ -6,6 +6,7 @@ import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.quotation.chengtai.crawler.client.ChengTaiAPI;
+import com.jzg.quotation.chengtai.crawler.entity.ChengTaiCrawlerConfigureParameters;
 import com.jzg.quotation.chengtai.crawler.entity.bo.ChengTaiSaleInfoBo;
 import com.jzg.quotation.chengtai.crawler.entity.request.*;
 import com.jzg.quotation.chengtai.crawler.entity.response.*;
@@ -48,9 +49,15 @@ public class ChengTaiRequestCrawlerComponent {
      */
     public <Response> ResponseEntity<ChengTaiBaseResponse<Response>> requestBasePost(ChengTaiAPI requestUrl, Object body, ParameterizedTypeReference<ChengTaiBaseResponse<Response>> responseClass, HttpHeaders headers) {
         String url = chengTaiCrawlerProperties.getBaseUrl() + requestUrl.uri();
+//        String s = requestComponent.basePostString(url, body, headers);
         return requestComponent.basePost(url, body, responseClass, headers);
     }
 
+    public <Response> ResponseEntity<ChengTaiBaseResponse<Response>> requestBaseGet(ChengTaiAPI requestUrl, Object body, ParameterizedTypeReference<ChengTaiBaseResponse<Response>> responseClass, HttpHeaders headers) {
+        String url = chengTaiCrawlerProperties.getBaseUrl() + requestUrl.uri();
+        return requestComponent.chengTaiGet(url, body, responseClass, headers);
+    }
+
     /**
      * 获取响应内容
      *
@@ -62,6 +69,20 @@ public class ChengTaiRequestCrawlerComponent {
      */
     public <Response> Response requestPost(ChengTaiAPI requestUrl, Object body, ParameterizedTypeReference<ChengTaiBaseResponse<Response>> responseClass, HttpHeaders headers) {
         ChengTaiBaseResponse<Response> response = requestBasePost(requestUrl, body, responseClass, headers).getBody();
+        if (response.getCode() == -1) {
+            throw new SystemException(response.getMessage());
+        }
+        return response.getBody();
+    }
+
+    public <Response> Response formData(ChengTaiAPI requestUrl, Object body, ParameterizedTypeReference<ChengTaiBaseResponse<Response>> responseClass, HttpHeaders headers) {
+        String url = chengTaiCrawlerProperties.getBaseUrl() + requestUrl.uri();
+        ResponseEntity<ChengTaiBaseResponse<Response>> response = requestComponent.formData(url, body, responseClass, headers);
+        return response.getBody().getBody();
+    }
+
+    public <Response> Response requestGet(ChengTaiAPI requestUrl, Object body, ParameterizedTypeReference<ChengTaiBaseResponse<Response>> responseClass, HttpHeaders headers) {
+        ChengTaiBaseResponse<Response> response = requestBaseGet(requestUrl, body, responseClass, headers).getBody();
         return response.getBody();
     }
 
@@ -87,6 +108,7 @@ public class ChengTaiRequestCrawlerComponent {
 
     }
 
+
     /**
      * 验证验证码
      *
@@ -117,7 +139,7 @@ public class ChengTaiRequestCrawlerComponent {
      * @return 归属机构
      */
     public ChengTaiFindAttributionOrgByUserResponse findAttributionOrgByUser(String deptCode, HttpHeaders httpHeaders) {
-        List<ChengTaiFindAttributionOrgByUserResponse> response = requestPost(ChengTaiAPI.FIND_ATTRIBUTION_ORG_BY_USER, null, new ParameterizedTypeReference<>() {
+        List<ChengTaiFindAttributionOrgByUserResponse> response = requestGet(ChengTaiAPI.FIND_ATTRIBUTION_ORG_BY_USER, null, new ParameterizedTypeReference<>() {
         }, httpHeaders);
         return response.stream().filter(x -> deptCode.equals(x.getDeptCode())).findFirst().orElseThrow(() -> new SystemException("获取归属机构失败"));
     }
@@ -180,7 +202,7 @@ public class ChengTaiRequestCrawlerComponent {
      */
     public ChengTaiFindCarModelResponse.DataDTO findCarModel(CarInfoVo carInfoVo, HttpHeaders httpHeaders) {
         ChengTaiFindCarModelRequest chengTaiFindCarModelRequest = new ChengTaiFindCarModelRequest(carInfoVo.getBrandName());
-        ChengTaiFindCarModelResponse chengTaiFindCarModelResponse = requestPost(ChengTaiAPI.FIND_CAR_MODEL, chengTaiFindCarModelRequest, new ParameterizedTypeReference<>() {
+        ChengTaiFindCarModelResponse chengTaiFindCarModelResponse = formData(ChengTaiAPI.FIND_CAR_MODEL, chengTaiFindCarModelRequest, new ParameterizedTypeReference<>() {
         }, httpHeaders);
         List<ChengTaiFindCarModelResponse.DataDTO> carModel = Optional.ofNullable(chengTaiFindCarModelResponse)
                 .map(ChengTaiFindCarModelResponse::getData)
@@ -196,8 +218,8 @@ public class ChengTaiRequestCrawlerComponent {
      * @return 车辆信息
      */
     public ChengTaiGetCIModelCodeResponse getCIModelCode(String carName, HttpHeaders httpHeaders) {
-        return requestComponent.get(ChengTaiAPI.GET_CI_MODEL_CODE.getRequestUrl(chengTaiCrawlerProperties.getBaseUrl()) + carName, Map.of(), null, new ParameterizedTypeReference<>() {
-        }, httpHeaders);
+        return requestComponent.get(ChengTaiAPI.GET_CI_MODEL_CODE.getRequestUrl(chengTaiCrawlerProperties.getBaseUrl()) + carName, Map.of(), null, new ParameterizedTypeReference<ChengTaiBaseResponse<ChengTaiGetCIModelCodeResponse>>() {
+        }, httpHeaders).getBody();
     }
 
     /**
@@ -220,12 +242,10 @@ public class ChengTaiRequestCrawlerComponent {
      * @return 获取特别约定响应
      */
     public List<ChengTaiGetEngageListResponse.ResponseBodyDTO.EngageListDTO> getEngageList(ChengTaiGetEngageListRequest request, HttpHeaders httpHeaders) {
-        ChengTaiGetEngageListResponse response = requestPost(ChengTaiAPI.GET_ENGAGE_LIST, request, new ParameterizedTypeReference<>() {
+        ChengTaiGetEngageListResponse response = requestPost(ChengTaiAPI.GET_ENGAGE_LIST, request, new ParameterizedTypeReference<ChengTaiBaseResponse<ChengTaiGetEngageListResponse>>() {
         }, httpHeaders);
         List<ChengTaiGetEngageListResponse.ResponseBodyDTO.EngageListDTO> engage = response.getResponseBody().getEngageList();
-        return engage.stream()
-                .filter(x -> "1".equals(x.getAutoInd()))
-                .toList();
+        return engage.stream().filter(x -> "1".equals(x.getAutoInd())).toList();
     }
 
     /**
@@ -326,4 +346,15 @@ public class ChengTaiRequestCrawlerComponent {
     }
 
 
+    public ChengTaiQueryCarInfoResponse.CarModelListDTO queryCarInfo(CarInfoVo carInfoVo, ChengTaiCrawlerConfigureParameters parameters, HttpHeaders httpHeaders) {
+        ChengTaiQueryCarInfoRequest chengTaiQueryCarInfoRequest = new ChengTaiQueryCarInfoRequest(parameters.getComCode(), carInfoVo.getLicenseNo(), carInfoVo.getVinNo());
+
+        ChengTaiQueryCarInfoResponse chengTaiQueryCarInfoResponse = requestPost(ChengTaiAPI.QUERY_CAR_INFO, chengTaiQueryCarInfoRequest, new ParameterizedTypeReference<>() {
+        }, httpHeaders);
+        List<ChengTaiQueryCarInfoResponse.CarModelListDTO> carModel = Optional.ofNullable(chengTaiQueryCarInfoResponse)
+                .map(ChengTaiQueryCarInfoResponse::getCarModelList)
+                .orElseThrow(() -> new SystemException("获取车辆信息失败"));
+
+        return carModel.get(0);
+    }
 }

+ 2 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/ChengTaiCrawlerConfigureParameters.java

@@ -35,5 +35,7 @@ public class ChengTaiCrawlerConfigureParameters implements ConfigureParameters {
      */
     private String agreementCode;
 
+    private String comCode;
+
 }
 

+ 7 - 3
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/bo/ChengTaiSaleInfoBo.java

@@ -45,7 +45,7 @@ public class ChengTaiSaleInfoBo implements Serializable {
      */
     private ChengTaiPremiumcaRequest.SaleInfoDTO buildSaleInfoDTO(ChengTaiFindAttributionOrgByUserResponse attributionOrgByUser, ChengTaiFindSaleManVoByDeptCodeResponse saleManVoByDeptCode, ChengTaiFindCoreConferInfoByHandleCodeResponse coreConferInfoByHandleCode) {
         ChengTaiPremiumcaRequest.SaleInfoDTO saleInfoDTO = new ChengTaiPremiumcaRequest.SaleInfoDTO();
-        saleInfoDTO.setBusinessMode("");
+        saleInfoDTO.setBusinessMode(coreConferInfoByHandleCode.getIntermediaryKind());
         saleInfoDTO.setBusinessSource(coreConferInfoByHandleCode.getSource());
         saleInfoDTO.setComCode(attributionOrgByUser.getDeptCode());
         saleInfoDTO.setComName(attributionOrgByUser.getDeptName());
@@ -61,6 +61,10 @@ public class ChengTaiSaleInfoBo implements Serializable {
         saleInfoDTO.setCooperateSiteName("虚拟合作网点");
         saleInfoDTO.setUserCode(saleManVoByDeptCode.getUserCode());
         saleInfoDTO.setUserName(saleManVoByDeptCode.getUsername());
+        saleInfoDTO.setAgentCode(coreConferInfoByHandleCode.getIntermediaryCode());
+        saleInfoDTO.setAgentName(coreConferInfoByHandleCode.getIntermediaryName());
+        saleInfoDTO.setRiskBusinessType("1");
+        saleInfoDTO.setRiskBusinessTypeName("个人业务");
         return saleInfoDTO;
     }
 
@@ -83,9 +87,9 @@ public class ChengTaiSaleInfoBo implements Serializable {
         acciSaleInfoDTO.setAgentName(coreConferInfoByHandleCode.getIntermediaryName());
         acciSaleInfoDTO.setSolutionCode(coreConferInfoByHandleCode.getSolutionCode());
         acciSaleInfoDTO.setPermitNo(coreConferInfoByHandleCode.getRegisterCode());
-        acciSaleInfoDTO.setBusinessMode("");
+        acciSaleInfoDTO.setBusinessMode(coreConferInfoByHandleCode.getIntermediaryKind());
         acciSaleInfoDTO.setBusinessSource(coreConferInfoByHandleCode.getSource());
-        acciSaleInfoDTO.setChannelType(coreConferInfoByHandleCode.getCompanyCode());
+        acciSaleInfoDTO.setChannelType(coreConferInfoByHandleCode.getChannelDetailCode());
         acciSaleInfoDTO.setChannelTypeDetail(coreConferInfoByHandleCode.getChannelTip());
         acciSaleInfoDTO.setCooperateSiteCode("0000000000");
         acciSaleInfoDTO.setCooperateSiteName("虚拟合作网点");

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

@@ -111,7 +111,7 @@ public class ChengTaiClientIdentifyRequest implements Serializable {
     private String comCode;
 
     public ChengTaiClientIdentifyRequest(CustomerInfoVo customerInfoVo, String role, String comCode) {
-//        this.type = type;
+        this.type =customerInfoVo.getProperty();
         this.role = role;
         this.isTerror = "0";
         this.name = customerInfoVo.getName();

+ 4 - 4
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiFindCarModelRequest.java

@@ -24,8 +24,8 @@ public class ChengTaiFindCarModelRequest implements Serializable {
     @Serial
     private static final long serialVersionUID = -2517394103523954743L;
 
-    @JsonProperty("horthandcode")
-    private String horthandcode;
+    @JsonProperty("shorthandcode")
+    private String shorthandcode;
 
     @JsonProperty("purchasepriceStart")
     private String purchasepriceStart;
@@ -55,7 +55,7 @@ public class ChengTaiFindCarModelRequest implements Serializable {
     private Integer pageSize;
 
     public ChengTaiFindCarModelRequest(String modelcname) {
-        this.horthandcode = "";
+        this.shorthandcode = "";
         this.purchasepriceStart = "";
         this.purchasepriceEnd = "";
         this.modelcname = modelcname;
@@ -64,6 +64,6 @@ public class ChengTaiFindCarModelRequest implements Serializable {
         this.familyname = "";
         this.factory = "";
         this.pageNo = 1;
-        this.pageSize = 20;
+        this.pageSize = 5;
     }
 }

+ 4 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiGetEngageListRequest.java

@@ -74,6 +74,9 @@ public class ChengTaiGetEngageListRequest implements Serializable {
             @JsonProperty("companyCode")
             private String companyCode;
 
+            @JsonProperty("carshipFlag")
+            private String carshipFlag;
+
             @JsonProperty("riskCode")
             private String riskCode;
 
@@ -115,6 +118,7 @@ public class ChengTaiGetEngageListRequest implements Serializable {
                 this.isSafetyMonitoring = 0;
                 this.isValetDriving = 0;
                 this.isToInspection = 0;
+                this.periodInd = 0;
             }
         }
 

+ 79 - 24
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiPremiumcaRequest.java

@@ -6,6 +6,7 @@ import com.jzg.quotation.chengtai.crawler.entity.bo.ChengTaiSaleInfoBo;
 import com.jzg.quotation.chengtai.crawler.entity.response.ChengTaiClientIdentifyResponse;
 import com.jzg.quotation.chengtai.crawler.entity.response.ChengTaiFindCarModelResponse;
 import com.jzg.quotation.chengtai.crawler.entity.response.ChengTaiGetCIModelCodeResponse;
+import com.jzg.quotation.chengtai.crawler.entity.response.ChengTaiPremiumcaResponse;
 import com.jzg.quotation.chengtai.crawler.utils.CarDepreciationCalculator;
 import com.jzg.quotation.commons.utils.TimeProcessing;
 import lombok.AllArgsConstructor;
@@ -14,7 +15,10 @@ import lombok.NoArgsConstructor;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
@@ -76,10 +80,11 @@ public class ChengTaiPremiumcaRequest implements Serializable {
                                     ChengTaiClientIdentifyResponse policyHolder, ChengTaiClientIdentifyResponse insuredPerson,
                                     ChengTaiSaleInfoBo saleInfoBo,
                                     ChengTaiGetCIModelCodeResponse ciModelCode,
-                                    CarDepreciationCalculator.DepreciationResult depreciationResult) {
+                                    CarDepreciationCalculator.DepreciationResult depreciationResult,
+                                    String name) {
         this.combo = new ComboDTO("1");
         // 主要信息
-        this.businessMain = new BusinessMainDTO(saleInfoBo.getSaleInfo(), "");
+        this.businessMain = new BusinessMainDTO(saleInfoBo.getSaleInfo(), "",name);
         this.flag = new FlagDTO(false, false);
         // 归属信息
         this.saleInfo = saleInfoBo.getSaleInfo();
@@ -96,7 +101,11 @@ public class ChengTaiPremiumcaRequest implements Serializable {
         // 交强险
         this.ciContract = new CiContractDTO(quoteVo.getCiRiskInfoVo(), policyHolder);
         // 商业险
-        this.biContract = new BiContractDTO(quoteVo.getBiRiskInfoVo(), quoteVo.getKindInfoVo());
+        RiskInfoVo biRiskInfoVo = quoteVo.getBiRiskInfoVo();
+        if (biRiskInfoVo != null) {
+            this.biContract = new BiContractDTO(biRiskInfoVo, quoteVo.getKindInfoVo());
+        }
+        this.submitReqBody = new SubmitReqBodyDTO();
     }
 
     @AllArgsConstructor
@@ -220,9 +229,9 @@ public class ChengTaiPremiumcaRequest implements Serializable {
         private String paymentmark;
         // end submit
 
-        public BusinessMainDTO(SaleInfoDTO saleInfoDTO, String planCode) {
-            this.operatorCode = saleInfoDTO.getUserCode();
-            this.operatorName = saleInfoDTO.getUserName();
+        public BusinessMainDTO(SaleInfoDTO saleInfoDTO, String planCode,String name) {
+            this.operatorCode = name;
+            this.operatorName = "太原天勤";
             this.operateDate = TimeProcessing.nowDate();
             this.issueDate = TimeProcessing.nowDateTime();
             this.inputDate = this.operateDate;
@@ -290,6 +299,10 @@ public class ChengTaiPremiumcaRequest implements Serializable {
         private String userCode;
         @JsonProperty("userName")
         private String userName;
+        @JsonProperty("riskBusinessType")
+        private String riskBusinessType;
+        @JsonProperty("riskBusinessTypeName")
+        private String riskBusinessTypeName;
 
         // start submit 添加的参数
         @JsonProperty("id")
@@ -458,7 +471,7 @@ public class ChengTaiPremiumcaRequest implements Serializable {
             // end 参数
 
             public PolicyCarDTO(CarInfoVo carInfoVo, CarDepreciationCalculator.DepreciationResult depreciationResult, ChengTaiFindCarModelResponse.DataDTO carModel, ChengTaiGetCIModelCodeResponse ciModelCode) {
-
+                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                 this.vhlInfoType = "1";
                 this.plateNo = carInfoVo.getLicenseNo();
                 this.vin = carInfoVo.getVinNo();
@@ -475,24 +488,24 @@ public class ChengTaiPremiumcaRequest implements Serializable {
                 this.carKindName = carInfoVo.getCarKindName();
                 this.useNatureCode = carInfoVo.getVehicleUseCode();
                 this.useNatureName = carInfoVo.getVehicleUseName();
-                this.attachNature = carInfoVo.getProperty();
+                this.attachNature = carInfoVo.getPropertyCode();
                 this.attachNatureName = carInfoVo.getPropertyName();
                 this.purchasePrice = Integer.valueOf(carModel.getPurchasepricenottax());
                 this.orignPurchasePrice = Integer.valueOf(carModel.getPurchasepricenottax());
                 this.actualValue = depreciationResult.getActualValue().toString();
                 this.consultValue = depreciationResult.getActualValue().toString();
                 this.plateType = carInfoVo.getLicenseColorCode();
-                this.plateTypeName = carInfoVo.getLicenseColorName();
+                this.plateTypeName = Optional.ofNullable(carInfoVo.getLicenseColorName()).orElse("小型汽车号牌");
                 this.vehicleType = carInfoVo.getCarTypeCode();
-                this.vehicleTypeName = carInfoVo.getCarTypeName();
+                this.vehicleTypeName = Optional.ofNullable(carInfoVo.getCarTypeName()).orElse("轿车");
                 this.energyTypes = carInfoVo.getEnergyTypeCode();
-                this.carCheckStatus = "";
-                this.carCheckerName = "";
-                this.carCheckTime = "";
+                this.carCheckStatus = "2";
+                this.carCheckerName = "李锴";
+                this.carCheckTime = format.format(new Date());
                 this.approvedPassengersCapacity = Integer.valueOf(carInfoVo.getSeatCount());
-                this.approvedLoad = Integer.valueOf("");
+                this.approvedLoad = 0;
                 this.power = carModel.getPower();
-                this.displacement = Integer.valueOf(carModel.getExhaustscale());
+                this.displacement = Integer.valueOf(carModel.getExhaustscale().replace(".0",""));
                 this.exhaustScaleUnit = "cc";
                 this.loanVehicleFlag = "0";
                 this.ecdemicVehicleFlag = "0";
@@ -504,7 +517,7 @@ public class ChengTaiPremiumcaRequest implements Serializable {
                 this.brand = carModel.getCarbrand();
                 this.shortHandCode = carModel.getShorthandcode();
                 this.vehicleKindCode = "V";
-                this.carName = ciModelCode.getCarName();
+                this.carName = Optional.ofNullable(ciModelCode.getCarName()).orElse(carModel.getModelcname());
                 this.monthDepRate = depreciationResult.getMonthDepRate();
                 this.matchCiModelCode = ciModelCode.getJyModelCode();
                 this.unladenMass = "";
@@ -610,6 +623,17 @@ public class ChengTaiPremiumcaRequest implements Serializable {
         @JsonProperty("comCode")
         private String comCode;
 
+        @JsonProperty("relationWithCar")
+        private String relationWithCar;
+
+        @JsonProperty("relationWithInsured")
+        private String relationWithInsured;
+
+        @JsonProperty("sameType")
+        private String sameType;
+
+
+
         // start submit 添加的参数
         @JsonProperty("id")
         private String id;
@@ -625,14 +649,14 @@ public class ChengTaiPremiumcaRequest implements Serializable {
             this.customerId = policyHolder.getCustomerId();
             this.name = policyHolder.getName();
             this.identifyTypeCode = policyHolder.getIdentifyTypeCode();
-            this.identifyTypeName = policyHolder.getIdentifyTypeName();
+            this.identifyTypeName = Optional.ofNullable(policyHolder.getIdentifyTypeName()).orElse("");
             this.identifyNumber = policyHolder.getIdentifyNumber();
             this.province = policyHolder.getProvince();
             this.city = policyHolder.getCity();
             this.district = policyHolder.getDistrict();
-            this.provinceName = policyHolder.getProvinceName();
-            this.cityName = policyHolder.getCityName();
-            this.districtName = policyHolder.getDistrictName();
+            this.provinceName = Optional.ofNullable(policyHolder.getProvinceName()).orElse("");
+            this.cityName = Optional.ofNullable(policyHolder.getCityName()).orElse("");
+            this.districtName = Optional.ofNullable(policyHolder.getDistrictName()).orElse("");
             this.addr = policyHolder.getAddr();
             this.completeAddress = policyHolder.getCompleteAddress();
             this.mobile = policyHolder.getMobile();
@@ -651,7 +675,9 @@ public class ChengTaiPremiumcaRequest implements Serializable {
             this.microBusinessesInd = policyHolder.getMicroBusinessesInd();
             this.signedbyOrig = "0";
             this.comCode = policyHolder.getComCode();
-
+            this.relationWithCar="1";
+            this.relationWithInsured="7";
+            this.sameType="1";
         }
     }
 
@@ -684,6 +710,9 @@ public class ChengTaiPremiumcaRequest implements Serializable {
         @JsonProperty("longTerm")
         private String longTerm;
 
+        @JsonProperty("sameType")
+        private String sameType;
+
         // start submit 添加的参数
         @JsonProperty("id")
         private String id;
@@ -697,7 +726,7 @@ public class ChengTaiPremiumcaRequest implements Serializable {
             this.role = "3";
             this.name = ownersInfo.getName();
             this.identifyTypeCode = ownersInfo.getIdentifyType();
-            this.identifyTypeName = ownersInfo.getIdentifyTypeName();
+            this.identifyTypeName = Optional.ofNullable(ownersInfo.getIdentifyTypeName()).orElse("居民身份证");
             this.identifyNumber = ownersInfo.getIdentifyNumber();
             this.sex = ownersInfo.getGender();
             this.age = ownersInfo.getAge();
@@ -705,6 +734,7 @@ public class ChengTaiPremiumcaRequest implements Serializable {
             this.identifyValidDate = ownersInfo.getIdentifyValidDate();
             this.identifyValidEndDate = ownersInfo.getIdentifyValidEndDate();
             this.longTerm = "0";
+            this.sameType = "1";
         }
     }
 
@@ -743,7 +773,7 @@ public class ChengTaiPremiumcaRequest implements Serializable {
 
 
             public ContractMainDTO(RiskInfoVo biRiskInfoVo) {
-                this.riskCode = riskCode;
+                this.riskCode = biRiskInfoVo.getRiskCode();
                 this.riskName = riskName;
                 this.validAtOnce = validAtOnce;
                 this.validDate = biRiskInfoVo.getStartDate();
@@ -834,6 +864,9 @@ public class ChengTaiPremiumcaRequest implements Serializable {
         @JsonProperty("tax")
         private TaxDTO tax;
 
+        @JsonProperty("platFormMessage")
+        private PlatFormMessageDTO platFormMessage;
+
         public CiContractDTO(RiskInfoVo ciRiskInfoVo, ChengTaiClientIdentifyResponse policyHolder) {
             this.contractMain = new ContractMainDTO(ciRiskInfoVo.getStartDate(), ciRiskInfoVo.getEndDate());
             this.coverage = CoverageDTO.getCoverage(ciRiskInfoVo.getStartDate(), ciRiskInfoVo.getEndDate());
@@ -957,6 +990,22 @@ public class ChengTaiPremiumcaRequest implements Serializable {
                 return List.of(coverageDTO);
             }
         }
+
+        @NoArgsConstructor
+        @Data
+        public static class PlatFormMessageDTO {
+            @JsonProperty("querySequenceNo")
+            private String querySequenceNo;
+            @JsonProperty("reinsuranceFlag")
+            private String reinsuranceFlag;
+            @JsonProperty("question")
+            private String question;
+            @JsonProperty("ciCarKind")
+            private String ciCarKind;
+            @JsonProperty("answer")
+            private String answer;
+        }
+
     }
 
     @NoArgsConstructor
@@ -1075,7 +1124,6 @@ public class ChengTaiPremiumcaRequest implements Serializable {
         }
     }
 
-    @NoArgsConstructor
     @Data
     public static class SubmitReqBodyDTO {
         @JsonProperty("businessType")
@@ -1110,6 +1158,13 @@ public class ChengTaiPremiumcaRequest implements Serializable {
 
         @JsonProperty("smscheckFlag")
         private String smscheckFlag;
+
+        public SubmitReqBodyDTO(){
+            this.businessType= "PROPOSAL";
+            this.acciRelatedFlag= "0";
+            this.mandatoryReviewFlag= false;
+            this.reinsuranceFlag= "0";
+        }
     }
 
     @NoArgsConstructor

+ 35 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/request/ChengTaiQueryCarInfoRequest.java

@@ -0,0 +1,35 @@
+package com.jzg.quotation.chengtai.crawler.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.io.Serial;
+
+@Data
+public class ChengTaiQueryCarInfoRequest {
+
+    @Serial
+    private static final long serialVersionUID = -1L;
+
+    @JsonProperty("comCode")
+    private String comCode;
+
+    @JsonProperty("plateNo")
+    private String plateNo;
+
+    @JsonProperty("plateNoType")
+    private String plateNoType;
+
+    @JsonProperty("vinCode")
+    private String vinCode;
+
+
+    public ChengTaiQueryCarInfoRequest(String comCode,String plateNo,String vinCode) {
+        this.comCode = comCode;
+        this.plateNo = plateNo;
+        this.plateNoType = "02";
+        this.vinCode = vinCode;
+    }
+
+
+}

+ 43 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/response/ChengTaiPremiumcaResponse.java

@@ -4,9 +4,11 @@ package com.jzg.quotation.chengtai.crawler.entity.response;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -83,6 +85,9 @@ public class ChengTaiPremiumcaResponse implements Serializable {
         @JsonProperty("adjust")
         private List<AdjustDTO> adjust;
 
+        @JsonProperty("accident")
+        private List<AccidentDTO> accident;
+
         @JsonProperty("tax")
         private TaxDTO tax;
 
@@ -139,6 +144,8 @@ public class ChengTaiPremiumcaResponse implements Serializable {
             private String expireDate;
             @JsonProperty("reinsuranceFlag")
             private String reinsuranceFlag;
+            @JsonProperty("question")
+            private String question;
             @JsonProperty("lastPolicyEffectiveDate")
             private String lastPolicyEffectiveDate;
             @JsonProperty("lastPolicyExpireDate")
@@ -149,6 +156,7 @@ public class ChengTaiPremiumcaResponse implements Serializable {
             private String claimaAdjustReason;
             @JsonProperty("claimaAdjustReasonName")
             private String claimaAdjustReasonName;
+
         }
 
         @NoArgsConstructor
@@ -246,6 +254,37 @@ public class ChengTaiPremiumcaResponse implements Serializable {
             @JsonProperty("policyId")
             private String policyId;
         }
+
+        @NoArgsConstructor
+        @Data
+        public static class AccidentDTO {
+
+            @JsonProperty("claimAmount")
+            private String claimAmount;
+
+            @JsonProperty("claimCloseTime")
+            private String claimCloseTime;
+
+            @JsonProperty("claimRegistrationNo")
+            private String claimRegistrationNo;
+
+            @JsonProperty("claimSequenceNo")
+            private String claimSequenceNo;
+
+            @JsonProperty("insurerCode")
+            private String insurerCode;
+
+            @JsonProperty("insurerName")
+            private String insurerName;
+
+            @JsonProperty("lossTime")
+            @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+            private Date lossTime;
+
+            @JsonProperty("policyNo")
+            private String policyNo;
+        }
+
     }
 
     @NoArgsConstructor
@@ -602,8 +641,12 @@ public class ChengTaiPremiumcaResponse implements Serializable {
             private String ruleSetName;
             @JsonProperty("riskCode")
             private String riskCode;
+            @JsonProperty("ruleId")
+            private String ruleId;
             @JsonProperty("finalRuleResult")
             private String finalRuleResult;
+            @JsonProperty("collegiateScenariosNam")
+            private String collegiateScenariosNam;
         }
     }
 

+ 109 - 0
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/entity/response/ChengTaiQueryCarInfoResponse.java

@@ -0,0 +1,109 @@
+package com.jzg.quotation.chengtai.crawler.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+public class ChengTaiQueryCarInfoResponse implements Serializable {
+
+    @JsonProperty("carModelList")
+    private List<CarModelListDTO> carModelList;
+
+    @NoArgsConstructor
+    @Data
+    public static class CarModelListDTO {
+        @JsonProperty("fullCarData")
+        private FullCarDataDTO fullCarData;
+        @JsonProperty("platformCarBean")
+        private PlatformCarBeanDTO platformCarBean;
+
+        @NoArgsConstructor
+        @Data
+        public static class FullCarDataDTO {
+            @JsonProperty("modelCode")
+            private String modelCode;
+            @JsonProperty("vehicleCode")
+            private String vehicleCode;
+            @JsonProperty("modelName")
+            private String modelName;
+            @JsonProperty("factory")
+            private String factory;
+            @JsonProperty("brand")
+            private String brand;
+            @JsonProperty("brandCode")
+            private String brandCode;
+            @JsonProperty("series")
+            private String series;
+            @JsonProperty("seriesCode")
+            private String seriesCode;
+            @JsonProperty("seriesType")
+            private String seriesType;
+            @JsonProperty("seriesName")
+            private String seriesName;
+            @JsonProperty("carKind")
+            private String carKind;
+            @JsonProperty("insCarClass")
+            private String insCarClass;
+            @JsonProperty("insCarClassName")
+            private String insCarClassName;
+            @JsonProperty("shortHandCode")
+            private String shortHandCode;
+            @JsonProperty("carYear")
+            private String carYear;
+            @JsonProperty("purchasePrice")
+            private Double purchasePrice;
+            @JsonProperty("purchasePriceTax")
+            private Double purchasePriceTax;
+            @JsonProperty("transmissionType")
+            private String transmissionType;
+            @JsonProperty("qualityMax")
+            private Double qualityMax;
+            @JsonProperty("qualityMin")
+            private Double qualityMin;
+            @JsonProperty("approvedPassengersCapacity")
+            private Double approvedPassengersCapacity;
+            @JsonProperty("displacement")
+            private Double displacement;
+            @JsonProperty("power")
+            private Double power;
+            @JsonProperty("unladenMass")
+            private Double unladenMass;
+            @JsonProperty("energyTypes")
+            private String energyTypes;
+            @JsonProperty("licenseNo")
+            private String licenseNo;
+            @JsonProperty("frameNo")
+            private String frameNo;
+            @JsonProperty("engineNo")
+            private String engineNo;
+            @JsonProperty("factoryCode")
+            private String factoryCode;
+            @JsonProperty("hfCode")
+            private String hfCode;
+            @JsonProperty("hfName")
+            private String hfName;
+            @JsonProperty("powerType")
+            private String powerType;
+            @JsonProperty("vehicleModel")
+            private String vehicleModel;
+            @JsonProperty("vehicleName")
+            private String vehicleName;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class PlatformCarBeanDTO {
+            @JsonProperty("modelCodeHX")
+            private String modelCodeHX;
+            @JsonProperty("carName")
+            private String carName;
+            @JsonProperty("noticeType")
+            private String noticeType;
+        }
+    }
+}

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

@@ -1,10 +1,12 @@
 package com.jzg.quotation.chengtai.crawler.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.jzg.commons.constants.quote.enums.base.ExpenseRequestUrl;
 import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.entity.quote.vo.identify.SliderCaptchaVo;
+import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.chengtai.api.entity.constants.enums.RiskCodeEnum;
 import com.jzg.quotation.chengtai.crawler.component.ChengTaiCrawlerCacheComponent;
@@ -75,12 +77,20 @@ public class ChengTaiCrawlerQuoteProcessServiceImpl implements ChengTaiCrawlerQu
         ChengTaiLoginRequest chengTaiLoginRequest = new ChengTaiLoginRequest(username, encrypt1, s);
         ChengTaiLoginResponse login = chengTaiRequestCrawlerComponent.login(chengTaiLoginRequest);
         System.out.println(login.getBody());
+        Integer code = login.getCode();
+        if (code==200) {
+            chengTaiCrawlerCacheComponent.cacheChengTaiLoginToken(login.getBody());
+        }else {
+            throw new SystemException(login.getMessage());
+        }
     }
 
     @Override
     public HttpHeaders getTokenHeaders(String username, String password) {
         HttpHeaders httpHeaders = new HttpHeaders();
-        httpHeaders.set("token", "eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE3NjA2ODgwMzYsImV4cCI6MTc2MDY5ODgzNiwicGF5bG9hZCI6IldkeHJsN3BjSjBYLWtObU9ZTGpxV3N2MVVXcGgwN2x4R01XUVcybGJldXJMalhKQWlua1kxTTNnVklGSkRsNkRGRFdiUXRmcFhNUTlNQjJYbEZoamJtdlBqLUxnLUUzMHA2UU9PNXdrWEFtUUNsLXAxMHVLN0dMMHFVSDA3MTJscl81NmJWeVhsdkptWnhIMG1WNEh4QXA2TmhpVVA3enJNbUpsUjdETEU5MmFGTnFFaEhTQlFzX2FwZGdFUzB4bkpSSmlwWDM2T1pnSGtrdVU1V0FEX29QT19lY2k4VkZrb3BZU3VqRFRBRHBCOHozWGlMZkp3YU5yZ0lSelo0UDNBRjZIUkNTZkt5Q2l4RkFLdWp4RC12UkJFVlcyTjM4cWdxM2kyZV9qTEZyZmI2STJxNktXV01wREllREg3WUM5aDFKNHpBekh5N3NpbklqMnRyV3ptOGFWWV9OMDZBMHR6eGI3UzFhVFN3a0ZMVEVGVnlnblp6cW9XZVdlT0NDZXlBN2RQMGFYZ3p3alNGUjNZVVRmT3RSUnF0V3VEc0o4SDg0enlxMlhkbjQ4Q2JyRnRLcTR6UmhNeWNkZUI5N2oifQ.Li9H1L5XHfEkEvRAFznkr4sx8ubi_1YHZVp7bwqSotLccuC-P1unariO_VU-gh6t0idicDkiKPExQLVf0vwxJA");
+        String chengTaiLoginToken = chengTaiCrawlerCacheComponent.getChengTaiLoginToken();
+//        httpHeaders.set("token",chengTaiLoginToken);
+        httpHeaders.set("token","eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE3NjQxNTM4MjUsImV4cCI6MTc2NDE2NDYyNSwicGF5bG9hZCI6IldkeHJsN3BjSjBYLWtObU9ZTGpxV3N2MVVXcGgwN2x4R01XUVcybGJldXJMalhKQWlua1kxTTNnVklGSkRsNkRGRFdiUXRmcFhNUTlNQjJYbEZoamJtdlBqLUxnLUUzMHA2UU9PNXdrWEFtUUNsLXAxMHVLN0dMMHFVSDA3MTJscl81NmJWeVhsdkptWnhIMG1WNEh4QXA2TmhpVVA3enJNbUpsUjdETEU5M0FkVmpFakhPcVZqc0YxSUhNTkY0SG1PUXZiQjQzNU92UUEtdVRxSHV5RGJaRnhEWjdiblMtUkRxUzBEUTFkcTlmVUplVFpaTmlseFhwblE2NFU5RHZDc2V2NTJXN0poVU5qR0luRUN5eVE2aW5zNDBoQzNGdFpieGh0UWtoRjlNclUxT1pmLVV4d0Iydzhpc1Z5NGdUZnZpNFJPQ3F3LU0xQmJGZ1hUVlNwY01qRnNNSU85QjlDREVKY0hZek5WdDM5SlhDUFVhWEw1bThwRmJXV3BxN0dzeHJHTlYtc2E4Tk9PYzEwS3UtUTJDeGxvb1JTMjhVdkRiMEpTZ29fZk8ybkVBU2ZzbGFmUEpYV190TzRsbHB3N1dIX1ZYRm4wY0R4VXF3eUxtY2Z3In0.ZmePMCAZyIGHHntYaqLIOV_UFvBMAcFxgznTLqzNJ28CmaVrDS21sgRVW-ahW5I_8UrO2n0JYJ3cCFFCtKHCdw");
         return httpHeaders;
     }
 
@@ -156,10 +166,23 @@ public class ChengTaiCrawlerQuoteProcessServiceImpl implements ChengTaiCrawlerQu
         // 交强险
         String riskCiCode = premiumca.getCiContract().getContractMain().getRiskCode();
         ChengTaiGetEngageListRequest.BusinessDataDTO.MainDTO mainDTOCi = getEngageList.getBusinessData().getMain();
-        mainDTOCi.setCombInd("3");
+        mainDTOCi.setCombInd("1");
         mainDTOCi.setRiskCode(riskCiCode);
+        mainDTOCi.setCarshipFlag(premiumca.getCiContract().getTax().getTaxConditionCode());
+        mainDTOCi.setCompanyCode(request.getBusinessMain().getIssueCompany());
         mainDTOCi.setSystemCode(request.getSaleInfo().getComCode());
         mainDTOCi.setSystemCode(request.getBusinessMain().getResourceType());
+        ChengTaiGetEngageListRequest.DynamicPlaceholderDTO dynamicPlaceholder = getEngageList.getDynamicPlaceholder();
+        dynamicPlaceholder.setEndDate(request.getCiContract().getContractMain().getExpiryDate() );
+        dynamicPlaceholder.setStartDate(request.getCiContract().getContractMain().getValidDate());
+        dynamicPlaceholder.setOwner(request.getInsured().getName());
+        dynamicPlaceholder.setPremiumNoTax(premiumca.getCiContract().getContractMain().getNoTaxPremium());
+        dynamicPlaceholder.setRealUseType(request.getInsuredObject().getPolicyCar().getUseNatureName());
+        dynamicPlaceholder.setTax(premiumca.getCiContract().getContractMain().getVat());
+        dynamicPlaceholder.setRelationWithCar("拥有");
+
+        Object jsona = JSONObject.toJSON(getEngageList);
+        System.out.println(jsona);
         List<ChengTaiGetEngageListResponse.ResponseBodyDTO.EngageListDTO> engageList = chengTaiRequestCrawlerComponent.getEngageList(getEngageList, httpHeaders);
         engageHash.put(riskCiCode, engageList);
 

+ 131 - 4
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/crawler/service/impl/ChengTaiCrawlerRequestImpl.java

@@ -1,10 +1,14 @@
 package com.jzg.quotation.chengtai.crawler.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
 import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
+import com.jzg.commons.entity.quote.vo.identify.ReinsuranceCaptchaVo;
 import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.quotation.chengtai.crawler.build.ChengTaiCrawlerQuoteResultsVoBuild;
@@ -21,6 +25,7 @@ import com.jzg.quotation.chengtai.crawler.utils.CarDepreciationCalculator;
 import com.jzg.quotation.chengtai.crawler.utils.ZipImageExample;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.constant.InsuranceCode;
+import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
 import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
 import com.jzg.quotation.commons.utils.TimeProcessing;
 import lombok.RequiredArgsConstructor;
@@ -39,10 +44,15 @@ public class ChengTaiCrawlerRequestImpl implements ChengTaiCrawlerRequest {
 
     private final ChengTaiCrawlerCacheComponent chengTaiCrawlerCacheComponent;
 
+    private final ExteriorUtilsRequest exteriorUtilsRequest;
+
+    private final static String USER_NAME = "0105B122";
+    private final static String PASS_WORD = "Tqct2025..";
+
     @Override
     public void login(LoginBase loginBase) {
         try {
-            chengTaiCrawlerQuoteProcessService.login(loginBase.getUsername(), loginBase.getUsername());
+            chengTaiCrawlerQuoteProcessService.login(loginBase.getUsername(), loginBase.getPassword());
         } catch (Exception ignored) {
             throw new SystemException("登录失败");
         }
@@ -50,6 +60,8 @@ public class ChengTaiCrawlerRequestImpl implements ChengTaiCrawlerRequest {
 
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) throws Exception {
+
+//        chengTaiCrawlerQuoteProcessService.login(USER_NAME, PASS_WORD);
         // 步骤一 获取token
         AttributionInformationVo attributionInformationVo = quoteVo.getOrder().getAttributionInformationVo();
         ChengTaiCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ChengTaiCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
@@ -58,7 +70,15 @@ public class ChengTaiCrawlerRequestImpl implements ChengTaiCrawlerRequest {
         // 步骤二 构建归属信息
         ChengTaiSaleInfoBo saleInfoBo = chengTaiCrawlerQuoteProcessService.buildClientIdentify(parameters, httpHeaders);
         // 步骤三 车型查询
+//        ChengTaiQueryCarInfoResponse.CarModelListDTO carModelList = chengTaiRequestCrawlerComponent.queryCarInfo(quoteVo.getCarInfoVo(),parameters, httpHeaders);
+//        ChengTaiQueryCarInfoResponse.CarModelListDTO.FullCarDataDTO fullCarData = carModelList.getFullCarData();
+//        String modelCode = fullCarData.getModelCode();
+
+//        ChengTaiFindCarModelResponse.DataDTO carModel1 = getCarModel(fullCarData);
+
+
         ChengTaiFindCarModelResponse.DataDTO carModel = chengTaiRequestCrawlerComponent.findCarModel(quoteVo.getCarInfoVo(), httpHeaders);
+
         ChengTaiGetCIModelCodeResponse ciModelCode = chengTaiRequestCrawlerComponent.getCIModelCode(carModel.getModelcode(), httpHeaders);
         // 步骤四 新车购置价
         CarDepreciationCalculator.DepreciationResult depreciationResult = chengTaiCrawlerQuoteProcessService.generateClaimableValue(quoteVo.getCarInfoVo(), carModel.getPurchasePrice());
@@ -73,8 +93,30 @@ public class ChengTaiCrawlerRequestImpl implements ChengTaiCrawlerRequest {
             insuredPerson = chengTaiRequestCrawlerComponent.clientIdentify(insuredPersonInfo, "2", saleInfoBo.getSaleInfo().getComCode(), httpHeaders);
         }
         // 步骤五 报价
-        ChengTaiPremiumcaRequest request = new ChengTaiPremiumcaRequest(quoteVo, carModel, policyHolder, insuredPerson, saleInfoBo, ciModelCode, depreciationResult);
+        ChengTaiPremiumcaRequest request = new ChengTaiPremiumcaRequest(quoteVo, carModel, policyHolder, insuredPerson, saleInfoBo, ciModelCode, depreciationResult, USER_NAME);
+        Object json = JSONObject.toJSON(request);
+        System.out.println(json);
         ChengTaiPremiumcaResponse premiumca = chengTaiRequestCrawlerComponent.premiumca(request, httpHeaders);
+        Object json1 = JSONObject.toJSON(premiumca);
+        System.out.println(json1);
+        ChengTaiPremiumcaResponse.CiContractDTO.PlatFormMessageDTO platFormMessage = premiumca.getCiContract().getPlatFormMessage();
+        if (platFormMessage != null) {
+            String question = platFormMessage.getQuestion();
+            if (question != null) {
+                String s = exteriorUtilsRequest.captchaIdentify(question);
+                ChengTaiPremiumcaRequest.CiContractDTO.PlatFormMessageDTO platFormMessageDTO = new ChengTaiPremiumcaRequest.CiContractDTO.PlatFormMessageDTO();
+                BeanUtil.copyProperties(platFormMessage, platFormMessageDTO);
+                platFormMessageDTO.setAnswer(s);
+                request.getCiContract().setPlatFormMessage(platFormMessageDTO);
+                Object jsons = JSONObject.toJSON(request);
+                System.out.println(jsons);
+                premiumca = chengTaiRequestCrawlerComponent.premiumca(request, httpHeaders);
+                Object jsona = JSONObject.toJSON(premiumca);
+                System.out.println(jsona);
+            }
+
+        }
+
         // 步骤六 获取特别约定
         Map<String, List<ChengTaiGetEngageListResponse.ResponseBodyDTO.EngageListDTO>> engageMap = chengTaiCrawlerQuoteProcessService.getEngageList(request, premiumca, httpHeaders);
         // 步骤七 保存订单
@@ -86,6 +128,84 @@ public class ChengTaiCrawlerRequestImpl implements ChengTaiCrawlerRequest {
         return ChengTaiCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo.getOrder().getOrdersNo(), premiumca);
     }
 
+    /**
+     * "modelcode": "RAD1040SHD",
+     * "modelcname": "斯柯达SVW71613RS轿车",
+     * "vehicleclass": "轿车类",
+     * "vehicleType": "其他",
+     * "factory": "上海大众汽车有限公司",
+     * "factoryid": "MK0650",
+     * "carbrand": "上汽大众斯柯达",
+     * "brandid": "SKA1",
+     * "familyname": "昕锐",
+     * "familycode": "SKA1AA",
+     * "purchaseprice": "73703",
+     * "analogymodelprice": "0",
+     * "purchasepricenottax": "67900",
+     * "analogymodelpricenottax": "0",
+     * "carstyle": "合资车",
+     * "syxclassid": "KA01",
+     * "syxclassname": "六座以下客车",
+     * "jqxclassid": "KA01",
+     * "cimodelclass": "六座以下客车",
+     * "shorthandcode": "SKD-SVW71613RS",
+     * "exhaustscale": "1598.0",
+     * "seatcount": "5",
+     * "caryear": "201509",
+     * "transmissionttype": "手动档",
+     * "remark": "手动档 前行版 国Ⅴ",
+     * "vehiclequalitymin": "1120",
+     * "validind": "1",
+     * "power": "81",
+     * "vehiclemodel": "SVW71613RS",
+     * "powertype": "汽油",
+     * "hfnamenew": "正常",
+     * "hfcodenew": "0",
+     * "fullweightmax": "1120",
+     * "fullweightmin": "1120",
+     * "updateVersion": "20210518163000"
+     */
+    private ChengTaiFindCarModelResponse.DataDTO getCarModel(ChengTaiQueryCarInfoResponse.CarModelListDTO.FullCarDataDTO fullCarData) {
+        ChengTaiFindCarModelResponse.DataDTO dataDTO = new ChengTaiFindCarModelResponse.DataDTO();
+        dataDTO.setModelcode(fullCarData.getModelCode());
+        dataDTO.setModelcname(fullCarData.getModelName());
+        dataDTO.setVehicleclass(fullCarData.getCarKind());
+        dataDTO.setVehicleType("其他");
+        dataDTO.setFactory(fullCarData.getFactory());
+        dataDTO.setFactoryid(fullCarData.getFactoryCode());
+        dataDTO.setCarbrand(fullCarData.getBrand());
+        dataDTO.setBrandid(fullCarData.getBrandCode());
+        dataDTO.setFamilyname(fullCarData.getSeries());
+        dataDTO.setFamilycode(fullCarData.getSeriesCode());
+        dataDTO.setPurchaseprice(fullCarData.getPurchasePrice().toString().replace(".0", ""));
+        dataDTO.setAnalogymodelprice("0");
+        dataDTO.setPurchasepricenottax(fullCarData.getPurchasePriceTax().toString().replace(".0", ""));
+        dataDTO.setAnalogymodelpricenottax("0");
+        dataDTO.setCarstyle(fullCarData.getSeriesName());
+        dataDTO.setSyxclassid(fullCarData.getInsCarClass());
+        dataDTO.setSyxclassname(fullCarData.getInsCarClassName());
+        dataDTO.setJqxclassid(fullCarData.getInsCarClass());
+        dataDTO.setCimodelclass(fullCarData.getInsCarClassName());
+        dataDTO.setShorthandcode(fullCarData.getShortHandCode());
+        dataDTO.setExhaustscale(fullCarData.getDisplacement().toString().replace(".0", ""));
+        dataDTO.setSeatcount(fullCarData.getApprovedPassengersCapacity().toString().replace(".0", ""));
+        dataDTO.setCaryear(fullCarData.getCarYear());
+        dataDTO.setTransmissionttype(fullCarData.getTransmissionType());
+        dataDTO.setRemark(fullCarData.getVehicleName());
+        dataDTO.setVehiclequalitymin(fullCarData.getUnladenMass().toString().replace(".0", ""));
+        dataDTO.setValidind("1");
+        dataDTO.setPower(fullCarData.getPower().toString().replace(".0", ""));
+        dataDTO.setVehiclemodel(fullCarData.getVehicleModel());
+        dataDTO.setPowertype(fullCarData.getPowerType());
+        dataDTO.setHfnamenew(fullCarData.getHfName());
+        dataDTO.setHfcodenew(fullCarData.getHfCode());
+        dataDTO.setFullweightmax(fullCarData.getQualityMax().toString().replace(".0", ""));
+        dataDTO.setFullweightmin(fullCarData.getQualityMin().toString().replace(".0", ""));
+        dataDTO.setUpdateVersion("");
+
+        return dataDTO;
+    }
+
     @Override
     public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) throws Exception {
         HttpHeaders httpHeaders = chengTaiCrawlerQuoteProcessService.getTokenHeaders(underwritingVo.getOrder().getAttributionInformationVo().getUsername(), underwritingVo.getOrder().getAttributionInformationVo().getPassword());
@@ -93,8 +213,15 @@ public class ChengTaiCrawlerRequestImpl implements ChengTaiCrawlerRequest {
         chengTaiUnderwritingRequest.getBusinessMain().setIssueDate(TimeProcessing.nowDate());
         // 提交核保
         ChengTaiSubmitResponse submit = chengTaiRequestCrawlerComponent.submit(chengTaiUnderwritingRequest, httpHeaders);
-
-        return new UnderwritingResultsVo();
+        UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
+        underwritingResultsVo.setPaymentLink("");
+        //核保结果
+        underwritingResultsVo.setUnderwritingResult("核保成功");
+        //核保状态
+        underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
+        //保司订单号
+        underwritingResultsVo.setCompanyOrderNo("");
+        return underwritingResultsVo;
     }
 
     @Override

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

@@ -2,6 +2,7 @@ package com.jzg.quotation.commons.component;
 
 
 import com.alibaba.fastjson2.JSON;
+import com.alibaba.nacos.api.remote.response.Response;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.quotation.commons.config.WebClientConfig;
 import com.jzg.quotation.commons.utils.RequestObjectConversion;
@@ -200,6 +201,15 @@ public class RequestComponent {
                 .block();
     }
 
+    public <Response> ResponseEntity<Response> chengTaiGet(String url, Object initDataRequest,ParameterizedTypeReference<Response> bodyTypeReference, HttpHeaders headers) {
+        return webClient.get()
+                .uri(url)
+                .headers(setHeaders(headers))
+                .retrieve()
+                .toEntity(bodyTypeReference)
+                .block();
+    }
+
     /**
      * @param url               请求地址
      * @param param             get 拼接对象
@@ -211,7 +221,7 @@ public class RequestComponent {
      */
     public <Response> Response get(String url, Map<String, Object> param, String description, ParameterizedTypeReference<Response> bodyTypeReference, HttpHeaders headers) {
         ResponseEntity<Response> responseEntity = webClient.get()
-                .uri(url, param)
+                .uri(url)
                 .headers(setHeaders(headers))
                 .retrieve()
                 .toEntity(bodyTypeReference)
@@ -242,6 +252,7 @@ public class RequestComponent {
         if (log.isDebugEnabled()) {
             log.debug("request body is {}", body);
         }
+        System.out.println("request body is {"+body+"}");
         body = Optional.ofNullable(body).orElse("");
         WebClient webClient = selectWebClient(url);
         try {
@@ -327,6 +338,17 @@ public class RequestComponent {
                 .block();
     }
 
+    public String basePostString(String url, Object body, HttpHeaders headers) {
+        String requestBody = JSON.toJSONString(body);
+        return webClient.post()
+                .uri(url)
+                .body(BodyInserters.fromValue(requestBody))
+                .headers(setHeaders(headers))
+                .retrieve()
+                .bodyToMono(String.class).doOnNext(responseBody -> System.out.println("响应内容: " + responseBody)) // 打印响应
+                .block();
+    }
+
 
     /**
      * @param url           请求地址
@@ -447,6 +469,21 @@ public class RequestComponent {
         return formData(url, multiValueMap, responseClass, headers);
     }
 
+
+    public <Response> ResponseEntity<Response> formData(String url, Object body, ParameterizedTypeReference<Response> bodyTypeReference, HttpHeaders headers) {
+        WebClient webClient = selectWebClient(url);
+        MultiValueMap<String, Object> multiValueMap = RequestObjectConversion.convertMultiValueMap(body);
+        return webClient.post()
+                .uri(url)
+                .headers(RequestComponent.setHeaders(headers))
+                .contentType(MediaType.APPLICATION_FORM_URLENCODED)
+                .body(BodyInserters.fromMultipartData(multiValueMap))
+                .retrieve()
+                .toEntity(bodyTypeReference).doOnNext(responseBody -> System.out.println("响应内容: " + responseBody.getBody()))
+                .block();
+
+    }
+
     /**
      * 下载文件处理
      *

+ 6 - 3
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/build/DaJiaAPIQuoteResultsVoBuild.java

@@ -37,7 +37,6 @@ public final class DaJiaAPIQuoteResultsVoBuild {
         // 商业险险种信息
         List<KindInfoVo> kindInfoVo = buildKindInfoVo(quoteVo.getKindInfoVo(), odr1009Response.getResult().getCoverageList());
         quoteResultsVo.setKindInfoVo(kindInfoVo);
-        quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.PAY_PENDING);
 
         //交强投保单号
         if (!Objects.isNull(odr1009Response.getResult().getBasePart().getJqProposalNo())) {
@@ -79,7 +78,9 @@ public final class DaJiaAPIQuoteResultsVoBuild {
             quoteResultsVo.getCosts().setCiPremium(odr1009Response.getResult().getBasePart().getJqPremium() + "");
             quoteResultsVo.getCosts().setVvTax(odr1009Response.getResult().getBasePart().getJqPremiumVat() + "");
             quoteResultsVo.getScoreVo().setJqScore(String.valueOf(odr1009Response.getResult().getRiskRatio().getJqPubScores()));
-            quoteResultsVo.getScoreVo().setJqLossRation(odr1009Response.getResult().getRiskRatio().getBillCTPELR().toString());
+            if(Objects.nonNull(odr1009Response.getResult().getRiskRatio().getBillCTPELR())) {
+                quoteResultsVo.getScoreVo().setJqLossRation(odr1009Response.getResult().getRiskRatio().getBillCTPELR().toString());
+            }
         }
 
         // 商业
@@ -91,7 +92,9 @@ public final class DaJiaAPIQuoteResultsVoBuild {
             quoteResultsVo.getScoreVo().setSyLossRation(odr1009Response.getResult().getRiskRatio().getBillCOMELR().toString());
         }
         //整单预期赔付率
-        quoteResultsVo.getScoreVo().setLossRation(odr1009Response.getResult().getRiskRatio().getBillELR().toString());
+        if(Objects.nonNull(odr1009Response.getResult().getRiskRatio().getBillCTPELR())) {
+            quoteResultsVo.getScoreVo().setLossRation(odr1009Response.getResult().getRiskRatio().getBillELR().toString());
+        }
 
         double jqPremium = 0;
         double syPremium = 0;

+ 9 - 3
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/compoment/DaJiaApiRequestComponent.java

@@ -45,17 +45,23 @@ public class DaJiaApiRequestComponent {
             ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST,  httpEntity, String.class);
             String body = response.getBody();
             System.out.println("\n\n---------> 响应参数:{"+body+"}");
-            B res = JSON.parseObject(body).toJavaObject(responseType);
             if(ObjectUtils.isEmpty(body)){
                 throw new SystemException("请求失败");
             }
             //统一处理错误
             JSONObject resultObj = JSON.parseObject(body);
             String code = resultObj.getString("code");
-            if(!"2000".equals(res.getStatus())) {
+            if(!"2000".equals(code)) {
                 throw new SystemException(resultObj.getString("message"));
             }
-            return res;
+            B b = JSON.parseObject(resultObj.getJSONObject("body").toJSONString(),responseType);
+//            if(!"0000".equals(b.getStatus())){
+//                throw new SystemException(b.getMessage());
+//            }
+            if (ObjectUtils.isEmpty(b)) {
+                throw new SystemException("请求失败");
+            }
+            return b;
         }catch (Exception e){
             System.out.println(e.getMessage());
             throw new SystemException(e.getMessage());

+ 0 - 38
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/constant/TypeVehicleMapping.java

@@ -1,38 +0,0 @@
-package com.jzg.quotation.dajia.api.constant;
-
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-@Getter
-@AllArgsConstructor
-public enum TypeVehicleMapping {
-
-    TM_01("01", "营业出租租赁", "364003001", "374007"),
-    TM_02("02", "营业城市公交", "364003002", "374008"),
-    TM_03("03", "营业公路客运", "364003003", "374009"),
-    TM_04("04", "营业货运", "364004002", "374010"),
-    TM_05("05", "家庭自用", "364001001", "374001"),
-    TM_06("06", "非营业机关", "364002001", "374003"),
-    TM_07("07", "非营业企业", "364002002", "374002"),
-    TM_08("08", "非营业货运", "364004001", "374005");
-
-    private final String code;
-
-    private final String desc;
-
-    // 交强
-    private final String cUsageCdeJq;
-
-    // 商业
-    private final String cUsageCdeSy;
-
-    public static String getByCode(String code){
-        for (TypeVehicleMapping typeVehicleMapping : values()) {
-            if (typeVehicleMapping.getCode().equals(code)) {
-                return typeVehicleMapping.getDesc();
-            }
-        }
-        return null;
-    }
-}

+ 6 - 0
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/entity/po/DaJiaApiOrder.java

@@ -24,6 +24,12 @@ public class DaJiaApiOrder {
      * 订单号
      */
     private String orderNo;
+
+    /**
+     * 订单号
+     */
+    private String serialNo;
+
     /**
      * 报价返回信息
      */

+ 7 - 7
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/entity/request/ODR1008Request.java

@@ -1,6 +1,7 @@
 package com.jzg.quotation.dajia.api.entity.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.commons.constants.quote.enums.quote.BiVehicleUseCode;
 import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
 import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.commons.util.StringUtils;
@@ -710,13 +711,12 @@ public class ODR1008Request extends DaJiaBaseRequest {
         RiskInfoVo biRiskInfoVo = quoteVo.getBiRiskInfoVo();
         //运营性质
         String vehicleUse = quoteVo.getCarInfoVo().getVehicleUseCode();
-        TypeVehicleMapping typeVehicleMapping = Enum.valueOf(TypeVehicleMapping.class, "TM_" + vehicleUse);
-        if (Objects.nonNull(ciRiskInfoVo)) {
-            vehicleInfoDTO.setVehicleUsageCde(typeVehicleMapping.getCUsageCdeSy());
-            vehicleInfoDTO.setVehicleTraUsageCde(Integer.valueOf(typeVehicleMapping.getCUsageCdeSy()));
-        }else if(Objects.nonNull(biRiskInfoVo)){
-            vehicleInfoDTO.setVehicleUsageCde(typeVehicleMapping.getCUsageCdeJq());
-            vehicleInfoDTO.setVehicleTraUsageCde(Integer.valueOf(typeVehicleMapping.getCUsageCdeJq()));
+        if (Objects.nonNull(biRiskInfoVo)) {
+            vehicleInfoDTO.setVehicleUsageCde(vehicleUse);
+            vehicleInfoDTO.setVehicleTraUsageCde(Integer.valueOf(vehicleUse));
+        }else if(Objects.nonNull(ciRiskInfoVo)){
+            vehicleInfoDTO.setVehicleUsageCde(BiVehicleUseCode.getByCode(vehicleUse));
+            vehicleInfoDTO.setVehicleTraUsageCde(Integer.valueOf(BiVehicleUseCode.getByCode(vehicleUse)));
         }
 
         //特殊风险标识

+ 4 - 0
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/entity/response/ODR1010Response.java

@@ -26,6 +26,10 @@ public class ODR1010Response extends DaJiaBaseResponse {
     @NoArgsConstructor
     @Data
     public static class BodyDTO {
+        @JsonProperty("status")
+        private String status;
+        @JsonProperty("message")
+        private String message;
         @JsonProperty("orderStatus")
         private String orderStatus;
         @JsonProperty("jqProposalNo")

+ 0 - 3
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/properties/DaJiaApiProperties.java

@@ -9,9 +9,6 @@ import org.springframework.stereotype.Component;
 @ConfigurationProperties(prefix = "dajia.api")
 public class DaJiaApiProperties {
 
-    // 请求地址
-    private String url;
-
     // 请求地址
     private String encryptKey;
 

+ 3 - 1
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/service/DaJiaApiOrderService.java

@@ -2,6 +2,7 @@ package com.jzg.quotation.dajia.api.service;
 
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.quotation.dajia.api.entity.po.DaJiaApiOrder;
+import com.jzg.quotation.dajia.api.entity.request.ODR1008Request;
 import com.jzg.quotation.dajia.api.entity.response.NVHLODR1001Response;
 import com.jzg.quotation.dajia.api.entity.response.ODR1009Response;
 
@@ -13,8 +14,9 @@ public interface DaJiaApiOrderService {
      * @param quoteVo             报价信息
      * @param odr1009Response     报价信息
      * @param nvhlodr1001Response
+     * @param odr1008Request
      */
-    void saveOrderInfo(QuoteVo quoteVo, ODR1009Response odr1009Response, NVHLODR1001Response nvhlodr1001Response);
+    void saveOrderInfo(QuoteVo quoteVo, ODR1009Response odr1009Response, NVHLODR1001Response nvhlodr1001Response, ODR1008Request odr1008Request);
 
     /**
      * 获取mongo中的订单信息

+ 3 - 2
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/service/impl/DaJiaApiOrderServiceImpl.java

@@ -3,6 +3,7 @@ package com.jzg.quotation.dajia.api.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.quotation.dajia.api.entity.po.DaJiaApiOrder;
+import com.jzg.quotation.dajia.api.entity.request.ODR1008Request;
 import com.jzg.quotation.dajia.api.entity.response.NVHLODR1001Response;
 import com.jzg.quotation.dajia.api.entity.response.ODR1009Response;
 import com.jzg.quotation.dajia.api.repository.DaJiaApiOrderRepository;
@@ -18,12 +19,12 @@ public class DaJiaApiOrderServiceImpl implements DaJiaApiOrderService {
 
     private final DaJiaApiOrderRepository daJiaApiOrderRepository;
     @Override
-    public void saveOrderInfo(QuoteVo quoteVo, ODR1009Response odr1009Response, NVHLODR1001Response nvhlodr1001Response) {
+    public void saveOrderInfo(QuoteVo quoteVo, ODR1009Response odr1009Response, NVHLODR1001Response nvhlodr1001Response, ODR1008Request odr1008Request) {
         // 存储信息
         DaJiaApiOrder daJiaApiOrder = new DaJiaApiOrder();
         daJiaApiOrder.setId(quoteVo.getOrder().getOrdersNo());
         daJiaApiOrder.setReptxt(JSON.toJSONString(odr1009Response));
-
+        daJiaApiOrder.setSerialNo(odr1008Request.getSerialNo());
         //交强投保单号
         if (!Objects.isNull(odr1009Response.getResult().getBasePart().getJqProposalNo())) {
             daJiaApiOrder.setCiPolicyNumber(odr1009Response.getResult().getBasePart().getJqProposalNo().toString());

+ 11 - 16
tenant/insurance/quotation-dajia/src/main/java/com/jzg/quotation/dajia/api/service/impl/DaJiaApiRequestImpl.java

@@ -70,7 +70,7 @@ public class DaJiaApiRequestImpl implements DaJiaApiRequest {
         OrderBase order = quoteVo.getOrder();
         AttributionInformationVo attributionInformationVo = order.getAttributionInformationVo();
         // 配置信息
-        String url = getApiUrl(order.getInsuranceCompanyId());
+        String url = getApiUrl(order.getInsuranceCompanyCode());
         DaJiaApiConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(DaJiaApiConfigureParameters.class,
                 attributionInformationVo.getConfigInfo());
         // 获取业务订单号
@@ -89,7 +89,8 @@ public class DaJiaApiRequestImpl implements DaJiaApiRequest {
         // 投保人信息
         CustomerInfoVo policyHolderInfo = quoteVo.getPolicyHolderInfo();
         PersonAreaVo policyHolderArea = new PersonAreaVo(policyHolderInfo);
-        ODR1008Response odr1008Response = confirmationVehicleCustomerInformation(orderNo, busiId, quoteVo, parameters, odr2009Response, ownerInfoArea, insuredPersonArea, policyHolderArea,url);
+        ODR1008Request odr1008Request = new ODR1008Request(orderNo, busiId, quoteVo, parameters, odr2009Response, ownerInfoArea, insuredPersonArea, policyHolderArea);
+        ODR1008Response odr1008Response = confirmationVehicleCustomerInformation(odr1008Request,url);
 
         // 车辆实际价值计算接口
         // 获取起保日期
@@ -110,7 +111,7 @@ public class DaJiaApiRequestImpl implements DaJiaApiRequest {
                 throw new SystemException("驾意险报价失败");
             }
         }
-        daJiaCrawlerOrderService.saveOrderInfo(quoteVo,odr1009Response,nvhlodr1001Response);
+        daJiaCrawlerOrderService.saveOrderInfo(quoteVo,odr1009Response,nvhlodr1001Response,odr1008Request);
         return DaJiaAPIQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo,odr1009Response,nvhlodr1001Response,orderNo);
     }
 
@@ -238,19 +239,9 @@ public class DaJiaApiRequestImpl implements DaJiaApiRequest {
 
     /**
      * 车辆与客户信息确认
-     * @param orderNo
-     * @param busiId
-     * @param quoteVo
-     * @param parameters
-     * @param odr2009Response
-     * @param ownerInfoArea
-     * @param insuredPersonArea
-     * @param policyHolderArea
      * @return
      */
-    private ODR1008Response confirmationVehicleCustomerInformation(String orderNo, String busiId, QuoteVo quoteVo, DaJiaApiConfigureParameters parameters, ODR2009Response odr2009Response, PersonAreaVo ownerInfoArea, PersonAreaVo insuredPersonArea, PersonAreaVo policyHolderArea,String url) {
-
-        ODR1008Request odr1008Request = new ODR1008Request(orderNo, busiId, quoteVo, parameters, odr2009Response, ownerInfoArea, insuredPersonArea, policyHolderArea);
+    private ODR1008Response confirmationVehicleCustomerInformation(ODR1008Request odr1008Request,String url) {
         ODR1008Response odr1008Response = daJiaApiRequestComponent.carOrCustomInfoConfirm(odr1008Request,url);
         AssertionUtils.isFail(!odr1008Response.getStatus().equals(Message.M0000.getCode()),"车辆与客户信息确认接口失败");
         //车辆与客户信息确认返回
@@ -281,7 +272,7 @@ public class DaJiaApiRequestImpl implements DaJiaApiRequest {
                 orderBase.getAttributionInformationVo().getConfigInfo());
         UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
         //1009返回数据
-        ODR1009Response.ResultDTO resultDTO = JSONObject.parseObject(JSON.toJSONString(daJiaApiOrder.getReptxt()), ODR1009Response.ResultDTO.class);
+        ODR1009Response odr1009Response  = JSON.parseObject(daJiaApiOrder.getReptxt()).toJavaObject(ODR1009Response.class);
         //驾意险 返回数据
         List<NVHLODR1001Response.policyInfosDTO> policyInfosDTOS = null;
         if (!Objects.isNull(daJiaApiOrder.getCrossInsurance())) {
@@ -289,7 +280,8 @@ public class DaJiaApiRequestImpl implements DaJiaApiRequest {
         }
 
         //核保构造request
-        ODR1010Request odr1010Request = new ODR1010Request(orderBase.getCompanyOrderNo(), parameters, resultDTO,underwritingVo);
+        ODR1010Request odr1010Request = new ODR1010Request(orderBase.getCompanyOrderNo(), parameters, odr1009Response.getResult(),underwritingVo);
+        odr1010Request.setSerialNo(daJiaApiOrder.getSerialNo());
         ODR1010Response odr1010Response = daJiaApiRequestComponent.underwriting(odr1010Request,url);
         if (odr1010Response.getStatus().equals(Message.M0000.getCode())) {
             if ("0".equals(odr1010Response.getResult().getJqAppStatus()) || "0".equals(odr1010Response.getResult().getSyAppStatus())) {
@@ -321,6 +313,9 @@ public class DaJiaApiRequestImpl implements DaJiaApiRequest {
                 underwritingResultsVo.setPaymentLink(paymentLinkResultsVo.getPaymentLink());
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
             }
+        }else{
+            underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
+            underwritingResultsVo.setUnderwritingResult("自核失败,原因:" + odr1010Response.getResult().getJqAppStatusMessage());
         }
         return underwritingResultsVo;
     }

+ 10 - 17
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/build/GuoRenApiQuoteResultsVoBuild.java

@@ -6,6 +6,7 @@ import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.quotation.guoren.api.constant.enums.GuoRenRiskCode;
+import com.jzg.quotation.guoren.api.entity.Response.NonAutoInsOrderResponse;
 import com.jzg.quotation.guoren.api.entity.Response.PremiumResponse;
 
 import java.util.List;
@@ -18,7 +19,7 @@ import java.util.stream.Collectors;
  * @date: 2025/3/17 10:33
  **/
 public class GuoRenApiQuoteResultsVoBuild {
-    public static QuoteResultsVo buildQuoteResultsVo(QuoteVo quoteVo, PremiumResponse premiumResponse) {
+    public static QuoteResultsVo buildQuoteResultsVo(QuoteVo quoteVo, PremiumResponse premiumResponse, NonAutoInsOrderResponse nonAutoInsOrderResponse) {
         QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
         quoteResultsVo.setOrdersNo(quoteVo.getOrder().getOrdersNo());
         // 交强险
@@ -31,7 +32,7 @@ public class GuoRenApiQuoteResultsVoBuild {
         quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.WAIT_AUDIT);
 
         // 交强保费 车船税 商业保费
-        buildPremium(quoteResultsVo, premiumResponse);
+        buildPremium(quoteResultsVo, premiumResponse,nonAutoInsOrderResponse);
         return quoteResultsVo;
     }
 
@@ -52,7 +53,7 @@ public class GuoRenApiQuoteResultsVoBuild {
     /**
      * 处理交强险数据
      * @param premiumResponse
-     * @return
+     * @return riskInfoVo
      */
     public static RiskInfoVo buildCiRiskInfoVo(PremiumResponse premiumResponse) {
         RiskInfoVo riskInfoVo = new RiskInfoVo();
@@ -89,15 +90,15 @@ public class GuoRenApiQuoteResultsVoBuild {
      * @param quoteResultsVo
      * @param premiumResponse
      */
-    private static void buildPremium(QuoteResultsVo quoteResultsVo, PremiumResponse premiumResponse) {
+    private static void buildPremium(QuoteResultsVo quoteResultsVo, PremiumResponse premiumResponse, NonAutoInsOrderResponse nonAutoInsOrderResponse) {
         // 设置交强险保费
-        quoteResultsVo.getCosts().setCiPremium(String.valueOf(premiumResponse.getData().getSumPremiumCI()));
+        quoteResultsVo.getCosts().setCiPremium(premiumResponse.getData().getSumPremiumCI() != null ? String.valueOf(premiumResponse.getData().getSumPremiumCI()) : "0.00");
         // 设置车船税
-        quoteResultsVo.getCosts().setVvTax(String.valueOf(premiumResponse.getData().getSumPayTax()));
+        quoteResultsVo.getCosts().setVvTax(premiumResponse.getData().getSumPayTax() != null ? String.valueOf(premiumResponse.getData().getSumPayTax()) : "0.00");
         // 设置商业险保费
-        quoteResultsVo.getCosts().setBiPremium(String.valueOf(premiumResponse.getData().getSumPremiumBI()));
-        // 设置非车险(驾意险)保费,暂时无数据
-
+        quoteResultsVo.getCosts().setBiPremium(premiumResponse.getData().getSumPremiumBI() != null ? String.valueOf(premiumResponse.getData().getSumPremiumBI()) : "0.00");
+        // 设置非车险保费,
+        quoteResultsVo.getCosts().setNiPremium(nonAutoInsOrderResponse != null ? String.valueOf(nonAutoInsOrderResponse.getData().getNoCarPremium()) : "0.00");
     }
 
     public static QuoteResultsVo buildQuoteFailResultsVo(PremiumResponse response) {
@@ -109,12 +110,4 @@ public class GuoRenApiQuoteResultsVoBuild {
         return quoteResultsVo;
     }
 
-    public static QuoteResultsVo buildQuoteSuccessResultsVo(PremiumResponse response) {
-        QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
-        // 报价失败提示
-        quoteResultsVo.setErrorMessage(response.getResultMsg());
-        quoteResultsVo.setQuoteStatus(InsOrderStatusEnum.QUOTE_FAIL.getCode());
-        return quoteResultsVo;
-    }
-
 }

+ 10 - 8
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/component/GuorenDuplicateInsuranceComponent.java

@@ -4,6 +4,9 @@ import cn.hutool.core.lang.Assert;
 //import cn.hutool.http.HttpRequest;
 //import cn.hutool.http.HttpResponse;
 //import cn.hutool.json.JSONUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.json.JSONUtil;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -246,14 +249,13 @@ public class GuorenDuplicateInsuranceComponent {
 
     public static String sendPost(String url,String bodyStr){
         System.err.println("请求[post、json、body]参数:"+bodyStr);
-//        HttpRequest request = HttpRequest.post(url)
-//                .header("Content-Type", "application/json")//以json的方式传递
+        HttpRequest request = HttpRequest.post(url)
+                .header("Content-Type", "application/json")//以json的方式传递
 ////     .header("authorization","Bearer abcdefghijklmnopqrstuvwxyz")
-//                .body(bodyStr);
+                .body(bodyStr);
 //
-//        HttpResponse response = request.execute();
-//        String respStr = response.body();
-        String respStr = "";
+        HttpResponse response = request.execute();
+        String respStr = response.body();
         System.err.println("返回[post、json、body]参数:"+ respStr);
 
         return respStr;
@@ -271,8 +273,8 @@ public class GuorenDuplicateInsuranceComponent {
         bodyMap.put("syImage", toString(syImageStr, ""));
         String sendBody = toJson(bodyMap);
         String ocrStr = sendPost("http://39.98.41.104:8088/getres", sendBody);
-//        return JSONUtil.toBean(ocrStr, CheckCodeResp.class);
-        return null;
+        System.out.println(JSONUtil.toBean(ocrStr, CheckCodeResp.class));
+        return JSONUtil.toBean(ocrStr, CheckCodeResp.class);
     }
 
 

+ 12 - 1
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/entity/GuoRenApiOrder.java

@@ -16,7 +16,7 @@ import java.math.BigDecimal;
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
-@Document("huatai.api.order")
+@Document("guoren.api.order")
 public class GuoRenApiOrder {
 
     @Id
@@ -52,6 +52,12 @@ public class GuoRenApiOrder {
      */
     private BigDecimal jqPremium;
 
+    /**
+     * 国任财险 车船税
+     */
+    private BigDecimal carTax;
+
+
     /**
      * 国任财险 交强险保单号
      */
@@ -62,6 +68,11 @@ public class GuoRenApiOrder {
      */
     private String syPolicyNo;
 
+    /**
+     * 非车订单号
+     */
+    private String noCarOrderNo;
+
     /**
      * 产品代码
      */

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

@@ -72,7 +72,7 @@ public class PayRequest {
         req.setRedirectUrl(redirectUrl);
         req.setComCode(parameters.getComCode());
         req.setVerificationCode("");
-        BigDecimal amount = guoRenApiOrder.getJqPremium().add(guoRenApiOrder.getSyPremium()).add(guoRenApiOrder.getJyPremium());
+        BigDecimal amount = guoRenApiOrder.getJqPremium().add(guoRenApiOrder.getSyPremium()).add(guoRenApiOrder.getJyPremium()).add(guoRenApiOrder.getCarTax());
         req.setAmount(amount.doubleValue());
         //产品标识  车+意必录:CA
 //        req.setProductCode();

+ 48 - 28
tenant/insurance/quotation-guoren/src/main/java/com/jzg/quotation/guoren/api/service/Impl/GuoRenApiRequestImpl.java

@@ -15,8 +15,6 @@ import com.jzg.commons.entity.quote.vo.AccidentalDrivingVo;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
-import com.jzg.commons.entity.vo.CompanyClauseVo;
-import com.jzg.commons.entity.vo.InsCompanyClauseVo;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.AssertionUtils;
 import com.jzg.commons.util.StringUtils;
@@ -32,7 +30,6 @@ import com.jzg.quotation.commons.utils.HttpUtil;
 import com.jzg.quotation.guoren.api.build.GuoRenApiQuoteResultsVoBuild;
 import com.jzg.quotation.guoren.api.component.GuoRenRequestApiComponent;
 import com.jzg.quotation.guoren.api.component.GuorenDuplicateInsuranceComponent;
-import com.jzg.quotation.guoren.api.constant.enums.GuoRenRiskCode;
 import com.jzg.quotation.guoren.api.constant.enums.PlatformInterfaceCode;
 import com.jzg.quotation.guoren.api.entity.GuoRenApiOrder;
 import com.jzg.quotation.guoren.api.entity.GuoRenConfigureParameters;
@@ -55,12 +52,10 @@ import org.springframework.util.ObjectUtils;
 
 import java.io.File;
 import java.io.FileOutputStream;
+import java.math.BigDecimal;
 import java.util.*;
-import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
-import static com.jzg.quotation.commons.constant.CacheConstant.GR_SPECIAL_AGREEMENT_KEY;
-import static com.jzg.quotation.commons.constant.CacheConstant.GR_SPECIAL_AGREEMENT_TIME;
 
 /**
  * description:
@@ -122,8 +117,9 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
         String noCarPremium = "";
         String goodsCode = "";
         GuoRenAccidentalDrivingVo accidentalDrivingVo = getGuoRenAccidentalDrivingVo(quoteVo.getAccidentalDrivings());
+        NonAutoInsOrderResponse nonAutoInsOrderResponse = null;
         if (accidentalDrivingVo.getProdCode() != null) {
-            NonAutoInsOrderResponse nonAutoInsOrderResponse = nonAutoInsOrder(quoteVo, accidentalDrivingVo,
+            nonAutoInsOrderResponse = nonAutoInsOrder(quoteVo, accidentalDrivingVo,
                     carPriceQuery.getInputvo(), parameters, vinQuery, url);
             AssertionUtils.isEmpty(nonAutoInsOrderResponse.getData(), nonAutoInsOrderResponse.getMessage());
             orderCode = nonAutoInsOrderResponse.getData().getOrderCode();
@@ -161,8 +157,13 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
             guoRenApiOrder.setProductsCode(orderBase.getProductId());
             guoRenApiOrder.setJqApplyNo(insuranceSlipResponse.getData().getProposalNoDetailVo().getProposalNoCI());
             guoRenApiOrder.setSyApplyNo(insuranceSlipResponse.getData().getProposalNoDetailVo().getProposalNoBI());
+            guoRenApiOrder.setJqPremium(premiumResponse.getData().getSumPremiumCI() != null ? BigDecimal.valueOf(premiumResponse.getData().getSumPremiumCI()) : BigDecimal.ZERO);
+            guoRenApiOrder.setSyPremium(premiumResponse.getData().getSumPremiumBI() != null ? BigDecimal.valueOf(premiumResponse.getData().getSumPremiumBI()) : BigDecimal.ZERO);
+            guoRenApiOrder.setJyPremium(new BigDecimal(jsPremium));
+            guoRenApiOrder.setCarTax(BigDecimal.valueOf(premiumResponse.getData().getSumPayTax()));
             guoRenApiOrder.setOthBusinessNo(carPriceQuery.getInputvo());
-            return handleSuccessQuote(guoRenApiOrder,quoteVo, premiumResponse);
+            guoRenApiOrder.setNoCarOrderNo(nonAutoInsOrderResponse != null ? nonAutoInsOrderResponse.getData().getOrderCode() : "");
+            return handleSuccessQuote(guoRenApiOrder,quoteVo, premiumResponse,nonAutoInsOrderResponse);
         }
     }
 
@@ -171,9 +172,9 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
         return GuoRenApiQuoteResultsVoBuild.buildQuoteFailResultsVo(response);
     }
 
-    private QuoteResultsVo handleSuccessQuote(GuoRenApiOrder guoRenApiOrder,QuoteVo quoteVo,PremiumResponse response) {
+    private QuoteResultsVo handleSuccessQuote(GuoRenApiOrder guoRenApiOrder,QuoteVo quoteVo,PremiumResponse response,NonAutoInsOrderResponse nonAutoInsOrderResponse) {
         guoRenApiOrderService.save(guoRenApiOrder);
-        return GuoRenApiQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo,response);
+        return GuoRenApiQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo,response,nonAutoInsOrderResponse);
     }
 
 
@@ -206,9 +207,8 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
         if (StringUtils.isNotEmpty(jqStatus) && StringUtils.isEmpty(syStatus)) {
             if (jqStatus.equals("1") || jqStatus.equals("3")) {
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
-                PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
-                paymentLinkVo.setOrder(underwritingVo.getOrder());
-                getPaymentLink(paymentLinkVo);
+                SignatureResponse signature = getSignature(guoRenApiOrder,url);
+                underwritingResultsVo.setPaymentLink(signature.getQrCode());
             } else if (jqStatus.equals("2")) {
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
                 underwritingResultsVo.setUnderwritingResult(message);
@@ -218,9 +218,9 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
         if (StringUtils.isEmpty(syStatus) && StringUtils.isNotEmpty(syStatus)) {
             if (syStatus.equals("1") || syStatus.equals("3")) {
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
-                PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
-                paymentLinkVo.setOrder(underwritingVo.getOrder());
-                getPaymentLink(paymentLinkVo);
+                SignatureResponse signature = getSignature(guoRenApiOrder,url);
+                underwritingResultsVo.setPaymentLink(signature.getQrCode());
+
             } else if (syStatus.equals("2")) {
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
                 underwritingResultsVo.setUnderwritingResult(message);
@@ -234,19 +234,25 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
                 underwritingResultsVo.setUnderwritingResult(message);
             } else if (jqStatus.equals("1") && syStatus.equals("1")) {
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
-                PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
-                paymentLinkVo.setOrder(underwritingVo.getOrder());
-                getPaymentLink(paymentLinkVo);
+                SignatureResponse signature = getSignature(guoRenApiOrder,url);
+                underwritingResultsVo.setPaymentLink(signature.getQrCode());
             } else if (jqStatus.equals("3") && syStatus.equals("3")) {
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
-                PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
-                paymentLinkVo.setOrder(underwritingVo.getOrder());
-                getPaymentLink(paymentLinkVo);
+                SignatureResponse signature = getSignature(guoRenApiOrder,url);
+                underwritingResultsVo.setPaymentLink(signature.getQrCode());
             }
         }
         return underwritingResultsVo;
     }
 
+    /**
+     * 通过二维码扫描获取电子投保单签名
+     */
+    public SignatureResponse getSignature(GuoRenApiOrder guoRenApiOrder,String url) {
+        return guoRenRequestApiComponent.signature(guoRenApiOrder,url);
+    }
+
+
     /**
      * 获取支付链接
      * @param paymentLinkVo
@@ -613,14 +619,17 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
         imageVoList.forEach(insuranceImageVo -> {
             List<String> imageIds = new ArrayList<>();
             for (InsuranceImageVo.ImageDTO imageDTO : insuranceImageVo.getImageBase64List()) {
-                String imageBase64Str = imageDTO.getImageBase64Str();
-                byte[] imageBytes = Base64.getDecoder().decode(imageBase64Str);
                 try {
                     //需要设置一个临时图片路径
-                    FileOutputStream fileOutputStream = new FileOutputStream("图片临时路径");
-                    fileOutputStream.write(imageBytes);
-                    fileOutputStream.close();
-                    FilePart file1 = new FilePart("file", new File("图片临时路径"));
+                    File tempFile = File.createTempFile("upload_temp_",  getFileSuffix(imageDTO.getImageName()));
+                    FilePart file1 = new FilePart("file", tempFile);
+                    tempFile.deleteOnExit();
+
+                    // 将字节数组写入临时文件
+                    try (FileOutputStream fos = new FileOutputStream(tempFile)) {
+                        fos.write(imageDTO.getImageByte());
+                        fos.flush();
+                    }
 
                     Part[] parts = {file1, new StringPart("businessNo", formMap.get("businessNo").toString()),
                             new StringPart("operatorCode",
@@ -652,4 +661,15 @@ public class GuoRenApiRequestImpl implements GuoRenApiRequest {
         insImagesUploadCacheComponent.setUploadImageCache(insuranceUploadImageVo.getOrder().getInsuranceCompanyCode(), map);
     }
 
+    /**
+     * 工具方法:从文件名中提取后缀(如 "test.txt" → "txt")
+     */
+    private static String getFileSuffix(String fileName) {
+        if (fileName.contains(".")) {
+            return fileName.substring(fileName.lastIndexOf("."));
+        }
+        return "bin"; // 默认后缀(二进制文件)
+    }
+
+
 }

+ 1 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/api/component/HuaTaiRequestApiComponent.java

@@ -99,6 +99,7 @@ public class HuaTaiRequestApiComponent {
         try {
             resAccessToken = RSAUtils.rsaDecrypt(encryptRes.getAccessToken(), properties.getSelfPrivateKey(), "UTF-8");
         } catch (Exception e) {
+            log.error("RSA解密获取accessToken失败!",e.getMessage());
             throw new SystemException("RSA解密获取accessToken失败!");
         }
         //2.用key解密出出参报文

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

@@ -351,7 +351,7 @@ public class HuaTaiQuotedPriceRequest extends HuaTaiBaseRequest {
 
                     this.plateType = "02";
                     this.property = "04";
-                    this.colorCode = null;
+                    this.colorCode = "01";
                     this.carCheckStatus = "2";
                     this.vehicleCondition = "0";
                     this.vehicleType = carInfoVo.getCarTypeCode();

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

@@ -198,7 +198,7 @@ public class HuaTaiSubmitRequest extends HuaTaiBaseRequest {
         private double totalPremium;
         //备注
         @JSONField(name = "remark")
-        private String remark;
+        private String remark = "自核通过";
 
         public ContractMainDto(RiskInfoVo riskInfoVo, HuaTaiApiOrder huaTaiApiOrder) {
             if (InsuranceRisk.TRAFFIC.getCode().equals(riskInfoVo.getRiskCode()) || HuaTaiRiskCode.R_1002.getCode().equals(riskInfoVo.getRiskCode())) {
@@ -437,6 +437,7 @@ public class HuaTaiSubmitRequest extends HuaTaiBaseRequest {
             this.identifyValidEndDate = customerInfoVo.getIdentifyValidEndDate() + " " + TimeConstants.START_TIME;
             this.addr = customerInfoVo.getAddr();
             this.email = "123@qq.com";
+            this.citizenshipCode = "CHN";
             if (StringUtils.isNotEmpty(customerInfoVo.getEmail())) {
                 this.email = customerInfoVo.getEmail();
             }

+ 85 - 71
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/api/service/Impl/HuaTaiApiRequestImpl.java

@@ -70,83 +70,90 @@ public class HuaTaiApiRequestImpl implements HuaTaiApiRequest {
      */
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) {
-        OrderBase orderBase = quoteVo.getOrder();
-        //配置信息
-        HuaTaiConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(HuaTaiConfigureParameters.class, orderBase.getAttributionInformationVo().getConfigInfo());
-        HuaTaiBaseRequestHead baseRequestHead = new HuaTaiBaseRequestHead(parameters);
-        String url = getApiUrl(orderBase.getInsuranceCompanyCode());
-
-        //查询车型
-        CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
-        HuaTaiModelsQueryRequest huaTaiModelsQueryRequest = new HuaTaiModelsQueryRequest(carInfoVo);
-        huaTaiModelsQueryRequest.setHead(baseRequestHead);
-        huaTaiModelsQueryRequest.setLoginCom(parameters.getComCode());
-        huaTaiModelsQueryRequest.setAgentCode(parameters.getAgentCode());
-        List<HuaTaiModelsQueryResponse.CarModelDto> carModelDtos = huataiRequestApiComponent.modelQuery(huaTaiModelsQueryRequest,
-                HuaTaiModelsQueryResponse.class, parameters.getInsuredCode(),url);
-        List<HuaTaiModelsQueryResponse.CarModelDto.FullCarDataDto> fullCarDataDtos = new ArrayList<>();
-        for (HuaTaiModelsQueryResponse.CarModelDto carModelDto : carModelDtos) {
-            fullCarDataDtos.add(carModelDto.getFullCarData());
-        }
-        // 2.2 过滤车型
-        HuaTaiModelsQueryResponse.CarModelDto.FullCarDataDto fullCarDataDto = CarModelsFilterUtils.to(fullCarDataDtos, carInfoVo);
-        //获取车辆实际价值
-        HuaTaiActualValueResponse actualValueResponse = null;
-        RiskInfoVo biRiskInfoVo = quoteVo.getBiRiskInfoVo();//商业险
-        if (biRiskInfoVo != null) {
+        try {
+            OrderBase orderBase = quoteVo.getOrder();
+            //配置信息
+            HuaTaiConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(HuaTaiConfigureParameters.class, orderBase.getAttributionInformationVo().getConfigInfo());
+            HuaTaiBaseRequestHead baseRequestHead = new HuaTaiBaseRequestHead(parameters);
+            String url = getApiUrl(orderBase.getInsuranceCompanyCode());
+
+            //查询车型
+            CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
+            HuaTaiModelsQueryRequest huaTaiModelsQueryRequest = new HuaTaiModelsQueryRequest(carInfoVo);
+            huaTaiModelsQueryRequest.setHead(baseRequestHead);
+            huaTaiModelsQueryRequest.setLoginCom(parameters.getComCode());
+            huaTaiModelsQueryRequest.setAgentCode(parameters.getAgentCode());
+            List<HuaTaiModelsQueryResponse.CarModelDto> carModelDtos = huataiRequestApiComponent.modelQuery(huaTaiModelsQueryRequest,
+                    HuaTaiModelsQueryResponse.class, parameters.getInsuredCode(), url);
+            List<HuaTaiModelsQueryResponse.CarModelDto.FullCarDataDto> fullCarDataDtos = new ArrayList<>();
+            for (HuaTaiModelsQueryResponse.CarModelDto carModelDto : carModelDtos) {
+                fullCarDataDtos.add(carModelDto.getFullCarData());
+            }
+            // 2.2 过滤车型
+            HuaTaiModelsQueryResponse.CarModelDto.FullCarDataDto fullCarDataDto = CarModelsFilterUtils.to(fullCarDataDtos, carInfoVo);
+            //获取车辆实际价值
+            HuaTaiActualValueResponse actualValueResponse = null;
+            RiskInfoVo biRiskInfoVo = quoteVo.getBiRiskInfoVo();//商业险
+            if (biRiskInfoVo != null) {
                 String startDate = biRiskInfoVo.getStartDate();
                 HuaTaiActualValueRequest huaTaiActualValueRequest = new HuaTaiActualValueRequest(carInfoVo, fullCarDataDto, startDate,
                         parameters.getComCode());
                 huaTaiActualValueRequest.setHead(baseRequestHead);
-                actualValueResponse = huataiRequestApiComponent.actualValue(huaTaiActualValueRequest, HuaTaiActualValueResponse.class, parameters.getInsuredCode(),url);
-        }
-        //组装报价参数
-        AccidentalDrivingVo accidentalDrivingVo = new AccidentalDrivingVo();
-        List<AccidentalDrivingVo> accidentalDrivings = quoteVo.getAccidentalDrivings();
-        if (CollectionUtil.isNotEmpty(accidentalDrivings)){
-             accidentalDrivingVo = accidentalDrivings.get(0);
-        }
+                actualValueResponse = huataiRequestApiComponent.actualValue(huaTaiActualValueRequest, HuaTaiActualValueResponse.class, parameters.getInsuredCode(), url);
+            }
+            //组装报价参数
+            AccidentalDrivingVo accidentalDrivingVo = new AccidentalDrivingVo();
+            List<AccidentalDrivingVo> accidentalDrivings = quoteVo.getAccidentalDrivings();
+            if (CollectionUtil.isNotEmpty(accidentalDrivings)) {
+                accidentalDrivingVo = accidentalDrivings.get(0);
+            }
 
-        HuaTaiQuotedPriceRequest quotedPriceRequest = new HuaTaiQuotedPriceRequest(quoteVo, fullCarDataDto, actualValueResponse,
-                accidentalDrivingVo, parameters);
-        quotedPriceRequest.setHead(baseRequestHead);
-        //调用报价接口
-        HuaTaiQuotedPriceResponse quotedPriceResponse = huataiRequestApiComponent.quotedPrice(quotedPriceRequest,
-                HuaTaiQuotedPriceResponse.class,  parameters.getInsuredCode(),url);
-        if (ObjectUtil.isNotNull(quotedPriceResponse) && !quotedPriceResponse.getHead().getReturnCode().equals("0")){
-            log.error("报价失败,返回信息:{}", quotedPriceResponse.getHead().getReturnMessage());
-            throw new SystemException("报价失败");
-        }
-        QuoteResultsVo quoteResultsVo = HuaTaiApiQuoteResultsVoBuild.buildQuoteResultsVo(orderBase.getOrdersNo(), quoteVo, quotedPriceResponse);
-        //数据保存到mongodb,后续接口需要的数据
-        HuaTaiApiOrder huaTaiApiOrder = new HuaTaiApiOrder();
-        huaTaiApiOrder.setCarInfo(carInfoVo);
-        huaTaiApiOrder.setOrdersNo(orderBase.getOrdersNo());
-        //设置商业险数据
-        HuaTaiQuotedPriceResponse.ContractDto biContractDto = HuaTaiApiQuoteResultsVoBuild.getBiContractDto(quotedPriceResponse);
-        if (ObjectUtil.isNotNull(biContractDto)){
-            huaTaiApiOrder.setSyQuerySequenceNo(biContractDto.getPlatFormMessage().getQuerySequenceNo());
-            huaTaiApiOrder.setSyApplyNo(biContractDto.getContractMain().getContractNo());
-            huaTaiApiOrder.setSyPremium(String.valueOf(biContractDto.getContractMain().getTotalPremium()));
+            HuaTaiQuotedPriceRequest quotedPriceRequest = new HuaTaiQuotedPriceRequest(quoteVo, fullCarDataDto, actualValueResponse,
+                    accidentalDrivingVo, parameters);
+            quotedPriceRequest.setHead(baseRequestHead);
+            //调用报价接口
+            HuaTaiQuotedPriceResponse quotedPriceResponse = huataiRequestApiComponent.quotedPrice(quotedPriceRequest,
+                    HuaTaiQuotedPriceResponse.class, parameters.getInsuredCode(), url);
+            if (ObjectUtil.isNotNull(quotedPriceResponse) && !quotedPriceResponse.getHead().getReturnCode().equals("0")) {
+                log.error("报价失败,返回信息:{}", quotedPriceResponse.getHead().getReturnMessage());
+                throw new SystemException("报价失败");
+            }else {
+                log.info("报价成功,返回信息:{}", JSONObject.toJSONString(quotedPriceResponse));
+            }
+            QuoteResultsVo quoteResultsVo = HuaTaiApiQuoteResultsVoBuild.buildQuoteResultsVo(orderBase.getOrdersNo(), quoteVo, quotedPriceResponse);
+            //数据保存到mongodb,后续接口需要的数据
+            HuaTaiApiOrder huaTaiApiOrder = new HuaTaiApiOrder();
+            huaTaiApiOrder.setCarInfo(carInfoVo);
+            huaTaiApiOrder.setOrdersNo(orderBase.getOrdersNo());
+            //设置商业险数据
+            HuaTaiQuotedPriceResponse.ContractDto biContractDto = HuaTaiApiQuoteResultsVoBuild.getBiContractDto(quotedPriceResponse);
+            if (ObjectUtil.isNotNull(biContractDto)) {
+                huaTaiApiOrder.setSyQuerySequenceNo(biContractDto.getPlatFormMessage().getQuerySequenceNo());
+                huaTaiApiOrder.setSyApplyNo(biContractDto.getContractMain().getContractNo());
+                huaTaiApiOrder.setSyPremium(String.valueOf(biContractDto.getContractMain().getTotalPremium()));
 
-        }
+            }
 
-        //设置交强险数据
-        HuaTaiQuotedPriceResponse.ContractDto ciContractDto = HuaTaiApiQuoteResultsVoBuild.getCiContractDto(quotedPriceResponse);
-        if (ObjectUtil.isNotNull(ciContractDto)){
-            huaTaiApiOrder.setJqQuerySequenceNo(ciContractDto.getPlatFormMessage().getQuerySequenceNo());
-            huaTaiApiOrder.setJqApplyNo(ciContractDto.getContractMain().getContractNo());
-            huaTaiApiOrder.setJqPremium(String.valueOf(ciContractDto.getContractMain().getTotalPremium()));
+            //设置交强险数据
+            HuaTaiQuotedPriceResponse.ContractDto ciContractDto = HuaTaiApiQuoteResultsVoBuild.getCiContractDto(quotedPriceResponse);
+            if (ObjectUtil.isNotNull(ciContractDto)) {
+                huaTaiApiOrder.setJqQuerySequenceNo(ciContractDto.getPlatFormMessage().getQuerySequenceNo());
+                huaTaiApiOrder.setJqApplyNo(ciContractDto.getContractMain().getContractNo());
+                huaTaiApiOrder.setJqPremium(String.valueOf(ciContractDto.getContractMain().getTotalPremium()));
+            }
+            huaTaiApiOrder.setOwnersInfo(quoteVo.getOwnersInfo());
+            huaTaiApiOrder.setPolicyHolderInfo(quoteVo.getPolicyHolderInfo());
+            huaTaiApiOrder.setInsuredPersonInfo(quoteVo.getInsuredPersonInfo());
+            huaTaiApiOrder.setCiRiskInfoVo(quoteVo.getCiRiskInfoVo());
+            huaTaiApiOrder.setBiRiskInfoVo(quoteVo.getBiRiskInfoVo());
+
+            HuaTaiApiOrder save = huaTaiApiOrderService.save(huaTaiApiOrder);
+            quoteResultsVo.setQuoteStatusEnum(StringUtils.isNotBlank(save.getId()) ? InsOrderStatusEnum.WAIT_AUDIT : InsOrderStatusEnum.QUOTE_FAIL);
+            return quoteResultsVo;
+        }catch (Exception e){
+            log.error("报价异常",e);
+            throw new SystemException("报价异常");
         }
-        huaTaiApiOrder.setOwnersInfo(quoteVo.getOwnersInfo());
-        huaTaiApiOrder.setPolicyHolderInfo(quoteVo.getPolicyHolderInfo());
-        huaTaiApiOrder.setInsuredPersonInfo(quoteVo.getInsuredPersonInfo());
-        huaTaiApiOrder.setCiRiskInfoVo(quoteVo.getCiRiskInfoVo());
-        huaTaiApiOrder.setBiRiskInfoVo(quoteVo.getBiRiskInfoVo());
-
-        HuaTaiApiOrder save = huaTaiApiOrderService.save(huaTaiApiOrder);
-        quoteResultsVo.setQuoteStatusEnum(StringUtils.isNotBlank(save.getId()) ? InsOrderStatusEnum.WAIT_AUDIT :InsOrderStatusEnum. QUOTE_FAIL);
-        return quoteResultsVo;
     }
 
     /**
@@ -183,6 +190,7 @@ public class HuaTaiApiRequestImpl implements HuaTaiApiRequest {
          */
         boolean haveJQFlag = false;
         boolean haveSYFlag = false;
+        String companyOrderNo = "";
         String jqStatus = "";
         String syStatus = "";
         StringBuffer jqNotion = new StringBuffer();
@@ -193,6 +201,7 @@ public class HuaTaiApiRequestImpl implements HuaTaiApiRequest {
                 haveJQFlag = true;
                 if (huaTaiApiOrder.getJqApplyNo().equals(appliResult.getContractNo())) {
                     jqStatus = appliResult.getStatus();
+                    companyOrderNo = appliResult.getContractNo();
                     for (HuaTaiSubmitResponse.Notion notion : appliResult.getNotion()) {
                         jqNotion.append(notion.getUWNotion() + "</br>");
                     }
@@ -202,6 +211,7 @@ public class HuaTaiApiRequestImpl implements HuaTaiApiRequest {
                 haveSYFlag = true;
                 if (huaTaiApiOrder.getSyApplyNo().equals(appliResult.getContractNo())) {
                     syStatus = appliResult.getStatus();
+                    companyOrderNo = appliResult.getContractNo();
                     for (HuaTaiSubmitResponse.Notion notion : appliResult.getNotion()) {
                         syNotion.append(notion.getUWNotion() + "</br>");
                     }
@@ -238,10 +248,14 @@ public class HuaTaiApiRequestImpl implements HuaTaiApiRequest {
             }
         }
         UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
+        underwritingResultsVo.setCompanyOrderNo(companyOrderNo);
         if ("4".equals(totalStatus)) {
             underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
             //再调用缴费接口获取缴费链接
-            //return getPaymentLink(insAreaCompany, huaTaiConfigureParameters);
+            PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
+            paymentLinkVo.setOrder(underwritingVo.getOrder());
+            PaymentLinkResultsVo paymentLink = getPaymentLink(paymentLinkVo);
+            underwritingResultsVo.setPaymentLink(paymentLink.getPaymentLink());
         } else if ("1".equals(totalStatus)) {
             //人工核保
             underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.STAFF_PROCESS);
@@ -300,7 +314,7 @@ public class HuaTaiApiRequestImpl implements HuaTaiApiRequest {
     public void uploadImage(InsuranceUploadImageVo insuranceUploadImageVo) {
         try {
             OrderBase orderBase = insuranceUploadImageVo.getOrder();
-            String url = orderBase.getInsuranceCompanyId();
+            String url = getApiUrl(orderBase.getInsuranceCompanyId());
             AttributionInformationVo attributionInformationVo = orderBase.getAttributionInformationVo();
             //配置信息
             HuaTaiConfigureParameters huaTaiParameters = ConfigureParametersConversion.conversionEntity(HuaTaiConfigureParameters.class, attributionInformationVo.getConfigInfo());

+ 18 - 11
tenant/insurance/quotation-summary/pom.xml

@@ -29,11 +29,7 @@
 <!--            <artifactId>quotation-zhongmei</artifactId>-->
 <!--            <version>1.0-SNAPSHOT</version>-->
 <!--        </dependency>-->
-<!--        <dependency>-->
-<!--            <groupId>com.jzg</groupId>-->
-<!--            <artifactId>quotation-zijin</artifactId>-->
-<!--            <version>1.0-SNAPSHOT</version>-->
-<!--        </dependency>-->
+
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-redis</artifactId>
@@ -43,6 +39,7 @@
             <groupId>com.jzg</groupId>
             <artifactId>quotation-zhongmei</artifactId>
             <version>1.0-SNAPSHOT</version>
+            <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>com.jzg</groupId>
@@ -73,11 +70,12 @@
             <version>1.0-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
-        <dependency>
-            <groupId>com.jzg</groupId>
-            <artifactId>quotation-taikang</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>com.jzg</groupId>-->
+<!--            <artifactId>quotation-taikang</artifactId>-->
+<!--            <version>1.0-SNAPSHOT</version>-->
+<!--            <scope>compile</scope>-->
+<!--        </dependency>-->
         <dependency>
             <groupId>com.jzg</groupId>
             <artifactId>quotation-guoren</artifactId>
@@ -102,20 +100,29 @@
             <version>1.0-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.jzg</groupId>
+            <artifactId>quotation-zijin</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
         <dependency>
             <groupId>com.jzg</groupId>
             <artifactId>quotation-hengbang</artifactId>
             <version>1.0-SNAPSHOT</version>
+            <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>com.jzg</groupId>
             <artifactId>quotation-ansheng</artifactId>
             <version>1.0-SNAPSHOT</version>
+            <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>com.jzg</groupId>
             <artifactId>quotation-zhongan</artifactId>
             <version>1.0-SNAPSHOT</version>
+            <scope>compile</scope>
         </dependency>
 
         <!-- thymeleaf 模版类 -->
@@ -181,4 +188,4 @@
         </plugins>
     </build>
 
-</project>
+</project>

+ 6 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java

@@ -740,6 +740,9 @@ public class QuoteVerificationAspect {
      * 转换百分比为小数
      */
     private BigDecimal convertPercent(BigDecimal percent) {
+        if (percent == null) {
+            return BigDecimal.ZERO;
+        }
         return percent.divide(BigDecimal.valueOf(100), 10, RoundingMode.HALF_EVEN);
     }
 
@@ -760,6 +763,9 @@ public class QuoteVerificationAspect {
         if (costType == null) {
             return BigDecimal.ZERO;
         }
+        if (entranceFeeRatio == null) {
+            return BigDecimal.ZERO;
+        }
         BigDecimal inletPercent = convertPercent(costType.getInlet());
         return inletPercent.subtract(entranceFeeRatio);
     }

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

@@ -7,6 +7,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.jzg.commons.constants.CompanyConstants;
 import com.jzg.commons.constants.InsuranceRisk;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
+import com.jzg.commons.constants.quote.enums.base.QuoteRuleCategory;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.base.StateResult;
 import com.jzg.commons.core.page.HttpResult;
@@ -19,27 +20,24 @@ import com.jzg.commons.entity.po.SysUploadFiles;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
+import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
 import com.jzg.commons.entity.quote.vo.underwriting.SpecialAppointmentsVo;
-import com.jzg.commons.entity.vo.InsCompanyClauseVo;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.exception.TokenExpireException;
 import com.jzg.commons.util.AssertionUtils;
 import com.jzg.commons.util.MinioUtils;
 import com.jzg.quotation.commons.client.OrgClient;
 import com.jzg.quotation.commons.client.PlatformClient;
-import com.jzg.commons.constants.quote.enums.base.QuoteRuleCategory;
-import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
 import com.jzg.quotation.commons.service.QuotationBaseService;
 import com.jzg.quotation.commons.utils.SnowFlakeUtil;
 import com.jzg.quotation.hengbang.crawler.service.HengBangCrawlerRequest;
-import com.jzg.quotation.summary.aop.QuoteVerification;
 import com.jzg.quotation.summary.aop.OrderOperationLog;
-import com.jzg.quotation.summary.constants.QuoteNumberConstant;
+import com.jzg.quotation.summary.aop.QuoteVerification;
 import com.jzg.quotation.summary.classifier.QuoteInfoParameterFilling;
+import com.jzg.quotation.summary.constants.QuoteNumberConstant;
 import com.jzg.quotation.summary.converter.QuoteInfoConverter;
 import com.jzg.quotation.summary.entity.po.QuoteRuleMapping;
 import com.jzg.quotation.summary.factory.CompanyFactory;
-import com.jzg.quotation.summary.mapper.InsOrdersCarUserInfoMapper;
 import com.jzg.quotation.summary.mapper.SysUploadFilesMapper;
 import com.jzg.quotation.summary.service.*;
 import com.jzg.quotation.summary.state.listener.OrderStateListener;
@@ -48,7 +46,6 @@ import io.minio.MinioClient;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
 import jakarta.servlet.http.HttpServletRequest;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -267,7 +264,7 @@ public class UnifyOrderManager {
             throw new SystemException(root.getMessage());
         }
         return quoteResultsVo.getQuoteStatusEnum()
-                .equals(InsOrderStatusEnum.WAIT_AUDIT) ? HttpResult.ok(quoteResultsVo) : HttpResult.error(quoteResultsVo.getErrorMessage());
+                .equals(InsOrderStatusEnum.WAIT_AUDIT) ? HttpResult.ok(quoteResultsVo) : HttpResult.error(500,quoteResultsVo,quoteResultsVo.getErrorMessage());
     }
 
 
@@ -485,7 +482,7 @@ public class UnifyOrderManager {
         InsOrdersPdfUrl insOrdersPdfUrl = insOrdersPdfUrlService.getPdfUrlByOrderNo(insOrders.getId());
         AssertionUtils.isFail(Objects.isNull(insOrders), "订单不存在");
         downloadPolicyVo.getOrder().setApiType(Integer.parseInt(insOrders.getApiType()));
-        downloadPolicyVo.getOrder().setInsuranceCompanyCode(insOrders.getCompanyId());
+        downloadPolicyVo.getOrder().setInsuranceCompanyId(insOrders.getCompanyId());
         QuotationBaseService downloadPolicyService = companyFactory.getDownloadPolicyService(downloadPolicyVo, insOrders);
 
         //如果pdf 查不到数据 就去下载

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

@@ -1105,14 +1105,14 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         insOrdersPolicyService.updateById(insOrdersPolicy);
 
         //更新支付连接
-        if(orderStatusResultVo.getOrderStatus().equals(InsOrderStatusEnum.PAY_PENDING)) {
+        if(orderStatusResultVo.getOrderStatus().getStatus().equals(InsOrderStatusEnum.PAY_PENDING)) {
             insOrders.setPayLink(orderStatusResultVo.getPaymentLink());
             insOrders.setPayTime(LocalDateTime.now());
             // 发送订单状态变更消息
             this.orderStatusMessage(insOrders,
                     insOrdersCarInfo,costs,
                     baseController.getToken(), MessageCodeEnum.TEMPLATE_5);
-        } else if(orderStatusResultVo.getOrderStatus().equals(InsOrderStatusEnum.UNDERWRITED)){
+        } else if(orderStatusResultVo.getOrderStatus().getStatus().equals(InsOrderStatusEnum.UNDERWRITED)){
             // 增加财务审核
             insFeeAuditService.feeAuditAdd(insOrders);
             // 发送订单状态变更消息

+ 9 - 8
tenant/insurance/quotation-summary/src/main/resources/application-dev.yaml

@@ -42,8 +42,8 @@ image:
 
 # 支付码相关配置
 qrcode:
-  genAddress: https://192.168.0.250:8001/order/qrCode/index
-  imageSrc: https://192.168.0.250:8001/template/
+  genAddress: http://192.168.0.250:8001/order/qrCode/index
+  imageSrc: http://192.168.0.250:8001/template/
 
 
 yc:
@@ -75,17 +75,18 @@ yangguang:
 #诚泰财险api
 chengtai:
   api:
-    baseUrl: http://39.98.238.167/chengtai/app/SERVER_V2/4001/
-    ctPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvuUnoPTFin84nDdpNZFDiGZgUKn6d9fbp6F4/fqrb6pFoJX/wLMr0IsheP0ZnVCPpLGKLjflPNHJo/P9WRRTSM67D8fRD8GKoq+7CtSJkdIticASpN/U8AgJiNV6xdReJcMkaAWJ1ZbOQ+nYLg9OE0qQ6cuXqhy/wVrqx72CrvwIDAQAB
-    publicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCyVlpqmibguria884GdAYEuqCV4aQRl2N21+7l8Vxocoyz+M8KYyXqmlLKqApNL/U5pUVTjS6vpC6ojS+wvNbawijeMsm8r2NOlTHBnQ5vN0azjjPPtSrxgHL8/EYBa4lmBcexdmcUrUyWjAIYqfO8dlY+RuXvbiw7fBHZ7xpAvQIDAQAB
-    privateKey: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALJWWmqaJuC6uJrzzgZ0BgS6oJXhpBGXY3bX7uXxXGhyjLP4zwpjJeqaUsqoCk0v9TmlRVONLq+kLqiNL7C81trCKN4yybyvY06VMcGdDm83RrOOM8+1KvGAcvz8RgFriWYFx7F2ZxStTJaMAhip87x2Vj5G5e9uLDt8EdnvGkC9AgMBAAECgYEAsEOHdEvOV1pWMdj9bgVpGW14YQu3RSfTSFheqGkpg5aMmSk3QbYDeOB1KhZysB3Ri9tdLRqi5TkqYK/DTjUnSUMs0iMhx0XaY2z3w16AMpvuJ0FZ4S2h8oAFfOWe4F6bpUYU8qmXANAaXcMm6HjU8k1QuTbjlSOeLujl8W7zk8ECQQDlHbUQ911kWmsSo8NE4S1+dq/6T+yIGCJlXzlNh/z6giMpjp8Dzm3fxDHLeZa+DCrhpT1qe6O3oGwx3HeR/85NAkEAx0NUy6pX5WolV+YAoLNHAmcCP26wQTB7LZ7mXbxww4yNNH9CWHE9PaBuV4Ws4NxSAnRDxrgArkz5+wgqnXzUMQJAHr16orkdra43+XtBYsd3jCUufT4l9SiPzNwW2yEovw+g2h2JlkAnG8O+DpfUstD9G+NItzW5hJSgj5wN6ufQbQJACEtdND0a+4m3lDkWvZm40vjGty08WPpTpkp+/FfjucAYAJ9re5L7IZ2T+kCuOY3yO/fq+lKedKLvpOtqGrQfgQJBAJ1wMccz+1ez8qpyTWbzj2h0O+GV+YDHqJ9SwRWcSacZOeAyO7UMgIZEwoYfs4nhye7DZH9e4BfkwBmFHJKwJNs=
+#    ctPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvuUnoPTFin84nDdpNZFDiGZgUKn6d9fbp6F4/fqrb6pFoJX/wLMr0IsheP0ZnVCPpLGKLjflPNHJo/P9WRRTSM67D8fRD8GKoq+7CtSJkdIticASpN/U8AgJiNV6xdReJcMkaAWJ1ZbOQ+nYLg9OE0qQ6cuXqhy/wVrqx72CrvwIDAQAB
+#    publicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCyVlpqmibguria884GdAYEuqCV4aQRl2N21+7l8Vxocoyz+M8KYyXqmlLKqApNL/U5pUVTjS6vpC6ojS+wvNbawijeMsm8r2NOlTHBnQ5vN0azjjPPtSrxgHL8/EYBa4lmBcexdmcUrUyWjAIYqfO8dlY+RuXvbiw7fBHZ7xpAvQIDAQAB
+#    privateKey: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALJWWmqaJuC6uJrzzgZ0BgS6oJXhpBGXY3bX7uXxXGhyjLP4zwpjJeqaUsqoCk0v9TmlRVONLq+kLqiNL7C81trCKN4yybyvY06VMcGdDm83RrOOM8+1KvGAcvz8RgFriWYFx7F2ZxStTJaMAhip87x2Vj5G5e9uLDt8EdnvGkC9AgMBAAECgYEAsEOHdEvOV1pWMdj9bgVpGW14YQu3RSfTSFheqGkpg5aMmSk3QbYDeOB1KhZysB3Ri9tdLRqi5TkqYK/DTjUnSUMs0iMhx0XaY2z3w16AMpvuJ0FZ4S2h8oAFfOWe4F6bpUYU8qmXANAaXcMm6HjU8k1QuTbjlSOeLujl8W7zk8ECQQDlHbUQ911kWmsSo8NE4S1+dq/6T+yIGCJlXzlNh/z6giMpjp8Dzm3fxDHLeZa+DCrhpT1qe6O3oGwx3HeR/85NAkEAx0NUy6pX5WolV+YAoLNHAmcCP26wQTB7LZ7mXbxww4yNNH9CWHE9PaBuV4Ws4NxSAnRDxrgArkz5+wgqnXzUMQJAHr16orkdra43+XtBYsd3jCUufT4l9SiPzNwW2yEovw+g2h2JlkAnG8O+DpfUstD9G+NItzW5hJSgj5wN6ufQbQJACEtdND0a+4m3lDkWvZm40vjGty08WPpTpkp+/FfjucAYAJ9re5L7IZ2T+kCuOY3yO/fq+lKedKLvpOtqGrQfgQJBAJ1wMccz+1ez8qpyTWbzj2h0O+GV+YDHqJ9SwRWcSacZOeAyO7UMgIZEwoYfs4nhye7DZH9e4BfkwBmFHJKwJNs=
+    ctPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSsdhdXaBshYpHRc0mBWugsecv7U7OMmNNNrToXoAE789dfWZ8Im/YBwaB0JEYC55sDVr3pZeIoLLlDlD8IosYJGulQcUrlga5sZ6BjBsfvW+KtoU4H5krR7eKX4dGCHX2qGH9eHJRU1Y7jGhOwjxDvEBHwRlY2Ur/gD2vBcJT8wIDAQAB
+    publicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDG5XjPzLv7/LwXmDkSS2kL4JN3B9JK6mRDxgal+K7f5GY2c3TRXSIm2ot+2ZL2Tr4nSJEkZUe98ORovYnpvgeW16MFhPAkUYHVu3rv6JKuGrJhdvkfNC/TR92oey8/Qk0YwSeOzHEf1tEfMvnE3pC8xZom4Et2W9y62+RoH22uhQIDAQAB
+    privateKey: MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAMbleM/Mu/v8vBeYORJLaQvgk3cH0krqZEPGBqX4rt/kZjZzdNFdIibai37ZkvZOvidIkSRlR73w5Gi9iem+B5bXowWE8CRRgdW7eu/okq4asmF2+R80L9NH3ah7Lz9CTRjBJ47McR/W0R8y+cTekLzFmibgS3Zb3Lrb5Ggfba6FAgMBAAECgYByDbKajo+Zr1L4wLyxZfbl7bECR8TqWsCGMK8tS46UKvgF720khaCI4Teu1Ps2LO9TvYQld8KNA+8mtNG57NOSQx3aaI/sH3XAsWExnNupSHs3/O0m91KMCrVfhDakpW+eXu9+BTyOQeHt5e+0R6hsUZ5OPhwOGoxBlNRWqQruXQJBAPlY2r994Yq37HV0WFofIKtRqDz5mGoL7iENZ7/TB64Qe6kbLBnq0Qha6TxyudlISYSGMzIHxqZ/gClDy5VQTUsCQQDMNASRJ9CuNkgTF/LswRJQmtVG9djzwD2W5r6QqWy7cBDOB9eenAAjmmP8R43edPdrYDuqpuvjUK5ISxkDAKFvAkAuGPM3+7m6v44DmOLMpnyPr6T+wNYgpNv9WFEZ8ZW15G44MUHR+Mt0U/pSppMdTHPrADRux2k+VswG1PXKQPJJAkAZScfXAgtBx88dLjYTQ8W03bfT1dZMOV5nNaQb3h9tBu/N1ALLzZ3mytPfBi13gxyw23YIKCvGNtOeeE5cpNNZAkBRsB9I6yogNDdYQHNiPpk+M5t043LbI+v+KAwUWqkkt81PJOqzrbxtySPmRxlAZI9flXQD5eRTvkHZWPnM/2/b
     partnerCode: JZG_TYTQ_SX
 
 #大家财险api
 dajia:
   api:
-    url: https://open-ics.djbx.com/dip-agent/agent/invokeForVchicle/api/
-    encryptKey: "By92YPLvG89XyFqv"
+    encryptKey: "qwertyuiopasdfgh"
 
 
 #国任财险测试api

+ 0 - 2
tenant/insurance/quotation-summary/src/main/resources/application-test.yaml

@@ -75,7 +75,6 @@ yangguang:
 #诚泰财险api
 chengtai:
   api:
-    baseUrl: http://39.98.238.167/chengtai/app/SERVER_V2/4001/
     ctPublicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvuUnoPTFin84nDdpNZFDiGZgUKn6d9fbp6F4/fqrb6pFoJX/wLMr0IsheP0ZnVCPpLGKLjflPNHJo/P9WRRTSM67D8fRD8GKoq+7CtSJkdIticASpN/U8AgJiNV6xdReJcMkaAWJ1ZbOQ+nYLg9OE0qQ6cuXqhy/wVrqx72CrvwIDAQAB
     publicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCyVlpqmibguria884GdAYEuqCV4aQRl2N21+7l8Vxocoyz+M8KYyXqmlLKqApNL/U5pUVTjS6vpC6ojS+wvNbawijeMsm8r2NOlTHBnQ5vN0azjjPPtSrxgHL8/EYBa4lmBcexdmcUrUyWjAIYqfO8dlY+RuXvbiw7fBHZ7xpAvQIDAQAB
     privateKey: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALJWWmqaJuC6uJrzzgZ0BgS6oJXhpBGXY3bX7uXxXGhyjLP4zwpjJeqaUsqoCk0v9TmlRVONLq+kLqiNL7C81trCKN4yybyvY06VMcGdDm83RrOOM8+1KvGAcvz8RgFriWYFx7F2ZxStTJaMAhip87x2Vj5G5e9uLDt8EdnvGkC9AgMBAAECgYEAsEOHdEvOV1pWMdj9bgVpGW14YQu3RSfTSFheqGkpg5aMmSk3QbYDeOB1KhZysB3Ri9tdLRqi5TkqYK/DTjUnSUMs0iMhx0XaY2z3w16AMpvuJ0FZ4S2h8oAFfOWe4F6bpUYU8qmXANAaXcMm6HjU8k1QuTbjlSOeLujl8W7zk8ECQQDlHbUQ911kWmsSo8NE4S1+dq/6T+yIGCJlXzlNh/z6giMpjp8Dzm3fxDHLeZa+DCrhpT1qe6O3oGwx3HeR/85NAkEAx0NUy6pX5WolV+YAoLNHAmcCP26wQTB7LZ7mXbxww4yNNH9CWHE9PaBuV4Ws4NxSAnRDxrgArkz5+wgqnXzUMQJAHr16orkdra43+XtBYsd3jCUufT4l9SiPzNwW2yEovw+g2h2JlkAnG8O+DpfUstD9G+NItzW5hJSgj5wN6ufQbQJACEtdND0a+4m3lDkWvZm40vjGty08WPpTpkp+/FfjucAYAJ9re5L7IZ2T+kCuOY3yO/fq+lKedKLvpOtqGrQfgQJBAJ1wMccz+1ez8qpyTWbzj2h0O+GV+YDHqJ9SwRWcSacZOeAyO7UMgIZEwoYfs4nhye7DZH9e4BfkwBmFHJKwJNs=
@@ -84,7 +83,6 @@ chengtai:
 #大家财险api
 dajia:
   api:
-    url: https://open-ics.djbx.com/dip-agent/agent/invokeForVchicle/api/
     encryptKey: "By92YPLvG89XyFqv"
 
 

+ 1 - 3
tenant/insurance/quotation-taikang/pom.xml

@@ -3,12 +3,10 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>com.jzg</groupId>
-        <artifactId>tenant</artifactId>
+        <artifactId>insurance</artifactId>
         <version>1.0-SNAPSHOT</version>
     </parent>
     <artifactId>quotation-taikang</artifactId>
-    <packaging>jar</packaging>
-    <url>http://maven.apache.org</url>
 
     <properties>
         <maven.compiler.source>17</maven.compiler.source>

+ 45 - 45
tenant/insurance/quotation-taikang/src/test/java/com/jzg/quotation/taikang/crawler/TKHttpAPIServiceTest1.java

@@ -49,51 +49,51 @@ public class TKHttpAPIServiceTest1 {
 
     @BeforeAll
     public static void before() {
-        // 配置HTTP连接池
-        ConnectionProvider connectionProvider = ConnectionProvider
-                .builder("http")
-                .maxConnections(500)
-                .maxIdleTime(Duration.ofSeconds(30))
-                .build();
-
-        // 配置HTTP客户端
-        reactor.netty.http.client.HttpClient httpClient = reactor.netty.http.client.HttpClient
-                .create(connectionProvider)
-                .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000)
-                .responseTimeout(Duration.ofSeconds(50))
-                .doOnConnected(conn ->
-                        conn
-                                .addHandlerLast(new ReadTimeoutHandler(50))
-                                .addHandlerLast(new WriteTimeoutHandler(50)));
-        // 构建WebClient实例
-        WebClient webClient = WebClient
-                .builder()
-                .clientConnector(new ReactorClientHttpConnector(httpClient))
-                .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
-                .defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
-                .filter(ExchangeFilterFunction.ofRequestProcessor(
-                        clientRequest -> {
-                            // 打印请求头信息
-                            clientRequest
-                                    .headers()
-                                    .forEach((key, values) -> {
-                                        logger.info("请求头: {}: {}", key, values);
-                                    });
-                            return Mono.just(clientRequest);
-                        }
-                ))
-                .codecs(item->item.defaultCodecs().maxInMemorySize(10 * 1024 * 1024))
-                .build();
-
-
-        RequestComponent requestComponent = new RequestComponent(webClient);
-
-        TKHttpClient client = new TKHttpClient();
-
-        client.setRequestComponent(requestComponent);
-
-        httpService = new TKHttpAPIService();
-        httpService.setClient(client);
+//        // 配置HTTP连接池
+//        ConnectionProvider connectionProvider = ConnectionProvider
+//                .builder("http")
+//                .maxConnections(500)
+//                .maxIdleTime(Duration.ofSeconds(30))
+//                .build();
+//
+//        // 配置HTTP客户端
+//        reactor.netty.http.client.HttpClient httpClient = reactor.netty.http.client.HttpClient
+//                .create(connectionProvider)
+//                .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000)
+//                .responseTimeout(Duration.ofSeconds(50))
+//                .doOnConnected(conn ->
+//                        conn
+//                                .addHandlerLast(new ReadTimeoutHandler(50))
+//                                .addHandlerLast(new WriteTimeoutHandler(50)));
+//        // 构建WebClient实例
+//        WebClient webClient = WebClient
+//                .builder()
+//                .clientConnector(new ReactorClientHttpConnector(httpClient))
+//                .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
+//                .defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
+//                .filter(ExchangeFilterFunction.ofRequestProcessor(
+//                        clientRequest -> {
+//                            // 打印请求头信息
+//                            clientRequest
+//                                    .headers()
+//                                    .forEach((key, values) -> {
+//                                        logger.info("请求头: {}: {}", key, values);
+//                                    });
+//                            return Mono.just(clientRequest);
+//                        }
+//                ))
+//                .codecs(item->item.defaultCodecs().maxInMemorySize(10 * 1024 * 1024))
+//                .build();
+//
+//
+//        RequestComponent requestComponent = new RequestComponent(webClient);
+//
+//        TKHttpClient client = new TKHttpClient();
+//
+//        client.setRequestComponent(requestComponent);
+//
+//        httpService = new TKHttpAPIService();
+//        httpService.setClient(client);
     }
 
 

+ 16 - 9
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/build/ZiJinAPIQuoteResultsVoBuild.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.zijin.api.build;
 
+import cn.hutool.core.collection.CollUtil;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.quote.vo.ExpenseFactor;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
@@ -11,9 +12,7 @@ import com.jzg.quotation.zijin.api.constant.enums.RiskCodeEnum;
 import com.jzg.quotation.zijin.api.entity.constants.enums.ResultEnum;
 import com.jzg.quotation.zijin.api.entity.response.CalculatePremiumResponse;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 
@@ -35,19 +34,27 @@ public final class ZiJinAPIQuoteResultsVoBuild {
         quoteResultsVo.setQuoteStatus(InsOrderStatusEnum.WAIT_AUDIT.getCode());
         if(!calculatePremiumResponse.getRtnCode().equals(ResultEnum.C_0000)){
             quoteResultsVo.setQuoteStatus(InsOrderStatusEnum.QUOTE_FAIL.getCode());
+            quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.QUOTE_FAIL);
             quoteResultsVo.setErrorMessage(calculatePremiumResponse.getRtnMsg());
             return quoteResultsVo;
         }
+
         // 交强险
-        quoteResultsVo.setCiRiskInfoVo(new RiskInfoVo());
+        quoteResultsVo.setCiRiskInfoVo(quoteVo.getCiRiskInfoVo());
         // 商业险
-        quoteResultsVo.setBiRiskInfoVo(new RiskInfoVo());
+        quoteResultsVo.setBiRiskInfoVo(quoteVo.getBiRiskInfoVo());
+
+        // 商业险险种信息
         // 商业险险种信息
-        List<KindInfoVo> kindInfoVo = buildKindInfoVo(quoteVo.getKindInfoVo(), calculatePremiumResponse.getItemKindList());
-        quoteResultsVo.setKindInfoVo(kindInfoVo);
+        if(CollUtil.isNotEmpty(calculatePremiumResponse.getItemKindList())){
+            List<KindInfoVo> kindInfoVo = buildKindInfoVo(quoteVo.getKindInfoVo(), calculatePremiumResponse.getItemKindList());
+            quoteResultsVo.setKindInfoVo(kindInfoVo);
+        }
+        quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.PAY_PENDING);
+
         // 费用因子
-        List<ExpenseFactor> expenseFactors = buildExpenseFactor(calculatePremiumResponse.getPriceInfoList());
-        quoteResultsVo.setExpenseFactors(expenseFactors);
+//        List<ExpenseFactor> expenseFactors = buildExpenseFactor(calculatePremiumResponse.getPriceInfoList());
+//        quoteResultsVo.setExpenseFactors(expenseFactors);
         // 交强保费 车船税 商业保费
         buildPremium(quoteResultsVo, calculatePremiumResponse.getPlanList());
 

+ 3 - 1
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/component/ZiJinApiRequestComponent.java

@@ -46,6 +46,7 @@ public class ZiJinApiRequestComponent {
 
     public <T, B extends BaseResponse> B requestUrl(String url, T requestBody, Class<B> responseType, HttpHeaders httpHeaders) {
         ResponseEntity<B> bResponseEntity = requestComponent.objectPost(url, requestBody, responseType, httpHeaders);
+        System.out.println(bResponseEntity.getBody());
         return bResponseEntity.getBody();
     }
 
@@ -87,7 +88,7 @@ public class ZiJinApiRequestComponent {
         }
         number--;
         HttpHeaders httpHeaders = ziJinApiCacheComponent.getAuthorizationHeader(ziJinApiConfigureParameters.getAppKey());
-        if (ObjectUtils.isEmpty(httpHeaders)) {
+        if (!ObjectUtils.isEmpty(httpHeaders)) {
             return httpHeaders;
         }
 
@@ -97,6 +98,7 @@ public class ZiJinApiRequestComponent {
             boolean isLock = lock.tryLock(1, 10000, TimeUnit.MILLISECONDS);
             if (isLock) {
                 try {
+                    httpHeaders = new HttpHeaders();
                     return this.getToken(ziJinApiConfigureParameters, httpHeaders);
                 } finally {
                     lock.unlock();

+ 105 - 3
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/entity/request/CalculatePremiumRequest.java

@@ -19,6 +19,7 @@ import org.springframework.util.StringUtils;
 import java.io.Serial;
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
 import java.util.stream.Collectors;
@@ -134,7 +135,7 @@ public class CalculatePremiumRequest implements Serializable {
         this.proposalAreaCode = parameters.getProposalAreaCode();
         this.proposalCityCode = parameters.getProposalCityCode();
         // 驾意险信息
-        this.taxRelifInfo = new TaxRelifInfoDTO();
+        this.taxRelifInfo = new TaxRelifInfoDTO(quoteVo.getVehicleAndVesselTaxVo());
     }
 
     public void modificationOfVehicleType(ModelQueryResponse.VehicleModelInfosDTO vehicleModelInfosDTO, String actualValue) {
@@ -427,6 +428,11 @@ public class CalculatePremiumRequest implements Serializable {
 
     }
 
+    // 免税
+    private static final String TAX_EXEMPTION = "2";
+    // 减税
+    private static final String TAX_REDUCTION = "3";
+
     /**
      * 车船税信息
      */
@@ -522,6 +528,34 @@ public class CalculatePremiumRequest implements Serializable {
 
         }
 
+        public TaxRelifInfoDTO(VehicleAndVesselTaxVo vehicleAndVesselTaxVo){
+            String flag = vehicleAndVesselTaxVo.getTaxRelifFlag();
+            switch (flag) {
+                case TAX_EXEMPTION:
+                    this.freeRateText = FreeRateText.FRT_E.getCode();
+                    this.taxRelief = "1";
+                    break;
+                case TAX_REDUCTION:
+                    this.freeRateText = FreeRateText.FRT_P.getCode();
+                    this.taxRelief = vehicleAndVesselTaxVo.getTaxRelief();
+                    break;
+                default:
+                    break;
+            }
+            this.extendChar2 = vehicleAndVesselTaxVo.getExtendChar2();
+
+            this.relifReason = vehicleAndVesselTaxVo.getRelifReason();
+            this.taxComCode = vehicleAndVesselTaxVo.getTaxComCode();
+            this.taxComName = vehicleAndVesselTaxVo.getTaxComName();
+            this.taxDocumentDate = vehicleAndVesselTaxVo.getTaxDocumentDate();
+            this.taxPaidAreaCode = vehicleAndVesselTaxVo.getTaxPaidAreaCode();
+            this.paidFreeCertificate = vehicleAndVesselTaxVo.getPaidFreeCertificate();
+            this.taxpayerName = vehicleAndVesselTaxVo.getTaxpayerName();
+            this.taxpayerIdentifier = vehicleAndVesselTaxVo.getTaxpayerIdentifier();
+
+            this.identifyNumber = vehicleAndVesselTaxVo.getIdentifyNumber();
+            this.taxRelifFlag = flag;
+        }
     }
 
     /**
@@ -849,9 +883,76 @@ public class CalculatePremiumRequest implements Serializable {
 
         public VehicleInfoDTO(CarInfoVo carInfoVo, ModelQueryResponse.VehicleModelInfosDTO vehicleModelInfosDTO, String actualValue) {
 
+            this.actualValue = actualValue;
+            this.agreeActualValue = actualValue;
+            if (carInfoVo.isTransfer()) {
+                this.carLoanFlag = "1";
+                this.chgOwnerFlag = "1";
+                this.makeDate = carInfoVo.getIssueDate();
+                this.makeDateJQ = carInfoVo.getIssueDate();
+            } else {
+                this.chgOwnerFlag = "0";
+                this.carLoanFlag = "0";
+            }
+            this.engineNo = carInfoVo.getEngineNo();
+            this.enrollDate = carInfoVo.getRegisterDate();
+            this.licenseColorCode = "01";
+            this.licenseKindCode = "02";
+            this.licenseNo = carInfoVo.getLicenseNo();
+            this.modelCode = vehicleModelInfosDTO.getModelCode();
+            this.noLicenseFlag = "1";
+            this.purchasePrice = vehicleModelInfosDTO.getPurchasePrice();
+            this.seatCount = carInfoVo.getSeatCount();
+
+            // 车辆使用性质代码
+            this.useNatureCode = carInfoVo.getVehicleUseCode();
 
-        }
+            this.vehicleId = vehicleModelInfosDTO.getVehicleId();
+
+            this.vinNo = carInfoVo.getVinNo();
+            this.brandName = vehicleModelInfosDTO.getModelName();
+            this.carInsuredRelation = "1";
+
+            String limitLoad = carInfoVo.getLimitLoad();
+
+            if ("H0".equals(carInfoVo.getCarKindCode())) {
+                double v = Double.parseDouble(limitLoad) / 1000;
+                this.tonCount = String.valueOf(v);
+                this.carKindDetailId = carInfoVo.getCarKindDetailIdCode();
+                this.printUseNatureCode = "0003";
+            } else {
+                this.carKindDetailId = carInfoVo.getCarKindDetailIdCode();
+            }
+
+            this.completekerbmass = carInfoVo.getCompleteKerbMass();
+            // 车辆种类代码
+            this.carKindCode = carInfoVo.getCarKindCode();
+
+            this.exhaustCapacity = !StringUtils.isEmpty(vehicleModelInfosDTO.getExhaustCapacity()) ?
+                    vehicleModelInfosDTO.getExhaustCapacity() : "0";
+            this.oriCarKindName = carInfoVo.getCarTypeCode();
 
+            this.platVehicleCode = vehicleModelInfosDTO.getPlatVehicleCode();
+            this.modelEnergyType = vehicleModelInfosDTO.getPowerTypeCode();
+            this.ecdemicVehicleFlag = "0";
+            this.printModelName = vehicleModelInfosDTO.getModelName();
+            this.power = vehicleModelInfosDTO.getPower();
+            this.oriPurchasePrice = vehicleModelInfosDTO.getPurchasePrice();
+            this.oriBrandName = vehicleModelInfosDTO.getModelName();
+            this.oriModelName = vehicleModelInfosDTO.getModelName();
+//            this.vehicleStyleUniqueId = vehicleModelInfosDTO.getVehicleId();
+            this.isInvokeJingYou = "1";
+            String[] ENERGY = new String[]{"1","2","3","4"};
+            //纯电动 燃料电池 插电式混合动力 归属为新能源产品
+            if (Arrays.asList(ENERGY).contains(carInfoVo.getEnergyTypeCode())) {
+                this.newEnergyFlag = "1";
+                this.pureRange = "";
+                this.fuelType = carInfoVo.getEnergyTypeCode();
+            }else{
+                this.newEnergyFlag = "0";
+                this.pureRange = "";
+            }
+        }
         public void modificationOfVehicleType(ModelQueryResponse.VehicleModelInfosDTO vehicleModelInfosDTO, String actualValue) {
             this.actualValue = actualValue;
             this.agreeActualValue = actualValue;
@@ -1019,7 +1120,8 @@ public class CalculatePremiumRequest implements Serializable {
                 this.identifyType = "73";
                 this.insuredNature = "4";
                 this.insuredType = "2";
-                this.sex = "9";
+                int gender = IdcardUtil.getGenderByIdCard(customerInfoVo.getIdentifyNumber());
+                this.sex = gender == 1 ? "1" : "2";
                 this.certigierName = customerInfoVo.getLegalPerson();
                 this.certigierType = "01";
                 this.certigierNumber = customerInfoVo.getLeaderIdentifyNumber();

+ 9 - 4
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/entity/request/QueryActualValueRequest.java

@@ -3,11 +3,13 @@ package com.jzg.quotation.zijin.api.entity.request;
 
 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.io.Serial;
 import java.io.Serializable;
+import java.util.Objects;
 
 
 /**
@@ -49,15 +51,18 @@ public class QueryActualValueRequest implements Serializable {
     /**
      * @param carInfoVo     车辆信息
      * @param purchasePrice 新车购置价格
-     * @param startDate     起保时间
      */
-    public QueryActualValueRequest(CarInfoVo carInfoVo, String purchasePrice, String startDate) {
+    public QueryActualValueRequest(CarInfoVo carInfoVo, String purchasePrice, QuoteVo quoteVo) {
         this.carKindCode = carInfoVo.getCarKindCode();
-//        this.certificateDate = certificateDate;
+        this.certificateDate = carInfoVo.getIssueDate();
         this.enrollDate = carInfoVo.getRegisterDate();
         this.purchasePrice = purchasePrice;
         this.seatCount = carInfoVo.getSeatCount();
-        this.startDate = startDate;
+        if(Objects.nonNull(quoteVo.getCiRiskInfoVo())){
+            this.startDate = quoteVo.getCiRiskInfoVo().getStartDate();
+        } else if(Objects.nonNull(quoteVo.getBiRiskInfoVo())){
+            this.startDate = quoteVo.getBiRiskInfoVo().getStartDate();
+        }
         this.tonCount = carInfoVo.getTonCount();
         this.useNatureCode = carInfoVo.getVehicleUseCode();
     }

+ 2 - 2
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/service/Impl/ZiJinApiRequestImpl.java

@@ -1,4 +1,4 @@
-package com.jzg.quotation.zijin.api.service.Impl;
+package com.jzg.quotation.zijin.api.service.impl;
 
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.orders.po.InsOrdersCosts;
@@ -65,7 +65,7 @@ public class ZiJinApiRequestImpl implements ZiJinApiRequest {
         // 过滤车型
         ModelQueryResponse.VehicleModelInfosDTO vehicleModelInfosDTO = CarModelsFilterUtils.to(modelQueryResponse.getVehicleModelInfos(), carInfoVo);
         // 计算车辆价格
-        QueryActualValueRequest queryActualValueRequest = new QueryActualValueRequest(carInfoVo, vehicleModelInfosDTO.getPurchasePrice(), "");
+        QueryActualValueRequest queryActualValueRequest = new QueryActualValueRequest(carInfoVo, vehicleModelInfosDTO.getPurchasePrice(), quoteVo);
         QueryActualValueResponse queryActualValueResponse = ziJinApiRequestComponent.queryActualValue(queryActualValueRequest, httpHeaders);
         // 报价
         CalculatePremiumRequest calculatePremiumRequest = new CalculatePremiumRequest(quoteVo, vehicleModelInfosDTO, queryActualValueResponse.getActualValue(), parameters, modelQueryResponse);

+ 1 - 1
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/service/Impl/ZiJinCrawlerOrderServiceImpl.java

@@ -1,4 +1,4 @@
-package com.jzg.quotation.zijin.api.service.Impl;
+package com.jzg.quotation.zijin.api.service.impl;
 
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.quotation.zijin.api.entity.po.ZiJinApiOrder;

+ 1 - 2
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementServiceImpl.java

@@ -504,8 +504,7 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
     @Override
     public List<PtlAgreement> getByCompanyId(String companyId,String systemCode) {
         List<PtlAgreement> ptlAgreements = baseMapper.selectList(new LambdaQueryWrapper<PtlAgreement>()
-                .eq(PtlAgreement::getCompanyId, companyId)
-                .eq(PtlAgreement::getSystemCode, systemCode));
+                .eq(PtlAgreement::getCompanyId, companyId));
         return ptlAgreements;
     }
 

+ 11 - 0
tenant/organization/src/main/resources/application-dev.yml

@@ -34,3 +34,14 @@ unionPay:
     publicKey: 0414bb7e9c3914bb65b85079b1dc6e1ca2a0ee04dd9bb55b2f8d31704a6dec0cca695739e128f9c931330e1c0f493be4d56244236434c9d344c4716ba64a4470ba
     privateKey: 24ebfde60aecb81214605050763926ec342c487859a8da57d5badcd3c1559336
 
+feign:
+  client:
+    jzg-insurance:
+      url: http://localhost:9898/
+    jzg-org:
+      url: http://localhost:8084/
+    jzg-costsorrule:
+      url: http://localhost:8085/
+    jzg-platform:
+      url: http://localhost:8083/
+

+ 13 - 1
tenant/organization/src/main/resources/application.yml

@@ -23,6 +23,17 @@ upload:
     path: D:/nasData
     url: http://192.168.0.250:8001/
 
+feign:
+  client:
+    jzg-insurance:
+      url: http://localhost:9898/
+    jzg-org:
+      url: http://localhost:8084/
+    jzg-costsorrule:
+      url: http://localhost:8085/
+    jzg-platform:
+      url: http://localhost:8083/
+
 #多租户配置
 tenant:
   enable: true
@@ -77,7 +88,6 @@ tenant:
     - ins_orders_car_info
     - ins_orders_policy
     - sys_relation_person
-    - ptl_agreement
     - ins_ply_income_invoice_link
     - ins_orders_risk
     - ins_orders_car_user_info
@@ -92,6 +102,8 @@ tenant:
     - wechat_customer_service_recording
     - ins_fee_audit
     - sys_user_jzg_info_bank_card_record
+    - ptl_agreement_dispatch_rules_attr_link
+    - ptl_agreement_dispatch_action
     - sys_app_manage
     - sys_version
     - ptl_agreement_dispatch_rules_attr_link