Ver código fonte

中煤修改

Qchen 5 meses atrás
pai
commit
1cdeb84098

+ 53 - 30
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/service/Impl/ZhongMeiCrawlerRequestImpl.java

@@ -32,6 +32,7 @@ import com.jzg.quotation.zhongmei.crawler.service.ZhongMeiCrawlerRequest;
 import com.jzg.quotation.zhongmei.crawler.service.ZmCrawlerOrderService;
 import lombok.RequiredArgsConstructor;
 
+import java.text.ParseException;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
@@ -72,8 +73,7 @@ public class ZhongMeiCrawlerRequestImpl implements ZhongMeiCrawlerRequest {
      * @return 报价信息
      */
     @Override
-    public QuoteResultsVo quote(QuoteVo quoteVo) throws JsonProcessingException {
-        try {
+    public QuoteResultsVo quote(QuoteVo quoteVo) throws JsonProcessingException, ParseException {
             // 1.0获取token的请求头
             AttributionInformationVo attributionInformationVo = quoteVo
                     .getOrder()
@@ -103,31 +103,7 @@ public class ZhongMeiCrawlerRequestImpl implements ZhongMeiCrawlerRequest {
             }
             // 3.0 保费计算
             ZmCrawlerQuotedPriceRequest quotedPriceRequest = new ZmCrawlerQuotedPriceRequest(zmCrawlerConfigureParameters, quoteVo, saleInfoDTO, fullCarDataDTO, actualValueResponse, userCode, head,accident);
-            ZmCrawlerQuotedPriceResponse quotedPriceResponse = zmCrawlerRequestComponent.quotedPrice(quotedPriceRequest);
-            // 重复投保处理
-            if (quotedPriceResponse.getHead().getReturnCode().equals("-1") && quotedPriceResponse.getHead().getReturnMessage().contains("重复投保")) {
-                String startTime = extractDuplicateEndTime(quotedPriceResponse.getHead().getReturnMessage());
-                String endTime = calculateEndTime(startTime);
-                if (startTime != null && endTime != null) {
-                    List<ZmCrawlerQuotedPriceRequest.BusinessDataDTO.ContractDTO> contract = quotedPriceRequest.getBusinessData().getContract();
-                    contract.forEach(contractDTO -> {
-                        contractDTO.getContractMain().setValidDate(startTime);
-                        contractDTO.getContractMain().setExpiryDate(endTime);
-                        contractDTO.getCoverage().forEach(coverageDTO -> {
-                            coverageDTO.setValidDate(startTime);
-                            coverageDTO.setExpiryDate(endTime);
-                        });
-                    });
-                    // 重复投保 获取日期重新计算折旧价
-                    ZmCrawlerActualValueRequest actualValueReq = new ZmCrawlerActualValueRequest(quoteVo.getCarInfoVo(),fullCarDataDTO,head,startTime);
-                    ZmCrawlerActualValueResponse actualValueResp = zmCrawlerRequestComponent.getActualValue(actualValueReq);
-                    quotedPriceRequest.getBusinessData().getInsuredObject().getPolicyCar().setActualValue(actualValueResp.getActualValue());
-                    quotedPriceRequest.getBusinessData().getInsuredObject().getPolicyCar().setActualValueCarLoss(actualValueResp.getActualValue());
-                    quotedPriceRequest.getBusinessData().getInsuredObject().getPolicyCar().setUseYears(actualValueResp.getUseYears());
-                    quotedPriceRequest.getHead().setTransCode(TransCode.QUOTE_PRICE);
-                    quotedPriceResponse = zmCrawlerRequestComponent.quotedPrice(quotedPriceRequest);
-                }
-            }
+            ZmCrawlerQuotedPriceResponse quotedPriceResponse = repeatQuote(quotedPriceRequest,quoteVo, fullCarDataDTO,head);
             // 3.1 缓存数据
             if(quotedPriceResponse.getHead().getReturnCode().equals("0")){
                 zmCrawlerRequestComponent.cacheZmCrawlerSaveResponse(quotedPriceResponse, quotedPriceResponse.getBussinessMain().getContractMainNo());
@@ -135,10 +111,57 @@ public class ZhongMeiCrawlerRequestImpl implements ZhongMeiCrawlerRequest {
                 zmCrawlerOrderService.save(quoteVo,quotedPriceResponse);
             }
             return ZmCrawlerQuoteResultVoBuild.build(quoteVo, quotedPriceResponse);
-        }catch (Exception e){
-            e.printStackTrace();
-            throw new RuntimeException("报价异常,请联系管理员");
+    }
+
+    // 重复投保处理
+    private ZmCrawlerQuotedPriceResponse repeatQuote(ZmCrawlerQuotedPriceRequest quotedPriceRequest,QuoteVo quoteVo,ZmCrawlerModelQueryResponse.FullCarDataDTO fullCarDataDTO,BaseRequestHead head) throws ParseException {
+        ZmCrawlerQuotedPriceResponse quotedPriceResponse = zmCrawlerRequestComponent.quotedPrice(quotedPriceRequest);
+        // 商业险重复投保
+        if (!quotedPriceResponse.getHead().getReturnCode().equals("0") && quotedPriceResponse.getHead().getReturnMessage().contains("商业险重复投保")) {
+            String startTime = extractDuplicateEndTime(quotedPriceResponse.getHead().getReturnMessage());
+            String endTime = calculateEndTime(startTime);
+            if (startTime != null && endTime != null) {
+                ZmCrawlerQuotedPriceRequest.BusinessDataDTO.ContractDTO contract =
+                        quotedPriceRequest.getBusinessData().getContract().stream()
+                                .filter(contractDTO -> "0361".equals(contractDTO.getContractMain().getRiskCode()))
+                                .findFirst()
+                                .orElse(null);
+                contract.getContractMain().setValidDate(startTime);
+                contract.getContractMain().setExpiryDate(endTime);
+                contract.getCoverage().forEach(coverageDTO -> {
+                    coverageDTO.setValidDate(startTime);
+                    coverageDTO.setExpiryDate(endTime);
+                });
+                // 重复投保 获取日期重新计算折旧价
+                ZmCrawlerActualValueRequest actualValueReq = new ZmCrawlerActualValueRequest(quoteVo.getCarInfoVo(),fullCarDataDTO,head,startTime);
+                ZmCrawlerActualValueResponse actualValueResp = zmCrawlerRequestComponent.getActualValue(actualValueReq);
+                quotedPriceRequest.getBusinessData().getInsuredObject().getPolicyCar().setActualValue(actualValueResp.getActualValue());
+                quotedPriceRequest.getBusinessData().getInsuredObject().getPolicyCar().setActualValueCarLoss(actualValueResp.getActualValue());
+                quotedPriceRequest.getBusinessData().getInsuredObject().getPolicyCar().setUseYears(actualValueResp.getUseYears());
+                quotedPriceRequest.getHead().setTransCode(TransCode.QUOTE_PRICE);
+                quotedPriceResponse = zmCrawlerRequestComponent.quotedPrice(quotedPriceRequest);
+            }
+        }
+        // 交强险重复投保
+        if (!quotedPriceResponse.getHead().getReturnCode().equals("0") && quotedPriceResponse.getHead().getReturnMessage().contains("重复投保")) {
+            String startTime = extractDuplicateEndTime(quotedPriceResponse.getHead().getReturnMessage());
+            String endTime = calculateEndTime(startTime);
+            if (startTime != null && endTime != null) {
+                ZmCrawlerQuotedPriceRequest.BusinessDataDTO.ContractDTO contract =
+                        quotedPriceRequest.getBusinessData().getContract().stream()
+                                .filter(contractDTO -> "0330".equals(contractDTO.getContractMain().getRiskCode()))
+                                .findFirst()
+                                .orElse(null);
+                contract.getContractMain().setValidDate(startTime);
+                contract.getContractMain().setExpiryDate(endTime);
+                contract.getCoverage().forEach(coverageDTO -> {
+                    coverageDTO.setValidDate(startTime);
+                    coverageDTO.setExpiryDate(endTime);
+                });
+                quotedPriceResponse = zmCrawlerRequestComponent.quotedPrice(quotedPriceRequest);
+            }
         }
+        return quotedPriceResponse;
     }
 
     // 非车险匹配