Преглед изворни кода

1. 协议信息添加授权和账号配置
2. python对接报价,核保,上传影像,缴费状态查询,下载保单
3. 注释之前对接python的无用代码

wks пре 3 година
родитељ
комит
c6a7a3c62e
37 измењених фајлова са 847 додато и 383 уклоњено
  1. 38 38
      src/main/java/com/ydtech/components/AnShengRequestComponents.java
  2. 51 51
      src/main/java/com/ydtech/components/HengbangRequestComponents.java
  3. 68 74
      src/main/java/com/ydtech/components/RenbaoRequestComponents.java
  4. 48 48
      src/main/java/com/ydtech/components/YongchengRequestComponents.java
  5. 0 14
      src/main/java/com/ydtech/config/properties/ZmApiConfigurationProperties.java
  6. 10 0
      src/main/java/com/ydtech/modules/order/aop/QuoteVerification.java
  7. 38 0
      src/main/java/com/ydtech/modules/order/aop/aspect/QuoteVerificationAspect.java
  8. 56 0
      src/main/java/com/ydtech/modules/order/components/ConfigureParametersComponents.java
  9. 33 5
      src/main/java/com/ydtech/modules/order/components/InsCrawlerOrderComponents.java
  10. 4 5
      src/main/java/com/ydtech/modules/order/components/RenewalComponents.java
  11. 37 7
      src/main/java/com/ydtech/modules/order/components/ZhongmeiRequestApiComponents.java
  12. 3 6
      src/main/java/com/ydtech/modules/order/controller/InsCrawlerOrderController.java
  13. 4 2
      src/main/java/com/ydtech/modules/order/controller/YongAnOrderApiController.java
  14. 2 0
      src/main/java/com/ydtech/modules/order/controller/ZhongMeiOrderApiController.java
  15. 5 1
      src/main/java/com/ydtech/modules/order/entity/InsAreaCompany.java
  16. 99 3
      src/main/java/com/ydtech/modules/order/entity/InsOrders.java
  17. 2 1
      src/main/java/com/ydtech/modules/order/entity/api/zm/BaseRequest.java
  18. 6 0
      src/main/java/com/ydtech/modules/order/entity/api/zm/BaseRequestHead.java
  19. 14 4
      src/main/java/com/ydtech/modules/order/entity/api/zm/request/QuotedPriceRequest.java
  20. 4 0
      src/main/java/com/ydtech/modules/order/entity/config/ConfigureParameters.java
  21. 17 0
      src/main/java/com/ydtech/modules/order/entity/config/ZmConfigureParameters.java
  22. 15 1
      src/main/java/com/ydtech/modules/order/service/InsTaskImagesService.java
  23. 13 4
      src/main/java/com/ydtech/modules/order/service/impl/InsCrawlerOrderServiceImpl.java
  24. 2 71
      src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java
  25. 96 37
      src/main/java/com/ydtech/modules/order/service/impl/ZhongMeiOrderApiServiceImpl.java
  26. 109 0
      src/main/java/com/ydtech/modules/order/utils/AESUtilsWithDataBase.java
  27. 10 0
      src/main/java/com/ydtech/modules/protocol/entity/dto/PtlAgreementDto.java
  28. 4 0
      src/main/java/com/ydtech/modules/protocol/entity/dto/PtlAgreementInsCompanyDto.java
  29. 1 1
      src/main/java/com/ydtech/modules/protocol/entity/dto/PtlAgreementUnderwritingRulesSaveDto.java
  30. 2 0
      src/main/java/com/ydtech/modules/protocol/service/PtlAgreementAttributionService.java
  31. 4 0
      src/main/java/com/ydtech/modules/protocol/service/PtlAgreementProductCostsService.java
  32. 8 0
      src/main/java/com/ydtech/modules/protocol/service/PtlAgreementUnderwritingRulesService.java
  33. 1 0
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementProductCostsServiceImpl.java
  34. 17 6
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementServiceImpl.java
  35. 22 0
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementUnderwritingRulesServiceImpl.java
  36. 2 2
      src/main/resources/application-prod.yml
  37. 2 2
      src/main/resources/application-test.yml

+ 38 - 38
src/main/java/com/ydtech/components/AnShengRequestComponents.java

@@ -1,38 +1,38 @@
-package com.ydtech.components;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-@Component
-public class AnShengRequestComponents {
-
-
-    @Value("${as.domain}")
-    private String asDomain;
-
-    @Value("${as.quote.url}")
-    private String asQuoteUrl;
-
-    @Value("${as.audit.url}")
-    private String asAuditUrl;
-
-    @Value("${as.image.url}")
-    private String asImageUrl;
-
-    @Autowired
-    private RenbaoRequestComponents renbaoRequestComponents;
-
-    public <T, B> B quote(T t, Class<B> responseType) {
-        return renbaoRequestComponents.post(asDomain + asQuoteUrl, "安盛天平报价", t, responseType);
-    }
-
-    public <T, B> B audit(T t, Class<B> responseType) {
-        return renbaoRequestComponents.post(asDomain + asAuditUrl, "安盛天平核保", t, responseType);
-    }
-
-    public <T, B> B submitImage(T t, Class<B> responseType) {
-        return renbaoRequestComponents.post(asDomain + asImageUrl, "安盛天平上传影像", t, responseType);
-    }
-
-}
+//package com.ydtech.components;
+//
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.stereotype.Component;
+//
+//@Component
+//public class AnShengRequestComponents {
+//
+//
+//    @Value("${as.domain}")
+//    private String asDomain;
+//
+//    @Value("${as.quote.url}")
+//    private String asQuoteUrl;
+//
+//    @Value("${as.audit.url}")
+//    private String asAuditUrl;
+//
+//    @Value("${as.image.url}")
+//    private String asImageUrl;
+//
+//    @Autowired
+//    private RenbaoRequestComponents renbaoRequestComponents;
+//
+//    public <T, B> B quote(T t, Class<B> responseType) {
+//        return renbaoRequestComponents.post(asDomain + asQuoteUrl, "安盛天平报价", t, responseType);
+//    }
+//
+//    public <T, B> B audit(T t, Class<B> responseType) {
+//        return renbaoRequestComponents.post(asDomain + asAuditUrl, "安盛天平核保", t, responseType);
+//    }
+//
+//    public <T, B> B submitImage(T t, Class<B> responseType) {
+//        return renbaoRequestComponents.post(asDomain + asImageUrl, "安盛天平上传影像", t, responseType);
+//    }
+//
+//}

+ 51 - 51
src/main/java/com/ydtech/components/HengbangRequestComponents.java

@@ -1,51 +1,51 @@
-package com.ydtech.components;
-
-import com.ydtech.modules.ins.model.hb.HengbangPolicyPrintResponse;
-import com.ydtech.modules.ins.model.request.Response;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.core.ParameterizedTypeReference;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-@Component
-public class HengbangRequestComponents {
-
-    @Value("${hb.quote.url}")
-    private String hbQuoteUrl;
-
-    @Value("${hb.audit.url}")
-    private String hbAuditUrl;
-
-    @Value("${hb.image.url}")
-    private String hbImageUrl;
-
-    @Value("${hb.getPolicyPrint.url}")
-    private String hbPolicyPrintUrl;
-
-
-    private RenbaoRequestComponents renbaoRequestComponents;
-
-    @Autowired
-    public void setRenbaoRequestComponents(RenbaoRequestComponents renbaoRequestComponents) {
-        this.renbaoRequestComponents = renbaoRequestComponents;
-    }
-
-    public <T, B> B quote(T t, Class<B> responseType) {
-        return renbaoRequestComponents.post(hbQuoteUrl, "恒邦报价", t, responseType);
-    }
-
-    public <T, B> B audit(T t, Class<B> responseType) {
-        return renbaoRequestComponents.post(hbAuditUrl, "恒邦核保", t, responseType);
-    }
-
-    public <T, B> B submitImage(T t, Class<B> responseType) {
-        return renbaoRequestComponents.post(hbImageUrl, "恒邦上传影响", t, responseType);
-    }
-
-    public <T, B> B getPolicyPrint(T t, Class<B> responseType) {
-        return renbaoRequestComponents.post(hbPolicyPrintUrl, "获取电子保单", t, responseType);
-    }
-
-}
+//package com.ydtech.components;
+//
+//import com.ydtech.modules.ins.model.hb.HengbangPolicyPrintResponse;
+//import com.ydtech.modules.ins.model.request.Response;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.core.ParameterizedTypeReference;
+//import org.springframework.stereotype.Component;
+//
+//import java.util.Map;
+//
+//@Component
+//public class HengbangRequestComponents {
+//
+//    @Value("${hb.quote.url}")
+//    private String hbQuoteUrl;
+//
+//    @Value("${hb.audit.url}")
+//    private String hbAuditUrl;
+//
+//    @Value("${hb.image.url}")
+//    private String hbImageUrl;
+//
+//    @Value("${hb.getPolicyPrint.url}")
+//    private String hbPolicyPrintUrl;
+//
+//
+//    private RenbaoRequestComponents renbaoRequestComponents;
+//
+//    @Autowired
+//    public void setRenbaoRequestComponents(RenbaoRequestComponents renbaoRequestComponents) {
+//        this.renbaoRequestComponents = renbaoRequestComponents;
+//    }
+//
+//    public <T, B> B quote(T t, Class<B> responseType) {
+//        return renbaoRequestComponents.post(hbQuoteUrl, "恒邦报价", t, responseType);
+//    }
+//
+//    public <T, B> B audit(T t, Class<B> responseType) {
+//        return renbaoRequestComponents.post(hbAuditUrl, "恒邦核保", t, responseType);
+//    }
+//
+//    public <T, B> B submitImage(T t, Class<B> responseType) {
+//        return renbaoRequestComponents.post(hbImageUrl, "恒邦上传影响", t, responseType);
+//    }
+//
+//    public <T, B> B getPolicyPrint(T t, Class<B> responseType) {
+//        return renbaoRequestComponents.post(hbPolicyPrintUrl, "获取电子保单", t, responseType);
+//    }
+//
+//}

+ 68 - 74
src/main/java/com/ydtech/components/RenbaoRequestComponents.java

@@ -1,74 +1,68 @@
-package com.ydtech.components;
-
-import com.alibaba.fastjson.JSON;
-import com.ydtech.aop.request.MethodLogAnnotation;
-import com.ydtech.exception.SystemException;
-import com.ydtech.modules.ins.model.request.Response;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.core.ParameterizedTypeReference;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
-import org.springframework.lang.Nullable;
-import org.springframework.stereotype.Component;
-import org.springframework.web.client.RestTemplate;
-
-@Slf4j
-@Component
-public class RenbaoRequestComponents {
-
-    @Autowired
-    private RestTemplate restTemplate;
-
-    @Value("${rb.quote.url}")
-    private String rbQuoteUrl;
-
-    @Value("${rb.audit.url}")
-    private String rbAuditUrl;
-
-    @Value("${rb.car.search.url}")
-    private String rbCarSearchUrl;
-
-    @Value("${rb.brand.search.url}")
-    private String rbBrandSearchUrl;
-
-//    @MethodLogAnnotation(title = "报价-请求python")
-    public <T, B> B post(String url, String message, @Nullable T requestBody, Class<B> responseType) {
-        HttpHeaders httpHeaders = new HttpHeaders();
-        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
-        HttpEntity<T> yaQuoteInfoVoHttpEntity = new HttpEntity<>(requestBody, httpHeaders);
-
-        String request = JSON.toJSONString(requestBody);
-        log.info("---------> 请求参数:{}", request);
-
-        ResponseEntity<B> stringResponseEntity = restTemplate.postForEntity(url, yaQuoteInfoVoHttpEntity, responseType);
-        B body = stringResponseEntity.getBody();
-        if (body == null) {
-            throw new SystemException(message + "接口请求失败");
-        }
-
-        String response = JSON.toJSONString(body);
-        log.info("---------> 请求参数:{}", response);
-        return body;
-    }
-
-    public <T, B> B quote(T t, Class<B> responseType) {
-        return post(rbQuoteUrl, "人保报价", t, responseType);
-    }
-
-    public <T, B> B audit(T t, Class<B> responseType) {
-        return post(rbAuditUrl, "人保核保", t, responseType);
-    }
-
-    public <T, B> B licensePlateQuery(T t, Class<B> responseType) {
-        return post(rbCarSearchUrl, "人保车牌号查询车辆信息", t, responseType);
-    }
-
-    public <T, B> B modelsQuery(T t, Class<B> responseType) {
-        return post(rbBrandSearchUrl, "人保车辆查询", t, responseType);
-    }
-
-}
+//package com.ydtech.components;
+//
+//import com.alibaba.fastjson.JSON;
+//import com.ydtech.exception.SystemException;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.http.*;
+//import org.springframework.lang.Nullable;
+//import org.springframework.stereotype.Component;
+//import org.springframework.web.client.RestTemplate;
+//
+//@Slf4j
+//@Component
+//public class RenbaoRequestComponents {
+//
+//    @Autowired
+//    private RestTemplate restTemplate;
+//
+//    @Value("${rb.quote.url}")
+//    private String rbQuoteUrl;
+//
+//    @Value("${rb.audit.url}")
+//    private String rbAuditUrl;
+//
+//    @Value("${rb.car.search.url}")
+//    private String rbCarSearchUrl;
+//
+//    @Value("${rb.brand.search.url}")
+//    private String rbBrandSearchUrl;
+//
+//    //    @MethodLogAnnotation(title = "报价-请求python")
+//    public <T, B> B post(String url, String message, @Nullable T requestBody, Class<B> responseType) {
+//        HttpHeaders httpHeaders = new HttpHeaders();
+//        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+//        HttpEntity<T> yaQuoteInfoVoHttpEntity = new HttpEntity<>(requestBody, httpHeaders);
+//
+//        String request = JSON.toJSONString(requestBody);
+//        log.info("---------> 请求参数: url {} {}", url, request);
+//
+//        ResponseEntity<B> stringResponseEntity = restTemplate.postForEntity(url, yaQuoteInfoVoHttpEntity, responseType);
+//        B body = stringResponseEntity.getBody();
+//        if (body == null) {
+//            throw new SystemException(message + "接口请求失败");
+//        }
+//
+//        String response = JSON.toJSONString(body);
+//        log.info("---------> 响应参数:{}", response);
+//        return body;
+//    }
+//
+//    public <T, B> B quote(T t, Class<B> responseType) {
+//        return post(rbQuoteUrl, "人保报价", t, responseType);
+//    }
+//
+//    public <T, B> B audit(T t, Class<B> responseType) {
+//        return post(rbAuditUrl, "人保核保", t, responseType);
+//    }
+//
+//    public <T, B> B licensePlateQuery(T t, Class<B> responseType) {
+//        return post(rbCarSearchUrl, "人保车牌号查询车辆信息", t, responseType);
+//    }
+//
+//    public <T, B> B modelsQuery(T t, Class<B> responseType) {
+//        return post(rbBrandSearchUrl, "人保车辆查询", t, responseType);
+//    }
+//
+//}

+ 48 - 48
src/main/java/com/ydtech/components/YongchengRequestComponents.java

@@ -1,48 +1,48 @@
-package com.ydtech.components;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-@Component
-public class YongchengRequestComponents {
-
-    @Value("${yc.domain}")
-    private String ycDomain;
-
-    @Value("${yc.quote.url}")
-    private String ycQuoteUrl;
-
-    @Value("${yc.audit.url}")
-    private String ycAuditUrl;
-
-    @Value("${yc.image.url}")
-    private String ycImageUrl;
-
-    @Value("${yc.getPolicyPrint.url}")
-    private String ycPolicyPrintUrl;
-
-    private final RenbaoRequestComponents renbaoRequestComponents;
-
-    public YongchengRequestComponents(RenbaoRequestComponents renbaoRequestComponents) {
-        this.renbaoRequestComponents = renbaoRequestComponents;
-    }
-
-
-    public <T, B> B quote(T t, Class<B> responseType) {
-        return renbaoRequestComponents.post(ycDomain + ycQuoteUrl, "永诚报价", t, responseType);
-    }
-
-    public <T, B> B audit(T t, Class<B> responseType) {
-        return renbaoRequestComponents.post(ycDomain + ycAuditUrl, "永诚核保", t, responseType);
-    }
-
-    public <T, B> B submitImage(T t, Class<B> responseType) {
-        return renbaoRequestComponents.post(ycDomain + ycImageUrl, "永诚上传影像", t, responseType);
-    }
-
-    public <T, B> B getPolicyPrint(T t, Class<B> responseType) {
-        return renbaoRequestComponents.post(ycDomain + ycPolicyPrintUrl, "永诚获取电子保单", t, responseType);
-    }
-
-}
+//package com.ydtech.components;
+//
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.stereotype.Component;
+//
+//@Component
+//public class YongchengRequestComponents {
+//
+//    @Value("${yc.domain}")
+//    private String ycDomain;
+//
+//    @Value("${yc.quote.url}")
+//    private String ycQuoteUrl;
+//
+//    @Value("${yc.audit.url}")
+//    private String ycAuditUrl;
+//
+//    @Value("${yc.image.url}")
+//    private String ycImageUrl;
+//
+//    @Value("${yc.getPolicyPrint.url}")
+//    private String ycPolicyPrintUrl;
+//
+//    private final RenbaoRequestComponents renbaoRequestComponents;
+//
+//    public YongchengRequestComponents(RenbaoRequestComponents renbaoRequestComponents) {
+//        this.renbaoRequestComponents = renbaoRequestComponents;
+//    }
+//
+//
+//    public <T, B> B quote(T t, Class<B> responseType) {
+//        return renbaoRequestComponents.post(ycDomain + ycQuoteUrl, "永诚报价", t, responseType);
+//    }
+//
+//    public <T, B> B audit(T t, Class<B> responseType) {
+//        return renbaoRequestComponents.post(ycDomain + ycAuditUrl, "永诚核保", t, responseType);
+//    }
+//
+//    public <T, B> B submitImage(T t, Class<B> responseType) {
+//        return renbaoRequestComponents.post(ycDomain + ycImageUrl, "永诚上传影像", t, responseType);
+//    }
+//
+//    public <T, B> B getPolicyPrint(T t, Class<B> responseType) {
+//        return renbaoRequestComponents.post(ycDomain + ycPolicyPrintUrl, "永诚获取电子保单", t, responseType);
+//    }
+//
+//}

+ 0 - 14
src/main/java/com/ydtech/config/properties/ZmApiConfigurationProperties.java

@@ -17,10 +17,6 @@ import org.springframework.stereotype.Component;
 @ConfigurationProperties(prefix = "zm.api")
 public class ZmApiConfigurationProperties {
 
-    private String source;
-
-    private String token;
-
     private String url;
 
     private String imageUrl;
@@ -35,14 +31,4 @@ public class ZmApiConfigurationProperties {
     // 审核回调地址
     private String passMsgUrl;
 
-
-    /**
-     * 中煤请求 head 的参数
-     *
-     * @return
-     */
-    public BaseRequestHead getHead() {
-        return new BaseRequestHead(token, source);
-    }
-
 }

+ 10 - 0
src/main/java/com/ydtech/modules/order/aop/QuoteVerification.java

@@ -0,0 +1,10 @@
+package com.ydtech.modules.order.aop;
+
+public @interface QuoteVerification {
+
+    String value() default "报价注解拦截";
+
+}
+
+
+

+ 38 - 0
src/main/java/com/ydtech/modules/order/aop/aspect/QuoteVerificationAspect.java

@@ -0,0 +1,38 @@
+package com.ydtech.modules.order.aop.aspect;
+
+
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
+import com.ydtech.modules.protocol.service.PtlAgreementDeptService;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Aspect
+@Component
+public class QuoteVerificationAspect {
+
+    private final PtlAgreementDeptService ptlAgreementDeptService;
+
+    public QuoteVerificationAspect(PtlAgreementDeptService ptlAgreementDeptService) {
+        this.ptlAgreementDeptService = ptlAgreementDeptService;
+    }
+
+
+    @Before("@annotation(com.ydtech.modules.order.aop.QuoteVerification)")
+    public void doBefore(JoinPoint point) {
+        Object[] args = point.getArgs();
+        for (Object arg : args) {
+            if (arg instanceof BaseQuoteVo) {
+                String agreementId = ((BaseQuoteVo<?>) arg).getAgreementId();
+                // 判断协议是否可以报价
+                String deptId = new BaseController().getDeptId();
+                ptlAgreementDeptService.agreementIsAuthorized(deptId, agreementId);
+            }
+        }
+    }
+
+}

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

@@ -0,0 +1,56 @@
+package com.ydtech.modules.order.components;
+
+import com.alibaba.fastjson.JSONArray;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.order.entity.config.ConfigureParameters;
+import com.ydtech.modules.protocol.entity.dto.PtlAttributionTemplateDto;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
+import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
+import com.ydtech.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ReflectionUtils;
+
+import java.lang.reflect.Field;
+import java.util.List;
+
+@Slf4j
+@Component
+public class ConfigureParametersComponents {
+
+    private final PtlAgreementAttributionService ptlAgreementAttributionService;
+
+    public ConfigureParametersComponents(PtlAgreementAttributionService ptlAgreementAttributionService) {
+        this.ptlAgreementAttributionService = ptlAgreementAttributionService;
+    }
+
+    /**
+     * 通过 协议id获取配置实体
+     * @param t
+     * @param agreementId
+     * @param <T>
+     */
+    public <T extends ConfigureParameters> void toEntity(T t, String agreementId) {
+        PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementId);
+        JSONArray fields = ptlAgreementAttribution.getFields();
+        List<PtlAttributionTemplateDto> ptlAttributionTemplateDtos = fields.toJavaList(PtlAttributionTemplateDto.class);
+
+        for (PtlAttributionTemplateDto ptlAttributionTemplateDto : ptlAttributionTemplateDtos) {
+            String field = ptlAttributionTemplateDto.getField();
+            if (StringUtils.isNullOrEmpty(field)) {
+                continue;
+            }
+
+            try {
+                Field f = t.getClass().getDeclaredField(field);
+                ReflectionUtils.makeAccessible(f);
+                f.set(t, ptlAttributionTemplateDto.getValue());
+            } catch (NoSuchFieldException | IllegalAccessException e) {
+                throw new SystemException("{}没有此字段的映射", field);
+            }
+        }
+    }
+
+
+
+}

+ 33 - 5
src/main/java/com/ydtech/modules/order/components/InsCrawlerOrderComponents.java

@@ -1,20 +1,48 @@
 package com.ydtech.modules.order.components;
 
-import com.ydtech.components.RenbaoRequestComponents;
+import com.alibaba.fastjson.JSON;
+import com.ydtech.exception.SystemException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.lang.Nullable;
 import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
 
+@Slf4j
 @Component
 public class InsCrawlerOrderComponents {
 
-    private final RenbaoRequestComponents renbaoRequestComponents;
+    private final RestTemplate restTemplate;
 
-    public InsCrawlerOrderComponents(RenbaoRequestComponents renbaoRequestComponents) {
-        this.renbaoRequestComponents = renbaoRequestComponents;
+    public InsCrawlerOrderComponents(RestTemplate restTemplate) {
+        this.restTemplate = restTemplate;
+    }
+
+    public <T, B> B post(String url, String message, @Nullable T requestBody, Class<B> responseType) {
+        HttpHeaders httpHeaders = new HttpHeaders();
+        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+        HttpEntity<T> yaQuoteInfoVoHttpEntity = new HttpEntity<>(requestBody, httpHeaders);
+
+        String request = JSON.toJSONString(requestBody);
+        log.info("---------> 请求参数: url {} {}", url, request);
+
+        ResponseEntity<B> stringResponseEntity = restTemplate.postForEntity(url, yaQuoteInfoVoHttpEntity, responseType);
+        B body = stringResponseEntity.getBody();
+        if (body == null) {
+            throw new SystemException(message + "接口请求失败");
+        }
+
+        String response = JSON.toJSONString(body);
+        log.info("---------> 响应参数:{}", response);
+        return body;
     }
 
     public <T, B> B request(String url, String companyName, String apiType, T requestBody, Class<B> responseType) {
         String message = companyName + apiType;
-        return renbaoRequestComponents.post(url, message, requestBody, responseType);
+        return this.post(url, message, requestBody, responseType);
     }
 
 }

+ 4 - 5
src/main/java/com/ydtech/modules/order/components/RenewalComponents.java

@@ -1,6 +1,5 @@
 package com.ydtech.modules.order.components;
 
-import com.ydtech.components.RenbaoRequestComponents;
 import com.ydtech.modules.ins.model.ya.YaQuoteInfoVo;
 import com.ydtech.modules.order.entity.po.InsRenewal;
 import com.ydtech.modules.order.entity.request.RenewalRequest;
@@ -14,10 +13,10 @@ import org.springframework.stereotype.Component;
  */
 @Component
 public class RenewalComponents {
-    private final RenbaoRequestComponents renbaoRequestComponents;
+    private final InsCrawlerOrderComponents insCrawlerOrderComponents;
 
-    public RenewalComponents(RenbaoRequestComponents renbaoRequestComponents) {
-        this.renbaoRequestComponents = renbaoRequestComponents;
+    public RenewalComponents(InsCrawlerOrderComponents insCrawlerOrderComponents) {
+        this.insCrawlerOrderComponents = insCrawlerOrderComponents;
     }
 
     /**
@@ -28,7 +27,7 @@ public class RenewalComponents {
      * @return QuoteRespVo
      */
     public YaQuoteInfoVo renewal(InsRenewal insRenewal, RenewalRequest renewalRequest) {
-        return renbaoRequestComponents.post(insRenewal.getUrl(), "续保", renewalRequest, YaQuoteInfoVo.class);
+        return insCrawlerOrderComponents.post(insRenewal.getUrl(), "续保", renewalRequest, YaQuoteInfoVo.class);
     }
 
 }

+ 37 - 7
src/main/java/com/ydtech/components/ZhongmeiRequestApiComponents.java → src/main/java/com/ydtech/modules/order/components/ZhongmeiRequestApiComponents.java

@@ -1,4 +1,4 @@
-package com.ydtech.components;
+package com.ydtech.modules.order.components;
 
 import com.alibaba.fastjson.JSON;
 import com.ydtech.config.properties.ZmApiConfigurationProperties;
@@ -7,8 +7,12 @@ import com.ydtech.modules.order.entity.api.zm.BaseRequest;
 import com.ydtech.modules.order.entity.api.zm.BaseResponse;
 import com.ydtech.modules.order.entity.api.zm.request.*;
 import com.ydtech.modules.order.entity.api.zm.response.*;
+import com.ydtech.modules.order.utils.AESUtilsWithDataBase;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.*;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 import org.springframework.util.ObjectUtils;
 import org.springframework.web.client.RestTemplate;
@@ -36,6 +40,32 @@ public class ZhongmeiRequestApiComponents {
         this.restTemplate = restTemplate;
     }
 
+//    private <Q extends BaseRequest, S extends BaseResponse> S post(Q q, String url, Class<S> tClass) {
+//        String jsonString = JSON.toJSONString(q);
+//        log.info("---------> 请求参数:{}", jsonString);
+//
+//        HttpHeaders httpHeaders = new HttpHeaders();
+//        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+//
+//        // 加密
+//        String s = AESUtilsWithDataBase.encryptECBPK5Hex(jsonString);
+//        HttpEntity<String> httpEntity = new HttpEntity<>(s, httpHeaders);
+//
+//        ResponseEntity<String> response = restTemplate.postForEntity(url, httpEntity, String.class);
+//        String body = response.getBody();
+//
+//        // 解密
+//        String s1 = AESUtilsWithDataBase.decryptECBPK5Hex(body);
+//        log.info("---------> 响应参数:{}", s1);
+//
+//        S t = JSON.parseObject(s1, tClass);
+//        if (ObjectUtils.isEmpty(t)) {
+//            throw new SystemException("请求失败");
+//        }
+//        return t;
+//    }
+
+
     /**
      * @param q      请求参数
      * @param url    请求url
@@ -45,17 +75,18 @@ public class ZhongmeiRequestApiComponents {
      * @return <S>
      */
     private <Q extends BaseRequest, S extends BaseResponse> S post(Q q, String url, Class<S> tClass) {
+        String jsonString = JSON.toJSONString(q);
+        log.info("---------> 请求参数:{}", jsonString);
+
         HttpHeaders httpHeaders = new HttpHeaders();
         httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+
         HttpEntity<Q> yaQuoteInfoVoHttpEntity = new HttpEntity<>(q, httpHeaders);
-        String jsonString = JSON.toJSONString(q);
-        log.info("---------> 请求参数:{}", jsonString);
         ResponseEntity<String> response = restTemplate.postForEntity(url, yaQuoteInfoVoHttpEntity, String.class);
-
         String body = response.getBody();
         log.info("---------> 响应参数:{}", body);
-        S t = JSON.parseObject(body, tClass);
 
+        S t = JSON.parseObject(body, tClass);
         if (ObjectUtils.isEmpty(t)) {
             throw new SystemException("请求失败");
         }
@@ -72,7 +103,6 @@ public class ZhongmeiRequestApiComponents {
      * @return 响应内容
      */
     private <Q extends BaseRequest, S extends BaseResponse> S request(Q request, Class<S> tClass, boolean verify, String domain) {
-        request.setHead(properties.getHead());
         String url = domain + request.getHead().getTransCode() + ".do";
         S response = post(request, url, tClass);
         if (verify) {

+ 3 - 6
src/main/java/com/ydtech/modules/order/controller/InsCrawlerOrderController.java

@@ -5,12 +5,12 @@ import com.ydtech.aop.request.RequestSingleParam;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.ins.model.vo.QuoteRespVo;
+import com.ydtech.modules.order.aop.QuoteVerification;
 import com.ydtech.modules.order.components.InsOrdersComponents;
 import com.ydtech.modules.order.entity.crawler.vo.CrawlerPolicyPrintVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
 import com.ydtech.modules.order.service.InsCrawlerOrderService;
-import com.ydtech.modules.protocol.service.PtlAgreementDeptService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -27,19 +27,16 @@ public class InsCrawlerOrderController extends BaseController {
 
     private final InsOrdersComponents insOrdersComponents;
 
-    private final PtlAgreementDeptService ptlAgreementDeptService;
 
-    public InsCrawlerOrderController(InsOrdersComponents insOrdersComponents, InsCrawlerOrderService insCrawlerOrderService, PtlAgreementDeptService ptlAgreementDeptService) {
+    public InsCrawlerOrderController(InsOrdersComponents insOrdersComponents, InsCrawlerOrderService insCrawlerOrderService) {
         this.insOrdersComponents = insOrdersComponents;
         this.insuranceCrawlerOrderService = insCrawlerOrderService;
-        this.ptlAgreementDeptService = ptlAgreementDeptService;
     }
 
+    @QuoteVerification("报价授权")
     @PostMapping("/quote")
     @ApiOperation("报价")
     public HttpResult<QuoteRespVo> quote(@RequestBody BaseQuoteVo<Object> baseQuoteVo) {
-        // 判断协议是否可以报价
-        ptlAgreementDeptService.agreementIsAuthorized(getDeptId(), baseQuoteVo.getAgreementId());
         BaseQuoteInfoVo quoteInfo = this.insOrdersComponents.getQuoteInfo(baseQuoteVo.getOrderNo());
         return insuranceCrawlerOrderService.quote(quoteInfo, baseQuoteVo);
     }

+ 4 - 2
src/main/java/com/ydtech/modules/order/controller/YongAnOrderController.java → src/main/java/com/ydtech/modules/order/controller/YongAnOrderApiController.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.order.controller;
 
 import com.ydtech.aop.request.RequestSingleParam;
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.order.aop.QuoteVerification;
 import com.ydtech.modules.order.components.InsOrdersComponents;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
@@ -19,18 +20,19 @@ import java.util.Map;
 @Api(tags = "永安财险")
 @RestController
 @RequestMapping("/order/yongAn")
-public class YongAnOrderController {
+public class YongAnOrderApiController {
 
 
     private final InsOrdersComponents insOrdersComponents;
 
     private final YongAnOrderService yongAnOrderService;
 
-    public YongAnOrderController(InsOrdersComponents insOrdersComponents, YongAnOrderService yongAnOrderService) {
+    public YongAnOrderApiController(InsOrdersComponents insOrdersComponents, YongAnOrderService yongAnOrderService) {
         this.insOrdersComponents = insOrdersComponents;
         this.yongAnOrderService = yongAnOrderService;
     }
 
+    @QuoteVerification("报价授权")
     @PostMapping("/quote")
     @ApiOperation("报价")
     public HttpResult quote(@RequestBody BaseQuoteVo<Object> quoteVo) {

+ 2 - 0
src/main/java/com/ydtech/modules/order/controller/ZhongMeiOrderApiController.java

@@ -4,6 +4,7 @@ package com.ydtech.modules.order.controller;
 import com.ydtech.aop.request.RequestSingleParam;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.ins.model.ya.CarModelDTO;
+import com.ydtech.modules.order.aop.QuoteVerification;
 import com.ydtech.modules.order.components.InsOrdersComponents;
 import com.ydtech.modules.order.entity.api.zm.request.ApprovedRequest;
 import com.ydtech.modules.order.entity.api.zm.request.CoverageRequest;
@@ -42,6 +43,7 @@ public class ZhongMeiOrderApiController {
         return this.zhongMeiOrderApiService.modelsQuery(modelName);
     }
 
+    @QuoteVerification("报价授权")
     @PostMapping("/quote")
     @ApiOperation("报价")
     public HttpResult quote(@RequestBody BaseQuoteVo<AccidentalDrivingVo> zmQuoteVo) {

+ 5 - 1
src/main/java/com/ydtech/modules/order/entity/InsAreaCompany.java

@@ -38,7 +38,11 @@ public class InsAreaCompany implements Serializable {
      */
     @TableField(value = "agreement_id")
     private String agreementId;
-
+    /**
+     * 请求类型
+     */
+    @TableField(value = "api_type")
+    private Integer apiType;
     /**
      * 订单状态
      */

+ 99 - 3
src/main/java/com/ydtech/modules/order/entity/InsOrders.java

@@ -1,5 +1,6 @@
 package com.ydtech.modules.order.entity;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.annotation.TableField;
@@ -7,9 +8,14 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
+import com.ydtech.constants.enums.InsOrderStatus;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.model.SysDept;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.ins.model.vo.KindInfoVo;
+import com.ydtech.modules.ins.model.vo.RiskInfoVo;
+import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
+import lombok.*;
 
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -24,6 +30,8 @@ import java.util.List;
 @ToString
 @TableName(value = "ins_orders", autoResultMap = true)
 @Data
+@AllArgsConstructor
+@NoArgsConstructor
 public class InsOrders implements Serializable {
     /**
      * 订单号
@@ -174,4 +182,92 @@ public class InsOrders implements Serializable {
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 
+    public InsOrders(SysUser user, SysDept dept, BaseQuoteInfoVo quoteInfoVo) {
+        // 2. 组装订单
+        this.setQuoteno(String.valueOf(quoteInfoVo.getQuoteno()));
+        this.setOrderstatus(InsOrderStatus.S_0.getCode());  // 0 报价 1 待核保 2 已核保待缴费 3 核保退回 4 核保不通过
+        this.setFrameno(quoteInfoVo.getCarInfo().getFrameNo());
+        this.setLicenseno(quoteInfoVo.getCarInfo().getLicenseNo());
+
+        // 2.1 车辆信息
+        this.setCarinfo(JSON.parseObject(JSON.toJSONString(quoteInfoVo.getCarInfo())));
+        this.setUserid(user.getId());
+        this.setUsername(user.getName());
+        this.setDeptid(user.getDeptId());
+        this.setDeptname(dept == null ? "" : dept.getName());
+
+        // 2.2 人员信息
+        this.setOwnerinfo(JSON.parseObject(JSON.toJSONString(quoteInfoVo.getOwnerInfo())));
+        this.setApplyinfo(JSON.parseObject(JSON.toJSONString(quoteInfoVo.getPolicyHolderInfo())));
+        this.setInsureinfo(JSON.parseObject(JSON.toJSONString(quoteInfoVo.getInsuredPersonInfo())));
+        this.setInsuredname(quoteInfoVo.getPolicyHolderInfo().getName());
+
+        List<RiskInfoVo> risks = quoteInfoVo.getRiskList();
+        List<KindInfoVo> kinds = quoteInfoVo.getKindList();
+
+        // 2.3 主险种信息
+        this.insuranceInformation(risks, kinds);
+
+        // 2.3.1 险种信息
+        this.setRisk(JSON.parseArray(JSON.toJSONString(quoteInfoVo.getRiskList())));
+        this.setKing(JSON.parseArray(JSON.toJSONString(quoteInfoVo.getKindList())));
+
+        // 2.4 产品信息
+        this.productInformation(risks, kinds);
+        this.setCreatetime(LocalDateTime.now());
+    }
+
+    /**
+     * 保险信息
+     *
+     * @param risks 主险种
+     * @param kinds 商业险险种
+     */
+    private void insuranceInformation(List<RiskInfoVo> risks, List<KindInfoVo> kinds) {
+        for (RiskInfoVo riskInfoVo : risks) {
+            if ("0507".equals(riskInfoVo.getRiskCode())) { //交强
+                this.setJqstartdate(riskInfoVo.getStartDate());
+                this.setJqenddate(riskInfoVo.getEndDate());
+            }
+            if ("0510".equals(riskInfoVo.getRiskCode())) { //商业
+                this.setSystartdate(riskInfoVo.getStartDate());
+                this.setSyenddate(riskInfoVo.getEndDate());
+
+                if (kinds.isEmpty()) {
+                    throw new SystemException("商业险险种未选择,不允许报价");
+                }
+            }
+        }
+    }
+
+    /**
+     * 产品信息
+     *
+     * @param risks 主险种
+     * @param kinds 商业险险种
+     */
+    private void productInformation(List<RiskInfoVo> risks, List<KindInfoVo> kinds) {
+        String productId = "";
+        String productname = "";
+        if (risks.size() == 1 && "0507".equals(risks.get(0).getRiskCode())) {
+            productId = "ZG01001";
+            productname = "单交强";
+        } else if (risks.size() == 1 && kinds.size() == 1 && "B".equals(kinds.get(0).getKindCode())) {
+            productId = "ZG01002";
+            productname = "单三者";
+        } else if (risks.size() == 1) {
+            productId = "ZG01003";
+            productname = "单商业";
+        } else if (risks.size() == 2 && kinds.size() == 1 && "B".equals(kinds.get(0).getKindCode())) {
+            productId = "ZG01004";
+            productname = "交强+三者";
+        } else {
+            productId = "ZG01006";
+            productname = "交强+商业";
+        }
+        this.setProductid(productId);
+        this.setProduct(productname);
+    }
+
+
 }

+ 2 - 1
src/main/java/com/ydtech/modules/order/entity/api/zm/BaseRequest.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.order.entity.api.zm;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.config.ZmConfigureParameters;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -12,7 +13,7 @@ import java.io.Serializable;
  * @date 2023/4/21 9:00
  */
 @Data
-public class BaseRequest implements Serializable {
+public abstract class BaseRequest implements Serializable {
 
     private static final long serialVersionUID = -7025152016723698268L;
 

+ 6 - 0
src/main/java/com/ydtech/modules/order/entity/api/zm/BaseRequestHead.java

@@ -1,5 +1,6 @@
 package com.ydtech.modules.order.entity.api.zm;
 
+import com.ydtech.modules.order.entity.config.ZmConfigureParameters;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -26,4 +27,9 @@ public class BaseRequestHead extends BaseHead {
         this.source = source;
     }
 
+    public BaseRequestHead(ZmConfigureParameters zmConfigureParameters) {
+        super.setToken(zmConfigureParameters.getToken());
+        this.source = zmConfigureParameters.getSource();
+    }
+
 }

+ 14 - 4
src/main/java/com/ydtech/modules/order/entity/api/zm/request/QuotedPriceRequest.java

@@ -13,6 +13,7 @@ import com.ydtech.modules.order.entity.api.zm.constants.TimeConstants;
 import com.ydtech.modules.order.entity.api.zm.constants.TransCode;
 import com.ydtech.modules.order.entity.api.zm.constants.enums.ContractEnum;
 import com.ydtech.modules.order.entity.api.zm.response.ModelsQueryResponse;
+import com.ydtech.modules.order.entity.config.ZmConfigureParameters;
 import com.ydtech.modules.order.entity.vo.AccidentalDrivingVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.utils.StringUtils;
@@ -46,8 +47,8 @@ public class QuotedPriceRequest extends BaseRequest {
     @JsonProperty("businessData")
     private BusinessDataDTO businessData;
 
-    public QuotedPriceRequest(BaseQuoteInfoVo baseQuoteInfoVo, ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCarDTO, AccidentalDrivingVo accidentalDrivingVo) {
-        this.businessData = new BusinessDataDTO(baseQuoteInfoVo, simpleStadarCarDTO, accidentalDrivingVo);
+    public QuotedPriceRequest(BaseQuoteInfoVo baseQuoteInfoVo, ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCarDTO, AccidentalDrivingVo accidentalDrivingVo, ZmConfigureParameters zmConfigureParameters) {
+        this.businessData = new BusinessDataDTO(baseQuoteInfoVo, simpleStadarCarDTO, accidentalDrivingVo, zmConfigureParameters);
     }
 
     @Override
@@ -81,7 +82,7 @@ public class QuotedPriceRequest extends BaseRequest {
         @JsonProperty("accident")
         private List<AccidentDTO> accident;
 
-        public BusinessDataDTO(BaseQuoteInfoVo baseQuoteInfoVo, ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCarDTO, AccidentalDrivingVo accidentalDrivingVo) {
+        public BusinessDataDTO(BaseQuoteInfoVo baseQuoteInfoVo, ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCarDTO, AccidentalDrivingVo accidentalDrivingVo, ZmConfigureParameters zmConfigureParameters) {
             CarInfoVo carInfo = baseQuoteInfoVo.getCarInfo();
             List<RiskInfoVo> riskList = baseQuoteInfoVo.getRiskList();
             List<KindInfoVo> kindList = baseQuoteInfoVo.getKindList();
@@ -90,7 +91,7 @@ public class QuotedPriceRequest extends BaseRequest {
             CustomerInfoVo insuredPersonInfo = baseQuoteInfoVo.getInsuredPersonInfo();
             int i = Integer.parseInt(carInfo.getSeatCount());
             // 保单归属地
-            this.policyLocation = new PolicyLocationDTO("140000", "140400", "140423");
+            this.policyLocation = new PolicyLocationDTO(zmConfigureParameters);
             // 车辆信息
             this.insuredObject = new InsuredObjectDTO(carInfo, simpleStadarCarDTO);
             // 保险信息
@@ -104,6 +105,8 @@ public class QuotedPriceRequest extends BaseRequest {
 
         }
 
+
+
         @AllArgsConstructor
         @NoArgsConstructor
         @Data
@@ -127,6 +130,13 @@ public class QuotedPriceRequest extends BaseRequest {
             private String city;
             @JsonProperty("district")
             private String district;
+
+            public PolicyLocationDTO(ZmConfigureParameters zmConfigureParameters) {
+                this.province = zmConfigureParameters.getProvince();
+                this.city = zmConfigureParameters.getCity();
+                this.district = zmConfigureParameters.getDistrict();
+            }
+
         }
 
         @NoArgsConstructor

+ 4 - 0
src/main/java/com/ydtech/modules/order/entity/config/ConfigureParameters.java

@@ -0,0 +1,4 @@
+package com.ydtech.modules.order.entity.config;
+
+public interface ConfigureParameters {
+}

+ 17 - 0
src/main/java/com/ydtech/modules/order/entity/config/ZmConfigureParameters.java

@@ -0,0 +1,17 @@
+package com.ydtech.modules.order.entity.config;
+
+import lombok.Data;
+
+@Data
+public class ZmConfigureParameters implements ConfigureParameters {
+
+    private String token;
+
+    private String source;
+
+    private String province;
+
+    private String city;
+
+    private String district;
+}

+ 15 - 1
src/main/java/com/ydtech/modules/order/service/InsTaskImagesService.java

@@ -17,14 +17,28 @@ import java.util.Map;
  */
 public interface InsTaskImagesService extends IService<InsTaskImages> {
 
+    /**
+     * 影像上传
+     *
+     * @param insTaskImagesVo 影像上传实体
+     * @param username        用户名
+     * @return
+     */
     HttpResult uploadImages(InsTaskImagesVo insTaskImagesVo, String username);
 
+
+    /**
+     * 通过报价单号查询影像
+     *
+     * @param quoteNo
+     * @return
+     */
     HttpResult<Map<String, List<InsTaskImagesDto>>> findByQuoteNo(String quoteNo);
 
     /**
      * 获取文件的 文件的Base64 编码
      *
-     * @param orderNo
+     * @param orderNo 订单号
      * @return
      */
     List<InsTaskImagesBase64> findByOrderNo(String orderNo);

+ 13 - 4
src/main/java/com/ydtech/modules/order/service/impl/InsCrawlerOrderServiceImpl.java

@@ -28,6 +28,7 @@ import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
 import com.ydtech.modules.protocol.service.PtlCrawlerApiService;
 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;
 
@@ -75,13 +76,20 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
         String apiUrl = ptlCrawlerApiService.getApiUrl(agreementId, PtlCrawlerApiType.API_2);
         // 账号信息
         PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementId);
-        CrawlerQuoteRequest crawlerQuoteRequest = (CrawlerQuoteRequest) quoteInfoVo;
+
+        CrawlerQuoteRequest crawlerQuoteRequest = new CrawlerQuoteRequest();
+        BeanUtils.copyProperties(quoteInfoVo, crawlerQuoteRequest);
+
         crawlerQuoteRequest.setUsername(ptlAgreementAttribution.getUsername());
         String insCompanyName = ptlAgreementAttribution.getInsCompanyName();
         // 发送请求
         CrawlerQuoteResponse response = insCrawlerOrderComponents.request(apiUrl, insCompanyName, PtlCrawlerApiType.API_2.getDesc(), crawlerQuoteRequest, CrawlerQuoteResponse.class);
+        if (response.getCode() != 200) {
+            throw new SystemException(response.getMessage());
+        }
+
         QuoteRespVo quoteRespVo = getQuoteRespVo(response, quoteInfoVo);
-        return responseOrder(response, quoteRespVo, agreementId, insCompanyName);
+        return responseOrder(response, quoteRespVo, agreementId, ptlAgreementAttribution.getApiType(), insCompanyName);
     }
 
     @Override
@@ -219,7 +227,7 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
         return quoteRespVo;
     }
 
-    private HttpResult<QuoteRespVo> responseOrder(CrawlerQuoteResponse response, QuoteRespVo quoteRespVo, String agreementId, String insCompanyName) {
+    private HttpResult<QuoteRespVo> responseOrder(CrawlerQuoteResponse response, QuoteRespVo quoteRespVo, String agreementId,Integer apiType, String insCompanyName) {
         //保存订单信息
         InsAreaCompany insAreaCompany = new InsAreaCompany();
         insAreaCompany.setId(IdGenerate.nextId());
@@ -233,8 +241,9 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
         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.setTaxArrears(JSON.parseArray(JSON.toJSONString(quoteRespVo.getTaxArrears())));
 
         // 保险公司订单号

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

@@ -17,8 +17,6 @@ import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.service.SysDeptService;
 import com.ydtech.modules.admin.service.SysUserService;
 import com.ydtech.modules.ins.model.vo.CarInfoVo;
-import com.ydtech.modules.ins.model.vo.KindInfoVo;
-import com.ydtech.modules.ins.model.vo.RiskInfoVo;
 import com.ydtech.modules.ins.model.ya.CarModelDTO;
 import com.ydtech.modules.ins.model.ya.ExtendInfoDto;
 import com.ydtech.modules.ins.model.ya.ResponseDataC2;
@@ -133,77 +131,10 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     public InsOrders generateOrder(String userId, BaseQuoteInfoVo quoteInfoVo) {
         // 1. 验证订单参数
         orderComponents.checkEmpty(quoteInfoVo);
-        InsOrders insOrders = new InsOrders();
         SysUser user = sysUserService.getById(userId);
-        if (user == null) {
-            throw new SystemException("userId不存在");
-        }
-        // 2. 组装订单
-        insOrders.setQuoteno(String.valueOf(quoteInfoVo.getQuoteno()));
-        insOrders.setOrderstatus(InsOrderStatus.S_0.getCode());  // 0 报价 1 待核保 2 已核保待缴费 3 核保退回 4 核保不通过
-        insOrders.setFrameno(quoteInfoVo.getCarInfo().getFrameNo());
-        insOrders.setLicenseno(quoteInfoVo.getCarInfo().getLicenseNo());
-        // 2.1 车辆信息
-        insOrders.setCarinfo(JSON.parseObject(JSON.toJSONString(quoteInfoVo.getCarInfo())));
-        insOrders.setUserid(user.getId());
-        insOrders.setUsername(user.getName());
-        insOrders.setDeptid(user.getDeptId());
-
         SysDept dept = sysDeptService.getById(user.getDeptId());
-        insOrders.setDeptname(dept == null ? "" : dept.getName());
-
-        // 2.2 人员信息
-        insOrders.setOwnerinfo(JSON.parseObject(JSON.toJSONString(quoteInfoVo.getOwnerInfo())));
-        insOrders.setApplyinfo(JSON.parseObject(JSON.toJSONString(quoteInfoVo.getPolicyHolderInfo())));
-        insOrders.setInsureinfo(JSON.parseObject(JSON.toJSONString(quoteInfoVo.getInsuredPersonInfo())));
-        insOrders.setInsuredname(quoteInfoVo.getPolicyHolderInfo().getName());
-
-        // 2.3 保险信息
-        List<RiskInfoVo> risks = quoteInfoVo.getRiskList();
-        for (RiskInfoVo risk : risks) {
-            if ("0507".equals(risk.getRiskCode())) { //交强
-                insOrders.setJqstartdate(risk.getStartDate());
-                insOrders.setJqenddate(risk.getEndDate());
-            }
-            if ("0510".equals(risk.getRiskCode())) { //商业
-                insOrders.setSystartdate(risk.getStartDate());
-                insOrders.setSyenddate(risk.getEndDate());
-
-                if (quoteInfoVo.getKindList().isEmpty()) {
-                    throw new SystemException("商业险险种未选择,不允许报价");
-                }
-
-            }
-        }
-
-
-        // 2.3.1 险种信息
-        insOrders.setRisk(JSON.parseArray(JSON.toJSONString(quoteInfoVo.getRiskList())));
-        insOrders.setKing(JSON.parseArray(JSON.toJSONString(quoteInfoVo.getKindList())));
-        List<KindInfoVo> kinds = quoteInfoVo.getKindList();
-
-        // 2.4 产品信息
-        String productId = "";
-        String productname = "";
-        if (risks.size() == 1 && "0507".equals(risks.get(0).getRiskCode())) {
-            productId = "ZG01001";
-            productname = "单交强";
-        } else if (risks.size() == 1 && kinds.size() == 1 && "B".equals(kinds.get(0).getKindCode())) {
-            productId = "ZG01002";
-            productname = "单三者";
-        } else if (risks.size() == 1) {
-            productId = "ZG01003";
-            productname = "单商业";
-        } else if (risks.size() == 2 && kinds.size() == 1 && "B".equals(kinds.get(0).getKindCode())) {
-            productId = "ZG01004";
-            productname = "交强+三者";
-        } else {
-            productId = "ZG01006";
-            productname = "交强+商业";
-        }
-        insOrders.setProductid(productId);
-        insOrders.setProduct(productname);
-        insOrders.setCreatetime(LocalDateTime.now());
+        // 2 构造订单
+        InsOrders insOrders = new InsOrders(user, dept, quoteInfoVo);
         // 3 订单操作
         if (StringUtils.isEmpty(quoteInfoVo.getOrderNo())) {
             // 存入订单

+ 96 - 37
src/main/java/com/ydtech/modules/order/service/impl/ZhongMeiOrderApiServiceImpl.java

@@ -3,7 +3,6 @@ package com.ydtech.modules.order.service.impl;
 import cn.hutool.core.util.ArrayUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.ydtech.components.ZhongmeiRequestApiComponents;
 import com.ydtech.components.ZhongmeiRequestComponents;
 import com.ydtech.constants.enums.InsOrderStatus;
 import com.ydtech.core.page.HttpResult;
@@ -14,16 +13,20 @@ import com.ydtech.modules.ins.model.request.Response;
 import com.ydtech.modules.ins.model.vo.*;
 import com.ydtech.modules.ins.model.ya.CarModelDTO;
 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.convert.SimpleStadarCarDTOConvert;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.TaxArrears;
+import com.ydtech.modules.order.entity.api.zm.BaseRequestHead;
 import com.ydtech.modules.order.entity.api.zm.constants.InsuranceTypeCorrespondence;
 import com.ydtech.modules.order.entity.api.zm.constants.enums.AuditStatusEnum;
 import com.ydtech.modules.order.entity.api.zm.constants.enums.DocumentTypeEnum;
 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.po.InsTaskImagesBase64;
 import com.ydtech.modules.order.entity.vo.AccidentalDrivingVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
@@ -33,6 +36,8 @@ import com.ydtech.modules.order.service.InsAreaCompanyService;
 import com.ydtech.modules.order.service.InsOrdersService;
 import com.ydtech.modules.order.service.InsTaskImagesService;
 import com.ydtech.modules.order.service.ZhongMeiOrderApiService;
+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.apache.commons.lang3.StringUtils;
@@ -67,8 +72,11 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
 
     private final StringRedisTemplate redisTemplate;
 
+    private final PtlAgreementAttributionService ptlAgreementAttributionService;
 
-    public ZhongMeiOrderApiServiceImpl(InsOrdersService insOrdersService, InsAreaCompanyService insAreaCompanyService, InsTaskImagesService insTaskImagesService, ZhongmeiRequestApiComponents zhongmeiRequestApiComponents, EsmInsCompanyService esmInsCompanyService, ZhongmeiRequestComponents zhongmeiRequestComponents, StringRedisTemplate redisTemplate) {
+    private final ConfigureParametersComponents configureParametersComponents;
+
+    public ZhongMeiOrderApiServiceImpl(InsOrdersService insOrdersService, InsAreaCompanyService insAreaCompanyService, InsTaskImagesService insTaskImagesService, ZhongmeiRequestApiComponents zhongmeiRequestApiComponents, EsmInsCompanyService esmInsCompanyService, ZhongmeiRequestComponents zhongmeiRequestComponents, StringRedisTemplate redisTemplate, ConfigureParametersComponents configureParametersComponents, PtlAgreementAttributionService ptlAgreementAttributionService) {
         this.insOrdersService = insOrdersService;
         this.insAreaCompanyService = insAreaCompanyService;
         this.insTaskImagesService = insTaskImagesService;
@@ -76,6 +84,9 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         this.esmInsCompanyService = esmInsCompanyService;
         this.zhongmeiRequestComponents = zhongmeiRequestComponents;
         this.redisTemplate = redisTemplate;
+
+        this.configureParametersComponents = configureParametersComponents;
+        this.ptlAgreementAttributionService = ptlAgreementAttributionService;
     }
 
     private void modelInquiry(String modelName, List<ModelsQueryResponse.SimpleStadarCarDTO> simpleStadarCarDTOS) {
@@ -102,7 +113,8 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
     public HttpResult<List<CarModelDTO>> modelsQuery(String modelName) {
         ModelsQueryRequest modelsQueryResponse = new ModelsQueryRequest();
         modelsQueryResponse.setModelName(modelName);
-        List<ModelsQueryResponse.SimpleStadarCarDTO> car = zhongmeiRequestApiComponents.modelQuery(modelsQueryResponse, ModelsQueryResponse.class);
+//        List<ModelsQueryResponse.SimpleStadarCarDTO> car = zhongmeiRequestApiComponents.modelQuery(modelsQueryResponse, ModelsQueryResponse.class);
+        List<ModelsQueryResponse.SimpleStadarCarDTO> car = new ArrayList<>();
         modelInquiry(modelName, car);
 
         List<CarModelDTO> map = SimpleStadarCarDTOConvert.INSTANCE.map(car);
@@ -111,17 +123,27 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
 
     @Override
     public HttpResult<QuoteRespVo> quote(BaseQuoteInfoVo quoteInfo, BaseQuoteVo<AccidentalDrivingVo> zmQuoteVo) {
-        EsmInsCompany esmInsCompany = esmInsCompanyService.isOpen(zmQuoteVo.getCompanyId());
+        // 1. 协议id获取配置实体
+        String agreementId = zmQuoteVo.getAgreementId();
+        // 账号信息
+        PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementId);
+
+        ZmConfigureParameters zmConfigureParameters = new ZmConfigureParameters();
+        configureParametersComponents.toEntity(zmConfigureParameters, agreementId);
+        BaseRequestHead baseRequestHead = new BaseRequestHead(zmConfigureParameters);
+        EsmInsCompany esmInsCompany = esmInsCompanyService.getById(zmQuoteVo.getCompanyId());
+
         CarInfoVo carInfo = quoteInfo.getCarInfo();
-        // 1. 查询车型
+        // 2. 查询车型
         ModelsQueryRequest modelsQueryResponse = new ModelsQueryRequest();
         modelsQueryResponse.setModelName(carInfo.getModelcname());
+        modelsQueryResponse.setHead(baseRequestHead);
         List<ModelsQueryResponse.SimpleStadarCarDTO> simpleStadarCarDTOS = zhongmeiRequestApiComponents.modelQuery(modelsQueryResponse, ModelsQueryResponse.class);
 
-        // 1.1 使用爬虫接口调用车型
+        // 2.1 使用爬虫接口调用车型
         modelInquiry(carInfo.getModelcname(), simpleStadarCarDTOS);
 
-        // 1.2 过滤车型
+        // 2.2 过滤车型
         List<ModelsQueryResponse.SimpleStadarCarDTO> stadarCarDTOS = new ArrayList<>();
 
         if (!StringUtils.isEmpty(carInfo.getCaryear())) {
@@ -136,56 +158,68 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
                 .filter(car -> carInfo.getPurchasePrice().equals(String.valueOf(car.getPurchasePrice())))
                 .collect(Collectors.toList());
 
+        if (simpleStadarCarDTOS.isEmpty()) {
+            simpleStadarCarDTOS = stadarCarDTOS;
+        }
+
         ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCarDTO = simpleStadarCarDTOS.get(0);
-        // 组装参数
-        QuotedPriceRequest quotedPriceRequest = new QuotedPriceRequest(quoteInfo, simpleStadarCarDTO, zmQuoteVo.getAccidentalDrivingVo());
-        QuotedPriceResponse quotedPriceResponse = zhongmeiRequestApiComponents.quotedPrice(quotedPriceRequest, QuotedPriceResponse.class);
+        // 2.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);
-        // 2. 第一次提交核保 并且获取投保单号
-        SubmitResponse response = submitForUnderwriting(quotedPriceResponse.getOrderNo(), carInfo.getFrameNo(), quoteInfo.getPolicyHolderInfo());
+        // 3. 第一次提交核保 并且获取投保单号
+        SubmitResponse response = submitForUnderwriting(quotedPriceResponse.getOrderNo(), carInfo.getFrameNo(), quoteInfo.getPolicyHolderInfo(), zmConfigureParameters);
 
-        // 3. 将错误的核保信息存入redis
+        // 4. 将错误的核保信息存入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);
         }
-        return responseOrder(quotedPriceResponse, quoteRespVo, esmInsCompany, response);
+        return responseOrder(quotedPriceResponse, quoteRespVo, esmInsCompany, response, agreementId, ptlAgreementAttribution.getApiType());
     }
 
 
     @Override
     public HttpResult<Object> audit(String companyId) {
         InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
+        // 1. 协议id获取配置实体
+        ZmConfigureParameters zmConfigureParameters = new ZmConfigureParameters();
+        configureParametersComponents.toEntity(zmConfigureParameters, insAreaCompany.getAgreementId());
+
         InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
         JSONObject ownerinfo = insOrders.getApplyinfo();
         CustomerInfoVo customerInfoVo = JSON.toJavaObject(ownerinfo, CustomerInfoVo.class);
-        // 1. 第二次 提交核保
-        SubmitResponse response = submitForUnderwriting(insAreaCompany.getId(), insOrders.getFrameno(), customerInfoVo);
-        // 2. 人工核保
+        // 2. 第二次 提交核保
+        SubmitResponse response = submitForUnderwriting(insAreaCompany.getId(), insOrders.getFrameno(), customerInfoVo, zmConfigureParameters);
+        // 3. 人工核保
         if (response.getHead().getReturnMessage().contains(InsuranceTypeCorrespondence.MANUAL_UNDERWRITING)) {
             insAreaCompany.setOrderstatus(InsOrderStatus.S_1.getCode());
             return HttpResult.error(response.getHead().getReturnMessage());
         }
         zhongmeiRequestApiComponents.validationResults(response);
-        // 投保单号
+        // 4. 投保单号
         insAreaCompany.setPaymentLink(response.getPayUrl());
         insAreaCompany.setJqapplyno(response.getForceProposalNo());
         insAreaCompany.setSyapplyno(response.getBizProposalNo());
         insAreaCompany.setJyapplyno(response.getAccidentProposalNo());
         insAreaCompany.setInsOrderNo(response.getProposalNo());
         insAreaCompany.setOrderstatus(InsOrderStatus.S_2.getCode());
-        insAreaCompanyService.updateById(insAreaCompany);
-        insOrdersService.updateByOrderStatus(insAreaCompany.getOrderno(), insAreaCompany.getOrderstatus());
+        insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
         return HttpResult.ok("核保成功");
     }
 
     @Override
     public HttpResult<Object> submitImage(String companyId) {
         InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
+        // 1. 协议id获取配置实体
+        ZmConfigureParameters zmConfigureParameters = new ZmConfigureParameters();
+        configureParametersComponents.toEntity(zmConfigureParameters, 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);
             if (StringUtils.isEmpty(s)) {
@@ -200,6 +234,7 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
             throw new SystemException("请检查影像是否上传了");
         }
         UploadImageRequest request = new UploadImageRequest(insTaskImagesBase64s, insOrderNo);
+        request.setHead(new BaseRequestHead(zmConfigureParameters));
         zhongmeiRequestApiComponents.uploadImage(request, UploadImageResponse.class);
         return HttpResult.ok("上传文件成功");
     }
@@ -218,8 +253,7 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
             insAreaCompany.setSypolicyno(coverageRequest.getBizPolicyNo());
             insAreaCompany.setJypolicyno(coverageRequest.getAccidentPolicyNo());
             insAreaCompany.setOrderstatus(InsOrderStatus.S_3.getCode());
-            insOrdersService.updateByOrderStatus(insAreaCompany.getOrderno(), insAreaCompany.getOrderstatus());
-            insAreaCompanyService.updateById(insAreaCompany);
+            insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
         }
         return null;
     }
@@ -240,31 +274,38 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         } else {
             insAreaCompany.setOrderstatus(InsOrderStatus.S_4.getCode());
         }
-        insOrdersService.updateByOrderStatus(insAreaCompany.getOrderno(), insAreaCompany.getOrderstatus());
-        insAreaCompanyService.updateById(insAreaCompany);
+        insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
         return null;
     }
 
     @Override
     public HttpResult paymentEnquiry(String companyId) {
         InsAreaCompany insAreaCompany = insAreaCompanyService.getByInsOrderNo(companyId);
+
+        // 1. 协议id获取配置实体
+        ZmConfigureParameters zmConfigureParameters = new ZmConfigureParameters();
+        configureParametersComponents.toEntity(zmConfigureParameters, insAreaCompany.getAgreementId());
         if (insAreaCompany.getOrderstatus().equals(InsOrderStatus.S_3.getCode())) {
             return HttpResult.ok(InsOrderStatus.S_3.getDesc());
         }
+
+        // 2. 组装请求体
         OrderStatusRequest orderStatusRequest = new OrderStatusRequest();
         orderStatusRequest.setOrderNo(insAreaCompany.getId());
         orderStatusRequest.setSubProposalNo(insAreaCompany.getInsOrderNo());
+        orderStatusRequest.setHead(new BaseRequestHead(zmConfigureParameters));
+
         OrderStatusResponse orderStatusResponse = zhongmeiRequestApiComponents.orderStatus(orderStatusRequest, OrderStatusResponse.class);
         String status = orderStatusResponse.getStatus();
 
-        // 承保成功修改状态
+        // 3. 承保成功修改状态
         if (status.equals(String.valueOf(PaymentStatusEnum.P_2.getCode()))) {
             insAreaCompany.setJqpolicyno(orderStatusResponse.getSubContractNoJ());
             insAreaCompany.setSypolicyno(orderStatusResponse.getSubContractNoS());
             insAreaCompany.setJypolicyno(orderStatusResponse.getAccidentNo());
             insAreaCompany.setOrderstatus(InsOrderStatus.S_3.getCode());
-            insOrdersService.updateByOrderStatus(insAreaCompany.getOrderno(), insAreaCompany.getOrderstatus());
-            insAreaCompanyService.updateById(insAreaCompany);
+            insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
+
             return HttpResult.ok(PaymentStatusEnum.P_2.getMeaning());
         }
 
@@ -274,6 +315,10 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
     @Override
     public HttpResult getPolicyPrint(PolicyPrintVo policyPrintVo) {
         InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(policyPrintVo.getCompanyId());
+        // 1. 协议id获取配置实体
+        ZmConfigureParameters zmConfigureParameters = new ZmConfigureParameters();
+        configureParametersComponents.toEntity(zmConfigureParameters, insAreaCompany.getAgreementId());
+
         String policyNo;
         String code = DocumentTypeEnum.code(policyPrintVo.getType());
         String riskCode = policyPrintVo.getRiskCode();
@@ -284,33 +329,41 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         } else {
             throw new SystemException("险种代码不存在");
         }
+
+        // 2. 组装请求体
         InsurancePolicyPrintRequest request = new InsurancePolicyPrintRequest();
         request.setRiskCode(InsuranceTypeCorrespondence.getRisk().get(riskCode));
         request.setPolicyNo(policyNo);
         request.setDocumentType(code);
+        request.setHead(new BaseRequestHead(zmConfigureParameters));
         InsurancePolicyPrintResponse response = zhongmeiRequestApiComponents.insurancePolicyPrint(request, InsurancePolicyPrintResponse.class);
         return HttpResult.ok("下载成功", response.getDownloadUrl());
     }
 
     /**
-     * @param orderNo        中煤订单号
-     * @param frameNo        车架号
-     * @param customerInfoVo 车辆信息
+     * @param orderNo               中煤订单号
+     * @param frameNo               车架号
+     * @param customerInfoVo        车辆信息
+     * @param zmConfigureParameters 中煤配置参数
      * @return 核保请求参数
      */
-    public SubmitResponse submitForUnderwriting(String orderNo, String frameNo, CustomerInfoVo customerInfoVo) {
+    public SubmitResponse submitForUnderwriting(String orderNo, String frameNo, CustomerInfoVo customerInfoVo, ZmConfigureParameters zmConfigureParameters) {
         SubmitRequest submitRequest = new SubmitRequest();
         submitRequest.setOrderNo(orderNo);
         submitRequest.setVin(frameNo);
         SubmitRequest.DeliveryInfoDTO deliveryInfoDTO = new SubmitRequest.DeliveryInfoDTO(
                 customerInfoVo.getName(),
                 customerInfoVo.getMobile(),
-                "140000",
-                "140400",
-                "140423",
+                // 省
+                zmConfigureParameters.getProvince(),
+                // 市
+                zmConfigureParameters.getCity(),
+                // 县
+                zmConfigureParameters.getDistrict(),
                 customerInfoVo.getAddr()
         );
         submitRequest.setDeliveryInfo(deliveryInfoDTO);
+        submitRequest.setHead(new BaseRequestHead(zmConfigureParameters));
         return zhongmeiRequestApiComponents.submit(submitRequest, SubmitResponse.class);
     }
 
@@ -391,12 +444,18 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         return quoteRespVo;
     }
 
-    public HttpResult<QuoteRespVo> responseOrder(QuotedPriceResponse quotedPriceResponse, QuoteRespVo quoteRespVo, EsmInsCompany esmInsCompanies, SubmitResponse submitResponse) {
+    public HttpResult<QuoteRespVo> responseOrder(QuotedPriceResponse quotedPriceResponse, QuoteRespVo quoteRespVo, EsmInsCompany esmInsCompanies, SubmitResponse submitResponse, String agreementId, Integer apiType) {
         //保存订单信息
         String orderNo = quoteRespVo.getOrderno();
         InsAreaCompany insAreaCompany = new InsAreaCompany();
+
         insAreaCompany.setId(quotedPriceResponse.getOrderNo());
         insAreaCompany.setOrderno(orderNo);
+
+        // 协议id
+        insAreaCompany.setAgreementId(agreementId);
+        insAreaCompany.setApiType(apiType);
+
         insAreaCompany.setReptxt(JSON.parseObject(JSON.toJSONString(quotedPriceResponse)));
         insAreaCompany.setJqpremium(BigDecimal.valueOf(quoteRespVo.getJqPremium()));
         insAreaCompany.setSypremium(BigDecimal.valueOf(quoteRespVo.getSyPremium()));

+ 109 - 0
src/main/java/com/ydtech/modules/order/utils/AESUtilsWithDataBase.java

@@ -0,0 +1,109 @@
+package com.ydtech.modules.order.utils;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+import java.net.URLDecoder;
+public class AESUtilsWithDataBase {
+
+
+    public static void main(String[] args) throws Exception {
+        String json ="{\"head\":{\"transCode\":\"ModelsQuery\",\"transType\":\"Req\",\"token\":\"THIRDSCOuloft2020052818346904zmCCSC\",\"source\":\"323\"},\"modelName\":\"东风DXK6470AS1F多用途乘用车\",\"brand\":\"东风\",\"modelCode\":\"\"}";
+
+        String encrypt = encryptECBPK5Hex(json);
+        System.out.println("加密后:"+encrypt);
+        System.out.println("解密后:"+ decryptECBPK5Hex(encrypt));
+    }
+
+    private static final String ECB_PKCS5_PADDING = "AES/ECB/PKCS5Padding";
+
+    private static final String AES = "AES";
+    //编码方式
+    public static final String CODE_TYPE = "UTF-8";
+
+    // 秘钥
+    private static final String sessionKey = "1237891234567589";
+    /**
+     * AES 加密操作  ECBPK5Hex
+     *
+     * @param content 待加密内容
+     * @return 返回Base64转码后的加密数据
+     */
+    public static String encryptECBPK5Hex(String content)  {
+        byte[] result = null;
+        if (content == null || "".equals(content)) {
+            return content;
+        }
+        try {
+            byte[] byteContent = content.getBytes(CODE_TYPE);
+            //使用加密秘钥
+            SecretKeySpec skeySpec = new SecretKeySpec(sessionKey.getBytes(CODE_TYPE), AES);
+            /*
+             * 新建一个密码编译器的实例,由三部分构成,用"/"分隔,分别代表如下
+             * 1. 加密的类型(如AES,DES,RC2等)
+             * 2. 模式(AES中包含ECB,CBC,CFB,CTR,CTS等)
+             * 3. 补码方式(包含nopadding/PKCS5Padding等等)
+             * 依据这三个参数可以创建很多种加密方式
+             */
+            synchronized(Cipher.class) {
+                Cipher cipher = Cipher.getInstance(ECB_PKCS5_PADDING);//"AES/ECB/PKCS5Padding";
+                cipher.init(Cipher.ENCRYPT_MODE, skeySpec);// 初始化为加密模式的密码器
+                result = cipher.doFinal(byteContent);// 加密
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        return byteToHex(result);//通过hex转码返回
+    }
+
+    /**
+     * AES 解密操作  ECBPK5Hex
+     *
+     * @param content
+     * @return
+     */
+    public static String decryptECBPK5Hex(String content) {
+        String returnStr = content;
+        byte[] result = null;
+        if (content == null || "".equals(content)) {
+            return content;
+        }
+        try {
+            //使用加密秘钥
+            SecretKeySpec skeySpec = new SecretKeySpec(sessionKey.getBytes(CODE_TYPE), AES);
+            synchronized (Cipher.class) {
+                //实例化
+                Cipher cipher = Cipher.getInstance(ECB_PKCS5_PADDING);
+                cipher.init(Cipher.DECRYPT_MODE, skeySpec);// 初始化为加密模式的密码器
+                result = cipher.doFinal(hexToByte(content));
+            }
+            returnStr = new String(result, CODE_TYPE);
+        }catch (Exception ex) {
+        }
+        return returnStr;
+    }
+
+    public static String byteToHex(byte[] bytes){
+        String strHex = "";
+        StringBuilder sb = new StringBuilder("");
+        for (int n = 0; n < bytes.length; n++) {
+            strHex = Integer.toHexString(bytes[n] & 0xFF);
+            sb.append((strHex.length() == 1) ? "0" + strHex : strHex); // 每个字节由两个字符表示,位数不够,高位补0
+        }
+        return sb.toString().trim();
+    }
+
+    public static byte[] hexToByte(String hex) throws Exception {
+        hex = URLDecoder.decode(hex, CODE_TYPE);
+        int m = 0, n = 0;
+        int byteLen = hex.length() / 2; // 每两个字符描述一个字节
+        byte[] ret = new byte[byteLen];
+        for (int i = 0; i < byteLen; i++) {
+            m = i * 2 + 1;
+            n = m + 1;
+            int intVal = Integer.decode("0x" + hex.substring(i * 2, m) + hex.substring(m, n));
+            ret[i] = Byte.valueOf((byte)intVal);
+        }
+        return ret;
+    }
+
+}

+ 10 - 0
src/main/java/com/ydtech/modules/protocol/entity/dto/PtlAgreementDto.java

@@ -1,18 +1,28 @@
 package com.ydtech.modules.protocol.entity.dto;
 
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.List;
 
 @Data
+@ApiModel("协议信息")
 public class PtlAgreementDto implements Serializable {
 
     private static final long serialVersionUID = -9099368754131435612L;
 
+    @ApiModelProperty("协议id")
     private String id;
 
+    @ApiModelProperty("协议名称")
     private String agreementName;
 
+    @ApiModelProperty("协议类型")
     private Integer apiType;
 
+    @ApiModelProperty("车牌号")
+    private List<String> licenseNo;
+
 }

+ 4 - 0
src/main/java/com/ydtech/modules/protocol/entity/dto/PtlAgreementInsCompanyDto.java

@@ -1,6 +1,8 @@
 package com.ydtech.modules.protocol.entity.dto;
 
 import com.ydtech.modules.esm.model.EsmInsCompany;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -9,10 +11,12 @@ import java.util.List;
 
 @EqualsAndHashCode(callSuper = true)
 @Data
+@ApiModel("协议")
 public class PtlAgreementInsCompanyDto extends EsmInsCompany implements Serializable {
 
     private static final long serialVersionUID = -5790993730287966635L;
 
+    @ApiModelProperty("协议信息")
     private List<PtlAgreementDto> agreement;
 
 }

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

@@ -28,7 +28,7 @@ public class PtlAgreementUnderwritingRulesSaveDto {
         PtlAgreementUnderwritingRules ptlAgreementUnderwritingRules = new PtlAgreementUnderwritingRules();
         ptlAgreementUnderwritingRules.setRulesType(ptlAgreementUnderwritingRulesSaveDto.getRulesType());
         ptlAgreementUnderwritingRules.setAgreementId(agreementId);
-        ptlAgreementUnderwritingRules.setRulesFactor(JSONObject.parseArray(JSON.toJSONString(ptlAgreementUnderwritingRulesSaveDto.getRulesFactor())));
+        ptlAgreementUnderwritingRules.setRulesFactor(JSON.parseArray(JSON.toJSONString(ptlAgreementUnderwritingRulesSaveDto.getRulesFactor())));
         return ptlAgreementUnderwritingRules;
     }
 

+ 2 - 0
src/main/java/com/ydtech/modules/protocol/service/PtlAgreementAttributionService.java

@@ -22,4 +22,6 @@ public interface PtlAgreementAttributionService extends IService<PtlAgreementAtt
     void saveAttribution(String agreementId, String insuranceCompanyId, PtlAgreementAttributionDto attribution);
 
 
+//    <T> T getByAgreementId(String agreementId, Class<T> tClass);
+
 }

+ 4 - 0
src/main/java/com/ydtech/modules/protocol/service/PtlAgreementProductCostsService.java

@@ -5,6 +5,7 @@ import com.ydtech.modules.protocol.entity.dto.PltAgreementSchemeQueryDto;
 import com.ydtech.modules.protocol.entity.dto.PltAgreementSchemeSaveDto;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts;
 
+import java.util.Collection;
 import java.util.List;
 
 /**
@@ -35,4 +36,7 @@ public interface PtlAgreementProductCostsService extends IService<PtlAgreementPr
      * @param scheme      产品
      */
     void saveBatchProductCosts(String agreementId, List<PltAgreementSchemeSaveDto> scheme);
+
+
+
 }

+ 8 - 0
src/main/java/com/ydtech/modules/protocol/service/PtlAgreementUnderwritingRulesService.java

@@ -48,6 +48,14 @@ public interface PtlAgreementUnderwritingRulesService extends IService<PtlAgreem
      */
     Map<String, PtlFactorDto> getMapPtlFactorDto(String agreementId, Integer rulesType);
 
+    /**
+     * 通过 协议id 查询 list
+     * @param agreementIdList 协议id 集合
+     * @return 协议id 车牌集合
+     */
+    Map<String, List<String>> getByLicenseNo(List<String> agreementIdList);
+
+
 }
 
 

+ 1 - 0
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementProductCostsServiceImpl.java

@@ -62,6 +62,7 @@ public class PtlAgreementProductCostsServiceImpl extends ServiceImpl<PtlAgreemen
 
     }
 
+
 }
 
 

+ 17 - 6
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementServiceImpl.java

@@ -8,6 +8,7 @@ import com.ydtech.core.page.PageResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.protocol.dao.PtlAgreementMapper;
 import com.ydtech.modules.protocol.entity.dto.PltAgreementSchemeQueryDto;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementDto;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementSaveDto;
 import com.ydtech.modules.protocol.entity.po.PtlAgreement;
@@ -29,6 +30,8 @@ import org.springframework.transaction.annotation.Transactional;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 
 /**
@@ -59,7 +62,19 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
     @Override
     public List<PtlAgreementInsCompanyDto> getAgreementCompany(String deptId) {
         LocalDate localDate = LocalDate.now();
-        return baseMapper.getAgreementCompany(localDate, deptId);
+        List<PtlAgreementInsCompanyDto> agreementCompany = baseMapper.getAgreementCompany(localDate, deptId);
+
+        List<String> agreementIdList = agreementCompany.stream()
+                .flatMap(x -> x.getAgreement().stream().map(PtlAgreementDto::getId))
+                .collect(Collectors.toList());
+
+        Map<String, List<String>> licenseNoList = ptlAgreementUnderwritingRulesService.getByLicenseNo(agreementIdList);
+
+        agreementCompany.forEach(
+                x -> x.getAgreement().forEach(a -> a.setLicenseNo(licenseNoList.get(a.getId())))
+        );
+
+        return agreementCompany;
     }
 
     @Autowired
@@ -195,8 +210,4 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
         return HttpResult.ok("修改成功");
     }
 
-}
-
-
-
-
+}

+ 22 - 0
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementUnderwritingRulesServiceImpl.java

@@ -12,8 +12,10 @@ import com.ydtech.modules.protocol.utils.AssertionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author wenks
@@ -56,4 +58,24 @@ public class PtlAgreementUnderwritingRulesServiceImpl extends ServiceImpl<PtlAgr
         return PtlAgreementCostsFactorSaveDto.toMapPtlFactorDto(rules.getRulesFactor());
     }
 
+
+    @Override
+    public Map<String, List<String>> getByLicenseNo(List<String> agreementIdList) {
+        Map<String, List<String>> map = new HashMap<>();
+        if(!agreementIdList.isEmpty()){
+            LambdaQueryWrapper<PtlAgreementUnderwritingRules> wrapper = new LambdaQueryWrapper<>();
+            wrapper.in(PtlAgreementUnderwritingRules::getAgreementId, agreementIdList)
+                    .eq(PtlAgreementUnderwritingRules::getRulesType, 1);
+
+            List<PtlAgreementUnderwritingRules> ptlAgreementUnderwritingRules = baseMapper.selectList(wrapper);
+
+            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());
+                map.put(x.getAgreementId(), licenseNo);
+            });
+        }
+
+        return map;
+    }
 }

+ 2 - 2
src/main/resources/application-prod.yml

@@ -237,8 +237,8 @@ zm:
   vinSearch:
     url: ${zm.domain}/vinSearch
   api:
-    source: 326
-    token: THIRDSCOuloft2020052818346904zmYBSXXHTQ
+#    source: 326
+#    token: THIRDSCOuloft2020052818346904zmYBSXXHTQ
     url: https://www.echinacoal.com/singlePlatform/
     imageUrl: https://www.echinacoal.com/singlePlatform/others/
     smsUrl: https://www.echinacoal.com/singlePlatform/prpall/

+ 2 - 2
src/main/resources/application-test.yml

@@ -320,8 +320,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/