Explorar o código

中煤Api对接

BifronsV %!s(int64=3) %!d(string=hai) anos
pai
achega
781f102cbc
Modificáronse 27 ficheiros con 803 adicións e 126 borrados
  1. 56 14
      src/main/java/com/ydtech/components/ZhongmeiRequestApiComponents.java
  2. 11 2
      src/main/java/com/ydtech/config/properties/ZmApiConfigurationProperties.java
  3. 24 10
      src/main/java/com/ydtech/modules/order/controller/ZhongMeiOrderApiController.java
  4. 10 1
      src/main/java/com/ydtech/modules/order/entity/api/zm/constants/InsuranceTypeCorrespondence.java
  5. 24 0
      src/main/java/com/ydtech/modules/order/entity/api/zm/constants/enums/AuditStatusEnum.java
  6. 7 9
      src/main/java/com/ydtech/modules/order/entity/api/zm/constants/enums/ContractEnum.java
  7. 26 0
      src/main/java/com/ydtech/modules/order/entity/api/zm/constants/enums/DocumentTypeEnum.java
  8. 28 0
      src/main/java/com/ydtech/modules/order/entity/api/zm/constants/enums/ImageTypeEnum.java
  9. 55 0
      src/main/java/com/ydtech/modules/order/entity/api/zm/request/ApprovedRequest.java
  10. 57 0
      src/main/java/com/ydtech/modules/order/entity/api/zm/request/CoverageRequest.java
  11. 33 0
      src/main/java/com/ydtech/modules/order/entity/api/zm/request/InsurancePolicyPrintRequest.java
  12. 16 14
      src/main/java/com/ydtech/modules/order/entity/api/zm/request/QuotedPriceRequest.java
  13. 59 0
      src/main/java/com/ydtech/modules/order/entity/api/zm/request/SubmitRequest.java
  14. 89 0
      src/main/java/com/ydtech/modules/order/entity/api/zm/request/UploadImageRequest.java
  15. 31 0
      src/main/java/com/ydtech/modules/order/entity/api/zm/response/InsurancePolicyPrintResponse.java
  16. 1 1
      src/main/java/com/ydtech/modules/order/entity/api/zm/response/ModelsQueryResponse.java
  17. 4 2
      src/main/java/com/ydtech/modules/order/entity/api/zm/response/QuotedPriceResponse.java
  18. 38 0
      src/main/java/com/ydtech/modules/order/entity/api/zm/response/SubmitResponse.java
  19. 15 0
      src/main/java/com/ydtech/modules/order/entity/api/zm/response/UploadImageResponse.java
  20. 2 0
      src/main/java/com/ydtech/modules/order/service/InsAreaCompanyService.java
  21. 16 7
      src/main/java/com/ydtech/modules/order/service/ZhongMeiOrderApiService.java
  22. 6 0
      src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyServiceImpl.java
  23. 158 51
      src/main/java/com/ydtech/modules/order/service/impl/ZhongMeiOrderApiServiceImpl.java
  24. 3 3
      src/main/java/com/ydtech/modules/order/service/impl/ZhongMeiOrderServiceImpl.java
  25. 14 7
      src/main/resources/application-dev.yml
  26. 10 2
      src/main/resources/application-prod.yml
  27. 10 3
      src/main/resources/application-test.yml

+ 56 - 14
src/main/java/com/ydtech/components/ZhongmeiRequestApiComponents.java

@@ -7,10 +7,8 @@ import com.ydtech.exception.SystemException;
 import com.ydtech.modules.order.entity.api.zm.BaseRequest;
 import com.ydtech.modules.order.entity.api.zm.BaseRequestHead;
 import com.ydtech.modules.order.entity.api.zm.BaseResponse;
-import com.ydtech.modules.order.entity.api.zm.request.ModelsQueryRequest;
-import com.ydtech.modules.order.entity.api.zm.request.QuotedPriceRequest;
-import com.ydtech.modules.order.entity.api.zm.response.ModelsQueryResponse;
-import com.ydtech.modules.order.entity.api.zm.response.QuotedPriceResponse;
+import com.ydtech.modules.order.entity.api.zm.request.*;
+import com.ydtech.modules.order.entity.api.zm.response.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.*;
 import org.springframework.stereotype.Component;
@@ -30,12 +28,26 @@ import java.util.List;
 @Component
 public class ZhongmeiRequestApiComponents {
 
-    private final ZmApiConfigurationProperties zmApiConfigurationProperties;
+    /**
+     * 车型查询	https://www.echinacoal.com/ singlePlatform /ModelsQuery.do
+     * 续保查询(暂不做)	https:// www.echinacoal.com/ singlePlatform /RenewalQuery.do
+     * 报价	https:// www.echinacoal.com/singlePlatform/QuotedPrice.do
+     * 提交核保	https:// www.echinacoal.com/ singlePlatform /Submit.do
+     * 缴费查询	https:// www.echinacoal.com / singlePlatform /OrderStatus.do
+     * 核保状态查询	https:// www.echinacoal.com / singlePlatform /SubmitStatus.do
+     * 电子保单下载	https:// www.echinacoal.com / singlePlatform /InsurancePolicyPrint.do
+     * 影像上传(接口)	https://www.echinacoal.com/singlePlatform/others/UploadImage.do
+     * 校验发短信接口	https://www.echinacoal.com/singlePlatform/prpall/CheckSMScode.do
+     * 验证校验码正确	https://www.echinacoal.com/singlePlatform/prpall/ValidSMScode.do
+     */
+
+
+    private final ZmApiConfigurationProperties properties;
 
     private final RestTemplate restTemplate;
 
     public ZhongmeiRequestApiComponents(ZmApiConfigurationProperties zmApiConfigurationProperties, RestTemplate restTemplate) {
-        this.zmApiConfigurationProperties = zmApiConfigurationProperties;
+        this.properties = zmApiConfigurationProperties;
         this.restTemplate = restTemplate;
     }
 
@@ -55,10 +67,6 @@ public class ZhongmeiRequestApiComponents {
             throw new SystemException("请求失败");
         }
 
-        if ("-1".equals(t.getHead().getReturnCode())) {
-            throw new SystemException(t.getHead().getReturnMessage());
-        }
-
         return t;
     }
 
@@ -71,8 +79,8 @@ public class ZhongmeiRequestApiComponents {
      */
     public List<ModelsQueryResponse.SimpleStadarCarDTO> modelQuery(ModelsQueryRequest request, Class<ModelsQueryResponse> tClass) {
         String transCode = "ModelsQuery";
-        String url = zmApiConfigurationProperties.getUrl() + transCode + ".do";
-        BaseRequestHead head = zmApiConfigurationProperties.getHead(transCode);
+        String url = properties.getUrl() + transCode + ".do";
+        BaseRequestHead head = properties.getHead(transCode);
         request.setHead(head);
         ModelsQueryResponse post = post(request, url, tClass);
         return post.getSimpleStadarCar();
@@ -86,10 +94,44 @@ public class ZhongmeiRequestApiComponents {
      */
     public QuotedPriceResponse quotedPrice(QuotedPriceRequest request, Class<QuotedPriceResponse> tClass) {
         String transCode = "QuotedPrice";
-        String url = zmApiConfigurationProperties.getUrl() + transCode + ".do";
-        BaseRequestHead head = zmApiConfigurationProperties.getHead(transCode);
+        String url = properties.getUrl() + transCode + ".do";
+        BaseRequestHead head = properties.getHead(transCode);
+        request.setHead(head);
+        return post(request, url, tClass);
+    }
+
+    public SubmitResponse submit(SubmitRequest request, Class<SubmitResponse> tClass) {
+        String transCode = "Submit";
+        String url = properties.getUrl() + transCode + ".do";
+        BaseRequestHead head = properties.getHead(transCode);
         request.setHead(head);
+        request.setCallbackUrl(properties.getCallbackUrl() + properties.getCallbackUrl());
+        request.setPageUrl(properties.getPageUrl());
+        request.setPassMsgUrl(properties.getCallbackUrl() + properties.getPassMsgUrl());
         return post(request, url, tClass);
     }
 
+    public void uploadImage(UploadImageRequest request, Class<UploadImageResponse> tClass) {
+        String transCode = "UploadImage";
+        String url = properties.getUrl() + transCode + ".do";
+        BaseRequestHead head = properties.getHead(transCode);
+        request.setHead(head);
+        UploadImageResponse response = post(request, url, tClass);
+        validationResults(response);
+    }
+
+    public InsurancePolicyPrintResponse insurancePolicyPrint(InsurancePolicyPrintRequest request, Class<InsurancePolicyPrintResponse> tClass){
+        String transCode = "UploadImage";
+        String url = properties.getUrl() + transCode + ".do";
+        BaseRequestHead head = properties.getHead(transCode);
+        request.setHead(head);
+        return post(request, url, tClass);
+    }
+
+    public <T extends BaseResponse> void validationResults(T t) {
+        if ("-1".equals(t.getHead().getReturnCode())) {
+            throw new SystemException(t.getHead().getReturnMessage());
+        }
+    }
+
 }

+ 11 - 2
src/main/java/com/ydtech/config/properties/ZmApiConfigurationProperties.java

@@ -26,14 +26,23 @@ public class ZmApiConfigurationProperties {
     private String imageUrl;
 
     private String smsUrl;
+    // 支付完成页面跳转地址
+    private String pageUrl;
+    //
+    private String callbackDomain;
+    // 承保回调地址
+    private String callbackUrl;
+    // 审核回调地址
+    private String passMsgUrl;
 
     /**
      * 中煤请求 head 的参数
+     *
      * @param transCode
      * @return
      */
-    public BaseRequestHead getHead(String transCode){
-        return new BaseRequestHead(transCode, "Req", token, source );
+    public BaseRequestHead getHead(String transCode) {
+        return new BaseRequestHead(transCode, "Req", token, source);
     }
 
 }

+ 24 - 10
src/main/java/com/ydtech/modules/order/controller/ZhongMeiOrderApiController.java

@@ -6,6 +6,8 @@ import com.ydtech.config.properties.ZmApiConfigurationProperties;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.esm.model.InsTaskImage;
 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;
 import com.ydtech.modules.order.entity.vo.AccidentalDrivingVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
@@ -39,16 +41,23 @@ public class ZhongMeiOrderApiController {
         return this.zhongMeiOrderApiService.modelsQuery(modelName);
     }
 
-    @Autowired
-    private ZmApiConfigurationProperties zmApiConfigurationProperties;
-
     @PostMapping("/quote")
     @ApiOperation("报价")
     public HttpResult quote(@RequestBody BaseQuoteVo<AccidentalDrivingVo> zmQuoteVo) {
+        BaseQuoteInfoVo quoteInfo = this.insOrdersComponents.getQuoteInfo(zmQuoteVo.getOrderNo());
+        return this.zhongMeiOrderApiService.quote(quoteInfo, zmQuoteVo);
+    }
 
-        return HttpResult.ok(zmApiConfigurationProperties.getUrl());
-//        BaseQuoteInfoVo quoteInfo = this.insOrdersComponents.getQuoteInfo(zmQuoteVo.getOrderNo());
-//        return this.zhongMeiOrderApiService.quote(quoteInfo, zmQuoteVo);
+    @PostMapping(value = "/audit")
+    @ApiOperation(value = "提交核保")
+    public HttpResult audit(@RequestSingleParam(value = "companyId") String companyId) throws IOException {
+        return this.zhongMeiOrderApiService.audit(companyId);
+    }
+
+    @PostMapping(value = "/submitImage")
+    @ApiOperation(value = "提交影像信息")
+    public HttpResult submitImage(@RequestSingleParam(value = "companyId") String companyId) throws IOException {
+        return this.zhongMeiOrderApiService.submitImage(companyId);
     }
 
     @PostMapping("/getPolicyPrint")
@@ -57,11 +66,16 @@ public class ZhongMeiOrderApiController {
         return this.zhongMeiOrderApiService.getPolicyPrint(companyId);
     }
 
-    @PostMapping(value = "/uploadImage")
-    @ApiOperation(value = "影像上传")
-    public HttpResult uploadImage(@RequestSingleParam(value = "orderNo") String orderNo) {
-        return zhongMeiOrderApiService.uploadImage(orderNo);
+    @PostMapping("/underwritingCallback")
+    @ApiOperation(value = "承保回调")
+    public HttpResult underwritingCallback(@RequestBody CoverageRequest coverageRequest){
+        return this.zhongMeiOrderApiService.underwritingCallback(coverageRequest);
     }
 
+    @PostMapping("/auditCallback")
+    @ApiOperation(value = "审核回调")
+    public HttpResult auditCallback(@RequestBody ApprovedRequest approvedRequest){
+        return this.zhongMeiOrderApiService.auditCallback(approvedRequest);
+    }
 
 }

+ 10 - 1
src/main/java/com/ydtech/modules/order/entity/api/zm/constants/InsuranceTypeCorrespondence.java

@@ -20,8 +20,9 @@ public class InsuranceTypeCorrespondence {
 
     //司机
     public static final String[] DRIVER = {"D3", "SY_FJ_YBW3"};
+
     // 绝对免赔
-    public static final String[] ABSOLUTE_DEDUCTIBLE  = {"MJ1", "MJ2", "MJ3", "MJ4"};
+    public static final String[] ABSOLUTE_DEDUCTIBLE = {"MJ1", "MJ2", "MJ3", "MJ4"};
 
     public static final String TRAFFIC = "0507";
     public static final String BUSINESS = "0510";
@@ -33,4 +34,12 @@ public class InsuranceTypeCorrespondence {
         RISK.put("0510", "0361");
     }
 
+    public final static Map<String, String> IMAGE_TYPE = new HashMap<>();
+
+    static {
+        IMAGE_TYPE.put("C01", "UW_0305");
+        IMAGE_TYPE.put("C02", "UW_0302");
+        IMAGE_TYPE.put("C03", "UW_0301");
+    }
+
 }

+ 24 - 0
src/main/java/com/ydtech/modules/order/entity/api/zm/constants/enums/AuditStatusEnum.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.order.entity.api.zm.constants.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author wenks
+ * @version 0.0.2
+ * @description TODO
+ * @date 2023/4/24 17:44
+ */
+@Getter
+@AllArgsConstructor
+public enum AuditStatusEnum {
+
+    S_1("1", "审核通过"),
+    S_2("2", "下发修改"),
+    S_4("4", "拒保");
+
+    private final String code;
+
+    private final String meaning;
+
+}

+ 7 - 9
src/main/java/com/ydtech/modules/order/entity/api/zm/constants/enums/ContractEnum.java

@@ -1,9 +1,14 @@
 package com.ydtech.modules.order.entity.api.zm.constants.enums;
 
+import lombok.Getter;
+
 /**
- *
- *
+ * @author wenks
+ * @version 0.0.2
+ * @description 中煤险种编码
+ * @date 2023/4/23 11:45
  */
+@Getter
 public enum ContractEnum {
     C_BZ("BZ", "机动车交通事故责任强制险"),
     C_01("01", "机动车损失保险"),
@@ -42,11 +47,4 @@ public enum ContractEnum {
     // 险别名称
     private final String kindName;
 
-    public String getKindCode() {
-        return kindCode;
-    }
-
-    public String getKindName() {
-        return kindName;
-    }
 }

+ 26 - 0
src/main/java/com/ydtech/modules/order/entity/api/zm/constants/enums/DocumentTypeEnum.java

@@ -0,0 +1,26 @@
+package com.ydtech.modules.order.entity.api.zm.constants.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author wenks
+ * @version 0.0.2
+ * @description TODO
+ * @date 2023/4/24 18:31
+ */
+@AllArgsConstructor
+@Getter
+public enum DocumentTypeEnum {
+
+    DZ_AJ("DZ_AJ", "标志"),
+    DZ_AE("DZ_AE", "保单"),
+    EP("EP", "意外险保单"),
+    HP("HP", "家财险保单");
+
+    private final String code;
+
+    private final String meaning;
+
+
+}

+ 28 - 0
src/main/java/com/ydtech/modules/order/entity/api/zm/constants/enums/ImageTypeEnum.java

@@ -0,0 +1,28 @@
+package com.ydtech.modules.order.entity.api.zm.constants.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author wenks
+ * @version 0.0.2
+ * @description TODO
+ * @date 2023/4/24 15:32
+ */
+@AllArgsConstructor
+@Getter
+public enum ImageTypeEnum {
+
+    C01("C01","车辆影像"),
+    C02("C02","车辆影像"),
+    C03("C03","车辆影像"),
+    C04("C04","车辆影像"),
+    C05("C05","车辆影像");
+
+
+    //C01车辆影像,C02车主身份证,C03投保人身份证,C04被保人身份证,C05验车照
+    private final String type;
+
+    private final String info;
+
+}

+ 55 - 0
src/main/java/com/ydtech/modules/order/entity/api/zm/request/ApprovedRequest.java

@@ -0,0 +1,55 @@
+package com.ydtech.modules.order.entity.api.zm.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.ins.model.yc.ruote.Base;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author wenks
+ * @version 0.0.2
+ * @description 审核回调请求
+ * @date 2023/4/24 16:58
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ApprovedRequest implements Serializable {
+
+    private static final long serialVersionUID = 897412373745055129L;
+
+    // 投保单号
+    @JsonProperty("contractNo")
+    private String contractNo;
+    // 交强分单号
+    @JsonProperty("proposalNoJ")
+    private String proposalNoJ;
+    // 商业分单号
+    @JsonProperty("proposalNoS")
+    private String proposalNoS;
+    // 车牌号
+    @JsonProperty("plateNo")
+    private String plateNo;
+    // 返回消息 审核通过/下发修改/拒保
+    @JsonProperty("returnMessage")
+    private String returnMessage;
+    // 状态码 1-审核通过/2-下发修改/4-拒保
+    @JsonProperty("statusCode")
+    private String statusCode;
+    // 下发修改/拒保原因
+    @JsonProperty("handleText")
+    private String handleText;
+    // 支付链接
+    @JsonProperty("payUrl")
+    private String payUrl;
+    // 意外险投保单号
+    @JsonProperty("proposalNoCP")
+    private String proposalNoCP;
+    // 家财险投保单号
+    @JsonProperty("familyNo")
+    private String familyNo;
+
+}

+ 57 - 0
src/main/java/com/ydtech/modules/order/entity/api/zm/request/CoverageRequest.java

@@ -0,0 +1,57 @@
+package com.ydtech.modules.order.entity.api.zm.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.api.zm.BaseRequest;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author wenks
+ * @version 0.0.2
+ * @description 支付回调
+ * @date 2023/4/24 17:01
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class CoverageRequest extends BaseRequest implements Serializable {
+
+    private static final long serialVersionUID = 4711903122314403055L;
+
+    // 商业险保单号
+    @JsonProperty("bizPolicyNo")
+    private String bizPolicyNo;
+    // 商业险投保单号
+    @JsonProperty("bizProposalNo")
+    private String bizProposalNo;
+    // 交强险保单号
+    @JsonProperty("forcePolicyNo")
+    private String forcePolicyNo;
+    // 交强险投保单号
+    @JsonProperty("forceProposalNo")
+    private String forceProposalNo;
+    // 总保单号
+    @JsonProperty("policyNo")
+    private String policyNo;
+    // 总投保单号
+    @JsonProperty("proposalNo")
+    private String proposalNo;
+    // 日期(yyyy-MM-dd HH:mm:ss)
+    @JsonProperty("signDate")
+    private String signDate;
+    // 状态(1失败2成功)
+    @JsonProperty("status")
+    private int status;
+    // 意外险保单号
+    @JsonProperty("accidentPolicyNo")
+    private String accidentPolicyNo;
+    // 家财险保单号
+    @JsonProperty("homeAccidentPolicyNo")
+    private String homeAccidentPolicyNo;
+
+}

+ 33 - 0
src/main/java/com/ydtech/modules/order/entity/api/zm/request/InsurancePolicyPrintRequest.java

@@ -0,0 +1,33 @@
+package com.ydtech.modules.order.entity.api.zm.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.api.zm.BaseRequest;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author wenks
+ * @version 0.0.2
+ * @description TODO
+ * @date 2023/4/24 18:00
+ */
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class InsurancePolicyPrintRequest extends BaseRequest {
+
+    private static final long serialVersionUID = 6487051137828235820L;
+
+    @JsonProperty("policyNo")
+    private String policyNo;
+
+    @JsonProperty("riskCode")
+    private String riskCode;
+
+    @JsonProperty("businessType")
+    private String businessType = "P";
+
+    @JsonProperty("endorSeqNo")
+    private String endorSeqNo = "000";
+}

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

@@ -81,7 +81,7 @@ public class QuotedPriceRequest extends BaseRequest {
             CustomerInfoVo insuredPersonInfo = baseQuoteInfoVo.getInsuredPersonInfo();
             int i = Integer.parseInt(carInfo.getSeatCount());
             // 保单归属地
-            this.policyLocation = new PolicyLocationDTO("", "", "");
+            this.policyLocation = new PolicyLocationDTO("140000", "140400", "140423");
             // 车辆信息
             this.insuredObject = new InsuredObjectDTO(carInfo, simpleStadarCarDTO);
             // 保险信息
@@ -178,20 +178,22 @@ public class QuotedPriceRequest extends BaseRequest {
                  * 02	非营业党政机关,事业团体
                  * 03	非营业企业
                  */
-                @JsonProperty("carCheckStatus")
+                @JsonProperty("carUseType")
                 private String carUseType;
                 /**
                  * 使用性质
                  * 01	营业
                  * 02	非营业
                  */
-                @JsonProperty("carCheckStatus")
+                @JsonProperty("motorUsageTypeCode")
                 private String motorUsageTypeCode;
 
                 public PolicyCarDTO(CarInfoVo carInfoVo) {
                     this.engine = carInfoVo.getEngineNo();
                     if (StringUtils.isNullOrEmpty(carInfoVo.getLicenseNo())) {
                         this.newCarSign = true;
+                    } else {
+                        this.newCarSign = false;
                     }
                     this.plateNo = carInfoVo.getLicenseNo();
                     this.vin = carInfoVo.getFrameNo();
@@ -201,9 +203,9 @@ public class QuotedPriceRequest extends BaseRequest {
                     } else {
                         this.chgOwnerFlag = "0";
                     }
-
-                    this.registerDate = carInfoVo.getRegisterDate();
-                    this.issueDate = carInfoVo.getIssueDate();
+                    this.ecdemicVehicleFlag = false;
+                    this.registerDate = carInfoVo.getRegisterDate() + " " + TimeConstants.START_TIME;
+                    this.issueDate = carInfoVo.getIssueDate() + " " + TimeConstants.START_TIME;
                     this.plateColorCode = "01";
                     this.carCheckStatus = "3";
                     this.carUseType = "01";
@@ -231,13 +233,13 @@ public class QuotedPriceRequest extends BaseRequest {
                 ContractDTO contractDTO = new ContractDTO();
                 contractDTO.contractMain = new ContractMainDTO(riskInfoVo);
                 if (InsuranceTypeCorrespondence.TRAFFIC.equals(riskInfoVo.getRiskCode())) {
-                    contractDTO.coverage = Collections.singletonList(new CoverageDTO().getTraffic());
+                    contractDTO.coverage = Collections.singletonList(new CoverageDTO().fetchTraffic());
                 }
 
                 if (InsuranceTypeCorrespondence.BUSINESS.equals(riskInfoVo.getRiskCode())) {
                     contractDTO.coverage = new CoverageDTO().getBusiness(kindInfoVos, quantity);
                 }
-
+                contractDTOS.add(contractDTO);
             }
             return contractDTOS;
         }
@@ -326,7 +328,7 @@ public class QuotedPriceRequest extends BaseRequest {
                     String s = InsuranceTypeCorrespondence.CONNECT_INSURANCE_TYPE[i];
                     ContractEnum contractEnum = Enum.valueOf(ContractEnum.class, "C_" + s);
                     coverageDTO.kindName = contractEnum.getKindName();
-                    coverageDTO.kindCode = contractEnum.getKindName();
+                    coverageDTO.kindCode = contractEnum.getKindCode();
                     coverageDTO.amount = (int) kindInfoVo.getAmount();
                     coverageDTO.unitAmount = (int) kindInfoVo.getUnitAmount();
                     // 司机
@@ -354,10 +356,10 @@ public class QuotedPriceRequest extends BaseRequest {
              *
              * @return
              */
-            public CoverageDTO getTraffic() {
+            public CoverageDTO fetchTraffic() {
                 this.amount = 200000;
-                this.kindName = ContractEnum.C_BZ.getKindCode();
-                this.kindCode = ContractEnum.C_BZ.getKindName();
+                this.kindName = ContractEnum.C_BZ.getKindName();
+                this.kindCode = ContractEnum.C_BZ.getKindCode();
                 return this;
             }
 
@@ -428,8 +430,8 @@ public class QuotedPriceRequest extends BaseRequest {
             this.role = role;
             this.invocieType = "026";
             this.jobRisk = "1";
-            this.identifyValidDate = customerInfoVo.getIdentifyValidDate();
-            this.identifyValidEndDate = customerInfoVo.getIdentifyValidEndDate();
+            this.identifyValidDate = customerInfoVo.getIdentifyValidDate() +   " " + TimeConstants.START_TIME;
+            this.identifyValidEndDate = customerInfoVo.getIdentifyValidEndDate() + " " + TimeConstants.END_TIME;
         }
 
         public List<CustomerDTO> getCustomers(CustomerInfoVo ownerInfo, CustomerInfoVo policyHolderInfo, CustomerInfoVo insuredPersonInfo) {

+ 59 - 0
src/main/java/com/ydtech/modules/order/entity/api/zm/request/SubmitRequest.java

@@ -0,0 +1,59 @@
+package com.ydtech.modules.order.entity.api.zm.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.api.zm.BaseRequest;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author wenks
+ * @version 0.0.2
+ * @description 核保请求参数
+ * @date 2023/4/24 10:40
+ */
+@NoArgsConstructor
+@Data
+public class SubmitRequest extends BaseRequest {
+
+    private static final long serialVersionUID = 180600971227499971L;
+
+    @JsonProperty("OrderNo")
+    private String orderNo;
+    @JsonProperty("VIN")
+    private String vin;
+    @JsonProperty("checkCode")
+    private String checkCode;
+    @JsonProperty("deliveryInfo")
+    private DeliveryInfoDTO deliveryInfo;
+    @JsonProperty("pageUrl")
+    private String pageUrl;
+    @JsonProperty("callbackUrl")
+    private String callbackUrl;
+    @JsonProperty("passMsgUrl")
+    private String passMsgUrl;
+
+    @AllArgsConstructor
+    @NoArgsConstructor
+    @Data
+    public static class DeliveryInfoDTO {
+        // 姓名
+        @JsonProperty("name")
+        private String name;
+        // 电话
+        @JsonProperty("mobile")
+        private String mobile;
+        // 省
+        @JsonProperty("province")
+        private String province;
+        //  市
+        @JsonProperty("city")
+        private String city;
+        // 区/县
+        @JsonProperty("district")
+        private String district;
+        // 详细地址
+        @JsonProperty("detail")
+        private String detail;
+    }
+}

+ 89 - 0
src/main/java/com/ydtech/modules/order/entity/api/zm/request/UploadImageRequest.java

@@ -0,0 +1,89 @@
+package com.ydtech.modules.order.entity.api.zm.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.esm.model.InsTaskImage;
+import com.ydtech.modules.order.entity.api.zm.BaseRequest;
+import com.ydtech.modules.order.entity.api.zm.constants.InsuranceTypeCorrespondence;
+import com.ydtech.modules.order.entity.api.zm.constants.enums.ImageTypeEnum;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * @author wenks
+ * @version 0.0.2
+ * @description 上传影像请求
+ * @date 2023/4/24 15:15
+ */
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class UploadImageRequest extends BaseRequest {
+
+
+    private static final long serialVersionUID = 1469709481861289454L;
+
+    @JsonProperty("contractNo")
+    private String contractNo;
+
+    @JsonProperty("nodeBeanlist")
+    private List<NodeBeanlistDTO> nodeBeanlist;
+
+    public UploadImageRequest(List<InsTaskImage> insTaskImages, String contractNo) {
+        this.contractNo = contractNo;
+        List<NodeBeanlistDTO> nodeBeanlist = new ArrayList<>();
+        InsuranceTypeCorrespondence.IMAGE_TYPE.keySet().forEach(x -> {
+                    List<InsTaskImage> collect = insTaskImages.stream().filter(insTaskImage -> Enum.valueOf(ImageTypeEnum.class, x).getType().equals(x)).collect(Collectors.toList());
+                    NodeBeanlistDTO nodeBeanlistDTO = new NodeBeanlistDTO(collect, Enum.valueOf(ImageTypeEnum.class, x).getType());
+                    nodeBeanlist.add(nodeBeanlistDTO);
+                }
+        );
+        this.nodeBeanlist = nodeBeanlist;
+
+    }
+
+    @AllArgsConstructor
+    @NoArgsConstructor
+    @Data
+    public static class NodeBeanlistDTO {
+
+        @JsonProperty("id")
+        private String id;
+
+        @JsonProperty("imageBeanList")
+        private List<ImageBeanListDTO> imageBeanList;
+
+        public NodeBeanlistDTO(List<InsTaskImage> insTaskImages, String id) {
+            this.id = id;
+            List<ImageBeanListDTO> imageBeanListDTOS = new ArrayList<>();
+            insTaskImages.forEach(x -> {
+                ImageBeanListDTO imageBeanListDTO = new ImageBeanListDTO();
+                imageBeanListDTO.setFileName(UUID.randomUUID() + ".png");
+                imageBeanListDTO.setImage(x.getImage());
+                imageBeanListDTOS.add(imageBeanListDTO);
+            });
+            this.imageBeanList = imageBeanListDTOS;
+        }
+
+        @NoArgsConstructor
+        @Data
+        public static class ImageBeanListDTO {
+            // 文件名称
+            @JsonProperty("fileName")
+            private String fileName;
+            // 图片base64格式编码
+            @JsonProperty("image")
+            private String image;
+
+            @JsonProperty("remark")
+            private String remark;
+        }
+    }
+}

+ 31 - 0
src/main/java/com/ydtech/modules/order/entity/api/zm/response/InsurancePolicyPrintResponse.java

@@ -0,0 +1,31 @@
+package com.ydtech.modules.order.entity.api.zm.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.api.zm.BaseResponse;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @author wenks
+ * @version 0.0.2
+ * @description TODO
+ * @date 2023/4/24 18:00
+ */
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class InsurancePolicyPrintResponse extends BaseResponse {
+
+    private static final long serialVersionUID = 8663267623211853350L;
+
+    @JsonProperty("downloadUrl")
+    private List<String> downloadUrl;
+
+    @JsonProperty("statusCode")
+    private String statusCode;
+
+
+}

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

@@ -13,7 +13,7 @@ import java.util.List;
 /**
  * @author wenks
  * @version 0.0.2
- * @description TODO
+ * @description 车型查询返回
  * @date 2023/4/21 10:50
  */
 @EqualsAndHashCode(callSuper = true)

+ 4 - 2
src/main/java/com/ydtech/modules/order/entity/api/zm/response/QuotedPriceResponse.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.order.entity.api.zm.response;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ydtech.modules.order.entity.api.zm.BaseResponse;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
 import java.util.List;
@@ -13,6 +14,7 @@ import java.util.List;
  * @description 报价响应
  * @date 2023/4/23 17:35
  */
+@EqualsAndHashCode(callSuper = true)
 @NoArgsConstructor
 @Data
 public class QuotedPriceResponse extends BaseResponse {
@@ -21,8 +23,8 @@ public class QuotedPriceResponse extends BaseResponse {
 
     @JsonProperty("bizPremium")
     private BizPremiumDTO bizPremium;
-    @JsonProperty("businessNo")
-    private String businessNo;
+    @JsonProperty("orderNo")
+    private String orderNo;
     @JsonProperty("forcePrimium")
     private ForcePrimiumDTO forcePrimium;
     @JsonProperty("insuranceScheme")

+ 38 - 0
src/main/java/com/ydtech/modules/order/entity/api/zm/response/SubmitResponse.java

@@ -0,0 +1,38 @@
+package com.ydtech.modules.order.entity.api.zm.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.api.zm.BaseResponse;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author wenks
+ * @version 0.0.2
+ * @description 核保响应参数
+ * @date 2023/4/24 10:54
+ */
+@NoArgsConstructor
+@Data
+public class SubmitResponse extends BaseResponse {
+
+    private static final long serialVersionUID = -8744044197438153449L;
+    // 意外险投保单号
+    @JsonProperty("accidentProposalNo")
+    private String accidentProposalNo;
+    // 商业险投保单号
+    @JsonProperty("bizProposalNo")
+    private String bizProposalNo;
+    // 交强险投保单号
+    @JsonProperty("forceProposalNo")
+    private String forceProposalNo;
+    // 支付时间
+    @JsonProperty("payEndDate")
+    private String payEndDate;
+    // 支付链接
+    @JsonProperty("payUrl")
+    private String payUrl;
+    // 主单号
+    @JsonProperty("proposalNo")
+    private String proposalNo;
+
+}

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

@@ -0,0 +1,15 @@
+package com.ydtech.modules.order.entity.api.zm.response;
+
+import com.ydtech.modules.order.entity.api.zm.BaseResponse;
+
+/**
+ * @author wenks
+ * @version 0.0.2
+ * @description 影像上传响应体
+ * @date 2023/4/24 15:15
+ */
+
+public class UploadImageResponse extends BaseResponse {
+    private static final long serialVersionUID = -8268910418897494934L;
+
+}

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

@@ -13,4 +13,6 @@ public interface InsAreaCompanyService extends IService<InsAreaCompany> {
 
     InsAreaCompany getByIdIsExist(String companyId);
 
+    InsAreaCompany getByInsOrderNo(String insOrderNo);
+
 }

+ 16 - 7
src/main/java/com/ydtech/modules/order/service/ZhongMeiOrderApiService.java

@@ -1,27 +1,35 @@
 package com.ydtech.modules.order.service;
 
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.order.entity.api.zm.request.ApprovedRequest;
+import com.ydtech.modules.order.entity.api.zm.request.CoverageRequest;
 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 javax.servlet.http.HttpServletRequest;
 
-public interface ZhongMeiOrderApiService {
+public interface ZhongMeiOrderApiService extends BaseOrderService<AccidentalDrivingVo> {
 
     HttpResult modelsQuery(String modelName);
 
+    HttpResult submitImage(String companyId);
 
-    HttpResult uploadImage(String orderNo);
+    /**
+     * 承保回调
+     *
+     * @param coverageRequest
+     * @return
+     */
+    HttpResult underwritingCallback(CoverageRequest coverageRequest);
 
     /**
-     * 报价
+     * 审核回调
      *
-     * @param quoteInfo 报价实体
-     * @param zmQuoteVo 驾意险
-     * @return 响应实体
+     * @param approvedRequest
+     * @return
      */
-    HttpResult quote(BaseQuoteInfoVo quoteInfo, BaseQuoteVo<AccidentalDrivingVo> zmQuoteVo);
+    HttpResult auditCallback(ApprovedRequest approvedRequest);
 
     /**
      * 中煤保单下载
@@ -31,4 +39,5 @@ public interface ZhongMeiOrderApiService {
      */
     HttpResult getPolicyPrint(String companyId);
 
+
 }

+ 6 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ydtech.modules.order.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.order.dao.InsAreaCompanyMapper;
@@ -25,6 +26,11 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
         }
         return insAreaCompany;
     }
+
+    @Override
+    public InsAreaCompany getByInsOrderNo(String insOrderNo) {
+        return baseMapper.selectOne(new LambdaQueryWrapper<InsAreaCompany>().eq(InsAreaCompany::getInsOrderNo, insOrderNo));
+    }
 }
 
 

+ 158 - 51
src/main/java/com/ydtech/modules/order/service/impl/ZhongMeiOrderApiServiceImpl.java

@@ -6,39 +6,32 @@ import com.alibaba.fastjson.JSONObject;
 import com.ydtech.components.ZhongmeiRequestApiComponents;
 import com.ydtech.constants.enums.InsOrderStatus;
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.exception.SystemException;
 import com.ydtech.modules.esm.model.EsmInsCompany;
 import com.ydtech.modules.esm.model.InsTaskImage;
 import com.ydtech.modules.esm.service.EsmInsCompanyService;
 import com.ydtech.modules.esm.service.InsTaskImageService;
-import com.ydtech.modules.ins.model.request.Response;
-import com.ydtech.modules.ins.model.request.ZhongmeiQuoteResponse;
 import com.ydtech.modules.ins.model.ya.CarModelDTO;
-import com.ydtech.modules.ins.model.ya.YaQuoteInfoVo;
 import com.ydtech.modules.ins.vo.*;
 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.constants.InsuranceTypeCorrespondence;
-import com.ydtech.modules.order.entity.api.zm.request.ModelsQueryRequest;
-import com.ydtech.modules.order.entity.api.zm.request.QuotedPriceRequest;
-import com.ydtech.modules.order.entity.api.zm.response.ModelsQueryResponse;
-import com.ydtech.modules.order.entity.api.zm.response.QuotedPriceResponse;
+import com.ydtech.modules.order.entity.api.zm.constants.enums.AuditStatusEnum;
+import com.ydtech.modules.order.entity.api.zm.request.*;
+
+import com.ydtech.modules.order.entity.api.zm.response.*;
 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.service.InsAreaCompanyService;
 import com.ydtech.modules.order.service.InsOrdersService;
 import com.ydtech.modules.order.service.ZhongMeiOrderApiService;
-import com.ydtech.nai.httpvo.*;
 import com.ydtech.utils.CalculateUtils;
-import com.ydtech.utils.HttpsPostUtil;
-import com.ydtech.utils.idgen.IdGenerate;
+import com.ydtech.utils.StringUtils;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
@@ -65,16 +58,16 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
 
     private final InsTaskImageService insTaskImageService;
 
-    @Autowired
-    private ZhongmeiRequestApiComponents zhongmeiRequestApiComponents;
+    private final ZhongmeiRequestApiComponents zhongmeiRequestApiComponents;
 
-    @Autowired
-    private EsmInsCompanyService esmInsCompanyService;
+    private final EsmInsCompanyService esmInsCompanyService;
 
-    public ZhongMeiOrderApiServiceImpl(InsOrdersService insOrdersService, InsAreaCompanyService insAreaCompanyService, InsTaskImageService insTaskImageService) {
+    public ZhongMeiOrderApiServiceImpl(InsOrdersService insOrdersService, InsAreaCompanyService insAreaCompanyService, InsTaskImageService insTaskImageService, ZhongmeiRequestApiComponents zhongmeiRequestApiComponents, EsmInsCompanyService esmInsCompanyService) {
         this.insOrdersService = insOrdersService;
         this.insAreaCompanyService = insAreaCompanyService;
         this.insTaskImageService = insTaskImageService;
+        this.zhongmeiRequestApiComponents = zhongmeiRequestApiComponents;
+        this.esmInsCompanyService = esmInsCompanyService;
     }
 
     @Override
@@ -89,7 +82,6 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
     @Override
     public HttpResult quote(BaseQuoteInfoVo quoteInfo, BaseQuoteVo<AccidentalDrivingVo> zmQuoteVo) {
         EsmInsCompany esmInsCompany = esmInsCompanyService.isOpen(zmQuoteVo.getCompanyId());
-
         CarInfoVo carInfo = quoteInfo.getCarInfo();
         // 1. 查询车型
         ModelsQueryRequest modelsQueryResponse = new ModelsQueryRequest();
@@ -100,26 +92,140 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         if (stadarCarDTOS.size() > 0) {
             simpleStadarCarDTOS = stadarCarDTOS;
         }
-        ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCarDTO = simpleStadarCarDTOS.stream().filter(car -> Integer.valueOf(carInfo.getPurchasePrice()).equals(car.getOriginalPurchasePrice())).collect(Collectors.toList()).get(0);
+        simpleStadarCarDTOS = simpleStadarCarDTOS.stream()
+                .filter(car -> carInfo.getPurchasePrice().equals(String.valueOf(car.getPurchasePrice())))
+                .collect(Collectors.toList());
 
+        ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCarDTO = simpleStadarCarDTOS.get(0);
         // 组装参数
         QuotedPriceRequest quotedPriceRequest = new QuotedPriceRequest(quoteInfo, simpleStadarCarDTO);
         QuotedPriceResponse quotedPriceResponse = zhongmeiRequestApiComponents.quotedPrice(quotedPriceRequest, QuotedPriceResponse.class);
-        getQuoteRespVo(quotedPriceResponse, quoteInfo);
 
+        QuoteRespVo quoteRespVo = getQuoteRespVo(quotedPriceResponse, quoteInfo);
+        // 2. 第一次提交核保 并且获取投保单号
+        SubmitResponse response = submitForUnderwriting(quotedPriceResponse.getOrderNo(), carInfo.getFrameNo(), quoteInfo.getOwnerInfo());
+        return responseOrder(quotedPriceResponse, quoteRespVo, esmInsCompany, response);
+    }
+
+
+    @Override
+    public HttpResult audit(String companyId) {
+        InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
+        InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
+        JSONObject ownerinfo = insOrders.getOwnerinfo();
+        CustomerInfoVo customerInfoVo = JSON.toJavaObject(ownerinfo, CustomerInfoVo.class);
+        // 第二次 提交核保
+        SubmitResponse response = submitForUnderwriting(insAreaCompany.getInsOrderNo(), insOrders.getFrameno(), customerInfoVo);
+        zhongmeiRequestApiComponents.validationResults(response);
+        // 投保单号
+        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()); // 2
+        insAreaCompanyService.updateById(insAreaCompany);
+        insOrdersService.updateByOrderStatus(insAreaCompany.getOrderno(), insAreaCompany.getOrderstatus());
+        return HttpResult.ok("核保成功");
+    }
+
+    @Override
+    public HttpResult submitImage(String companyId) {
+        InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
+        InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
+        // 投保单号(总)
+        String insOrderNo = insAreaCompany.getInsOrderNo();
+        List<InsTaskImage> insTaskImages = insTaskImageService.selectByTaskId(insOrders.getQuoteno());
+        UploadImageRequest request = new UploadImageRequest(insTaskImages, insOrderNo);
+        zhongmeiRequestApiComponents.uploadImage(request, UploadImageResponse.class);
+        return HttpResult.ok("上传文件成功");
+    }
+
+    @Override
+    public HttpResult underwritingCallback(CoverageRequest coverageRequest) {
+        String s = JSONObject.toJSONString(coverageRequest);
+        log.info("中煤承保回调参数------>{}", s);
+
+        if (coverageRequest.getStatus() == 1) {
+            // 主投保单号
+            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());
+            insOrdersService.updateByOrderStatus(insAreaCompany.getOrderno(), insAreaCompany.getOrderstatus());
+            insAreaCompanyService.updateById(insAreaCompany);
+        }
         return null;
     }
 
     @Override
-    public HttpResult getPolicyPrint(String companyId) {
+    public HttpResult auditCallback(ApprovedRequest approvedRequest) {
+        String s = JSONObject.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());
+        }
+        insOrdersService.updateByOrderStatus(insAreaCompany.getOrderno(), insAreaCompany.getOrderstatus());
+        insAreaCompanyService.updateById(insAreaCompany);
         return null;
     }
 
     @Override
-    public HttpResult uploadImage(String orderNo) {
+    public HttpResult getPolicyPrint(String companyId) {
+        String riskCode = "";
+        String type = "";
+        InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
+        String  policyNo;
+        String documentType = "DZ_AE";
+        if (InsuranceTypeCorrespondence.TRAFFIC.equals(riskCode)){
+            policyNo = insAreaCompany.getJqpolicyno();
+        }
+        else if (InsuranceTypeCorrespondence.BUSINESS.equals(riskCode)){
+            policyNo = insAreaCompany.getJqpolicyno();
+        }else {
+            throw new SystemException("险种代码不存在");
+        }
+        InsurancePolicyPrintRequest request = new InsurancePolicyPrintRequest();
+        request.setPolicyNo(policyNo);
+        InsurancePolicyPrintResponse insurancePolicyPrintResponse = zhongmeiRequestApiComponents.insurancePolicyPrint(request, InsurancePolicyPrintResponse.class);
+
         return null;
     }
 
+    /**
+     * @param orderNo        中煤订单号
+     * @param frameNo        车架号
+     * @param customerInfoVo 车辆信息
+     * @return 核保请求参数
+     */
+    public SubmitResponse submitForUnderwriting(String orderNo, String frameNo, CustomerInfoVo customerInfoVo) {
+        SubmitRequest submitRequest = new SubmitRequest();
+        submitRequest.setOrderNo(orderNo);
+        submitRequest.setVin(frameNo);
+        SubmitRequest.DeliveryInfoDTO deliveryInfoDTO = new SubmitRequest.DeliveryInfoDTO(
+                customerInfoVo.getName(),
+                customerInfoVo.getMobile(),
+                "140000",
+                "140400",
+                "140423",
+                customerInfoVo.getAddr()
+        );
+        submitRequest.setDeliveryInfo(deliveryInfoDTO);
+        return zhongmeiRequestApiComponents.submit(submitRequest, SubmitResponse.class);
+    }
+
     public QuoteRespVo getQuoteRespVo(QuotedPriceResponse quotedPriceResponse, BaseQuoteInfoVo yaQuoteInfoVo) {
         double jqPremium = quotedPriceResponse.getForcePrimium().getPremium();
         double syPremium = quotedPriceResponse.getBizPremium().getSumPremium();
@@ -183,36 +289,37 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         return quoteRespVo;
     }
 
-//    public HttpResult responseOrder(String orderNo, QuotedPriceResponse quotedPriceResponse, QuoteRespVo quoteRespVo, EsmInsCompany esmInsCompanies) {
-//        //保存订单信息
-//        InsAreaCompany insAreaCompany = new InsAreaCompany();
-//        insAreaCompany.setId(IdGenerate.nextId());
-//        insAreaCompany.setOrderno(orderNo);
-//        insAreaCompany.setReptxt(JSONObject.parseObject(JSON.toJSONString(quotedPriceResponse)));
-//        insAreaCompany.setJqpremium(BigDecimal.valueOf(quoteRespVo.getJqPremium()));
-//        insAreaCompany.setSypremium(BigDecimal.valueOf(quoteRespVo.getSyPremium()));
-//        insAreaCompany.setTaxamount(BigDecimal.valueOf(quoteRespVo.getTaxAmount()));
-//        insAreaCompany.setSumpremium(BigDecimal.valueOf(quoteRespVo.getSumPermium()));
-//        insAreaCompany.setOrderstatus(InsOrderStatus.S_0.getCode()); // "1"
-//        insAreaCompany.setRiskinfo(JSONObject.parseArray(JSONObject.toJSONString(quoteRespVo.getRiskList())));
-//        insAreaCompany.setKindinfo(JSONObject.parseArray(JSONObject.toJSONString(quoteRespVo.getKindList())));
-//        insAreaCompany.setJqapplyno(quotedPriceResponse.getForcePrimium().get);
-//        insAreaCompany.setSyapplyno(response.getSContractNo());
-//        insAreaCompany.setCompanyId(esmInsCompanies.getId());
-//        insAreaCompany.setInscompany(esmInsCompanies.getNamesimple());
+    public HttpResult responseOrder(QuotedPriceResponse quotedPriceResponse, QuoteRespVo quoteRespVo, EsmInsCompany esmInsCompanies, SubmitResponse submitResponse) {
+        //保存订单信息
+        String orderNo = quoteRespVo.getOrderno();
+        InsAreaCompany insAreaCompany = new InsAreaCompany();
+        insAreaCompany.setId(quotedPriceResponse.getOrderNo());
+        insAreaCompany.setOrderno(orderNo);
+        insAreaCompany.setReptxt(JSONObject.parseObject(JSON.toJSONString(quotedPriceResponse)));
+        insAreaCompany.setJqpremium(BigDecimal.valueOf(quoteRespVo.getJqPremium()));
+        insAreaCompany.setSypremium(BigDecimal.valueOf(quoteRespVo.getSyPremium()));
+        insAreaCompany.setTaxamount(BigDecimal.valueOf(quoteRespVo.getTaxAmount()));
+        insAreaCompany.setSumpremium(BigDecimal.valueOf(quoteRespVo.getSumPermium()));
+        insAreaCompany.setOrderstatus(InsOrderStatus.S_0.getCode()); // "1"
+        insAreaCompany.setRiskinfo(JSONObject.parseArray(JSONObject.toJSONString(quoteRespVo.getRiskList())));
+        insAreaCompany.setKindinfo(JSONObject.parseArray(JSONObject.toJSONString(quoteRespVo.getKindList())));
+        insAreaCompany.setJqapplyno(submitResponse.getForceProposalNo());
+        insAreaCompany.setSyapplyno(submitResponse.getBizProposalNo());
+        insAreaCompany.setCompanyId(esmInsCompanies.getId());
+        insAreaCompany.setInscompany(esmInsCompanies.getNamesimple());
 //        insAreaCompany.setAccidentInfo(JSONObject.parseObject(JSON.toJSONString(accident)));
-//        insAreaCompany.setInsOrderNo(response.getContractMainNo());
-//        // 车船税
-//        TaxArrears taxArrears = new TaxArrears("往年欠税", response.getSumTaxDefault(), response.getSumOverdue());
-//        List<TaxArrears> taxArrearsList = Collections.singletonList(taxArrears);
-//        insAreaCompany.setTaxArrears(JSONObject.parseArray(JSONObject.toJSONString(taxArrearsList)));
-//        insAreaCompanyService.save(insAreaCompany);
-//        insOrdersService.updateByOrderStatus(orderNo, InsOrderStatus.S_0.getCode());
-//        quoteRespVo.setCompanyId(insAreaCompany.getId());
+        insAreaCompany.setInsOrderNo(submitResponse.getProposalNo());
+        // 车船税
+        TaxArrears taxArrears = new TaxArrears("往年欠税", quotedPriceResponse.getTaxinfo().getPrePayTax(), quotedPriceResponse.getTaxinfo().getDelayPayTax());
+        List<TaxArrears> taxArrearsList = Collections.singletonList(taxArrears);
+        insAreaCompany.setTaxArrears(JSONObject.parseArray(JSONObject.toJSONString(taxArrearsList)));
+        insAreaCompanyService.save(insAreaCompany);
+        insOrdersService.updateByOrderStatus(orderNo, InsOrderStatus.S_0.getCode());
+        quoteRespVo.setCompanyId(insAreaCompany.getId());
 //        quoteRespVo.setAccident(accident);
-//        quoteRespVo.setTaxArrears(taxArrearsList);
-//        return HttpResult.ok(body.getMessage(), quoteRespVo);
-//    }
+        quoteRespVo.setTaxArrears(taxArrearsList);
+        return HttpResult.ok(quotedPriceResponse.getHead().getReturnMessage(), quoteRespVo);
+    }
 
 }
 

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

@@ -104,9 +104,9 @@ public class ZhongMeiOrderServiceImpl implements ZhongMeiOrderService {
         SysUser sysUser = sysUserService.selectByPk(quoteInfoVo.getUserId());
         // 保险公司是否授权
         EsmInsAttribution esmInsAttribution = esmInsAttributionService.gainAuthorizeAffiliation(sysUser, quoteVo.getCompanyId());
-        if (ObjectUtils.isEmpty(esmInsAttribution)) {
-            throw new SystemException("报价未授权,请联系团队长配置。");
-        }
+//        if (ObjectUtils.isEmpty(esmInsAttribution)) {
+//            throw new SystemException("报价未授权,请联系团队长配置。");
+//        }
         // 1. 请求中煤 Spider 接口
         Response<ZhongmeiQuoteResponse> body = zhongmeiRequestComponents.quote(new ZmQuoteSpiderVo(quoteInfoVo, quoteVo.getAccidentalDrivingVo(), esmInsAttribution.getUsername()), new ParameterizedTypeReference<Response<ZhongmeiQuoteResponse>>() {
         });

+ 14 - 7
src/main/resources/application-dev.yml

@@ -31,14 +31,14 @@ spring:
   # redis 配置
   redis:
     database: 0
-    host: localhost
+    host: 192.168.182.128
     lettuce:
       pool:
         max-active: 8
         max-idle: 8
         max-wait: 100
         min-idle: 0
-    password: ''
+    password: '123456'
     port: 6379
     timeOut: 3000
   servlet:
@@ -294,9 +294,16 @@ zm:
     url: ${zm.domain}/verifyPayment
   vinSearch:
     url: ${zm.domain}/vinSearch
+  api:
+    source: 326
+    token: THIRDSCOuloft2020052818346904zmYBSX
+    url: https://test.echinacoal.com/singlePlatform
+    imageUrl: https://test.echinacoal.com/singlePlatform/others/
+    smsUrl: https://test.echinacoal.com/singlePlatform/prpall/
+    pageUrl: http://www.baidu.com
+    callbackDomain: http://test.baoxianzhanggui.com:8090
+    callbackUrl: /order/zhongMeiApi/underwritingCallback
+    passMsgUrl: /order/zhongMeiApi/auditCallback
 
-
-
-
-#logging:
-#  path: D:/111/logs
+logging:
+  path: D:/111/logs

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

@@ -227,8 +227,16 @@ zm:
     url: ${zm.domain}/verifyPayment
   vinSearch:
     url: ${zm.domain}/vinSearch
-
-
+  api:
+    source: 326
+    token: THIRDSCOuloft2020052818346904zmYBSXXHTQ
+    url: https://www.echinacoal.com/singlePlatform/
+    imageUrl: https://www.echinacoal.com/singlePlatform/others/
+    smsUrl: https://www.echinacoal.com/singlePlatform/prpall/
+    pageUrl: http://www.baidu.com
+    callbackDomain: http://sxzgkj.baoxianzhanggui.com/web-api
+    callbackUrl: /order/zhongMeiApi/underwritingCallback
+    passMsgUrl: /order/zhongMeiApi/auditCallback
 
 logging:
   path: /ins/logs

+ 10 - 3
src/main/resources/application-test.yml

@@ -290,9 +290,16 @@ zm:
     url: ${zm.domain}/verifyPayment
   vinSearch:
     url: ${zm.domain}/vinSearch
-
-
-
+  api:
+    source: 326
+    token: THIRDSCOuloft2020052818346904zmYBSX
+    url: https://test.echinacoal.com/singlePlatform
+    imageUrl: https://test.echinacoal.com/singlePlatform/others/
+    smsUrl: https://test.echinacoal.com/singlePlatform/prpall/
+    pageUrl: https://www.baidu.com/
+    callbackDomain: http://test.baoxianzhanggui.com:8090
+    callbackUrl: /order/zhongMeiApi/underwritingCallback
+    passMsgUrl: /order/zhongMeiApi/auditCallback
 
 logging:
   path: /ins/logs