Эх сурвалжийг харах

中煤处理商业险重复投保

Qchen 3 сар өмнө
parent
commit
15da8cbc34

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

@@ -103,7 +103,7 @@ public class ZhongMeiCrawlerRequestImpl implements ZhongMeiCrawlerRequest {
             // 2.1 获取相同的车型
             ZmCrawlerModelQueryResponse.FullCarDataDTO fullCarDataDTO = CarModelsFilterUtils.to(fullCarDataDTOS, quoteVo.getCarInfoVo());
             // 2.2 计算折旧价格
-            ZmCrawlerActualValueRequest actualValueRequest = new ZmCrawlerActualValueRequest(quoteVo.getCarInfoVo(),fullCarDataDTO,head,quoteVo.getCiRiskInfoVo().getStartDate());
+            ZmCrawlerActualValueRequest actualValueRequest = new ZmCrawlerActualValueRequest(quoteVo.getCarInfoVo(),fullCarDataDTO,head,quoteVo);
             ZmCrawlerActualValueResponse actualValueResponse = zmCrawlerRequestComponent.getActualValue(actualValueRequest);
             List<ZmCrawlerRideAccidentResponse.BaseInfoDTO> accident = new ArrayList<>();
             if (quoteVo.getAccidentalDrivings() != null) {
@@ -147,8 +147,10 @@ public class ZhongMeiCrawlerRequestImpl implements ZhongMeiCrawlerRequest {
                     coverageDTO.setValidDate(startTime);
                     coverageDTO.setExpiryDate(endTime);
                 });
+                quoteVo.getBiRiskInfoVo().setStartDate(startTime);
+                quoteVo.getBiRiskInfoVo().setEndDate(endTime);
                 // 重复投保 获取日期重新计算折旧价
-                ZmCrawlerActualValueRequest actualValueReq = new ZmCrawlerActualValueRequest(quoteVo.getCarInfoVo(),fullCarDataDTO,head,startTime);
+                ZmCrawlerActualValueRequest actualValueReq = new ZmCrawlerActualValueRequest(quoteVo.getCarInfoVo(),fullCarDataDTO,head,quoteVo);
                 ZmCrawlerActualValueResponse actualValueResp = zmCrawlerRequestComponent.getActualValue(actualValueReq);
                 quotedPriceRequest.getBusinessData().getInsuredObject().getPolicyCar().setActualValue(actualValueResp.getActualValue());
                 quotedPriceRequest.getBusinessData().getInsuredObject().getPolicyCar().setActualValueCarLoss(actualValueResp.getActualValue());
@@ -178,7 +180,9 @@ public class ZhongMeiCrawlerRequestImpl implements ZhongMeiCrawlerRequest {
                     coverageDTO.setExpiryDate(endTime);
 
                 });
-                ZmCrawlerActualValueRequest actualValueReq = new ZmCrawlerActualValueRequest(quoteVo.getCarInfoVo(),fullCarDataDTO,head,startTime);
+                quoteVo.getCiRiskInfoVo().setStartDate(startTime);
+                quoteVo.getCiRiskInfoVo().setEndDate(endTime);
+                ZmCrawlerActualValueRequest actualValueReq = new ZmCrawlerActualValueRequest(quoteVo.getCarInfoVo(),fullCarDataDTO,head,quoteVo);
                 ZmCrawlerActualValueResponse actualValueResp = zmCrawlerRequestComponent.getActualValue(actualValueReq);
                 quotedPriceRequest.getBusinessData().getInsuredObject().getPolicyCar().setActualValue(actualValueResp.getActualValue());
                 quotedPriceRequest.getBusinessData().getInsuredObject().getPolicyCar().setActualValueCarLoss(actualValueResp.getActualValue());
@@ -187,6 +191,45 @@ public class ZhongMeiCrawlerRequestImpl implements ZhongMeiCrawlerRequest {
                 quotedPriceResponse = zmCrawlerRequestComponent.quotedPrice(quotedPriceRequest);
             }
         }
+        // 商业险重复投保提示
+        ZmCrawlerQuotedPriceResponse.BussinessMainDTO.ContractDTO contract =
+                quotedPriceResponse.getBussinessMain().getContract().stream()
+                        .filter(contractDTO -> "0361".equals(contractDTO.getContractMain().getRiskCode()))
+                        .findFirst()
+                        .orElse(null);
+
+        ZmCrawlerQuotedPriceResponse.BussinessMainDTO.ContractDTO.PlantFormMessageBeanDTO messageBeanDTO = contract.getPlantFormMessageBean();
+        if (messageBeanDTO.getAnswer().contains("可能存在重复投保")) {
+            String answer = messageBeanDTO.getAnswer();
+            String startTime = extractDuplicateStartTime(answer);
+            String endTime = calculateEndTime(startTime);
+            ZmCrawlerQuotedPriceRequest.BusinessDataDTO.ContractDTO contractReq =
+                    quotedPriceRequest.getBusinessData().getContract().stream()
+                            .filter(contractDTO -> "0361".equals(contractDTO.getContractMain().getRiskCode()))
+                            .findFirst()
+                            .orElse(null);
+            if (startTime != null && endTime != null && contractReq != null) {
+                contractReq.getContractMain().setValidDate(startTime);
+                contractReq.getContractMain().setExpiryDate(endTime);
+            }
+            // 判断是否是即时起保
+            if (!startTime.endsWith("00:00:00")) {
+                contractReq.getContractMain().setReinsuranceFlag("1");
+            }
+            contractReq.getCoverage().forEach(coverageDTO -> {
+                coverageDTO.setValidDate(startTime);
+                coverageDTO.setExpiryDate(endTime);
+            });
+            quoteVo.getBiRiskInfoVo().setStartDate(startTime);
+            quoteVo.getBiRiskInfoVo().setEndDate(endTime);
+            ZmCrawlerActualValueRequest actualValueReq = new ZmCrawlerActualValueRequest(quoteVo.getCarInfoVo(),fullCarDataDTO,head,quoteVo);
+            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);
+        }
         return quotedPriceResponse;
     }
 
@@ -246,6 +289,22 @@ public class ZhongMeiCrawlerRequestImpl implements ZhongMeiCrawlerRequest {
         return null;
     }
 
+    private static final Pattern DUPLICATE_START_TIME_PATTERN = Pattern.compile("起保日期:(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})");
+    private String extractDuplicateStartTime(String answer) {
+        Matcher matcher = DUPLICATE_START_TIME_PATTERN.matcher(answer);
+        if (matcher.find()) {
+            // 取出匹配到的时间
+            String timeStr = matcher.group(1);
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+            LocalDateTime dateTime;
+            LocalDateTime localDateTime = LocalDateTime.parse(timeStr, formatter);
+            LocalDateTime afterAdd = localDateTime.plusYears(1);
+            return afterAdd.format(formatter);
+        }
+        return null;
+    }
+
     /**
      * 计算终保时间
      */