Kaynağa Gözat

中煤财险API 报价修改

wks 3 yıl önce
ebeveyn
işleme
c1ea259e00

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

@@ -50,11 +50,12 @@ public class ZhongmeiRequestApiComponents {
 
         // 加密
         String s = AESUtilsWithDataBase.encryptECBPK5Hex(jsonString);
+        log.info("---------> 加密后的参数:{}", s);
         HttpEntity<String> httpEntity = new HttpEntity<>(s, httpHeaders);
 
         ResponseEntity<String> response = restTemplate.postForEntity(url, httpEntity, String.class);
         String body = response.getBody();
-
+        log.info("---------> 解密前的参数:{}", body);
         // 解密
         String s1 = AESUtilsWithDataBase.decryptECBPK5Hex(body);
         log.info("---------> 响应参数:{}", s1);
@@ -105,6 +106,7 @@ public class ZhongmeiRequestApiComponents {
      */
     private <Q extends BaseRequest, S extends BaseResponse> S request(Q request, Class<S> tClass, boolean verify, String domain) {
         String url = domain + request.getHead().getTransCode() + ".do";
+        System.out.println(url);
         S response = post(request, url, tClass);
         if (verify) {
             validationResults(response);
@@ -127,7 +129,7 @@ public class ZhongmeiRequestApiComponents {
      *            影像
      */
     private <Q extends BaseRequest, S extends BaseResponse> void imageRequest(Q request, Class<S> tClass, boolean verify) {
-        request(request, tClass, verify, properties.getImageUrl());
+        request(request, tClass, verify, properties.getUrl());
     }
 
     /**
@@ -168,7 +170,7 @@ public class ZhongmeiRequestApiComponents {
      * 上传影像 传入订单信息,查询是否生成保单成功
      */
     public void uploadImage(UploadImageRequest request, Class<UploadImageResponse> tClass) {
-        imageRequest(request, tClass, true);
+        routineRequest(request, tClass, true);
     }
 
     /**

+ 0 - 2
src/main/java/com/ydtech/modules/order/constants/InsuranceTypeCorrespondence.java

@@ -31,8 +31,6 @@ public class InsuranceTypeCorrespondence {
     // 绝对免赔
     protected static final String[] ABSOLUTE_DEDUCTIBLE = {"MJ1", "MJ2", "MJ3", "MJ4"};
 
-    public static final String MANUAL_UNDERWRITING = "人工复核";
-
     protected static final Map<String, String> RISK = new HashMap<>();
 
     static {

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

@@ -32,15 +32,6 @@ public class OrderCacheConstant {
      */
     public static final long QUOTE_RULES_KEY_TIME = 1L;
 
-    /**
-     * 中煤核保返回
-     */
-    public static final String ZM_AUDIT_RETURN_MESSAGE = "zm:audit:returnMessage:";
-
-    /**
-     * 中煤核保返回时间
-     */
-    public static final long ZM_AUDIT_RETURN_MESSAGE_TIME = 10L;
 
     /**
      * 紫金财险 为接入方提供获取token

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

@@ -1,6 +1,7 @@
 package com.ydtech.modules.order.controller;
 
 
+import com.alibaba.fastjson.JSON;
 import com.ydtech.aop.request.RequestSingleParam;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.ins.model.vo.QuoteRespVo;
@@ -14,8 +15,10 @@ import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
 import com.ydtech.modules.order.entity.vo.PolicyPrintVo;
 import com.ydtech.modules.order.service.ZhongMeiOrderApiService;
+import com.ydtech.modules.order.utils.AESUtilsWithDataBase;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -25,6 +28,7 @@ import java.util.List;
 
 
 @Api(tags = "中煤财险 API ")
+@Slf4j
 @RestController
 @RequestMapping("/order/zhongMeiApi")
 public class ZhongMeiOrderApiController {
@@ -78,14 +82,30 @@ public class ZhongMeiOrderApiController {
 
     @PostMapping("/underwritingCallback")
     @ApiOperation(value = "承保回调")
-    public HttpResult<Object> underwritingCallback(@RequestBody CoverageRequest coverageRequest) {
+    public HttpResult<Object> underwritingCallback(@RequestBody String s) {
+        log.info("---------> 解密前的参数:{}", s);
+        // 解密
+        String s1 = AESUtilsWithDataBase.decryptECBPK5Hex(s);
+        log.info("---------> 承保回调:{}", s1);
+        CoverageRequest coverageRequest = JSON.parseObject(s1, CoverageRequest.class);
         return this.zhongMeiOrderApiService.underwritingCallback(coverageRequest);
     }
 
     @PostMapping("/auditCallback")
     @ApiOperation(value = "审核回调")
-    public HttpResult<Object> auditCallback(@RequestBody ApprovedRequest approvedRequest) {
+    public HttpResult<Object> auditCallback(@RequestBody String s) {
+        log.info("---------> 解密前的参数:{}", s);
+        // 解密
+        String s1 = AESUtilsWithDataBase.decryptECBPK5Hex(s);
+        log.info("---------> 审核回调:{}", s1);
+        ApprovedRequest approvedRequest = JSON.parseObject(s1, ApprovedRequest.class);
         return this.zhongMeiOrderApiService.auditCallback(approvedRequest);
     }
 
+    @PostMapping("/test")
+    public HttpResult<Object> test(@RequestBody String s) {
+        return HttpResult.ok(s);
+    }
+
+
 }

+ 1 - 1
src/main/java/com/ydtech/modules/order/convert/SimpleStadarCarDTOConvert.java

@@ -17,7 +17,7 @@ public interface SimpleStadarCarDTOConvert {
     List<CarModelDTO> map(List<ModelsQueryResponse.SimpleStadarCarDTO> zmCarModels);
 
     @Mapping(source = "localModelCode", target = "modelCode")
-    @Mapping(source = "brand", target = "modelName")
+    @Mapping(source = "modelName", target = "modelName")
     @Mapping(source = "brand", target = "brandCN")
     @Mapping(source = "series", target = "series")
     @Mapping(source = "approvedPassengersCapacity", target = "ratedPassengerCapacity")

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

@@ -0,0 +1,16 @@
+package com.ydtech.modules.order.entity.api.zm.constants.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum SubmitStatus {
+
+    S_1("1", "自核通过"),
+    S_3("3", "转人工复核");
+
+    private final String code;
+
+    private final String meaning;
+}

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

@@ -6,6 +6,8 @@ import com.ydtech.modules.order.entity.api.zm.constants.TransCode;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.util.regex.Pattern;
+
 /**
  * @author wenks
  * @version 0.0.2

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

@@ -241,7 +241,7 @@ public class QuotedPriceRequest extends BaseRequest {
                     this.registerDate = carInfoVo.getRegisterDate() + " " + TimeConstants.START_TIME;
                     this.issueDate = carInfoVo.getIssueDate() + " " + TimeConstants.START_TIME;
                     this.plateColorCode = "01";
-                    this.carCheckStatus = "3";
+                    this.carCheckStatus = null;
                     this.carUseType = "01";
                     this.motorUsageTypeCode = "02";
                 }
@@ -470,8 +470,9 @@ public class QuotedPriceRequest extends BaseRequest {
 
         public List<CustomerDTO> getCustomers(CustomerInfoVo ownerInfo, CustomerInfoVo policyHolderInfo, CustomerInfoVo insuredPersonInfo) {
             return Arrays.asList(new CustomerDTO(ownerInfo, "3"), new CustomerDTO(policyHolderInfo, "1"), new CustomerDTO(insuredPersonInfo, "2"));
-
         }
+
     }
+
 }
 

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

@@ -1,5 +1,6 @@
 package com.ydtech.modules.order.entity.api.zm.response;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ydtech.modules.ins.model.zm.ZmCarModel;
 import com.ydtech.modules.order.entity.api.zm.BaseResponse;
@@ -158,10 +159,17 @@ public class ModelsQueryResponse extends BaseResponse {
         @JsonProperty("vehicleDescription")
         private String vehicleDescription;
 
+        /**
+         * 品牌名称
+         */
+        @JsonProperty("modelName")
+        private String modelName;
+
         public SimpleStadarCarDTO(ZmCarModel zmCarInfoVO) {
             this.approvedLoad = Double.parseDouble(zmCarInfoVO.getApprovedLoad());
             this.approvedPassengersCapacity = Integer.parseInt(zmCarInfoVO.getApprovedPassengersCapacity());
-            this.brand = zmCarInfoVO.getModelName();
+            this.brand = zmCarInfoVO.getBrand();
+            this.modelName = zmCarInfoVO.getModelName();
             this.brandCode = zmCarInfoVO.getBrandCode();
             this.displacement = Double.parseDouble(zmCarInfoVO.getDisplacement()) * 0.001;
             this.energyTypes = zmCarInfoVO.getEnergyTypes();

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

@@ -1,6 +1,7 @@
 package com.ydtech.modules.order.entity.api.zm.response;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import com.ydtech.modules.order.entity.api.zm.BaseResponse;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -37,4 +38,12 @@ public class SubmitResponse extends BaseResponse {
     @JsonProperty("proposalNo")
     private String proposalNo;
 
+    // 提交审核状态
+    @JsonProperty("submitStatus")
+    private String submitStatus;
+
+    // 审核提示信息
+    @JsonProperty("submitNotion")
+    private String submitNotion;
+
 }

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

@@ -15,7 +15,6 @@ import com.ydtech.modules.ins.model.zm.ZmCarModel;
 import com.ydtech.modules.order.components.ConfigureParametersComponents;
 import com.ydtech.modules.order.components.ZhongmeiRequestApiComponents;
 import com.ydtech.modules.order.constants.InsuranceTypeCorrespondence;
-import com.ydtech.modules.order.constants.OrderCacheConstant;
 import com.ydtech.modules.order.convert.SimpleStadarCarDTOConvert;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrders;
@@ -24,6 +23,7 @@ import com.ydtech.modules.order.entity.api.zm.BaseRequestHead;
 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.constants.enums.SubmitStatus;
 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;
@@ -41,14 +41,12 @@ 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;
 import org.springframework.core.ParameterizedTypeReference;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
 import java.util.*;
-import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 @Service
@@ -66,20 +64,16 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
 
     private final ZhongmeiRequestComponents zhongmeiRequestComponents;
 
-    private final StringRedisTemplate redisTemplate;
-
     private final PtlAgreementAttributionService ptlAgreementAttributionService;
 
     private final ConfigureParametersComponents configureParametersComponents;
 
-    public ZhongMeiOrderApiServiceImpl(InsOrdersService insOrdersService, InsAreaCompanyService insAreaCompanyService, InsTaskImagesService insTaskImagesService, ZhongmeiRequestApiComponents zhongmeiRequestApiComponents, ZhongmeiRequestComponents zhongmeiRequestComponents, StringRedisTemplate redisTemplate, ConfigureParametersComponents configureParametersComponents, PtlAgreementAttributionService ptlAgreementAttributionService) {
+    public ZhongMeiOrderApiServiceImpl(InsOrdersService insOrdersService, InsAreaCompanyService insAreaCompanyService, InsTaskImagesService insTaskImagesService, ZhongmeiRequestApiComponents zhongmeiRequestApiComponents, ZhongmeiRequestComponents zhongmeiRequestComponents,  ConfigureParametersComponents configureParametersComponents, PtlAgreementAttributionService ptlAgreementAttributionService) {
         this.insOrdersService = insOrdersService;
         this.insAreaCompanyService = insAreaCompanyService;
         this.insTaskImagesService = insTaskImagesService;
         this.zhongmeiRequestApiComponents = zhongmeiRequestApiComponents;
         this.zhongmeiRequestComponents = zhongmeiRequestComponents;
-        this.redisTemplate = redisTemplate;
-
         this.configureParametersComponents = configureParametersComponents;
         this.ptlAgreementAttributionService = ptlAgreementAttributionService;
     }
@@ -131,6 +125,7 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         // 2. 查询车型
         ModelsQueryRequest modelsQueryResponse = new ModelsQueryRequest();
         modelsQueryResponse.setModelName(carInfo.getModelcname());
+        modelsQueryResponse.setBrand(carInfo.getBrandName());
         modelsQueryResponse.setHead(baseRequestHead);
         List<ModelsQueryResponse.SimpleStadarCarDTO> simpleStadarCarDTOS = zhongmeiRequestApiComponents.modelQuery(modelsQueryResponse, ModelsQueryResponse.class);
 
@@ -147,14 +142,8 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
 
         QuotedPriceResponse quotedPriceResponse = zhongmeiRequestApiComponents.quotedPrice(quotedPriceRequest, QuotedPriceResponse.class);
         QuoteRespVo quoteRespVo = getQuoteRespVo(quotedPriceResponse, quoteInfo);
-        // 4. 第一次提交核保 并且获取投保单号
-        SubmitResponse response = submitForUnderwriting(quotedPriceResponse.getBusinessNo(), carInfo.getFrameNo(), quoteInfo.getPolicyHolderInfo(), zmConfigureParameters);
 
-        // 5. 将错误的核保信息存入redis
-        if (StringUtils.isEmpty(response.getProposalNo())) {
-            redisTemplate.opsForValue().set(OrderCacheConstant.ZM_AUDIT_RETURN_MESSAGE + quoteRespVo.getCompanyId(), response.getHead().getReturnMessage(), OrderCacheConstant.ZM_AUDIT_RETURN_MESSAGE_TIME, TimeUnit.MINUTES);
-        }
-        return responseOrder(quotedPriceResponse, quoteRespVo, response, ptlAgreementAttribution);
+        return responseOrder(quotedPriceResponse, quoteRespVo, ptlAgreementAttribution);
     }
 
 
@@ -167,12 +156,12 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
         JSONObject ownerinfo = insOrders.getApplyinfo();
         CustomerInfoVo customerInfoVo = JSON.toJavaObject(ownerinfo, CustomerInfoVo.class);
-        // 2. 第二次 提交核保
+        // 2. 提交核保
         SubmitResponse response = submitForUnderwriting(insAreaCompany.getId(), insOrders.getFrameno(), customerInfoVo, zmConfigureParameters);
         // 3. 人工核保
-        if (response.getHead().getReturnMessage().contains(InsuranceTypeCorrespondence.MANUAL_UNDERWRITING)) {
+        if (SubmitStatus.S_3.getCode().equals(response.getSubmitStatus())) {
             insAreaCompany.setOrderstatus(InsOrderStatus.S_1.getCode());
-            return HttpResult.error(response.getHead().getReturnMessage());
+            return HttpResult.error(response.getSubmitNotion());
         }
         zhongmeiRequestApiComponents.validationResults(response);
         // 4. 投保单号
@@ -194,16 +183,7 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
 
         InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
         // 2. 投保单号(总)
-        String insOrderNo = insAreaCompany.getInsOrderNo();
-        // 3. 没有投保单号
-        if (StringUtils.isEmpty(insOrderNo)) {
-            String s = redisTemplate.opsForValue().get(OrderCacheConstant.ZM_AUDIT_RETURN_MESSAGE + companyId);
-            if (StringUtils.isEmpty(s)) {
-                throw new SystemException("请重新报价,再核保。");
-            } else {
-                throw new SystemException(s);
-            }
-        }
+        String insOrderNo = insAreaCompany.getId();
 
         List<InsTaskImagesBase64> insTaskImagesBase64s = insTaskImagesService.findByOrderNo(insOrders.getOrderno());
         if (insTaskImagesBase64s.isEmpty()) {
@@ -218,8 +198,6 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
     @Override
     public HttpResult<Object> underwritingCallback(CoverageRequest coverageRequest) {
         try {
-            String s = JSON.toJSONString(coverageRequest);
-            log.info("中煤承保回调参数------>{}", s);
             if (coverageRequest.getStatus() == PaymentStatusEnum.P_2.getCode()) {
                 // 主投保单号
                 String proposalNo = coverageRequest.getProposalNo();
@@ -241,8 +219,6 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
     @Override
     public HttpResult<Object> auditCallback(ApprovedRequest approvedRequest) {
         try {
-            String s = JSON.toJSONString(approvedRequest);
-            log.info("中煤审核回调参数------>{}", s);
             // 主投保单号
             String contractNo = approvedRequest.getContractNo();
             InsAreaCompany insAreaCompany = insAreaCompanyService.getByInsOrderNo(contractNo);
@@ -391,7 +367,9 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         quoteRespVo.setKindList(kindList1);
         quoteRespVo.setJqPremium(jqPremium);
         quoteRespVo.setSyPremium(syPremium);
-        double sumPayTax = quotedPriceResponse.getTaxinfo().getSumPayTax();
+        QuotedPriceResponse.TaxinfoDTO taxinfo = quotedPriceResponse.getTaxinfo();
+
+        double sumPayTax = ObjectUtils.isEmpty(taxinfo) ? 0 : taxinfo.getSumPayTax();
         quoteRespVo.setCiSumPermium(CalculateUtils.add(jqPremium, sumPayTax));//交强险和车船税合计
         quoteRespVo.setSumPermium(CalculateUtils.add(jqPremium, syPremium, sumPayTax));//保费合计
         quoteRespVo.setTaxAmount(sumPayTax);//车船税
@@ -402,14 +380,14 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         return quoteRespVo;
     }
 
-    public HttpResult<QuoteRespVo> responseOrder(QuotedPriceResponse quotedPriceResponse, QuoteRespVo quoteRespVo, SubmitResponse submitResponse, PtlAgreementAttribution ptlAgreementAttribution) {
+    public HttpResult<QuoteRespVo> responseOrder(QuotedPriceResponse quotedPriceResponse, QuoteRespVo quoteRespVo, PtlAgreementAttribution ptlAgreementAttribution) {
         //保存订单信息
         InsAreaCompany insAreaCompany = new InsAreaCompany(quoteRespVo, ptlAgreementAttribution);
         insAreaCompany.setId(quotedPriceResponse.getBusinessNo());
         // 协议id
-        insAreaCompany.setJqapplyno(submitResponse.getForceProposalNo());
-        insAreaCompany.setSyapplyno(submitResponse.getBizProposalNo());
-        insAreaCompany.setInsOrderNo(submitResponse.getProposalNo());
+//        insAreaCompany.setJqapplyno(submitResponse.getForceProposalNo());
+//        insAreaCompany.setSyapplyno(submitResponse.getBizProposalNo());
+//        insAreaCompany.setInsOrderNo(quotedPriceResponse.getBusinessNo());
         // 车船税
         TaxArrears taxArrears = new TaxArrears("往年欠税", quotedPriceResponse.getTaxinfo().getPrePayTax(), quotedPriceResponse.getTaxinfo().getDelayPayTax());
         List<TaxArrears> taxArrearsList = Collections.singletonList(taxArrears);

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

@@ -6,6 +6,17 @@ import java.net.URLDecoder;
 
 public class AESUtilsWithDataBase {
 
+    public static void main(String[] args) {
+        String a = "{\"brand\":\"上汽大众\",\"head\":{\"source\":\"323\",\"token\":\"THIRDSCOuloft2020052818346904zmCCSC\",\"transCode\":\"ModelsQuery\",\"transType\":\"Req\"},\"modelCode\":\"\",\"modelName\":\"大众汽车SVW71617MM轿车\"}";
+
+        String s = encryptECBPK5Hex(a);
+
+        System.out.println(s);
+
+
+
+    }
+
 
     private static final String ECB_PKCS5_PADDING = "AES/ECB/PKCS5Padding";