Jelajahi Sumber

1.紫金财险报价
2.协议修改
3.python对接驾意险

wks 3 tahun lalu
induk
melakukan
f07926643e
49 mengubah file dengan 1325 tambahan dan 374 penghapusan
  1. 8 5
      pom.xml
  2. 32 0
      src/main/java/com/ydtech/config/RedissonConfig.java
  3. 5 0
      src/main/java/com/ydtech/config/properties/ZjApiConfigurationProperties.java
  4. 0 30
      src/main/java/com/ydtech/constants/RedisConstant.java
  5. 7 1
      src/main/java/com/ydtech/modules/ins/model/vo/CarInfoVo.java
  6. 9 2
      src/main/java/com/ydtech/modules/ins/model/vo/QuoteRiskRespVo.java
  7. 43 0
      src/main/java/com/ydtech/modules/order/components/ConfigureParametersComponents.java
  8. 3 3
      src/main/java/com/ydtech/modules/order/components/InsOrdersComponents.java
  9. 174 19
      src/main/java/com/ydtech/modules/order/components/ZijinRequestApiComponents.java
  10. 60 0
      src/main/java/com/ydtech/modules/order/constants/OrderCacheConstant.java
  11. 7 0
      src/main/java/com/ydtech/modules/order/controller/InsCrawlerOrderController.java
  12. 21 2
      src/main/java/com/ydtech/modules/order/controller/ZijinOrderApiController.java
  13. 9 14
      src/main/java/com/ydtech/modules/order/entity/InsOrders.java
  14. 25 0
      src/main/java/com/ydtech/modules/order/entity/api/zj/constants/enums/EHealthTypeCodeEnum.java
  15. 3 1
      src/main/java/com/ydtech/modules/order/entity/api/zj/constants/enums/RequestUrl.java
  16. 57 1
      src/main/java/com/ydtech/modules/order/entity/api/zj/request/CalculatePremiumRequest.java
  17. 44 0
      src/main/java/com/ydtech/modules/order/entity/api/zj/request/GetAccessTokenRequest.java
  18. 18 2
      src/main/java/com/ydtech/modules/order/entity/api/zj/request/ModelQueryRequest.java
  19. 39 0
      src/main/java/com/ydtech/modules/order/entity/api/zj/request/PaymentCallbacksRequest.java
  20. 36 0
      src/main/java/com/ydtech/modules/order/entity/api/zj/request/QueryTokenRequest.java
  21. 73 0
      src/main/java/com/ydtech/modules/order/entity/api/zj/request/QueryVehicProductsRequest.java
  22. 29 0
      src/main/java/com/ydtech/modules/order/entity/api/zj/response/GetAccessTokenResponse.java
  23. 21 29
      src/main/java/com/ydtech/modules/order/entity/api/zj/response/ModelQueryResponse.java
  24. 24 0
      src/main/java/com/ydtech/modules/order/entity/api/zj/response/QueryTokenResponse.java
  25. 74 0
      src/main/java/com/ydtech/modules/order/entity/api/zj/response/QueryVehicProductsResponse.java
  26. 15 3
      src/main/java/com/ydtech/modules/order/entity/api/zm/response/ModelsQueryResponse.java
  27. 39 0
      src/main/java/com/ydtech/modules/order/entity/config/ZjConfigureParameters.java
  28. 18 0
      src/main/java/com/ydtech/modules/order/entity/crawler/request/CrawlerDrivingInsuranceRequest.java
  29. 19 0
      src/main/java/com/ydtech/modules/order/entity/crawler/response/CrawlerDrivingInsuranceResponse.java
  30. 10 0
      src/main/java/com/ydtech/modules/order/entity/filter/CarModelsFilter.java
  31. 36 0
      src/main/java/com/ydtech/modules/order/entity/filter/CarModelsFilterUtils.java
  32. 3 1
      src/main/java/com/ydtech/modules/order/entity/po/InsTaskImagesBase64.java
  33. 27 0
      src/main/java/com/ydtech/modules/order/entity/vo/zj/ZjVehicleProductsVo.java
  34. 2 2
      src/main/java/com/ydtech/modules/order/service/BaseOrderService.java
  35. 7 0
      src/main/java/com/ydtech/modules/order/service/InsCrawlerOrderService.java
  36. 24 2
      src/main/java/com/ydtech/modules/order/service/ZijinOrderApiService.java
  37. 20 44
      src/main/java/com/ydtech/modules/order/service/impl/InsCrawlerOrderServiceImpl.java
  38. 1 1
      src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java
  39. 3 0
      src/main/java/com/ydtech/modules/order/service/impl/InsTaskImagesServiceImpl.java
  40. 6 12
      src/main/java/com/ydtech/modules/order/service/impl/YongAnOrderServiceImpl.java
  41. 54 62
      src/main/java/com/ydtech/modules/order/service/impl/ZhongMeiOrderApiServiceImpl.java
  42. 73 30
      src/main/java/com/ydtech/modules/order/service/impl/ZijinOrderApiServiceImpl.java
  43. 1 3
      src/main/java/com/ydtech/modules/protocol/entity/dto/PtlAgreementCostsFactorSaveDto.java
  44. 13 0
      src/main/java/com/ydtech/modules/protocol/entity/dto/PtlFactorDto.java
  45. 19 3
      src/main/java/com/ydtech/modules/protocol/service/PtlAgreementUnderwritingRulesService.java
  46. 4 41
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementUnderwritingRulesServiceImpl.java
  47. 27 0
      src/main/java/com/ydtech/modules/protocol/utils/AssertionUtils.java
  48. 11 0
      src/main/resources/application-prod.yml
  49. 72 61
      src/main/resources/application-test.yml

+ 8 - 5
pom.xml

@@ -403,6 +403,14 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-redis</artifactId>
         </dependency>
+
+        <!-- https://mvnrepository.com/artifact/org.redisson/redisson -->
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson</artifactId>
+            <version>3.23.3</version>
+        </dependency>
+
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-pool2</artifactId>
@@ -500,11 +508,6 @@
         </dependency>
 
 
-
-
-
-
-
         <!-- rabbitmq依赖 -->
         <!--        <dependency>-->
         <!--            <groupId>org.springframework.boot</groupId>-->

+ 32 - 0
src/main/java/com/ydtech/config/RedissonConfig.java

@@ -0,0 +1,32 @@
+package com.ydtech.config;
+
+import org.redisson.Redisson;
+import org.redisson.api.RedissonClient;
+import org.redisson.config.Config;
+import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class RedissonConfig {
+
+    private final RedisProperties redisProperties;
+
+    public RedissonConfig(RedisProperties redisProperties) {
+        this.redisProperties = redisProperties;
+    }
+
+    @Bean
+    public RedissonClient redissonClient() {
+        // 配置
+        Config config = new Config();
+
+        config.useSingleServer()
+                .setAddress("redis://" + redisProperties.getHost() + ":" + redisProperties.getPort())
+                .setPassword(redisProperties.getPassword())
+                .setUsername(redisProperties.getUsername());
+        // 创建RedissonClient对象
+        return Redisson.create(config);
+    }
+
+}

+ 5 - 0
src/main/java/com/ydtech/config/properties/ZjApiConfigurationProperties.java

@@ -9,8 +9,13 @@ import org.springframework.stereotype.Component;
 @ConfigurationProperties(prefix = "zj.api")
 public class ZjApiConfigurationProperties {
 
+    // 为接入方提供获取token服务地址
+    private String accessTokenUrl;
+
+    // 车险业务地址
     private String url;
 
+    // 下载保单地址
     private String downLoadDocument;
 
 }

+ 0 - 30
src/main/java/com/ydtech/constants/RedisConstant.java

@@ -10,35 +10,5 @@ public class RedisConstant {
 
     public static final long PHONE_VERIFICATION_CODE_KEY_TIME = 5L;
 
-    /**
-     * 订单缓存
-     */
-    public static final String QUOTE_INFO_KEY = "ins:orders:";
-
-
-    /**
-     * 订单缓存时间
-     */
-    public static final long QUOTE_INFO_KEY_TIME = 1L;
-
-    /**
-     * 核保规则
-     */
-    public static final String QUOTE_RULES_KEY = "ins:rules:";
-
-    /**
-     * 核保规则时间
-     */
-    public static final long QUOTE_RULES_KEY_TIME = 1L;
-
-    /**
-     * 中煤核保返回
-     */
-    public static final String ZM_AUDIT_RETURN_MESSAGE = "zm:audit:returnMessage:";
-
-    /**
-     * 中煤核保返回存储
-     */
-    public static final long ZM_AUDIT_RETURN_MESSAGE_TIME = 10;
 
 }

+ 7 - 1
src/main/java/com/ydtech/modules/ins/model/vo/CarInfoVo.java

@@ -1,6 +1,5 @@
 package com.ydtech.modules.ins.model.vo;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ydtech.validation.annotation.CheckDateTime;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -86,6 +85,13 @@ public class CarInfoVo {
 
     @ApiModelProperty(value = "是否过户")
     private boolean transferFlag;
+    /**
+     * 国寿app
+     *
+     * @date: 2023/8/23 10:37
+     **/
+    @ApiModelProperty(value = "是否是二手车")
+    private boolean usedCar;
 
     @ApiModelProperty(value = "过户日期")
     private String transferDate;

+ 9 - 2
src/main/java/com/ydtech/modules/ins/model/vo/QuoteRiskRespVo.java

@@ -28,6 +28,14 @@ public class QuoteRiskRespVo {
     private String riskName;
     private String startDate;
 
+    /**
+     * 报价险种放入保费
+     *
+     * @param riskList  险种list
+     * @param jqPremium 交强险保费
+     * @param syPremium 交强险保费
+     * @return 险种list
+     */
     public static List<QuoteRiskRespVo> toQuoteRiskRespVoList(List<RiskInfoVo> riskList, double jqPremium, double syPremium) {
         List<QuoteRiskRespVo> riskList1 = new ArrayList<>();
         for (RiskInfoVo riskInfoVo : riskList) {
@@ -36,8 +44,7 @@ public class QuoteRiskRespVo {
                 risk.setRiskCode(InsuranceRisk.TRAFFIC.getCode());
                 risk.setRiskName(InsuranceRisk.TRAFFIC.getDesc());
                 risk.setPremium(jqPremium);
-            }
-            if (InsuranceRisk.BUSINESS.getCode().equals(riskInfoVo.getRiskCode()) && syPremium != 0) {
+            } else if (InsuranceRisk.BUSINESS.getCode().equals(riskInfoVo.getRiskCode()) && syPremium != 0) {
                 risk.setRiskCode(InsuranceRisk.BUSINESS.getCode());
                 risk.setRiskName(InsuranceRisk.BUSINESS.getDesc());
                 risk.setPremium(syPremium);

+ 43 - 0
src/main/java/com/ydtech/modules/order/components/ConfigureParametersComponents.java

@@ -26,6 +26,13 @@ public class ConfigureParametersComponents {
     }
 
 
+    /**
+     * 通过反射设置对象属性
+     *
+     * @param t                       配置
+     * @param ptlAgreementAttribution 协议归属信息
+     * @param <T>                     配置
+     */
     private <T extends ConfigureParameters> void conversionEntity(T t, PtlAgreementAttribution ptlAgreementAttribution) {
         JSONArray fields = ptlAgreementAttribution.getFields();
         List<PtlAttributionTemplateDto> ptlAttributionTemplateDtos = fields.toJavaList(PtlAttributionTemplateDto.class);
@@ -55,8 +62,44 @@ public class ConfigureParametersComponents {
         this.conversionEntity(t, ptlAgreementAttribution);
     }
 
+    /**
+     * 通过 协议id获取配置实体
+     *
+     * @param t                       配置
+     * @param ptlAgreementAttribution 协议归属信息
+     * @param <T>                     配置
+     */
     public <T extends ConfigureParameters> void toEntity(T t, PtlAgreementAttribution ptlAgreementAttribution) {
         this.conversionEntity(t, ptlAgreementAttribution);
     }
 
+    /**
+     * 通过 协议id获取配置实体
+     *
+     * @param tClass      配置类型
+     * @param agreementId 协议id
+     * @param <T>         配置
+     */
+    public <T extends ConfigureParameters> T toEntity(Class<T> tClass, String agreementId) {
+        PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementId);
+        return this.toEntity(tClass, ptlAgreementAttribution);
+    }
+
+    /**
+     * 通过 协议id获取配置实体
+     *
+     * @param tClass                  配置类型
+     * @param ptlAgreementAttribution 协议归属信息
+     * @param <T>                     配置
+     */
+    public <T extends ConfigureParameters> T toEntity(Class<T> tClass, PtlAgreementAttribution ptlAgreementAttribution) {
+        try {
+            T parameters = tClass.newInstance();
+            this.conversionEntity(parameters, ptlAgreementAttribution);
+            return parameters;
+        } catch (InstantiationException | IllegalAccessException exception) {
+            throw new SystemException("实例化异常");
+        }
+    }
+
 }

+ 3 - 3
src/main/java/com/ydtech/modules/order/components/InsOrdersComponents.java

@@ -2,7 +2,7 @@ package com.ydtech.modules.order.components;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.ydtech.constants.RedisConstant;
+import com.ydtech.modules.order.constants.OrderCacheConstant;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.service.InsOrdersService;
@@ -43,7 +43,7 @@ public class InsOrdersComponents {
      */
     public BaseQuoteInfoVo getQuoteInfo(String orderNo) {
         insOrdersService.existOrder(orderNo);
-        String s = redisTemplate.opsForValue().get(RedisConstant.QUOTE_INFO_KEY + orderNo);
+        String s = redisTemplate.opsForValue().get(OrderCacheConstant.QUOTE_INFO_KEY + orderNo);
 
         BaseQuoteInfoVo quoteInfoVo = JSON.parseObject(s, BaseQuoteInfoVo.class);
         if (ObjectUtils.isEmpty(quoteInfoVo)) {
@@ -77,7 +77,7 @@ public class InsOrdersComponents {
      * @param orderNo 订单ID
      */
     public void getQuoteRules(String orderNo, String agreementId) {
-        String s = redisTemplate.opsForValue().get(RedisConstant.QUOTE_RULES_KEY + orderNo);
+        String s = redisTemplate.opsForValue().get(OrderCacheConstant.QUOTE_RULES_KEY + orderNo);
         JSONObject jsonObject = JSON.parseObject(s);
         ptlAgreementUnderwritingRulesService.ruleComparison(jsonObject, agreementId, 0);
     }

+ 174 - 19
src/main/java/com/ydtech/modules/order/components/ZijinRequestApiComponents.java

@@ -2,12 +2,24 @@ package com.ydtech.modules.order.components;
 
 
 import com.ydtech.config.properties.ZjApiConfigurationProperties;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.order.constants.OrderCacheConstant;
 import com.ydtech.modules.order.entity.api.zj.constants.enums.RequestUrl;
 import com.ydtech.modules.order.entity.api.zj.constants.enums.ResultEnum;
 import com.ydtech.modules.order.entity.api.zj.request.*;
 import com.ydtech.modules.order.entity.api.zj.response.*;
+import com.ydtech.modules.order.entity.config.ZjConfigureParameters;
 import lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
 /**
  * @description: 资金财险请求
@@ -18,31 +30,163 @@ import org.springframework.stereotype.Component;
 @Component
 public class ZijinRequestApiComponents {
 
+
+    private static final String AUTHORIZATION = "Authorization";
+
+    private static final String ZKI_API_AUTHORIZATION = "ZKIApiAuthorization";
+
+    // 递归层级
+    public static final int RECURSIVE_HIERARCHY = 3;
+
     private final InsCrawlerOrderComponents insCrawlerOrderComponents;
 
     private final ZjApiConfigurationProperties zjApiConfigurationProperties;
 
+    private final ConfigureParametersComponents configureParametersComponents;
+
+    private final StringRedisTemplate redisTemplate;
+
+    private final RedissonClient redissonClient;
 
-    public ZijinRequestApiComponents(InsCrawlerOrderComponents insCrawlerOrderComponents, ZjApiConfigurationProperties zjApiConfigurationProperties) {
+    public ZijinRequestApiComponents(InsCrawlerOrderComponents insCrawlerOrderComponents, ZjApiConfigurationProperties zjApiConfigurationProperties, ConfigureParametersComponents configureParametersComponents, StringRedisTemplate redisTemplate, RedissonClient redissonClient) {
         this.insCrawlerOrderComponents = insCrawlerOrderComponents;
         this.zjApiConfigurationProperties = zjApiConfigurationProperties;
+        this.configureParametersComponents = configureParametersComponents;
+        this.redisTemplate = redisTemplate;
+        this.redissonClient = redissonClient;
     }
 
-    public <T, B extends BaseResponse> B request(RequestUrl requestUrl, T requestBody, Class<B> responseType) {
+
+    public <T, B extends BaseResponse> B request(RequestUrl requestUrl, T requestBody, Class<B> responseType, HttpHeaders httpHeaders) {
         String url = zjApiConfigurationProperties.getUrl() + requestUrl.getUri();
-        B b = insCrawlerOrderComponents.request(url, "紫金财险", requestUrl.getDesc(), requestBody, responseType);
+        B b = insCrawlerOrderComponents.request(url, "紫金财险", requestUrl.getDesc(), requestBody, responseType, httpHeaders);
         ResultEnum.verify(b.getRtnCode());
         return b;
     }
 
+    /**
+     * 获取 接入方 token 车险业务token
+     *
+     * @param zjConfigureParameters 紫金api配置
+     * @param httpHeaders           请求头
+     * @return HttpHeaders
+     */
+    private HttpHeaders getToken(ZjConfigureParameters zjConfigureParameters, HttpHeaders httpHeaders) {
+        // 1 为接入方提供获取token服务
+        GetAccessTokenRequest getAccessTokenRequest = new GetAccessTokenRequest(zjConfigureParameters.getAppKey(), zjConfigureParameters.getAppSecret());
+        GetAccessTokenResponse accessToken = getAccessToken(getAccessTokenRequest);
+        httpHeaders.set(AUTHORIZATION, accessToken.getToken());
+        // 2 车险业务获取token服务
+        QueryTokenRequest queryTokenRequest = new QueryTokenRequest(zjConfigureParameters.getOrderOrigin(), zjConfigureParameters.getUserId());
+        QueryTokenResponse queryTokenResponse = queryToken(queryTokenRequest, httpHeaders);
+        httpHeaders.set(ZKI_API_AUTHORIZATION, queryTokenResponse.getToken());
+        // 3. 将请求的token放入redis
+        Map<String, String> map = new HashMap<>();
+        map.put(AUTHORIZATION, accessToken.getToken());
+        map.put(ZKI_API_AUTHORIZATION, queryTokenResponse.getToken());
+        redisTemplate.opsForHash().putAll(zjConfigureParameters.getAccessToken(), map);
+        redisTemplate.expire(zjConfigureParameters.getAccessToken(), OrderCacheConstant.ZJ_ACCESS_TOKEN_TIME, TimeUnit.HOURS);
+        return httpHeaders;
+    }
+
+    /**
+     * 配置方式获取请求头
+     *
+     * @param zjConfigureParameters 配置参数
+     * @return HttpHeaders
+     */
+    public HttpHeaders getHttpHeaders(ZjConfigureParameters zjConfigureParameters, int number) {
+        if (number <= 0) {
+            throw new SystemException("接口请求异常,请重试!");
+        }
+        number--;
+
+        HttpHeaders httpHeaders = new HttpHeaders();
+
+        Map<Object, Object> entries = redisTemplate.opsForHash().entries(zjConfigureParameters.getAccessToken());
+        // 缓存中不存在就去请求token
+        if (!ObjectUtils.isEmpty(entries)) {
+            String authorization = (String) entries.get(AUTHORIZATION);
+            String zKIApiAuthorization = (String) entries.get(ZKI_API_AUTHORIZATION);
+            httpHeaders.set(AUTHORIZATION, authorization);
+            httpHeaders.set(ZKI_API_AUTHORIZATION, zKIApiAuthorization);
+            return httpHeaders;
+        }
+
+        // 使用分布式锁 只有一个人可以访问登录
+        RLock lock = redissonClient.getLock(zjConfigureParameters.getAccessLock());
+        try {
+            boolean isLock = lock.tryLock(1, 10000, TimeUnit.MILLISECONDS);
+            if (isLock) {
+                try {
+                    return this.getToken(zjConfigureParameters, httpHeaders);
+                } finally {
+                    lock.unlock();
+                }
+            }
+
+        } catch (InterruptedException e) {
+            log.debug(e.getMessage());
+            lock.unlock();
+            Thread.currentThread().interrupt();
+            throw new SystemException(e.getMessage());
+        }
+
+        // 睡眠一段时间 子调用 重新获取缓存中的 header
+        try {
+            Thread.sleep(280);
+        } catch (InterruptedException e) {
+            log.debug(e.getMessage());
+            Thread.currentThread().interrupt();
+            throw new SystemException("接口请求异常,请重试!");
+        }
+
+        return getHttpHeaders(zjConfigureParameters, number);
+
+    }
+
+    /**
+     * 协议id获取请求头
+     *
+     * @param agreementId 协议id
+     * @return HttpHeaders
+     */
+    public HttpHeaders getHttpHeaders(String agreementId) {
+        ZjConfigureParameters zjConfigureParameters = configureParametersComponents.toEntity(ZjConfigureParameters.class, agreementId);
+        return getHttpHeaders(zjConfigureParameters, RECURSIVE_HIERARCHY);
+    }
+
+    /**
+     * 为接入方提供获取token服务
+     *
+     * @param getAccessTokenRequest 紫金财险 为接入方提供获取token服务 入参实体
+     * @return 出参实体
+     */
+    public GetAccessTokenResponse getAccessToken(GetAccessTokenRequest getAccessTokenRequest) {
+        String url = zjApiConfigurationProperties.getAccessTokenUrl();
+        GetAccessTokenResponse response = insCrawlerOrderComponents.request(url, "紫金财险", "为接入方提供获取token服务", getAccessTokenRequest, GetAccessTokenResponse.class);
+        ResultEnum.verify(response.getRtnCode());
+        return response;
+    }
+
+    /**
+     * 车险业务获取token服务
+     *
+     * @param queryTokenRequest 紫金财险 车险业务获取token服务 入参实体
+     * @return 出参实体
+     */
+    public QueryTokenResponse queryToken(QueryTokenRequest queryTokenRequest, HttpHeaders httpHeaders) {
+        return request(RequestUrl.QUERY_TOKEN, queryTokenRequest, QueryTokenResponse.class, httpHeaders);
+    }
+
     /**
      * 车型查询
      *
      * @param modelQueryRequest 紫金财险 车型查询 入参实体
      * @return 出参实体
      */
-    public ModelQueryResponse modelQuery(ModelQueryRequest modelQueryRequest) {
-        return request(RequestUrl.MODELS_QUERY, modelQueryRequest, ModelQueryResponse.class);
+    public ModelQueryResponse modelQuery(ModelQueryRequest modelQueryRequest, HttpHeaders httpHeaders) {
+        return request(RequestUrl.MODELS_QUERY, modelQueryRequest, ModelQueryResponse.class, httpHeaders);
     }
 
     /**
@@ -51,8 +195,18 @@ public class ZijinRequestApiComponents {
      * @param queryActualValueRequest 紫金财险 获取车辆实际价值 入参实体
      * @return 出参实体
      */
-    public QueryActualValueResponse queryActualValue(QueryActualValueRequest queryActualValueRequest) {
-        return request(RequestUrl.QUERY_ACTUAL_VALUE, queryActualValueRequest, QueryActualValueResponse.class);
+    public QueryActualValueResponse queryActualValue(QueryActualValueRequest queryActualValueRequest, HttpHeaders httpHeaders) {
+        return request(RequestUrl.QUERY_ACTUAL_VALUE, queryActualValueRequest, QueryActualValueResponse.class, httpHeaders);
+    }
+
+    /**
+     * 查询“车+意”中意外险方案信息
+     *
+     * @param queryVehicProductsRequest 紫金财险 查询“车+意”中意外险方案信息(非摩托车险)入参实体
+     * @return 出参实体
+     */
+    public QueryVehicProductsResponse queryVehicleProducts(QueryVehicProductsRequest queryVehicProductsRequest, HttpHeaders httpHeaders) {
+        return request(RequestUrl.QUERY_VEHIC_PRODUCTS, queryVehicProductsRequest, QueryVehicProductsResponse.class, httpHeaders);
     }
 
     /**
@@ -61,8 +215,8 @@ public class ZijinRequestApiComponents {
      * @param calculatePremiumRequest 紫金财险 保费计算 入参实体
      * @return 出参实体
      */
-    public CalculatePremiumResponse calculatePremium(CalculatePremiumRequest calculatePremiumRequest) {
-        return request(RequestUrl.CALCULATE_PREMIUM, calculatePremiumRequest, CalculatePremiumResponse.class);
+    public CalculatePremiumResponse calculatePremium(CalculatePremiumRequest calculatePremiumRequest, HttpHeaders httpHeaders) {
+        return request(RequestUrl.CALCULATE_PREMIUM, calculatePremiumRequest, CalculatePremiumResponse.class, httpHeaders);
     }
 
     /**
@@ -71,8 +225,8 @@ public class ZijinRequestApiComponents {
      * @param uploadFileRequest 紫金财险 文件上传 入参实体
      * @return 出参实体
      */
-    public UploadFileResponse uploadFile(UploadFileRequest uploadFileRequest) {
-        return request(RequestUrl.UPLOAD_FILE, uploadFileRequest, UploadFileResponse.class);
+    public UploadFileResponse uploadFile(UploadFileRequest uploadFileRequest, HttpHeaders httpHeaders) {
+        return request(RequestUrl.UPLOAD_FILE, uploadFileRequest, UploadFileResponse.class, httpHeaders);
     }
 
     /**
@@ -81,8 +235,8 @@ public class ZijinRequestApiComponents {
      * @param uploadImageInfoListRequest 紫金财险 文件信息与订单关联 入参实体
      * @return 出参实体
      */
-    public BaseResponse uploadImageInfoList(UploadImageInfoListRequest uploadImageInfoListRequest) {
-        return request(RequestUrl.UPLOAD_IMAGE_INFO_LIST, uploadImageInfoListRequest, BaseResponse.class);
+    public BaseResponse uploadImageInfoList(UploadImageInfoListRequest uploadImageInfoListRequest, HttpHeaders httpHeaders) {
+        return request(RequestUrl.UPLOAD_IMAGE_INFO_LIST, uploadImageInfoListRequest, BaseResponse.class, httpHeaders);
     }
 
     /**
@@ -91,8 +245,8 @@ public class ZijinRequestApiComponents {
      * @param submitVerifyRequest 紫金财险 提交核保 入参实体
      * @return 出参实体
      */
-    public SubmitVerifyResponse submitVerify(SubmitVerifyRequest submitVerifyRequest) {
-        return request(RequestUrl.SUBMIT_VERIFY, submitVerifyRequest, SubmitVerifyResponse.class);
+    public SubmitVerifyResponse submitVerify(SubmitVerifyRequest submitVerifyRequest, HttpHeaders httpHeaders) {
+        return request(RequestUrl.SUBMIT_VERIFY, submitVerifyRequest, SubmitVerifyResponse.class, httpHeaders);
     }
 
     /**
@@ -101,8 +255,8 @@ public class ZijinRequestApiComponents {
      * @param zbfAggregatePayRequest 紫金财险 聚合支付服务 入参实体
      * @return 出参实体
      */
-    public ZbfAggregatePayResponse zbfAggregatePay(ZbfAggregatePayRequest zbfAggregatePayRequest) {
-        return request(RequestUrl.ZBF_AGGREGATE_PAY, zbfAggregatePayRequest, ZbfAggregatePayResponse.class);
+    public ZbfAggregatePayResponse zbfAggregatePay(ZbfAggregatePayRequest zbfAggregatePayRequest, HttpHeaders httpHeaders) {
+        return request(RequestUrl.ZBF_AGGREGATE_PAY, zbfAggregatePayRequest, ZbfAggregatePayResponse.class, httpHeaders);
     }
 
     /**
@@ -114,8 +268,9 @@ public class ZijinRequestApiComponents {
      * @return 电子保单连接
      */
     public String getDownLoadDocumentUrl(String busNo, String busType, String identifyNo) {
-        String uri = String.format("?busNo=%s&busType=%s&identifyNo=%s", busNo, busType, identifyNo);
+        String parameter = String.format("?busNo=%s&busType=%s&identifyNo=%s", busNo, busType, identifyNo);
         String downLoadDocument = zjApiConfigurationProperties.getDownLoadDocument();
-        return downLoadDocument + uri;
+        return downLoadDocument + parameter;
     }
+
 }

+ 60 - 0
src/main/java/com/ydtech/modules/order/constants/OrderCacheConstant.java

@@ -0,0 +1,60 @@
+package com.ydtech.modules.order.constants;
+
+
+/**
+ * @description: 订单相关缓存常量
+ * @author: wenks
+ * @date: 2023/8/19 9:51
+ **/
+public class OrderCacheConstant {
+
+    private OrderCacheConstant() {
+        throw new IllegalStateException("Utility class");
+    }
+
+    /**
+     * 订单缓存
+     */
+    public static final String QUOTE_INFO_KEY = "ins:orders:";
+
+    /**
+     * 订单缓存时间
+     */
+    public static final long QUOTE_INFO_KEY_TIME = 1L;
+
+    /**
+     * 核保规则
+     */
+    public static final String QUOTE_RULES_KEY = "ins:rules:";
+
+    /**
+     * 核保规则时间
+     */
+    public static final long QUOTE_RULES_KEY_TIME = 1L;
+
+    /**
+     * 中煤核保返回
+     */
+    public static final String ZM_AUDIT_RETURN_MESSAGE = "zm:audit:returnMessage:";
+
+    /**
+     * 中煤核保返回时间
+     */
+    public static final long ZM_AUDIT_RETURN_MESSAGE_TIME = 10L;
+
+    /**
+     * 紫金财险 为接入方提供获取token
+     */
+    public static final String ZJ_ACCESS_TOKEN = "zj:accessToken:";
+
+    /**
+     * token 锁
+     */
+    public static final String ZJ_ACCESS_LOCK = "zj:accessLock:";
+
+    /**
+     * 紫金财险 为接入方提供获取token时间
+     */
+    public static final long ZJ_ACCESS_TOKEN_TIME = 6 * 24L + 23L;
+
+}

+ 7 - 0
src/main/java/com/ydtech/modules/order/controller/InsCrawlerOrderController.java

@@ -65,4 +65,11 @@ public class InsCrawlerOrderController extends BaseController {
         return insuranceCrawlerOrderService.getPolicyPrint(subOrderNo);
     }
 
+    @PostMapping("/getDrivingInsurance")
+    @ApiOperation(value = "驾意险")
+    public HttpResult<Object> getDrivingInsurance(@RequestSingleParam(value = "agreementId") String agreementId) {
+        return insuranceCrawlerOrderService.getDrivingInsurance(agreementId);
+    }
+
+
 }

+ 21 - 2
src/main/java/com/ydtech/modules/order/controller/ZijinOrderApiController.java

@@ -5,10 +5,13 @@ import com.ydtech.aop.request.RequestSingleParam;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.ins.model.vo.QuoteRespVo;
 import com.ydtech.modules.order.components.InsOrdersComponents;
-import com.ydtech.modules.order.entity.vo.AccidentalDrivingVo;
+import com.ydtech.modules.order.entity.api.zj.request.CalculatePremiumRequest;
+import com.ydtech.modules.order.entity.api.zj.request.PaymentCallbacksRequest;
+import com.ydtech.modules.order.entity.api.zj.response.QueryVehicProductsResponse;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
 import com.ydtech.modules.order.entity.vo.PolicyPrintVo;
+import com.ydtech.modules.order.entity.vo.zj.ZjVehicleProductsVo;
 import com.ydtech.modules.order.service.ZijinOrderApiService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -17,6 +20,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 @Api(tags = "紫金财险 Api")
 @RestController
 @RequestMapping("/order/zijin")
@@ -31,9 +36,16 @@ public class ZijinOrderApiController {
         this.zijinOrderApiService = zijinOrderApiService;
     }
 
+
+    @PostMapping("queryVehicProducts")
+    @ApiOperation(value = "查询“车+意”中意外险方案信息")
+    public HttpResult<List<QueryVehicProductsResponse.ProductDtoListDTO>> queryVehicleProducts(@RequestBody ZjVehicleProductsVo zjVehicleProductsVo) {
+        return this.zijinOrderApiService.queryVehicleProducts(zjVehicleProductsVo);
+    }
+
     @PostMapping("/quote")
     @ApiOperation("报价")
-    public HttpResult<QuoteRespVo> quote(@RequestBody BaseQuoteVo<AccidentalDrivingVo> quoteVo) {
+    public HttpResult<QuoteRespVo> quote(@RequestBody BaseQuoteVo<List<CalculatePremiumRequest.CarPolicySubInfoListDTO>> quoteVo) {
         BaseQuoteInfoVo quoteInfo = this.insOrdersComponents.getQuoteInfo(quoteVo.getOrderNo(), quoteVo.getAgreementId());
         return this.zijinOrderApiService.quote(quoteInfo, quoteVo);
     }
@@ -56,4 +68,11 @@ public class ZijinOrderApiController {
         return this.zijinOrderApiService.getPolicyPrint(policyPrintVo);
     }
 
+    @PostMapping("/paymentCallbacks")
+    @ApiOperation(value = "支付回调")
+    public HttpResult<Object> paymentCallbacks(PaymentCallbacksRequest paymentCallbacksRequest) {
+        return this.zijinOrderApiService.paymentCallbacks(paymentCallbacksRequest);
+    }
+
+
 }

+ 9 - 14
src/main/java/com/ydtech/modules/order/entity/InsOrders.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ydtech.constants.enums.InsOrderStatus;
+import com.ydtech.constants.enums.dict.agreement.ProductsType;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.model.SysDept;
 import com.ydtech.modules.admin.model.SysUser;
@@ -247,26 +248,20 @@ public class InsOrders implements Serializable {
      * @param kinds 商业险险种
      */
     private void productInformation(List<RiskInfoVo> risks, List<KindInfoVo> kinds) {
-        String productId;
-        String productname;
+        ProductsType productsType;
         if (risks.size() == 1 && "0507".equals(risks.get(0).getRiskCode())) {
-            productId = "ZG01001";
-            productname = "单交强";
+            productsType = ProductsType.PT_0330;
         } else if (risks.size() == 1 && kinds.size() == 1 && "B".equals(kinds.get(0).getKindCode())) {
-            productId = "ZG01002";
-            productname = "单三者";
+            productsType = ProductsType.PT_034002;
         } else if (risks.size() == 1) {
-            productId = "ZG01003";
-            productname = "单商业";
+            productsType = ProductsType.PT_034001;
         } else if (risks.size() == 2 && kinds.size() == 1 && "B".equals(kinds.get(0).getKindCode())) {
-            productId = "ZG01004";
-            productname = "交强+三者";
+            productsType = ProductsType.PT_0330034002;
         } else {
-            productId = "ZG01006";
-            productname = "交强+商业";
+            productsType = ProductsType.PT_0330034001;
         }
-        this.setProductid(productId);
-        this.setProduct(productname);
+        this.setProductid(productsType.getCode());
+        this.setProduct(productsType.getDesc());
     }
 
 

+ 25 - 0
src/main/java/com/ydtech/modules/order/entity/api/zj/constants/enums/EHealthTypeCodeEnum.java

@@ -0,0 +1,25 @@
+package com.ydtech.modules.order.entity.api.zj.constants.enums;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+
+/**
+ * @description: 资金财险 意健险险种代码
+ * @author: wenks
+ * @date: 2023/8/23 9:25
+ **/
+@AllArgsConstructor
+@Getter
+public enum EHealthTypeCodeEnum {
+
+    ETC_0737("0737", "紫金驾乘人意外伤害保险"),
+    ETC_0733("0733", "紫金驾驶人意外伤害保险"),
+    ETC_0767("0767", "紫金驾乘人员人生意外保险");
+
+    private final String code;
+
+    private final String name;
+
+}

+ 3 - 1
src/main/java/com/ydtech/modules/order/entity/api/zj/constants/enums/RequestUrl.java

@@ -12,13 +12,15 @@ import lombok.Getter;
 @AllArgsConstructor
 public enum RequestUrl {
 
+    QUERY_TOKEN("queryToken", "车险业务获取token服务"),
     MODELS_QUERY("modelQuery", "车型查询"),
     QUERY_ACTUAL_VALUE("queryActualValue", "获取车辆实际价值"),
     CALCULATE_PREMIUM("calculatePremium", "保费计算"),
     SUBMIT_VERIFY("submitVerify", "提交核保"),
     UPLOAD_FILE("uploadFile", "文件上传"),
     UPLOAD_IMAGE_INFO_LIST("uploadImageInfoList", "文件信息与订单关联"),
-    ZBF_AGGREGATE_PAY("zbfAggregatePay", "ZBF_AGGREGATE_PAY"),
+    ZBF_AGGREGATE_PAY("zbfAggregatePay", "聚合支付服务"),
+    QUERY_VEHIC_PRODUCTS("queryVehicProducts", "查询“车+意”中意外险方案信息(非摩托车险)"),
     DOWN_LOAD_DOCUMENT("downLoadDocument", "第三方电子保单下载接口");
 
     private final String uri;

+ 57 - 1
src/main/java/com/ydtech/modules/order/entity/api/zj/request/CalculatePremiumRequest.java

@@ -16,6 +16,7 @@ import com.ydtech.modules.order.entity.api.zj.response.ModelQueryResponse;
 import com.ydtech.modules.order.entity.api.zm.constants.TimeConstants;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.utils.InsuranceTimeProcessing;
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
@@ -53,6 +54,13 @@ public class CalculatePremiumRequest implements Serializable {
      */
     @JsonProperty("itemKindList")
     private List<ItemKindListDTO> itemKindList;
+
+    /**
+     * 意健险险种代码
+     */
+    @JsonProperty("carPolicySubInfoList")
+    private List<CarPolicySubInfoListDTO> carPolicySubInfoList;
+
     /**
      * 订单ID
      */
@@ -90,7 +98,8 @@ public class CalculatePremiumRequest implements Serializable {
     private VehicleInfoDTO vehicleInfo;
 
 
-    public CalculatePremiumRequest(BaseQuoteInfoVo quoteInfoVo, ModelQueryResponse.VehicleModelInfosDTO vehicleModelInfosDTO, String actualValue) {
+
+    public CalculatePremiumRequest(BaseQuoteInfoVo quoteInfoVo, ModelQueryResponse.VehicleModelInfosDTO vehicleModelInfosDTO, String actualValue, List<CarPolicySubInfoListDTO> accidentalDrivingVo) {
         // 基本信息
         this.baseInfo = new BaseInfoDTO(quoteInfoVo.getRiskList());
         // 车主信息
@@ -99,6 +108,8 @@ public class CalculatePremiumRequest implements Serializable {
         this.insuredList = InsuredListDTO.toInsuredListDTOList(quoteInfoVo.getPolicyHolderInfo(), quoteInfoVo.getInsuredPersonInfo());
         // 险别信息
         this.itemKindList = ItemKindListDTO.toItemKindListDTOList(quoteInfoVo.getKindList(), Integer.parseInt(quoteInfoVo.getCarInfo().getSeatCount()));
+        // 驾意险
+        this.carPolicySubInfoList = accidentalDrivingVo;
         // 交强险
         if ("1".equals(this.baseInfo.calculateFlag)) {
             itemKindList.add(ItemKindListDTO.getCompulsoryInsurance());
@@ -616,5 +627,50 @@ public class CalculatePremiumRequest implements Serializable {
         }
     }
 
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @Data
+    public static class CarPolicySubInfoListDTO implements Serializable {
+
+        private static final long serialVersionUID = 7726772202596894005L;
+        /**
+         * 险种代码
+         */
+        @JsonProperty("riskCode")
+        private String riskCode;
+
+        /**
+         * 险种名称
+         */
+        @JsonProperty("riskName")
+        private String riskName;
+
+        /**
+         * 附加险种投保方案号
+         */
+        @JsonProperty("insureGradeNo")
+        private String insureGradeNo;
+
+        /**
+         * 购买份数
+         */
+        @JsonProperty("quantity")
+        private String quantity;
+
+        /**
+         * 总保额
+         */
+        @JsonProperty("sumAmount")
+        private String sumAmount;
+
+        /**
+         * 总保费
+         */
+        @JsonProperty("sumPremium")
+        private String sumPremium;
+
+
+    }
+
 
 }

+ 44 - 0
src/main/java/com/ydtech/modules/order/entity/api/zj/request/GetAccessTokenRequest.java

@@ -0,0 +1,44 @@
+package com.ydtech.modules.order.entity.api.zj.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+
+/**
+ * @description: 紫金财险 为接入方提供获取token服务 入参实体
+ * @author: wenks
+ * @date: 2023/8/19 9:28
+ **/
+@NoArgsConstructor
+@Data
+public class GetAccessTokenRequest implements Serializable {
+
+    private static final long serialVersionUID = 5464200307952281355L;
+
+    /**
+     * 应用Key
+     */
+    @JsonProperty("appKey")
+    private String appKey;
+
+    /**
+     * 应用Secret
+     */
+    @JsonProperty("appSecret")
+    private String appSecret;
+
+    /**
+     * 过期时间 过期时间设定需在1~7天之间
+     */
+    @JsonProperty("tokenExpireDay")
+    private String tokenExpireDay = "7";
+
+    public GetAccessTokenRequest(String appKey, String appSecret) {
+        this.appKey = appKey;
+        this.appSecret = appSecret;
+    }
+
+}

+ 18 - 2
src/main/java/com/ydtech/modules/order/entity/api/zj/request/ModelQueryRequest.java

@@ -1,6 +1,8 @@
 package com.ydtech.modules.order.entity.api.zj.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.ins.model.vo.CarInfoVo;
+import com.ydtech.modules.order.entity.config.ZjConfigureParameters;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
@@ -70,13 +72,13 @@ public class ModelQueryRequest implements Serializable {
      * 投保地区省代码
      */
     @JsonProperty("proposalAreaCode")
-    private Integer proposalAreaCode;
+    private String proposalAreaCode;
 
     /**
      * 投保地区市代码
      */
     @JsonProperty("proposalCityCode")
-    private Integer proposalCityCode;
+    private String proposalCityCode;
 
     /**
      * 车辆识别代码
@@ -89,4 +91,18 @@ public class ModelQueryRequest implements Serializable {
      */
     @JsonProperty("modelCode")
     private String modelCode;
+
+    /**
+     * 通过车辆信息和配置信息构造 车型查询入参实体
+     *
+     * @param carInfoVo             车辆信息
+     * @param zjConfigureParameters 配置信息
+     */
+    public ModelQueryRequest(CarInfoVo carInfoVo, ZjConfigureParameters zjConfigureParameters) {
+        this.orderOrigin = zjConfigureParameters.getOrderOrigin();
+        this.proposalAreaCode = zjConfigureParameters.getProposalAreaCode();
+        this.proposalCityCode = zjConfigureParameters.getProposalAreaCode();
+        this.vinNo = carInfoVo.getVinNo();
+        this.brandName = carInfoVo.getBrandName();
+    }
 }

+ 39 - 0
src/main/java/com/ydtech/modules/order/entity/api/zj/request/PaymentCallbacksRequest.java

@@ -0,0 +1,39 @@
+package com.ydtech.modules.order.entity.api.zj.request;
+
+import lombok.Data;
+
+
+/**
+ * @description: 紫金财险 支付回调实体
+ * @author: wenks
+ * @date: 2023/8/19 13:01
+ **/
+@Data
+public class PaymentCallbacksRequest {
+
+    /**
+     * 响应代码
+     */
+    private String errorCode;
+    /**
+     * 响应信息
+     */
+    private String errorMessage;
+    /**
+     * 订单号
+     */
+    private String orderId;
+    /**
+     * 保单号
+     */
+    private String policyNo;
+    /**
+     * 交强险保单号(单商业或者非车险投保时为空)
+     */
+    private String policyNoCI;
+    /**
+     * 支付交易号
+     */
+    private String transNo;
+
+}

+ 36 - 0
src/main/java/com/ydtech/modules/order/entity/api/zj/request/QueryTokenRequest.java

@@ -0,0 +1,36 @@
+package com.ydtech.modules.order.entity.api.zj.request;
+
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+
+/**
+ * @description: 紫金财险 车险业务获取token服务 入参实体
+ * @author: wenks
+ * @date: 2023/8/19 9:28
+ **/
+@NoArgsConstructor
+@Data
+public class QueryTokenRequest implements Serializable {
+
+    private static final long serialVersionUID = -6471813879824927508L;
+
+    @JsonProperty("orderOrigin")
+    private String orderOrigin;
+
+    @JsonProperty("thirdOrderNo")
+    private String thirdOrderNo;
+
+    @JsonProperty("userId")
+    private String userId;
+
+    public QueryTokenRequest(String orderOrigin, String userId) {
+        this.orderOrigin = orderOrigin;
+        this.userId = userId;
+    }
+
+}

+ 73 - 0
src/main/java/com/ydtech/modules/order/entity/api/zj/request/QueryVehicProductsRequest.java

@@ -0,0 +1,73 @@
+package com.ydtech.modules.order.entity.api.zj.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.api.zj.constants.enums.EHealthTypeCodeEnum;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.List;
+
+
+/**
+ * @description: 紫金财险 查询“车+意”中意外险方案信息(非摩托车险)入参实体
+ * @author: wenks
+ * @date: 2023/8/23 10:49
+ **/
+@NoArgsConstructor
+@Data
+public class QueryVehicProductsRequest implements Serializable {
+
+    private static final long serialVersionUID = 9207340084423173275L;
+
+    /**
+     * 车辆类型
+     */
+    @JsonProperty("carKindCode")
+    private String carKindCode;
+
+    /**
+     * 座位数限制
+     */
+    @JsonProperty("noCarRiskCodeList")
+    private List<String> noCarRiskCodeList;
+
+    /**
+     * 座位数限制
+     */
+    @JsonProperty("seatCount")
+    private Integer seatCount;
+
+    /**
+     * 车辆使用性质
+     */
+    @JsonProperty("useNature")
+    private String useNature;
+
+    /**
+     * 渠道代码(第三方渠道必填)
+     */
+    @JsonProperty("orderOrigin")
+    private String orderOrigin;
+
+    /**
+     * 投保地区市代码(第三方渠道必填)
+     */
+    @JsonProperty("proposalCityCode")
+    private String proposalCityCode;
+
+
+    public QueryVehicProductsRequest(Integer seatCount, String orderOrigin, String proposalCityCode) {
+        this.carKindCode = "A0";
+        this.noCarRiskCodeList =
+                Arrays.asList(EHealthTypeCodeEnum.ETC_0737.getCode(),
+                        EHealthTypeCodeEnum.ETC_0733.getCode(),
+                        EHealthTypeCodeEnum.ETC_0767.getCode());
+        this.seatCount = seatCount;
+        this.useNature = "85";
+        this.orderOrigin = orderOrigin;
+        this.proposalCityCode = proposalCityCode;
+    }
+
+}

+ 29 - 0
src/main/java/com/ydtech/modules/order/entity/api/zj/response/GetAccessTokenResponse.java

@@ -0,0 +1,29 @@
+package com.ydtech.modules.order.entity.api.zj.response;
+
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+
+
+/**
+ * @version
+ * @description: 紫金财险 为接入方提供获取token服务 出参实体
+ * @author: wenks
+ * @date: 2023/8/19 9:29
+ **/
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class GetAccessTokenResponse extends BaseResponse{
+
+    private static final long serialVersionUID = -3883464091055560963L;
+
+    /**
+     * Authorization的值
+     */
+    @JsonProperty("token")
+    private String token;
+}

+ 21 - 29
src/main/java/com/ydtech/modules/order/entity/api/zj/response/ModelQueryResponse.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.order.entity.api.zj.response;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.filter.CarModelsFilter;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
@@ -20,39 +21,29 @@ public class ModelQueryResponse extends BaseResponse implements Serializable {
 
     private static final long serialVersionUID = 345873689646517032L;
     /**
-     *
+     * 订单ID
      */
     @JsonProperty("orderId")
     private String orderId;
     /**
-     *
+     * 订单号
      */
     @JsonProperty("orderNo")
     private String orderNo;
-    /**
-     *
-     */
-    @JsonProperty("rtnCode")
-    private String rtnCode;
-    /**
-     *
-     */
-    @JsonProperty("rtnMsg")
-    private String rtnMsg;
     /**
      *
      */
     @JsonProperty("success")
     private Boolean success;
     /**
-     *
+     * 返回车型列表
      */
     @JsonProperty("vehicleModelInfos")
     private List<VehicleModelInfosDTO> vehicleModelInfos;
 
     @NoArgsConstructor
     @Data
-    public static class VehicleModelInfosDTO implements Serializable {
+    public static class VehicleModelInfosDTO implements Serializable, CarModelsFilter {
 
         private static final long serialVersionUID = -7781619063783117252L;
         /**
@@ -86,77 +77,77 @@ public class ModelQueryResponse extends BaseResponse implements Serializable {
         @JsonProperty("carSeriesName")
         private String carSeriesName;
         /**
-         *
+         * 车辆类别(A/B类)
          */
         @JsonProperty("carStyle")
         private String carStyle;
         /**
-         *
+         * 年款
          */
         @JsonProperty("carYear")
         private String carYear;
         /**
-         *
+         * 厂商编码
          */
         @JsonProperty("companyCode")
         private String companyCode;
         /**
-         *
+         * 整备质量(最大)
          */
         @JsonProperty("completeKerbmassMax")
         private String completeKerbmassMax;
         /**
-         *
+         * 整备质量(最小)
          */
         @JsonProperty("completeKerbmassMin")
         private String completeKerbmassMin;
         /**
-         *
+         * 排量
          */
         @JsonProperty("exhaustCapacity")
         private String exhaustCapacity;
         /**
-         *
+         * 生产厂家
          */
         @JsonProperty("factory")
         private String factory;
         /**
-         *
+         * 车系编码
          */
         @JsonProperty("familyCode")
         private String familyCode;
         /**
-         *
+         * 整备质量
          */
         @JsonProperty("fullWeight")
         private String fullWeight;
         /**
-         *
+         * 变速箱类型编码
          */
         @JsonProperty("gearboxType")
         private String gearboxType;
         /**
-         *
+         * 车组编码
          */
         @JsonProperty("groupCode")
         private String groupCode;
         /**
-         *
+         * 车组名称
          */
         @JsonProperty("groupName")
         private String groupName;
         /**
-         *
+         * 车船税减免标识编码
          */
         @JsonProperty("hfCode")
         private String hfCode;
         /**
-         *
+         * 车船税减免标识
          */
         @JsonProperty("hfName")
         private String hfName;
         /**
-         *
+         * 车型种类
          */
         @JsonProperty("importFlag")
         private String importFlag;
@@ -305,5 +296,6 @@ public class ModelQueryResponse extends BaseResponse implements Serializable {
          */
         @JsonProperty("vinNo")
         private String vinNo;
+
     }
 }

+ 24 - 0
src/main/java/com/ydtech/modules/order/entity/api/zj/response/QueryTokenResponse.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.order.entity.api.zj.response;
+
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * @description: 紫金财险 车险业务获取token服务  出参实体
+ * @author: wenks
+ * @date: 2023/8/19 9:29
+ **/
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class QueryTokenResponse extends BaseResponse{
+
+    private static final long serialVersionUID = 3583709566525597016L;
+
+    @JsonProperty("token")
+    private String token;
+
+}

+ 74 - 0
src/main/java/com/ydtech/modules/order/entity/api/zj/response/QueryVehicProductsResponse.java

@@ -0,0 +1,74 @@
+package com.ydtech.modules.order.entity.api.zj.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description: 紫金财险 查询“车+意”中意外险方案信息(非摩托车险) 出参实体
+ * @author: wenks
+ * @date: 2023/8/23 10:48
+ **/
+@NoArgsConstructor
+@Data
+public class QueryVehicProductsResponse extends BaseResponse {
+
+    private static final long serialVersionUID = 3078555057295275730L;
+
+    @JsonProperty("productDtoList")
+    private List<ProductDtoListDTO> productDtoList;
+
+    @NoArgsConstructor
+    @Data
+    @ApiModel("“车+意”中意外险方案信息")
+    public static class ProductDtoListDTO implements Serializable {
+
+        private static final long serialVersionUID = 4720172787631313564L;
+
+        @ApiModelProperty("项目代码")
+        @JsonProperty("projectCode")
+        private String projectCode;
+
+        @ApiModelProperty("项目名称")
+        @JsonProperty("projectName")
+        private String projectName;
+
+        @ApiModelProperty("方案描述")
+        @JsonProperty("projectDesc")
+        private String projectDesc;
+
+        @ApiModelProperty("险种名称")
+        @JsonProperty("riskCode")
+        private String riskCode;
+
+        @ApiModelProperty("险种名称")
+        @JsonProperty("riskName")
+        private String riskName;
+
+        @ApiModelProperty("总保费")
+        @JsonProperty("sumPremium")
+        private String sumPremium;
+
+        @ApiModelProperty("总保额")
+        @JsonProperty("sumAmount")
+        private String sumAmount;
+
+        @ApiModelProperty("绩效费用")
+        @JsonProperty("saleRyFee")
+        private String saleRyFee;
+
+        @ApiModelProperty("手续费用")
+        @JsonProperty("commiFee")
+        private String commiFee;
+
+        @ApiModelProperty("最大购买份数(校验用)")
+        @JsonProperty("maxQuantity")
+        private Integer maxQuantity;
+    }
+
+}

+ 15 - 3
src/main/java/com/ydtech/modules/order/entity/api/zm/response/ModelsQueryResponse.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.order.entity.api.zm.response;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ydtech.modules.ins.model.zm.ZmCarModel;
 import com.ydtech.modules.order.entity.api.zm.BaseResponse;
+import com.ydtech.modules.order.entity.filter.CarModelsFilter;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
@@ -34,7 +35,7 @@ public class ModelsQueryResponse extends BaseResponse {
 
     @NoArgsConstructor
     @Data
-    public static class SimpleStadarCarDTO implements Serializable {
+    public static class SimpleStadarCarDTO implements Serializable, CarModelsFilter {
 
         private static final long serialVersionUID = 6983519785684153330L;
 
@@ -119,7 +120,7 @@ public class ModelsQueryResponse extends BaseResponse {
          * 新车购置价
          */
         @JsonProperty("purchasePrice")
-        private Integer purchasePrice;
+        private String purchasePrice;
 
         /**
          * 车系名称
@@ -171,7 +172,7 @@ public class ModelsQueryResponse extends BaseResponse {
             this.power = Double.parseDouble(zmCarInfoVO.getPower());
             this.priceEnd = 0;
             this.priceStart = 0;
-            this.purchasePrice = Integer.valueOf(zmCarInfoVO.getPurchasePrice());
+            this.purchasePrice = zmCarInfoVO.getPurchasePrice();
             this.series = zmCarInfoVO.getSeries();
             this.seriesCode = zmCarInfoVO.getSeriesCode();
             this.tractionMass = Double.parseDouble(zmCarInfoVO.getTractionMass());
@@ -179,6 +180,17 @@ public class ModelsQueryResponse extends BaseResponse {
             this.unladenMass = Double.parseDouble(zmCarInfoVO.getUnladenMass());
             this.vehicleDescription = zmCarInfoVO.getRemark();
         }
+
+        @Override
+        public String getCarYear() {
+            return lfDate;
+        }
+
+        @Override
+        public String getPurchasePrice() {
+            return purchasePrice;
+        }
+
     }
 
 }

+ 39 - 0
src/main/java/com/ydtech/modules/order/entity/config/ZjConfigureParameters.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.order.entity.config;
 
 
+import com.ydtech.modules.order.constants.OrderCacheConstant;
 import lombok.Data;
 
 
@@ -12,5 +13,43 @@ import lombok.Data;
 @Data
 public class ZjConfigureParameters implements ConfigureParameters {
 
+    /**
+     * 应用Key
+     */
+    private String  appKey;
+
+    /**
+     * 应用Secret
+     */
+    private String appSecret;
+
+    /**
+     * 渠道来源
+     */
+    private String orderOrigin;
+
+    /**
+     * 第三方用户id
+     */
+    private String userId;
+
+    /**
+     * 投保地区省代码
+     */
+    private String proposalAreaCode;
+
+    /**
+     * 投保地区市代码
+     */
+    private String proposalCityCode;
+
+
+    public String getAccessToken(){
+        return OrderCacheConstant.ZJ_ACCESS_TOKEN + this.getUserId() + ":" + this.getAppKey();
+    }
+
+    public String getAccessLock(){
+        return OrderCacheConstant.ZJ_ACCESS_TOKEN + this.getUserId() + ":" + this.getAppKey();
+    }
 
 }

+ 18 - 0
src/main/java/com/ydtech/modules/order/entity/crawler/request/CrawlerDrivingInsuranceRequest.java

@@ -0,0 +1,18 @@
+package com.ydtech.modules.order.entity.crawler.request;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class CrawlerDrivingInsuranceRequest implements Serializable {
+
+    private static final long serialVersionUID = 8151902848410054713L;
+
+    private String username;
+
+}

+ 19 - 0
src/main/java/com/ydtech/modules/order/entity/crawler/response/CrawlerDrivingInsuranceResponse.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.order.entity.crawler.response;
+
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class CrawlerDrivingInsuranceResponse extends CrawlerBaseResponse{
+
+    private static final long serialVersionUID = 2606173551494411313L;
+
+    @JsonProperty("overlayPlanList")
+    private List<Object> overlayPlanList;
+
+}

+ 10 - 0
src/main/java/com/ydtech/modules/order/entity/filter/CarModelsFilter.java

@@ -0,0 +1,10 @@
+package com.ydtech.modules.order.entity.filter;
+
+
+public interface CarModelsFilter {
+
+    String getCarYear();
+
+    String getPurchasePrice();
+
+}

+ 36 - 0
src/main/java/com/ydtech/modules/order/entity/filter/CarModelsFilterUtils.java

@@ -0,0 +1,36 @@
+package com.ydtech.modules.order.entity.filter;
+
+import com.ydtech.modules.ins.model.vo.CarInfoVo;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @description: 过滤车型
+ * @author: wenks
+ * @date: 2023/8/22 9:54
+ **/
+public class CarModelsFilterUtils<T extends CarModelsFilter> {
+
+    public T to(List<T> carModelsFilterList, CarInfoVo carInfo) {
+        List<T> stadarCarDTOS = new ArrayList<>();
+        if (!StringUtils.isEmpty(carInfo.getCaryear())) {
+            stadarCarDTOS = carModelsFilterList.stream().filter(car -> carInfo.getCaryear().equals(car.getCarYear())).collect(Collectors.toList());
+        }
+
+        if (!stadarCarDTOS.isEmpty()) {
+            carModelsFilterList = stadarCarDTOS;
+        }
+
+        carModelsFilterList = carModelsFilterList.stream().filter(car -> carInfo.getPurchasePrice().equals(String.valueOf(car.getPurchasePrice()))).collect(Collectors.toList());
+
+        if (carModelsFilterList.isEmpty()) {
+            carModelsFilterList = stadarCarDTOS;
+        }
+        return carModelsFilterList.get(0);
+    }
+
+
+}

+ 3 - 1
src/main/java/com/ydtech/modules/order/entity/po/InsTaskImagesBase64.java

@@ -13,7 +13,9 @@ import lombok.NoArgsConstructor;
 @NoArgsConstructor
 public class InsTaskImagesBase64 {
 
-
+    /**
+     * 报价单号
+     */
     private String quoteNo;
     /**
      * 图片类型(C01车辆影像,C02车主身份证,C03投保人身份证,C04被保人身份证,C05验车照)

+ 27 - 0
src/main/java/com/ydtech/modules/order/entity/vo/zj/ZjVehicleProductsVo.java

@@ -0,0 +1,27 @@
+package com.ydtech.modules.order.entity.vo.zj;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+/**
+ * @version
+ * @description: 紫金财险驾意险请求
+ * @author: wenks
+ * @date: 2023/8/23 11:04
+ **/
+@Data
+public class ZjVehicleProductsVo implements Serializable {
+
+    private static final long serialVersionUID = -626267913196798850L;
+
+    @ApiModelProperty("协议id")
+    private String agreementId;
+
+    @ApiModelProperty("座位数限制")
+    private int seatCount;
+
+
+}

+ 2 - 2
src/main/java/com/ydtech/modules/order/service/BaseOrderService.java

@@ -16,14 +16,14 @@ public interface BaseOrderService<T> {
      * @param quoteInfoVo 报价实体
      * @return
      */
-    HttpResult<QuoteRespVo> quote(BaseQuoteInfoVo quoteInfoVo, BaseQuoteVo<T> t);
+    HttpResult<QuoteRespVo> quote(BaseQuoteInfoVo quoteInfoVo, BaseQuoteVo<T> t) ;
 
     /**
      * 核保
      *
      * @param companyId 子订单号
      */
-    HttpResult<Object> audit(String companyId);
+    HttpResult<Object> audit(String companyId) ;
 
     /**
      * 提交影像信息

+ 7 - 0
src/main/java/com/ydtech/modules/order/service/InsCrawlerOrderService.java

@@ -32,4 +32,11 @@ public interface InsCrawlerOrderService extends BaseOrderService<Object> {
      */
     void isLogin(PtlAgreementAttributionDto attribution, String insCompanyName);
 
+    /**
+     * 获取驾意险
+     *
+     * @param agreementId 协议id
+     * @return Object
+     */
+    HttpResult<Object> getDrivingInsurance(String agreementId);
 }

+ 24 - 2
src/main/java/com/ydtech/modules/order/service/ZijinOrderApiService.java

@@ -1,10 +1,23 @@
 package com.ydtech.modules.order.service;
 
 import com.ydtech.core.page.HttpResult;
-import com.ydtech.modules.order.entity.vo.AccidentalDrivingVo;
+import com.ydtech.modules.order.entity.api.zj.request.CalculatePremiumRequest;
+import com.ydtech.modules.order.entity.api.zj.request.PaymentCallbacksRequest;
+import com.ydtech.modules.order.entity.api.zj.response.QueryVehicProductsResponse;
 import com.ydtech.modules.order.entity.vo.PolicyPrintVo;
+import com.ydtech.modules.order.entity.vo.zj.ZjVehicleProductsVo;
 
-public interface ZijinOrderApiService extends BaseOrderService<AccidentalDrivingVo> {
+import java.util.List;
+
+public interface ZijinOrderApiService extends BaseOrderService<List<CalculatePremiumRequest.CarPolicySubInfoListDTO>> {
+
+
+    /**
+     * 获取驾意险
+     *
+     * @return 查询“车+意”中意外险方案信息
+     */
+    HttpResult<List<QueryVehicProductsResponse.ProductDtoListDTO>> queryVehicleProducts(ZjVehicleProductsVo zjVehicleProductsVo);
 
     /**
      * 获取电子保单
@@ -13,4 +26,13 @@ public interface ZijinOrderApiService extends BaseOrderService<AccidentalDriving
      * @return
      */
     HttpResult<String> getPolicyPrint(PolicyPrintVo policyPrintVo);
+
+    /**
+     * 支付回调
+     *
+     * @param paymentCallbacksRequest 支付回调实体
+     * @return
+     */
+    HttpResult<Object> paymentCallbacks(PaymentCallbacksRequest paymentCallbacksRequest);
+
 }

+ 20 - 44
src/main/java/com/ydtech/modules/order/service/impl/InsCrawlerOrderServiceImpl.java

@@ -9,10 +9,7 @@ import com.ydtech.modules.order.components.InsCrawlerOrderComponents;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.TaxArrears;
 import com.ydtech.modules.order.entity.crawler.constants.CrawlerVerifyPaymentConstants;
-import com.ydtech.modules.order.entity.crawler.request.CrawlerBaseRequest;
-import com.ydtech.modules.order.entity.crawler.request.CrawlerImageRequest;
-import com.ydtech.modules.order.entity.crawler.request.CrawlerLoginRequest;
-import com.ydtech.modules.order.entity.crawler.request.CrawlerQuoteRequest;
+import com.ydtech.modules.order.entity.crawler.request.*;
 import com.ydtech.modules.order.entity.crawler.response.*;
 import com.ydtech.modules.order.entity.crawler.vo.CrawlerPolicyPrintVo;
 import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
@@ -28,13 +25,12 @@ import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
 import com.ydtech.modules.protocol.service.PtlCrawlerApiService;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
 import com.ydtech.utils.CalculateUtils;
-import com.ydtech.utils.idgen.IdGenerate;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
-import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -91,7 +87,7 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
         }
 
         QuoteRespVo quoteRespVo = getQuoteRespVo(response, quoteInfoVo);
-        return responseOrder(response, quoteRespVo, agreementId, ptlAgreementAttribution.getApiType(), insCompanyName);
+        return responseOrder(response, quoteRespVo, ptlAgreementAttribution);
     }
 
     @Override
@@ -177,29 +173,12 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
         double syPremium = response.getBusinessTotalPremium();
 
         QuoteRespVo quoteRespVo = new QuoteRespVo();
-        List<QuoteRiskRespVo> riskList1 = new ArrayList<>();
         List<QuoteKindRespVo> kindList1 = new ArrayList<>();
         List<RiskInfoVo> riskList = yaQuoteInfoVo.getRiskList();
-        for (RiskInfoVo riskInfoVo : riskList) {
-            if ("0507".equals(riskInfoVo.getRiskCode()) && jqPremium != 0) {
-                QuoteRiskRespVo risk = new QuoteRiskRespVo();
-                risk.setRiskCode("0507");
-                risk.setRiskName("机动车交通事故责任强制保险");
-                risk.setPremium(jqPremium);
-                risk.setStartDate(riskInfoVo.getStartDate());
-                risk.setEndDate(riskInfoVo.getEndDate());
-                riskList1.add(risk);
-            }
-            if ("0510".equals(riskInfoVo.getRiskCode()) && syPremium != 0) {
-                QuoteRiskRespVo risk = new QuoteRiskRespVo();
-                risk.setRiskCode("0510");
-                risk.setRiskName("机动车商业保险");
-                risk.setPremium(syPremium);
-                risk.setStartDate(riskInfoVo.getStartDate());
-                risk.setEndDate(riskInfoVo.getEndDate());
-                riskList1.add(risk);
-            }
-        }
+
+        // 报价险种放入保费
+        List<QuoteRiskRespVo> riskList1 = QuoteRiskRespVo.toQuoteRiskRespVoList(riskList, jqPremium, syPremium);
+
         QuoteKindRespVo kind;
         Map<String, Double> map = response.getInsuranceType();
         List<KindInfoVo> kindList = yaQuoteInfoVo.getKindList();
@@ -229,23 +208,9 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
         return quoteRespVo;
     }
 
-    private HttpResult<QuoteRespVo> responseOrder(CrawlerQuoteResponse response, QuoteRespVo quoteRespVo, String agreementId, Integer apiType, String insCompanyName) {
+    private HttpResult<QuoteRespVo> responseOrder(CrawlerQuoteResponse response, QuoteRespVo quoteRespVo, PtlAgreementAttribution ptlAgreementAttribution) {
         //保存订单信息
-        InsAreaCompany insAreaCompany = new InsAreaCompany();
-        insAreaCompany.setId(IdGenerate.nextId());
-        insAreaCompany.setOrderno(quoteRespVo.getOrderno());
-        insAreaCompany.setReptxt(JSON.parseObject(JSON.toJSONString(response)));
-        insAreaCompany.setJqpremium(BigDecimal.valueOf(response.getForceCarInsureRisk()));
-        insAreaCompany.setSypremium(BigDecimal.valueOf(response.getBusinessTotalPremium()));
-        insAreaCompany.setTaxamount(BigDecimal.valueOf(response.getCarInsureShipTax()));
-        insAreaCompany.setSumpremium(BigDecimal.valueOf(response.getCarInsureMain()));
-        insAreaCompany.setOrderstatus(InsOrderStatus.S_0.getCode()); // 1
-        insAreaCompany.setRiskinfo(JSON.parseArray(JSON.toJSONString(quoteRespVo.getRiskList())));
-        insAreaCompany.setKindinfo(JSON.parseArray(JSON.toJSONString(quoteRespVo.getKindList())));
-        insAreaCompany.setInscompany(insCompanyName);
-        // 协议id
-        insAreaCompany.setAgreementId(agreementId);
-        insAreaCompany.setApiType(apiType);
+        InsAreaCompany insAreaCompany = new InsAreaCompany(quoteRespVo, ptlAgreementAttribution);
         insAreaCompany.setTaxArrears(JSON.parseArray(JSON.toJSONString(quoteRespVo.getTaxArrears())));
 
         // 保险公司订单号
@@ -256,5 +221,16 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
         return HttpResult.ok("成功", quoteRespVo);
     }
 
+    @Override
+    public HttpResult<Object> getDrivingInsurance(String agreementId) {
+        PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementId);
+
+        String apiUrl = ptlCrawlerApiService.getApiUrl(agreementId, PtlCrawlerApiType.API_7);
+
+        CrawlerDrivingInsuranceRequest crawlerDrivingInsuranceRequest = new CrawlerDrivingInsuranceRequest(ptlAgreementAttribution.getUsername());
+
+        CrawlerDrivingInsuranceResponse request = insCrawlerOrderComponents.request(apiUrl, ptlAgreementAttribution.getInsCompanyName(), PtlCrawlerApiType.API_7.getDesc(), crawlerDrivingInsuranceRequest, CrawlerDrivingInsuranceResponse.class);
+        return HttpResult.ok(request.getOverlayPlanList());
+    }
 
 }

+ 1 - 1
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java

@@ -49,7 +49,7 @@ import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
-import static com.ydtech.constants.RedisConstant.*;
+import static com.ydtech.modules.order.constants.OrderCacheConstant.*;
 
 /**
  * @author wenkaisen

+ 3 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsTaskImagesServiceImpl.java

@@ -92,6 +92,9 @@ public class InsTaskImagesServiceImpl extends ServiceImpl<InsTaskImagesMapper, I
         }
         return list;
     }
+
+
+
 }
 
 

+ 6 - 12
src/main/java/com/ydtech/modules/order/service/impl/YongAnOrderServiceImpl.java

@@ -8,7 +8,6 @@ import com.ydtech.constants.enums.InsOrderStatus;
 import com.ydtech.constants.enums.InsurKind;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
-import com.ydtech.modules.esm.model.EsmInsCompany;
 import com.ydtech.modules.esm.service.EsmInsCompanyService;
 import com.ydtech.modules.ins.model.vo.*;
 import com.ydtech.modules.ins.model.ya.*;
@@ -112,10 +111,10 @@ public class YongAnOrderServiceImpl implements YongAnOrderService {
         String agreementId = quoteVo.getAgreementId();
         // 账号信息
         PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementId);
+
         YaConfigureParameters yaConfigureParameters = new YaConfigureParameters();
         configureParametersComponents.toEntity(yaConfigureParameters, ptlAgreementAttribution);
 
-        EsmInsCompany esmInsCompany = esmInsCompanyService.getById(ptlAgreementAttribution.getInsCompanyId());
         HttpResult httpResult = new HttpResult();
         RequestData requestData = new RequestData();
         RequestHead requestHead = getRequestHead("C2", yaConfigureParameters);
@@ -345,8 +344,7 @@ public class YongAnOrderServiceImpl implements YongAnOrderService {
         InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
 
         // 账号配置
-        YaConfigureParameters yaConfigureParameters = new YaConfigureParameters();
-        configureParametersComponents.toEntity(yaConfigureParameters, insAreaCompany.getAgreementId());
+        YaConfigureParameters yaConfigureParameters = configureParametersComponents.toEntity(YaConfigureParameters.class, insAreaCompany.getAgreementId());
 
         InsOrders orders = insOrdersService.getById(insAreaCompany.getOrderno());
         RequestData requestData = new RequestData();
@@ -460,8 +458,7 @@ public class YongAnOrderServiceImpl implements YongAnOrderService {
         try {
             InsAreaCompany insAreaCompany = insAreaCompanyService.getById(companyId);
             // 账号配置
-            YaConfigureParameters yaConfigureParameters = new YaConfigureParameters();
-            configureParametersComponents.toEntity(yaConfigureParameters, insAreaCompany.getAgreementId());
+            YaConfigureParameters yaConfigureParameters = configureParametersComponents.toEntity(YaConfigureParameters.class, insAreaCompany.getAgreementId());
 
             InsOrders insOrders = insOrdersService.existOrder(insAreaCompany.getOrderno());
             List<InsTaskImagesBase64> insTaskImagesBase64s = insTaskImagesService.findByOrderNo(insOrders.getOrderno());
@@ -530,8 +527,7 @@ public class YongAnOrderServiceImpl implements YongAnOrderService {
         try {
             InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
             // 账号配置
-            YaConfigureParameters yaConfigureParameters = new YaConfigureParameters();
-            configureParametersComponents.toEntity(yaConfigureParameters, insAreaCompany.getAgreementId());
+            YaConfigureParameters yaConfigureParameters = configureParametersComponents.toEntity(YaConfigureParameters.class, insAreaCompany.getAgreementId());
 
             InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
             RequestData requestData = new RequestData();
@@ -591,8 +587,7 @@ public class YongAnOrderServiceImpl implements YongAnOrderService {
         try {
             InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(yaPayUrlVo.getCompanyId());
             // 账号配置
-            YaConfigureParameters yaConfigureParameters = new YaConfigureParameters();
-            configureParametersComponents.toEntity(yaConfigureParameters, insAreaCompany.getAgreementId());
+            YaConfigureParameters yaConfigureParameters = configureParametersComponents.toEntity(YaConfigureParameters.class, insAreaCompany.getAgreementId());
             RequestData requestData = new RequestData();
             RequestHead requestHead = getRequestHead("B13", yaConfigureParameters);
             RequestBodyB13 requestBodyB13 = new RequestBodyB13();
@@ -665,8 +660,7 @@ public class YongAnOrderServiceImpl implements YongAnOrderService {
         try {
             InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
             // 账号配置
-            YaConfigureParameters yaConfigureParameters = new YaConfigureParameters();
-            configureParametersComponents.toEntity(yaConfigureParameters, insAreaCompany.getAgreementId());
+            YaConfigureParameters yaConfigureParameters = configureParametersComponents.toEntity(YaConfigureParameters.class, insAreaCompany.getAgreementId());
 
             RequestData requestData = new RequestData();
             RequestHead requestHead = getRequestHead("B21", yaConfigureParameters);

+ 54 - 62
src/main/java/com/ydtech/modules/order/service/impl/ZhongMeiOrderApiServiceImpl.java

@@ -15,6 +15,7 @@ import com.ydtech.modules.ins.model.zm.ZmCarModel;
 import com.ydtech.modules.order.components.ConfigureParametersComponents;
 import com.ydtech.modules.order.components.ZhongmeiRequestApiComponents;
 import com.ydtech.modules.order.constants.InsuranceTypeCorrespondence;
+import com.ydtech.modules.order.constants.OrderCacheConstant;
 import com.ydtech.modules.order.convert.SimpleStadarCarDTOConvert;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrders;
@@ -26,6 +27,7 @@ import com.ydtech.modules.order.entity.api.zm.constants.enums.PaymentStatusEnum;
 import com.ydtech.modules.order.entity.api.zm.request.*;
 import com.ydtech.modules.order.entity.api.zm.response.*;
 import com.ydtech.modules.order.entity.config.ZmConfigureParameters;
+import com.ydtech.modules.order.entity.filter.CarModelsFilterUtils;
 import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
 import com.ydtech.modules.order.entity.vo.AccidentalDrivingVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
@@ -49,9 +51,6 @@ import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
-import static com.ydtech.constants.RedisConstant.ZM_AUDIT_RETURN_MESSAGE;
-import static com.ydtech.constants.RedisConstant.ZM_AUDIT_RETURN_MESSAGE_TIME;
-
 @Service
 @Slf4j
 public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
@@ -123,8 +122,9 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         String agreementId = zmQuoteVo.getAgreementId();
         // 账号信息
         PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementId);
-        ZmConfigureParameters zmConfigureParameters = new ZmConfigureParameters();
-        configureParametersComponents.toEntity(zmConfigureParameters, ptlAgreementAttribution);
+        // 通过 协议id获取配置实体
+        ZmConfigureParameters zmConfigureParameters = configureParametersComponents.toEntity(ZmConfigureParameters.class, ptlAgreementAttribution);
+
         BaseRequestHead baseRequestHead = new BaseRequestHead(zmConfigureParameters);
 
         CarInfoVo carInfo = quoteInfo.getCarInfo();
@@ -138,35 +138,21 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         modelInquiry(carInfo.getModelcname(), simpleStadarCarDTOS);
 
         // 2.2 过滤车型
-        List<ModelsQueryResponse.SimpleStadarCarDTO> stadarCarDTOS = new ArrayList<>();
-
-        if (!StringUtils.isEmpty(carInfo.getCaryear())) {
-            stadarCarDTOS = simpleStadarCarDTOS.stream().filter(car -> carInfo.getCaryear().equals(car.getLfDate())).collect(Collectors.toList());
-        }
-
-        if (!stadarCarDTOS.isEmpty()) {
-            simpleStadarCarDTOS = stadarCarDTOS;
-        }
+        ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCarDTO =
+                new CarModelsFilterUtils<ModelsQueryResponse.SimpleStadarCarDTO>().to(simpleStadarCarDTOS, carInfo);
 
-        simpleStadarCarDTOS = simpleStadarCarDTOS.stream().filter(car -> carInfo.getPurchasePrice().equals(String.valueOf(car.getPurchasePrice()))).collect(Collectors.toList());
-
-        if (simpleStadarCarDTOS.isEmpty()) {
-            simpleStadarCarDTOS = stadarCarDTOS;
-        }
-
-        ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCarDTO = simpleStadarCarDTOS.get(0);
-        // 2.3 组装参数
+        // 3 组装参数
         QuotedPriceRequest quotedPriceRequest = new QuotedPriceRequest(quoteInfo, simpleStadarCarDTO, zmQuoteVo.getAccidentalDrivingVo(), zmConfigureParameters);
         quotedPriceRequest.setHead(baseRequestHead);
 
         QuotedPriceResponse quotedPriceResponse = zhongmeiRequestApiComponents.quotedPrice(quotedPriceRequest, QuotedPriceResponse.class);
         QuoteRespVo quoteRespVo = getQuoteRespVo(quotedPriceResponse, quoteInfo);
-        // 3. 第一次提交核保 并且获取投保单号
+        // 4. 第一次提交核保 并且获取投保单号
         SubmitResponse response = submitForUnderwriting(quotedPriceResponse.getBusinessNo(), carInfo.getFrameNo(), quoteInfo.getPolicyHolderInfo(), zmConfigureParameters);
 
-        // 4. 将错误的核保信息存入redis
+        // 5. 将错误的核保信息存入redis
         if (StringUtils.isEmpty(response.getProposalNo())) {
-            redisTemplate.opsForValue().set(ZM_AUDIT_RETURN_MESSAGE + quoteRespVo.getCompanyId(), response.getHead().getReturnMessage(), ZM_AUDIT_RETURN_MESSAGE_TIME, TimeUnit.MINUTES);
+            redisTemplate.opsForValue().set(OrderCacheConstant.ZM_AUDIT_RETURN_MESSAGE + quoteRespVo.getCompanyId(), response.getHead().getReturnMessage(), OrderCacheConstant.ZM_AUDIT_RETURN_MESSAGE_TIME, TimeUnit.MINUTES);
         }
         return responseOrder(quotedPriceResponse, quoteRespVo, response, ptlAgreementAttribution);
     }
@@ -176,8 +162,7 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
     public HttpResult<Object> audit(String companyId) {
         InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
         // 1. 协议id获取配置实体
-        ZmConfigureParameters zmConfigureParameters = new ZmConfigureParameters();
-        configureParametersComponents.toEntity(zmConfigureParameters, insAreaCompany.getAgreementId());
+        ZmConfigureParameters zmConfigureParameters = configureParametersComponents.toEntity(ZmConfigureParameters.class, insAreaCompany.getAgreementId());
 
         InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
         JSONObject ownerinfo = insOrders.getApplyinfo();
@@ -205,15 +190,14 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
     public HttpResult<Object> submitImage(String companyId) {
         InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
         // 1. 协议id获取配置实体
-        ZmConfigureParameters zmConfigureParameters = new ZmConfigureParameters();
-        configureParametersComponents.toEntity(zmConfigureParameters, insAreaCompany.getAgreementId());
+        ZmConfigureParameters zmConfigureParameters = configureParametersComponents.toEntity(ZmConfigureParameters.class, insAreaCompany.getAgreementId());
 
         InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
         // 2. 投保单号(总)
         String insOrderNo = insAreaCompany.getInsOrderNo();
         // 3. 没有投保单号
         if (StringUtils.isEmpty(insOrderNo)) {
-            String s = redisTemplate.opsForValue().get(ZM_AUDIT_RETURN_MESSAGE + companyId);
+            String s = redisTemplate.opsForValue().get(OrderCacheConstant.ZM_AUDIT_RETURN_MESSAGE + companyId);
             if (StringUtils.isEmpty(s)) {
                 throw new SystemException("请重新报价,再核保。");
             } else {
@@ -232,41 +216,49 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
     }
 
     @Override
-    public HttpResult underwritingCallback(CoverageRequest coverageRequest) {
-        String s = JSON.toJSONString(coverageRequest);
-        log.info("中煤承保回调参数------>{}", s);
-
-        if (coverageRequest.getStatus() == PaymentStatusEnum.P_2.getCode()) {
-            // 主投保单号
-            String proposalNo = coverageRequest.getProposalNo();
-            InsAreaCompany insAreaCompany = insAreaCompanyService.getByInsOrderNo(proposalNo);
-            // 保单号
-            insAreaCompany.setJqpolicyno(coverageRequest.getForcePolicyNo());
-            insAreaCompany.setSypolicyno(coverageRequest.getBizPolicyNo());
-            insAreaCompany.setJypolicyno(coverageRequest.getAccidentPolicyNo());
-            insAreaCompany.setOrderstatus(InsOrderStatus.S_3.getCode());
-            insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
+    public HttpResult<Object> underwritingCallback(CoverageRequest coverageRequest) {
+        try {
+            String s = JSON.toJSONString(coverageRequest);
+            log.info("中煤承保回调参数------>{}", s);
+            if (coverageRequest.getStatus() == PaymentStatusEnum.P_2.getCode()) {
+                // 主投保单号
+                String proposalNo = coverageRequest.getProposalNo();
+                InsAreaCompany insAreaCompany = insAreaCompanyService.getByInsOrderNo(proposalNo);
+                // 保单号
+                insAreaCompany.setJqpolicyno(coverageRequest.getForcePolicyNo());
+                insAreaCompany.setSypolicyno(coverageRequest.getBizPolicyNo());
+                insAreaCompany.setJypolicyno(coverageRequest.getAccidentPolicyNo());
+                insAreaCompany.setOrderstatus(InsOrderStatus.S_3.getCode());
+                insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
+            }
+        } catch (Exception e) {
+            log.debug("承保回调 {}", e.getMessage());
         }
+
         return null;
     }
 
     @Override
     public HttpResult<Object> auditCallback(ApprovedRequest approvedRequest) {
-        String s = JSON.toJSONString(approvedRequest);
-        log.info("中煤审核回调参数------>{}", s);
-        // 主投保单号
-        String contractNo = approvedRequest.getContractNo();
-        InsAreaCompany insAreaCompany = insAreaCompanyService.getByInsOrderNo(contractNo);
-        if (AuditStatusEnum.S_1.getCode().equals(approvedRequest.getStatusCode())) {
-            insAreaCompany.setJqapplyno(approvedRequest.getProposalNoJ());
-            insAreaCompany.setSyapplyno(approvedRequest.getProposalNoS());
-            insAreaCompany.setJyapplyno(approvedRequest.getProposalNoCP());
-            insAreaCompany.setPaymentLink(approvedRequest.getPayUrl());
-            insAreaCompany.setOrderstatus(InsOrderStatus.S_2.getCode());
-        } else {
-            insAreaCompany.setOrderstatus(InsOrderStatus.S_4.getCode());
+        try {
+            String s = JSON.toJSONString(approvedRequest);
+            log.info("中煤审核回调参数------>{}", s);
+            // 主投保单号
+            String contractNo = approvedRequest.getContractNo();
+            InsAreaCompany insAreaCompany = insAreaCompanyService.getByInsOrderNo(contractNo);
+            if (AuditStatusEnum.S_1.getCode().equals(approvedRequest.getStatusCode())) {
+                insAreaCompany.setJqapplyno(approvedRequest.getProposalNoJ());
+                insAreaCompany.setSyapplyno(approvedRequest.getProposalNoS());
+                insAreaCompany.setJyapplyno(approvedRequest.getProposalNoCP());
+                insAreaCompany.setPaymentLink(approvedRequest.getPayUrl());
+                insAreaCompany.setOrderstatus(InsOrderStatus.S_2.getCode());
+            } else {
+                insAreaCompany.setOrderstatus(InsOrderStatus.S_4.getCode());
+            }
+            insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
+        } catch (Exception e) {
+            log.debug("审核回调 {}", e.getMessage());
         }
-        insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
         return null;
     }
 
@@ -275,8 +267,8 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         InsAreaCompany insAreaCompany = insAreaCompanyService.getByInsOrderNo(companyId);
 
         // 1. 协议id获取配置实体
-        ZmConfigureParameters zmConfigureParameters = new ZmConfigureParameters();
-        configureParametersComponents.toEntity(zmConfigureParameters, insAreaCompany.getAgreementId());
+        ZmConfigureParameters zmConfigureParameters = configureParametersComponents.toEntity(ZmConfigureParameters.class, insAreaCompany.getAgreementId());
+
         if (insAreaCompany.getOrderstatus().equals(InsOrderStatus.S_3.getCode())) {
             return HttpResult.ok(InsOrderStatus.S_3.getDesc());
         }
@@ -308,8 +300,7 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
     public HttpResult<List<String>> getPolicyPrint(PolicyPrintVo policyPrintVo) {
         InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(policyPrintVo.getCompanyId());
         // 1. 协议id获取配置实体
-        ZmConfigureParameters zmConfigureParameters = new ZmConfigureParameters();
-        configureParametersComponents.toEntity(zmConfigureParameters, insAreaCompany.getAgreementId());
+        ZmConfigureParameters zmConfigureParameters = configureParametersComponents.toEntity(ZmConfigureParameters.class, insAreaCompany.getAgreementId());
 
         String policyNo;
         String code = DocumentTypeEnum.code(policyPrintVo.getType());
@@ -369,6 +360,7 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         QuoteRespVo quoteRespVo = new QuoteRespVo();
 
         List<RiskInfoVo> riskList = yaQuoteInfoVo.getRiskList();
+        // 报价险种放入保费
         List<QuoteRiskRespVo> riskList1 = QuoteRiskRespVo.toQuoteRiskRespVoList(riskList, jqPremium, syPremium);
 
         List<QuoteKindRespVo> kindList1 = new ArrayList<>();

+ 73 - 30
src/main/java/com/ydtech/modules/order/service/impl/ZijinOrderApiServiceImpl.java

@@ -15,14 +15,16 @@ import com.ydtech.modules.order.components.ZijinRequestApiComponents;
 import com.ydtech.modules.order.constants.InsuranceTypeCorrespondence;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.api.zj.constants.enums.ResultEnum;
 import com.ydtech.modules.order.entity.api.zj.request.*;
 import com.ydtech.modules.order.entity.api.zj.response.*;
 import com.ydtech.modules.order.entity.config.ZjConfigureParameters;
+import com.ydtech.modules.order.entity.filter.CarModelsFilterUtils;
 import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
-import com.ydtech.modules.order.entity.vo.AccidentalDrivingVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
 import com.ydtech.modules.order.entity.vo.PolicyPrintVo;
+import com.ydtech.modules.order.entity.vo.zj.ZjVehicleProductsVo;
 import com.ydtech.modules.order.service.InsAreaCompanyService;
 import com.ydtech.modules.order.service.InsOrdersService;
 import com.ydtech.modules.order.service.InsTaskImagesService;
@@ -30,6 +32,8 @@ import com.ydtech.modules.order.service.ZijinOrderApiService;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
 import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
 import com.ydtech.utils.CalculateUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -38,6 +42,7 @@ import java.util.Objects;
 import java.util.stream.Collectors;
 
 @Service
+@Slf4j
 public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
 
     private final ZijinRequestApiComponents zijinRequestApiComponents;
@@ -64,29 +69,41 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
 
 
     @Override
-    public HttpResult<QuoteRespVo> quote(BaseQuoteInfoVo quoteInfoVo, BaseQuoteVo<AccidentalDrivingVo> quoteVo) {
+    public HttpResult<List<QueryVehicProductsResponse.ProductDtoListDTO>> queryVehicleProducts(ZjVehicleProductsVo zjVehicleProductsVo) {
+        // 1 通过 协议id获取配置实体
+        ZjConfigureParameters zjConfigureParameters = configureParametersComponents.toEntity(ZjConfigureParameters.class, zjVehicleProductsVo.getAgreementId());
+        HttpHeaders httpHeaders = zijinRequestApiComponents.getHttpHeaders(zjVehicleProductsVo.getAgreementId());
+        // 2. 请求驾意险
+        QueryVehicProductsRequest queryVehicProductsRequest = new QueryVehicProductsRequest(zjVehicleProductsVo.getSeatCount(), zjConfigureParameters.getOrderOrigin(), zjConfigureParameters.getProposalCityCode());
+        QueryVehicProductsResponse queryVehicProductsResponse = zijinRequestApiComponents.queryVehicleProducts(queryVehicProductsRequest, httpHeaders);
+        return HttpResult.ok(queryVehicProductsResponse.getProductDtoList());
+    }
+
+
+    @Override
+    public HttpResult<QuoteRespVo> quote(BaseQuoteInfoVo quoteInfoVo, BaseQuoteVo<List<CalculatePremiumRequest.CarPolicySubInfoListDTO>> quoteVo) {
         // 1. 协议id获取配置实体
         String agreementId = quoteVo.getAgreementId();
         // 1.1 账号信息
         PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementId);
-        ZjConfigureParameters zjConfigureParameters = new ZjConfigureParameters();
-        configureParametersComponents.toEntity(zjConfigureParameters, ptlAgreementAttribution);
+        // 1.2 通过 协议id获取配置实体
+        ZjConfigureParameters zjConfigureParameters = configureParametersComponents.toEntity(ZjConfigureParameters.class, ptlAgreementAttribution);
+        HttpHeaders httpHeaders = zijinRequestApiComponents.getHttpHeaders(zjConfigureParameters, ZijinRequestApiComponents.RECURSIVE_HIERARCHY);
 
         // 2. 查询车型
-        ModelQueryRequest modelQueryRequest = new ModelQueryRequest();
-        ModelQueryResponse modelQueryResponse = zijinRequestApiComponents.modelQuery(modelQueryRequest);
-        ModelQueryResponse.VehicleModelInfosDTO vehicleModelInfosDTO = modelQueryResponse.getVehicleModelInfos().get(0);
+        ModelQueryRequest modelQueryRequest = new ModelQueryRequest(quoteInfoVo.getCarInfo(), zjConfigureParameters);
+        ModelQueryResponse modelQueryResponse = zijinRequestApiComponents.modelQuery(modelQueryRequest, httpHeaders);
         // 2.1 过滤车型
-
+        ModelQueryResponse.VehicleModelInfosDTO vehicleModelInfosDTO = new CarModelsFilterUtils<ModelQueryResponse.VehicleModelInfosDTO>().to(modelQueryResponse.getVehicleModelInfos(), quoteInfoVo.getCarInfo());
 
         // 3. 计算车辆实际价值
         String purchasePrice = vehicleModelInfosDTO.getPurchasePrice();
         String seatCount = vehicleModelInfosDTO.getSeatCount();
         CarInfoVo carInfo = quoteInfoVo.getCarInfo();
         String startDate;
-        // 4. 计算起保日期
-        List<RiskInfoVo> riskList = quoteInfoVo.getRiskList();
 
+        // 3.1 计算起保日期
+        List<RiskInfoVo> riskList = quoteInfoVo.getRiskList();
         if (riskList.size() == 1 && InsuranceRisk.TRAFFIC.getDesc().equals(riskList.get(0).getRiskCode())) {
             startDate = riskList.get(0).getStartDate();
         } else {
@@ -94,10 +111,10 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
         }
 
         QueryActualValueRequest queryActualValueRequest = new QueryActualValueRequest(carInfo.getRegisterDate(), purchasePrice, seatCount, startDate);
-        QueryActualValueResponse queryActualValueResponse = zijinRequestApiComponents.queryActualValue(queryActualValueRequest);
+        QueryActualValueResponse queryActualValueResponse = zijinRequestApiComponents.queryActualValue(queryActualValueRequest, httpHeaders);
         // 4. 报价
-        CalculatePremiumRequest calculatePremiumRequest = new CalculatePremiumRequest(quoteInfoVo, vehicleModelInfosDTO, queryActualValueResponse.getActualValue());
-        CalculatePremiumResponse calculatePremiumResponse = zijinRequestApiComponents.calculatePremium(calculatePremiumRequest);
+        CalculatePremiumRequest calculatePremiumRequest = new CalculatePremiumRequest(quoteInfoVo, vehicleModelInfosDTO, queryActualValueResponse.getActualValue(), quoteVo.getAccidentalDrivingVo());
+        CalculatePremiumResponse calculatePremiumResponse = zijinRequestApiComponents.calculatePremium(calculatePremiumRequest, httpHeaders);
         QuoteRespVo quoteRespVo = getQuoteRespVo(calculatePremiumResponse, quoteInfoVo);
         return responseOrder(calculatePremiumResponse, quoteRespVo, ptlAgreementAttribution);
     }
@@ -105,22 +122,26 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
     @Override
     public HttpResult<Object> audit(String companyId) {
         InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
+
+        // 1 通过 协议id获取配置实体
+        HttpHeaders httpHeaders = zijinRequestApiComponents.getHttpHeaders(insAreaCompany.getAgreementId());
+
+        // 2 提交核保
         SubmitVerifyRequest submitVerifyRequest = new SubmitVerifyRequest(insAreaCompany.getInsOrderNo());
-        // 提交核保
-        SubmitVerifyResponse submitVerifyResponse = zijinRequestApiComponents.submitVerify(submitVerifyRequest);
+        SubmitVerifyResponse submitVerifyResponse = zijinRequestApiComponents.submitVerify(submitVerifyRequest, httpHeaders);
         SubmitVerifyResponse.SubmitVerifyInfoDTO submitVerifyInfo = submitVerifyResponse.getSubmitVerifyInfo();
 
-        // 保单号
+        // 2.1 保单号
         insAreaCompany.setJqpolicyno(submitVerifyInfo.getPolicyNoCI());
         insAreaCompany.setSypolicyno(submitVerifyInfo.getPolicyNo());
-        // 投保单号
+        // 2.2 投保单号
         insAreaCompany.setJqapplyno(submitVerifyInfo.getProposalNoCI());
         insAreaCompany.setSyapplyno(submitVerifyInfo.getProposalNo());
         insAreaCompany.setOrderstatus(InsOrderStatus.S_2.getCode());
 
-        // 聚合支付服务
+        // 3. 聚合支付服务
         ZbfAggregatePayRequest zbfAggregatePayRequest = new ZbfAggregatePayRequest();
-        ZbfAggregatePayResponse zbfAggregatePayResponse = zijinRequestApiComponents.zbfAggregatePay(zbfAggregatePayRequest);
+        ZbfAggregatePayResponse zbfAggregatePayResponse = zijinRequestApiComponents.zbfAggregatePay(zbfAggregatePayRequest, httpHeaders);
         insAreaCompany.setPaymentLink(zbfAggregatePayResponse.getPayUrl());
         insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
         return HttpResult.ok("核保成功");
@@ -129,18 +150,23 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
     @Override
     public HttpResult<Object> submitImage(String companyId) {
         InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
+
+        // 1 通过 协议id获取配置实体
+        HttpHeaders httpHeaders = zijinRequestApiComponents.getHttpHeaders(insAreaCompany.getAgreementId());
+
         InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
         List<InsTaskImagesBase64> insTaskImagesBase64s = insTaskImagesService.findByOrderNo(insOrders.getOrderno());
         if (insTaskImagesBase64s.isEmpty()) {
             throw new SystemException("请检查影像是否上传了");
         }
+
         // 封装文件订单
         List<UploadImageInfoListRequest.ItemFileDataListDTO> itemFileDataListDTOS = new ArrayList<>();
 
         for (InsTaskImagesBase64 insTaskImagesBase64 : insTaskImagesBase64s) {
             UploadFileRequest uploadImageRequest = new UploadFileRequest(insTaskImagesBase64);
             // 文件上传
-            UploadFileResponse uploadFileResponse = zijinRequestApiComponents.uploadFile(uploadImageRequest);
+            UploadFileResponse uploadFileResponse = zijinRequestApiComponents.uploadFile(uploadImageRequest, httpHeaders);
             // 文件信息与订单关联 itemFileDataList
             UploadImageInfoListRequest.ItemFileDataListDTO itemFileDataListDTO = new UploadImageInfoListRequest.ItemFileDataListDTO(uploadImageRequest, uploadFileResponse.getFileId());
             itemFileDataListDTOS.add(itemFileDataListDTO);
@@ -148,7 +174,7 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
 
         // 文件信息与订单关联
         UploadImageInfoListRequest uploadImageInfoListRequest = new UploadImageInfoListRequest(itemFileDataListDTOS, insAreaCompany.getInsOrderNo());
-        BaseResponse baseResponse = zijinRequestApiComponents.uploadImageInfoList(uploadImageInfoListRequest);
+        BaseResponse baseResponse = zijinRequestApiComponents.uploadImageInfoList(uploadImageInfoListRequest, httpHeaders);
 
         return HttpResult.ok(baseResponse.getRtnMsg());
     }
@@ -181,6 +207,26 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
         return HttpResult.ok("生成成功", url);
     }
 
+    @Override
+    public HttpResult<Object> paymentCallbacks(PaymentCallbacksRequest paymentCallbacksRequest) {
+
+        try {
+            String s = JSON.toJSONString(paymentCallbacksRequest);
+            log.info("紫金财险 承保回调参数------>{}", s);
+
+            ResultEnum.verify(paymentCallbacksRequest.getErrorCode());
+            String proposalNo = paymentCallbacksRequest.getOrderId();
+            InsAreaCompany insAreaCompany = insAreaCompanyService.getByInsOrderNo(proposalNo);
+            // 保单号
+            insAreaCompany.setOrderstatus(InsOrderStatus.S_3.getCode());
+            insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
+        } catch (Exception e) {
+            log.debug("支付回调{}", e.getMessage());
+        }
+
+        return null;
+    }
+
     public QuoteRespVo getQuoteRespVo(CalculatePremiumResponse calculatePremiumResponse, BaseQuoteInfoVo yaQuoteInfoVo) {
         double jqPremium = 0;
         double syPremium = 0;
@@ -198,7 +244,8 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
                     syPremium = Double.parseDouble(planListDTO.getPlanFee());
                     break;
                 case "CSTax":
-                    sumPayTax = Double.parseDouble(planListDTO.getPlanFee()); //车船税;
+                    //车船税
+                    sumPayTax = Double.parseDouble(planListDTO.getPlanFee());
                     break;
                 default:
                     break;
@@ -207,7 +254,7 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
 
         List<QuoteKindRespVo> kindList1 = new ArrayList<>();
         List<RiskInfoVo> riskList = yaQuoteInfoVo.getRiskList();
-        // 主险信息
+        //  报价险种放入保费
         List<QuoteRiskRespVo> riskList1 = QuoteRiskRespVo.toQuoteRiskRespVoList(riskList, jqPremium, syPremium);
 
         QuoteKindRespVo kind;
@@ -222,9 +269,7 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
             kind.setAmount(kindInfoVo.getAmount());
             int i = ArrayUtil.indexOf(InsuranceTypeCorrespondence.getJinZhangGuiType(), kindInfoVo.getKindCode());
 
-            CalculatePremiumResponse.ItemKindListDTO itemKindListDTO = itemKindList.stream().filter(
-                            a -> a.getKindCode().equals(InsuranceTypeCorrespondence.getZmConnectInsuranceType()[i]))
-                    .collect(Collectors.toList()).get(0);
+            CalculatePremiumResponse.ItemKindListDTO itemKindListDTO = itemKindList.stream().filter(a -> a.getKindCode().equals(InsuranceTypeCorrespondence.getZmConnectInsuranceType()[i])).collect(Collectors.toList()).get(0);
 
             kind.setCoveragePremium(Double.parseDouble(itemKindListDTO.getBasePremium()));
             kind.setUnitAmount(kindInfoVo.getUnitAmount());
@@ -241,20 +286,18 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
         quoteRespVo.setCiSumPermium(CalculateUtils.add(jqPremium, sumPayTax));//交强险和车船税合计
         quoteRespVo.setSumPermium(CalculateUtils.add(jqPremium, syPremium, sumPayTax));//保费合计
         quoteRespVo.setTotalAdjustRate(0);
-//        String zmScore = quotedPriceResponse.getPlatMain().getZmScore();
-//        quoteRespVo.setILogPreUdwMess(zmScore);//评分
         quoteRespVo.setOrderno(yaQuoteInfoVo.getOrderNo()); //订单号
         return quoteRespVo;
     }
 
     public HttpResult<QuoteRespVo> responseOrder(CalculatePremiumResponse calculatePremiumResponse, QuoteRespVo quoteRespVo, PtlAgreementAttribution ptlAgreementAttribution) {
-        //保存订单信息
+        // 保存订单信息
         InsAreaCompany insAreaCompany = new InsAreaCompany(quoteRespVo, ptlAgreementAttribution);
         // 协议id
         insAreaCompany.setReptxt(JSON.parseObject(JSON.toJSONString(calculatePremiumResponse)));
         insAreaCompany.setOrderstatus(InsOrderStatus.S_0.getCode());
         insAreaCompanyService.insertCompanyAndOrders(insAreaCompany);
-        return HttpResult.ok("", quoteRespVo);
+        return HttpResult.ok("报价成功", quoteRespVo);
     }
 
 }

+ 1 - 3
src/main/java/com/ydtech/modules/protocol/entity/dto/PtlAgreementCostsFactorSaveDto.java

@@ -39,9 +39,7 @@ public class PtlAgreementCostsFactorSaveDto {
                 .map(Map::entrySet)
                 .flatMap(Set::stream)
                 .filter(x -> (
-                        !ObjectUtils.isEmpty(x.getValue().getParameter()) ||
-                                (!ObjectUtils.isEmpty(x.getValue().getMaxValue()) && !ObjectUtils.isEmpty(x.getValue().getMinValue()) &&
-                                        (x.getValue().getMaxValue() != 0 && x.getValue().getMinValue() != 0))
+                        !ObjectUtils.isEmpty(x.getValue().getParameter()) || (x.getValue().getMaxValue() != 0 && x.getValue().getMinValue() != 0)
                 ))
                 .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> a));
     }

+ 13 - 0
src/main/java/com/ydtech/modules/protocol/entity/dto/PtlFactorDto.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -38,5 +39,17 @@ public class PtlFactorDto {
         return minValue == null || minValue < 0 ? 0 : minValue;
     }
 
+    public static void main(String[] args) {
+
+        ArrayList<String> parameter = new ArrayList<>();
+        parameter.add("");
+
+        List<String> collect = parameter.stream().filter(x -> !x.isEmpty()).collect(Collectors.toList());
+
+        System.out.println(collect);
+
+    }
+
+
 }
 

+ 19 - 3
src/main/java/com/ydtech/modules/protocol/service/PtlAgreementUnderwritingRulesService.java

@@ -1,6 +1,8 @@
 package com.ydtech.modules.protocol.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementCostsFactorSaveDto;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementUnderwritingRulesSaveDto;
 import com.ydtech.modules.protocol.entity.dto.PtlFactorDto;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementUnderwritingRules;
@@ -21,7 +23,11 @@ public interface PtlAgreementUnderwritingRulesService extends IService<PtlAgreem
      *
      * @param agreementId 协议id
      */
-    void deleteByAgreementId(String agreementId);
+    default void deleteByAgreementId(String agreementId) {
+        LambdaQueryWrapper<PtlAgreementUnderwritingRules> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(PtlAgreementUnderwritingRules::getAgreementId, agreementId);
+        remove(wrapper);
+    }
 
     /**
      * 根据 协议id 承保规则查询承保规则
@@ -29,7 +35,11 @@ public interface PtlAgreementUnderwritingRulesService extends IService<PtlAgreem
      * @param agreementId 协议id
      * @return List<PtlAgreementUnderwritingRulesQueryDto>
      */
-    List<PtlAgreementUnderwritingRules> getByAgreementId(String agreementId);
+    default List<PtlAgreementUnderwritingRules> getByAgreementId(String agreementId) {
+        LambdaQueryWrapper<PtlAgreementUnderwritingRules> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(PtlAgreementUnderwritingRules::getAgreementId, agreementId);
+        return list(wrapper);
+    }
 
     /**
      * 根据协议id批量添加承保规则
@@ -46,7 +56,13 @@ public interface PtlAgreementUnderwritingRulesService extends IService<PtlAgreem
      * @param rulesType   规则类型
      * @return Map<String, PtlFactorDto>
      */
-    Map<String, PtlFactorDto> getMapPtlFactorDto(String agreementId, Integer rulesType);
+    default Map<String, PtlFactorDto> getMapPtlFactorDto(String agreementId, Integer rulesType) {
+        LambdaQueryWrapper<PtlAgreementUnderwritingRules> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(PtlAgreementUnderwritingRules::getAgreementId, agreementId)
+                .eq(PtlAgreementUnderwritingRules::getRulesType, rulesType);
+        PtlAgreementUnderwritingRules rules = getOne(wrapper);
+        return PtlAgreementCostsFactorSaveDto.toMapPtlFactorDto(rules.getRulesFactor());
+    }
 
     /**
      * 通过 协议id 查询 list

+ 4 - 41
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementUnderwritingRulesServiceImpl.java

@@ -9,7 +9,6 @@ import com.ydtech.modules.protocol.entity.dto.PtlFactorDto;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementUnderwritingRules;
 import com.ydtech.modules.protocol.service.PtlAgreementUnderwritingRulesService;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
@@ -18,7 +17,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.stream.Collectors;
 
 /**
  * @author wenks
@@ -29,28 +27,6 @@ import java.util.stream.Collectors;
 public class PtlAgreementUnderwritingRulesServiceImpl extends ServiceImpl<PtlAgreementUnderwritingRulesMapper, PtlAgreementUnderwritingRules>
         implements PtlAgreementUnderwritingRulesService {
 
-
-    private PtlAgreementUnderwritingRulesService proxyService;
-
-    @Autowired
-    public void setProxyService(PtlAgreementUnderwritingRulesService proxyService) {
-        this.proxyService = proxyService;
-    }
-
-    @Override
-    public void deleteByAgreementId(String agreementId) {
-        LambdaQueryWrapper<PtlAgreementUnderwritingRules> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(PtlAgreementUnderwritingRules::getAgreementId, agreementId);
-        baseMapper.delete(wrapper);
-    }
-
-    @Override
-    public List<PtlAgreementUnderwritingRules> getByAgreementId(String agreementId) {
-        LambdaQueryWrapper<PtlAgreementUnderwritingRules> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(PtlAgreementUnderwritingRules::getAgreementId, agreementId);
-        return baseMapper.selectList(wrapper);
-    }
-
     @Override
     @Transactional
     public void saveBatchUnderwritingRules(String agreementId, List<PtlAgreementUnderwritingRulesSaveDto> underwritingRules) {
@@ -59,16 +35,6 @@ public class PtlAgreementUnderwritingRulesServiceImpl extends ServiceImpl<PtlAgr
         AssertionUtils.isSucceed(b, "批量添加协议承保规则失败");
     }
 
-    @Override
-    public Map<String, PtlFactorDto> getMapPtlFactorDto(String agreementId, Integer rulesType) {
-        LambdaQueryWrapper<PtlAgreementUnderwritingRules> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(PtlAgreementUnderwritingRules::getAgreementId, agreementId)
-                .eq(PtlAgreementUnderwritingRules::getRulesType, rulesType);
-        PtlAgreementUnderwritingRules rules = baseMapper.selectOne(wrapper);
-        return PtlAgreementCostsFactorSaveDto.toMapPtlFactorDto(rules.getRulesFactor());
-    }
-
-
     @Override
     public Map<String, List<String>> getByLicenseNo(List<String> agreementIdList) {
         Map<String, List<String>> map = new HashMap<>();
@@ -81,7 +47,7 @@ public class PtlAgreementUnderwritingRulesServiceImpl extends ServiceImpl<PtlAgr
 
             ptlAgreementUnderwritingRules.forEach(x -> {
                 Map<String, PtlFactorDto> mapPtlFactorDto = PtlAgreementCostsFactorSaveDto.toMapPtlFactorDto(x.getRulesFactor());
-                List<String> licenseNo = mapPtlFactorDto.get("LicenseNo").getParameter().stream().filter(str -> !"".equals(str)).collect(Collectors.toList());
+                List<String> licenseNo = mapPtlFactorDto.get("LicenseNo").getParameter();
                 map.put(x.getAgreementId(), licenseNo);
             });
         }
@@ -91,7 +57,7 @@ public class PtlAgreementUnderwritingRulesServiceImpl extends ServiceImpl<PtlAgr
 
     @Override
     public void ruleComparison(Map<String, Object> quoteRules, String agreementId, Integer rulesType) {
-        Map<String, PtlFactorDto> mapPtlFactorDto = proxyService.getMapPtlFactorDto(agreementId, rulesType);
+        Map<String, PtlFactorDto> mapPtlFactorDto = getMapPtlFactorDto(agreementId, rulesType);
         Set<String> strings = mapPtlFactorDto.keySet();
 
         for (String s : strings) {
@@ -114,11 +80,8 @@ public class PtlAgreementUnderwritingRulesServiceImpl extends ServiceImpl<PtlAgr
             Integer minValue = ptlFactorDto.getMinValue();
             Integer maxValue = ptlFactorDto.getMaxValue();
             // 参数最大值最小值校验
-            if (!ObjectUtils.isEmpty(minValue) && !ObjectUtils.isEmpty(maxValue)) {
-                if (minValue != 0 || maxValue != 0) {
-                    assert o instanceof Integer;
-                    AssertionUtils.isSucceed(minValue <= (Integer) o && (Integer) o <= maxValue, String.format("%s 应该在 %d 和 %d 范围内 ", ptlFactorDto.getName(), minValue, maxValue));
-                }
+            if (minValue != 0 || maxValue != 0) {
+                AssertionUtils.isSucceed(minValue <= (Integer) o && (Integer) o <= maxValue, String.format("%s 应该在 %d 和 %d 范围内 ", ptlFactorDto.getName(), minValue, maxValue));
             }
 
         }

+ 27 - 0
src/main/java/com/ydtech/modules/protocol/utils/AssertionUtils.java

@@ -22,18 +22,45 @@ public class AssertionUtils {
         }
     }
 
+    /**
+     * true -> 报错 false -> 跳过
+     *
+     * @param b       true/false
+     * @param message 报错内容
+     */
     public static void isFail(boolean b, String message) {
         assertion(b, message);
     }
 
+    /**
+     * true -> 跳过 false -> 报错
+     *
+     * @param b       true/false
+     * @param message 报错内容
+     */
     public static void isSucceed(boolean b, String message) {
         assertion(!b, message);
     }
 
+
+    /**
+     * 判断对象是否为空 并报错
+     * 空->报错
+     *
+     * @param o       java.lang.Object
+     * @param message 报错内容
+     */
     public static void isEmpty(Object o, String message) {
         assertion(ObjectUtils.isEmpty(o), message);
     }
 
+    /**
+     * 判断字符串是否为空 并报错
+     * 空->报错
+     *
+     * @param s       java.lang.String
+     * @param message 报错内容
+     */
     public static void isStringEmpty(String s, String message) {
         assertion(StringUtils.isEmpty(s), message);
     }

+ 11 - 0
src/main/resources/application-prod.yml

@@ -247,6 +247,17 @@ zm:
     callbackUrl: /order/zhongMeiApi/underwritingCallback
     passMsgUrl: /order/zhongMeiApi/auditCallback
 
+# 紫金财险
+zj:
+  api:
+    # 为接入方提供获取token服务
+    accessTokenUrl: https://open.zking.com/api/v1/public/token/getAccessToken
+    # 车险业务
+    url: http://open.zking.com/api/v1/insurance/autoMobile/carInsurance/queryToken
+    # 下载保单地址
+    downLoadDocument: http://open.zking.com/temp/api/v1/insurance/nonAutoMobile/queryPolicy/downLoadDocument
+
+
 agreement:
   shutdown: true
 

+ 72 - 61
src/main/resources/application-test.yml

@@ -213,10 +213,10 @@ wechat:
 #================ 永安 ==============#
 ya:
   callbackUrl: http://test.baoxianzhanggui.com:8080/order/yongAn/updatePolicy
-#  comCode: 214040020000
-#  consumerAccessKey: 123456test
-#  consumerID: 102120
-#  matchCode: 10212014040001
+  #  comCode: 214040020000
+  #  consumerAccessKey: 123456test
+  #  consumerID: 102120
+  #  matchCode: 10212014040001
   url: https://tapi.yaic.com.cn/auto/issue
   url.sign: https://tapi.yaic.com.cn/auto/debug/generate-access-key
 #  userCode: 10061765
@@ -225,62 +225,62 @@ ya:
 yc:
   #api方式
   api:
-#    #正式渠道信息(测试一下)
-#    agent:
-#      # 机构代码(dptCde)
-#      dptCde: 14B8
-#      # 渠道编码(agentCode)
-#      agentCode: 14B800P00008
-#      # 协议编码(conferCode)
-#      conferCode: 14B800P0000801
-#      # 渠道分类(agentType)
-#      agentType: 191010
-#      # 代理人名称(agentNme)
-#      agentNme: 太原天勤保险代理有限公司
-#      # 代理人资格证号(qlftNo)
-#      qlftNo: 202930000000800
-#      # 录入人(operatorCode)
-#      operatorCode: 114000117
-#      # 业务员代码(salesmanNo)
-#      salesmanNo: 11401714B
-#      # 新业务来源(CChaType)
-#      CChaType: 191010
-#      # 客户性质(custNature)
-#      custNature: 192099
-#      # 操作人员代码(cOprcde)
-#      cOprcde: 114000117
-#      # 业务来源(cBsnsTyp)
-#      cBsnsTyp: 19002
-#    userName: tianqin
-#    password: tianqin2023@
+    #    #正式渠道信息(测试一下)
+    #    agent:
+    #      # 机构代码(dptCde)
+    #      dptCde: 14B8
+    #      # 渠道编码(agentCode)
+    #      agentCode: 14B800P00008
+    #      # 协议编码(conferCode)
+    #      conferCode: 14B800P0000801
+    #      # 渠道分类(agentType)
+    #      agentType: 191010
+    #      # 代理人名称(agentNme)
+    #      agentNme: 太原天勤保险代理有限公司
+    #      # 代理人资格证号(qlftNo)
+    #      qlftNo: 202930000000800
+    #      # 录入人(operatorCode)
+    #      operatorCode: 114000117
+    #      # 业务员代码(salesmanNo)
+    #      salesmanNo: 11401714B
+    #      # 新业务来源(CChaType)
+    #      CChaType: 191010
+    #      # 客户性质(custNature)
+    #      custNature: 192099
+    #      # 操作人员代码(cOprcde)
+    #      cOprcde: 114000117
+    #      # 业务来源(cBsnsTyp)
+    #      cBsnsTyp: 19002
+    #    userName: tianqin
+    #    password: tianqin2023@
     #测试道信息
-#    agent:
-#      # 机构代码(dptCde)
-#      dptCde: 14A4
-#      # 渠道编码(agentCode)
-#      agentCode: 250000P00004
-#      # 协议编码(conferCode)
-#      conferCode: 250000P0000401
-#      # 渠道分类(agentType)
-#      agentType: 191010
-#      # 代理人名称(agentNme)
-#      agentNme: 永鑫保险销售服务有限公司山西分公司
-#      # 代理人资格证号(qlftNo)
-#      qlftNo: 2752454675645
-#      # 录入人(operatorCode)
-#      operatorCode: 100030057
-#      # 业务员代码(salesmanNo)
-#      salesmanNo: 100030057
-#      # 新业务来源(CChaType)
-#      CChaType: 191010
-#      # 客户性质(custNature)
-#      custNature: 192099
-#      # 操作人员代码(cOprcde)
-#      cOprcde: 100030057
-#      # 业务来源(cBsnsTyp)
-#      cBsnsTyp: 19002
-#    userName: tianqin
-#    password: 123456
+    #    agent:
+    #      # 机构代码(dptCde)
+    #      dptCde: 14A4
+    #      # 渠道编码(agentCode)
+    #      agentCode: 250000P00004
+    #      # 协议编码(conferCode)
+    #      conferCode: 250000P0000401
+    #      # 渠道分类(agentType)
+    #      agentType: 191010
+    #      # 代理人名称(agentNme)
+    #      agentNme: 永鑫保险销售服务有限公司山西分公司
+    #      # 代理人资格证号(qlftNo)
+    #      qlftNo: 2752454675645
+    #      # 录入人(operatorCode)
+    #      operatorCode: 100030057
+    #      # 业务员代码(salesmanNo)
+    #      salesmanNo: 100030057
+    #      # 新业务来源(CChaType)
+    #      CChaType: 191010
+    #      # 客户性质(custNature)
+    #      custNature: 192099
+    #      # 操作人员代码(cOprcde)
+    #      cOprcde: 100030057
+    #      # 业务来源(cBsnsTyp)
+    #      cBsnsTyp: 19002
+    #    userName: tianqin
+    #    password: 123456
     pay:
       # 回调地址
       #      callBack: http://39.98.239.48/web-api/api/yongCheng/callBack
@@ -321,8 +321,8 @@ zm:
   vinSearch:
     url: ${zm.domain}/vinSearch
   api:
-#    source: 326
-#    token: THIRDSCOuloft2020052818346904zmYBSX
+    #    source: 326
+    #    token: THIRDSCOuloft2020052818346904zmYBSX
     url: https://test.echinacoal.com/singlePlatform/
     imageUrl: https://test.echinacoal.com/singlePlatform/others/
     smsUrl: https://test.echinacoal.com/singlePlatform/prpall/
@@ -331,6 +331,17 @@ zm:
     callbackUrl: /order/zhongMeiApi/underwritingCallback
     passMsgUrl: /order/zhongMeiApi/auditCallback
 
+# 紫金财险
+zj:
+  api:
+    # 为接入方提供获取token服务
+    accessTokenUrl: https://test-open.zking.com/api/v1/public/token/getAccessToken
+    # 车险业务
+    url: http://test-open.zking.com/api/v1/insurance/autoMobile/carInsurance/
+    # 下载保单地址
+    downLoadDocument: http://test-open.zking.com/temp/api/v1/insurance/nonAutoMobile/queryPolicy/downLoadDocument
+
+
 logging:
   path: /ins/logs