Parcourir la source

中煤Api对接

BifronsV il y a 3 ans
Parent
commit
5962b13a8c

+ 18 - 5
src/main/java/com/ydtech/components/ZhongmeiRequestApiComponents.java

@@ -100,20 +100,31 @@ public class ZhongmeiRequestApiComponents {
         return post(request, url, tClass);
     }
 
+    /**
+     * 提交核保
+     * @param request 请求内容
+     * @param tClass 响应类型
+     * @return 响应内容
+     */
     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.setCallbackUrl(properties.getCallbackDomain() + properties.getCallbackUrl());
         request.setPageUrl(properties.getPageUrl());
-        request.setPassMsgUrl(properties.getCallbackUrl() + properties.getPassMsgUrl());
+        request.setPassMsgUrl(properties.getCallbackDomain() + properties.getPassMsgUrl());
         return post(request, url, tClass);
     }
 
+    /**
+     * 上传影像
+     * @param request 请求内容
+     * @param tClass 响应类型
+     */
     public void uploadImage(UploadImageRequest request, Class<UploadImageResponse> tClass) {
         String transCode = "UploadImage";
-        String url = properties.getUrl() + transCode + ".do";
+        String url = properties.getImageUrl() + transCode + ".do";
         BaseRequestHead head = properties.getHead(transCode);
         request.setHead(head);
         UploadImageResponse response = post(request, url, tClass);
@@ -121,11 +132,13 @@ public class ZhongmeiRequestApiComponents {
     }
 
     public InsurancePolicyPrintResponse insurancePolicyPrint(InsurancePolicyPrintRequest request, Class<InsurancePolicyPrintResponse> tClass){
-        String transCode = "UploadImage";
+        String transCode = "InsurancePolicyPrint";
         String url = properties.getUrl() + transCode + ".do";
         BaseRequestHead head = properties.getHead(transCode);
         request.setHead(head);
-        return post(request, url, tClass);
+        InsurancePolicyPrintResponse response = post(request, url, tClass);
+        validationResults(response);
+        return response;
     }
 
     public <T extends BaseResponse> void validationResults(T t) {

+ 3 - 0
src/main/java/com/ydtech/config/WebSecurityConfig.java

@@ -87,6 +87,9 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 .antMatchers("/ins/**").permitAll()
                 .antMatchers("/wechat/**").permitAll()
                 .antMatchers("/esm/policy/**").permitAll()
+                // 中煤回调
+                .antMatchers("/order/zhongMeiApi/underwritingCallback").permitAll()
+                .antMatchers("/order/zhongMeiApi/auditCallback").permitAll()
                 // 其他所有请求需要身份认证
                 .anyRequest().authenticated();
         // 退出登录处理器

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

@@ -63,7 +63,7 @@ public class ZhongMeiOrderApiController {
     @PostMapping("/getPolicyPrint")
     @ApiOperation(value = "电子保单")
     public HttpResult getPolicyPrint(@RequestSingleParam(value = "companyId") String companyId) throws IOException {
-        return this.zhongMeiOrderApiService.getPolicyPrint(companyId);
+        return this.zhongMeiOrderApiService.getPolicyPrint(companyId, "0507", "1");
     }
 
     @PostMapping("/underwritingCallback")

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

@@ -24,6 +24,8 @@ public class InsuranceTypeCorrespondence {
     // 绝对免赔
     public static final String[] ABSOLUTE_DEDUCTIBLE = {"MJ1", "MJ2", "MJ3", "MJ4"};
 
+    public static final String MANUAL_UNDERWRITING = "人工复核";
+
     public static final String TRAFFIC = "0507";
     public static final String BUSINESS = "0510";
 
@@ -34,12 +36,4 @@ 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");
-    }
-
 }

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

@@ -1,5 +1,6 @@
 package com.ydtech.modules.order.entity.api.zm.constants.enums;
 
+import com.ydtech.exception.SystemException;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
@@ -22,5 +23,20 @@ public enum DocumentTypeEnum {
 
     private final String meaning;
 
+    public static String code(String type) {
+        switch (type) {
+            case "1":
+                return DZ_AJ.getCode();
+            case "2":
+                return DZ_AE.getCode();
+            case "3":
+                return EP.getCode();
+            case "4":
+                return HP.getCode();
+        }
+
+        throw new SystemException("类型选择错误");
+    }
+
 
 }

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

@@ -12,12 +12,22 @@ import lombok.Getter;
 @AllArgsConstructor
 @Getter
 public enum ImageTypeEnum {
-
-    C01("C01","车辆影像"),
-    C02("C02","车辆影像"),
-    C03("C03","车辆影像"),
-    C04("C04","车辆影像"),
-    C05("C05","车辆影像");
+    /**
+     * UW_0301	验车资料
+     * UW_0302	个人客户资料
+     * UW_0303	企业客户资料
+     * UW_0304	批改资料
+     * UW_0305	车辆资料
+     * UW_0306	保单批单资料
+     * UW_0309	销售环节资料
+     */
+    UW_0301("UW_0301", "验车资料", new String[]{"C05"}),
+    UW_0302("UW_0302", "个人客户资料", new String[]{"C02", "C03", "C04"}),
+    UW_0303("UW_0303", "企业客户资料", new String[]{}),
+    UW_0304("UW_0304", "批改资料", new String[]{}),
+    UW_0305("UW_0305", "车辆资料", new String[]{"C01"}),
+    UW_0306("UW_0306", "保单批单资料", new String[]{}),
+    UW_0309("UW_0309", "销售环节资料", new String[]{});
 
 
     //C01车辆影像,C02车主身份证,C03投保人身份证,C04被保人身份证,C05验车照
@@ -25,4 +35,7 @@ public enum ImageTypeEnum {
 
     private final String info;
 
+    private final String[] imagesType;
+
+
 }

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

@@ -30,4 +30,7 @@ public class InsurancePolicyPrintRequest extends BaseRequest {
 
     @JsonProperty("endorSeqNo")
     private String endorSeqNo = "000";
+
+    @JsonProperty("documentType")
+    private String documentType;
 }

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

@@ -319,7 +319,7 @@ public class QuotedPriceRequest extends BaseRequest {
              * @param quantity    乘客数
              * @return
              */
-            public List<CoverageDTO> getBusiness(List<KindInfoVo> kindInfoVos, Integer quantity) {
+            public List<CoverageDTO> getBusiness(List<KindInfoVo> kindInfoVos, int quantity) {
                 List<CoverageDTO> list = new ArrayList<>();
                 for (KindInfoVo kindInfoVo : kindInfoVos) {
                     CoverageDTO coverageDTO = new CoverageDTO();
@@ -332,17 +332,17 @@ public class QuotedPriceRequest extends BaseRequest {
                     coverageDTO.amount = (int) kindInfoVo.getAmount();
                     coverageDTO.unitAmount = (int) kindInfoVo.getUnitAmount();
                     // 司机
-                    if (ArrayUtil.indexOf(InsuranceTypeCorrespondence.DRIVER, code) > 0) {
+                    if (ArrayUtil.indexOf(InsuranceTypeCorrespondence.DRIVER, code) >= 0) {
                         coverageDTO.quantity = 1;
-                        coverageDTO.amount = (int) kindInfoVo.getUnitAmount();
+                        coverageDTO.unitAmount = (int) kindInfoVo.getAmount();
                     }
 
-                    if (ArrayUtil.indexOf(InsuranceTypeCorrespondence.PASSENGER, code) > 0) {
+                    if (ArrayUtil.indexOf(InsuranceTypeCorrespondence.PASSENGER, code) >= 0) {
                         coverageDTO.quantity = quantity;
                         coverageDTO.amount = (int) kindInfoVo.getUnitAmount() * quantity;
                     }
                     // 绝对免赔
-                    if (ArrayUtil.indexOf(InsuranceTypeCorrespondence.ABSOLUTE_DEDUCTIBLE, code) > 0) {
+                    if (ArrayUtil.indexOf(InsuranceTypeCorrespondence.ABSOLUTE_DEDUCTIBLE, code) >= 0) {
                         coverageDTO.deductible = "-" + kindInfoVo.getDeductibleRate();
                     }
                     list.add(coverageDTO);

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

@@ -32,6 +32,11 @@ public class SubmitRequest extends BaseRequest {
     private String callbackUrl;
     @JsonProperty("passMsgUrl")
     private String passMsgUrl;
+    @JsonProperty
+    private String busSrePcMAC = "12-E1-AD-45-A2-65";
+    @JsonProperty
+    private String busSrePcIP = "47.92.254.66";
+
 
     @AllArgsConstructor
     @NoArgsConstructor

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

@@ -1,5 +1,6 @@
 package com.ydtech.modules.order.entity.api.zm.request;
 
+import cn.hutool.core.util.ArrayUtil;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ydtech.modules.esm.model.InsTaskImage;
 import com.ydtech.modules.order.entity.api.zm.BaseRequest;
@@ -39,12 +40,15 @@ public class UploadImageRequest extends BaseRequest {
     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);
-                }
-        );
+        String[] strings = {"UW_0301", "UW_0302", "UW_0305"};
+        for (String string : strings) {
+            ImageTypeEnum imageTypeEnum = Enum.valueOf(ImageTypeEnum.class, string);
+            List<InsTaskImage> collect = insTaskImages.stream().filter(insTaskImage -> ArrayUtil.indexOf(imageTypeEnum.getImagesType(), insTaskImage.getImgtype()) >= 0).collect(Collectors.toList());
+            if (collect.size() > 0) {
+                NodeBeanlistDTO nodeBeanlistDTO = new NodeBeanlistDTO(collect, string);
+                nodeBeanlist.add(nodeBeanlistDTO);
+            }
+        }
         this.nodeBeanlist = nodeBeanlist;
 
     }
@@ -66,7 +70,8 @@ public class UploadImageRequest extends BaseRequest {
             insTaskImages.forEach(x -> {
                 ImageBeanListDTO imageBeanListDTO = new ImageBeanListDTO();
                 imageBeanListDTO.setFileName(UUID.randomUUID() + ".png");
-                imageBeanListDTO.setImage(x.getImage());
+                String[] split = x.getImage().split("base64,");
+                imageBeanListDTO.setImage(split[1]);
                 imageBeanListDTOS.add(imageBeanListDTO);
             });
             this.imageBeanList = imageBeanListDTOS;
@@ -75,9 +80,11 @@ public class UploadImageRequest extends BaseRequest {
         @NoArgsConstructor
         @Data
         public static class ImageBeanListDTO {
+
             // 文件名称
             @JsonProperty("fileName")
             private String fileName;
+
             // 图片base64格式编码
             @JsonProperty("image")
             private String image;

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

@@ -42,12 +42,12 @@ public class ModelsQueryResponse extends BaseResponse  {
          * 核定载质量
          */
         @JsonProperty("approvedLoad")
-        private Integer approvedLoad;
+        private double approvedLoad;
         /**
          * 核定载客
          */
         @JsonProperty("approvedPassengersCapacity")
-        private Integer approvedPassengersCapacity;
+        private int approvedPassengersCapacity;
 
         /**
          * 品牌名称
@@ -65,7 +65,7 @@ public class ModelsQueryResponse extends BaseResponse  {
          * 排量(ml)
          */
         @JsonProperty("displacement")
-        private Double displacement;
+        private double displacement;
 
         /**
          * 能源种类
@@ -77,7 +77,7 @@ public class ModelsQueryResponse extends BaseResponse  {
          * 总质量
          */
         @JsonProperty("grossMass")
-        private Integer grossMass;
+        private double grossMass;
 
         /**
          * 出厂日期
@@ -101,19 +101,19 @@ public class ModelsQueryResponse extends BaseResponse  {
          * 功率(kw)
          */
         @JsonProperty("power")
-        private Integer power;
+        private double power;
 
         /**
          * 价格浮动区间止
          */
         @JsonProperty("priceEnd")
-        private Integer priceEnd;
+        private double priceEnd;
 
         /**
          * 价格浮动区间起
          */
         @JsonProperty("priceStart")
-        private Integer priceStart;
+        private double priceStart;
 
         /**
          * 新车购置价
@@ -137,7 +137,7 @@ public class ModelsQueryResponse extends BaseResponse  {
          *  准牵引总质量
          */
         @JsonProperty("tractionMass")
-        private Integer tractionMass;
+        private double tractionMass;
 
         /**
          * 变速箱
@@ -149,7 +149,7 @@ public class ModelsQueryResponse extends BaseResponse  {
          * 整备质量
          */
         @JsonProperty("unladenMass")
-        private Double unladenMass;
+        private double unladenMass;
 
         /**
          * 车辆描述

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

@@ -37,7 +37,7 @@ public interface ZhongMeiOrderApiService extends BaseOrderService<AccidentalDriv
      * @param companyId 子订单号
      * @return 响应
      */
-    HttpResult getPolicyPrint(String companyId);
+    HttpResult getPolicyPrint(String companyId, String riskCode, String type);
 
 
 }

+ 35 - 24
src/main/java/com/ydtech/modules/order/service/impl/ZhongMeiOrderApiServiceImpl.java

@@ -19,6 +19,7 @@ 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.constants.enums.AuditStatusEnum;
+import com.ydtech.modules.order.entity.api.zm.constants.enums.DocumentTypeEnum;
 import com.ydtech.modules.order.entity.api.zm.request.*;
 
 import com.ydtech.modules.order.entity.api.zm.response.*;
@@ -115,18 +116,27 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         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
+        SubmitResponse response = submitForUnderwriting(insAreaCompany.getId(), insOrders.getFrameno(), customerInfoVo);
+        HttpResult httpResult;
+        // 人工核保
+        if (response.getHead().getReturnMessage().indexOf(InsuranceTypeCorrespondence.MANUAL_UNDERWRITING) > 0) {
+            insAreaCompany.setOrderstatus(InsOrderStatus.S_1.getCode());
+            httpResult = HttpResult.error(response.getHead().getReturnMessage());
+        } else {
+            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());
+            httpResult = HttpResult.ok("核保成功");
+        }
+
         insAreaCompanyService.updateById(insAreaCompany);
         insOrdersService.updateByOrderStatus(insAreaCompany.getOrderno(), insAreaCompany.getOrderstatus());
-        return HttpResult.ok("核保成功");
+        return httpResult;
     }
 
     @Override
@@ -136,6 +146,9 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         // 投保单号(总)
         String insOrderNo = insAreaCompany.getInsOrderNo();
         List<InsTaskImage> insTaskImages = insTaskImageService.selectByTaskId(insOrders.getQuoteno());
+        if(insTaskImages.size() == 0){
+            throw new SystemException("请检查影像是否上传了");
+        }
         UploadImageRequest request = new UploadImageRequest(insTaskImages, insOrderNo);
         zhongmeiRequestApiComponents.uploadImage(request, UploadImageResponse.class);
         return HttpResult.ok("上传文件成功");
@@ -168,13 +181,13 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         // 主投保单号
         String contractNo = approvedRequest.getContractNo();
         InsAreaCompany insAreaCompany = insAreaCompanyService.getByInsOrderNo(contractNo);
-        if(AuditStatusEnum.S_1.getCode().equals(approvedRequest.getStatusCode())){
+        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 {
+        } else {
             insAreaCompany.setOrderstatus(InsOrderStatus.S_4.getCode());
         }
         insOrdersService.updateByOrderStatus(insAreaCompany.getOrderno(), insAreaCompany.getOrderstatus());
@@ -183,25 +196,23 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
     }
 
     @Override
-    public HttpResult getPolicyPrint(String companyId) {
-        String riskCode = "";
-        String type = "";
+    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)){
+        String policyNo;
+        String code = DocumentTypeEnum.code(type);
+
+        if (InsuranceTypeCorrespondence.TRAFFIC.equals(riskCode)) {
             policyNo = insAreaCompany.getJqpolicyno();
-        }
-        else if (InsuranceTypeCorrespondence.BUSINESS.equals(riskCode)){
+        } else if (InsuranceTypeCorrespondence.BUSINESS.equals(riskCode)) {
             policyNo = insAreaCompany.getJqpolicyno();
-        }else {
+        } else {
             throw new SystemException("险种代码不存在");
         }
         InsurancePolicyPrintRequest request = new InsurancePolicyPrintRequest();
         request.setPolicyNo(policyNo);
-        InsurancePolicyPrintResponse insurancePolicyPrintResponse = zhongmeiRequestApiComponents.insurancePolicyPrint(request, InsurancePolicyPrintResponse.class);
-
-        return null;
+        request.setDocumentType(code);
+        InsurancePolicyPrintResponse response = zhongmeiRequestApiComponents.insurancePolicyPrint(request, InsurancePolicyPrintResponse.class);
+        return HttpResult.ok("下载成功", response.getDownloadUrl());
     }
 
     /**

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

@@ -293,7 +293,7 @@ zm:
   api:
     source: 326
     token: THIRDSCOuloft2020052818346904zmYBSX
-    url: https://test.echinacoal.com/singlePlatform
+    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/