瀏覽代碼

安盛爬虫处理驾意险、重复投保

Qchen 9 月之前
父節點
當前提交
4bd430782a

+ 31 - 0
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/build/AnShengCrawlerQuoteResultsVoBuild.java

@@ -30,12 +30,18 @@ public final class AnShengCrawlerQuoteResultsVoBuild {
         QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
         QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
         quoteResultsVo.setOrdersNo(ordersNo);
         quoteResultsVo.setOrdersNo(ordersNo);
 
 
+        if (!calculatePremiumApply.getCode().equals(200)) {
+            quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.QUOTE_FAIL);
+            quoteResultsVo.setErrorMessage(calculatePremiumApply.getMessage());
+            return quoteResultsVo;
+        }
         List<AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO> contracts = calculatePremiumApply.getData()
         List<AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO> contracts = calculatePremiumApply.getData()
                 .getContracts();
                 .getContracts();
 
 
         contracts.forEach(contract -> {
         contracts.forEach(contract -> {
             // 交强险
             // 交强险
             if (DepartmentPlanCode.PLAN_105.getCode().equals(contract.getPolicyBase().getPlanCode())) {
             if (DepartmentPlanCode.PLAN_105.getCode().equals(contract.getPolicyBase().getPlanCode())) {
+                quoteResultsVo.setCiRiskInfoVo(buildCiRiskInfoVo(contract.getPolicyBase()));
                 buildRiskInfoVo(quoteVo.getCiRiskInfoVo(), contract.getPolicyBase());
                 buildRiskInfoVo(quoteVo.getCiRiskInfoVo(), contract.getPolicyBase());
                 quoteResultsVo.getCosts().setCiPremium(String.valueOf(contract.getPolicyBase().getTotalActualPremium()));
                 quoteResultsVo.getCosts().setCiPremium(String.valueOf(contract.getPolicyBase().getTotalActualPremium()));
                 quoteResultsVo.getCosts().setVvTax(String.valueOf(contract.getTargets().get(0).getVehicleTax().getVehicleTaxAmount()));
                 quoteResultsVo.getCosts().setVvTax(String.valueOf(contract.getTargets().get(0).getVehicleTax().getVehicleTaxAmount()));
@@ -44,6 +50,7 @@ public final class AnShengCrawlerQuoteResultsVoBuild {
                     .equals(contract.getPolicyBase().getPlanCode()) || DepartmentPlanCode.PLAN_113.getCode()
                     .equals(contract.getPolicyBase().getPlanCode()) || DepartmentPlanCode.PLAN_113.getCode()
                     .equals(contract.getPolicyBase().getPlanCode())) {
                     .equals(contract.getPolicyBase().getPlanCode())) {
                 quoteResultsVo.getCosts().setBiPremium(String.valueOf(contract.getPolicyBase().getTotalActualPremium()));
                 quoteResultsVo.getCosts().setBiPremium(String.valueOf(contract.getPolicyBase().getTotalActualPremium()));
+                quoteResultsVo.setBiRiskInfoVo(buildBiRiskInfoVo(contract.getPolicyBase()));
                 buildRiskInfoVo(quoteVo.getBiRiskInfoVo(), contract.getPolicyBase());
                 buildRiskInfoVo(quoteVo.getBiRiskInfoVo(), contract.getPolicyBase());
                 // 商业险信息
                 // 商业险信息
                 buildKindInfo(quoteResultsVo.getKindInfoVo(), contract.getPolicyCoverages());
                 buildKindInfo(quoteResultsVo.getKindInfoVo(), contract.getPolicyCoverages());
@@ -81,4 +88,28 @@ public final class AnShengCrawlerQuoteResultsVoBuild {
         );
         );
     }
     }
 
 
+    /**
+     * 处理交强险数据
+     * @param policyBaseDTO
+     * @return
+     */
+    public static RiskInfoVo buildCiRiskInfoVo(AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO.PolicyBaseDTO policyBaseDTO) {
+        RiskInfoVo riskInfoVo = new RiskInfoVo();
+        riskInfoVo.setStartDate(policyBaseDTO.getInsuranceBeginTime());
+        riskInfoVo.setEndDate(policyBaseDTO.getInsuranceEndTime());
+        return riskInfoVo;
+    }
+
+    /**
+     * 处理商业险数据
+     * @param policyBaseDTO
+     * @return
+     */
+    public static RiskInfoVo buildBiRiskInfoVo(AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO.PolicyBaseDTO policyBaseDTO) {
+        RiskInfoVo riskInfoVo = new RiskInfoVo();
+        riskInfoVo.setStartDate(policyBaseDTO.getInsuranceBeginTime());
+        riskInfoVo.setEndDate(policyBaseDTO.getInsuranceEndTime());
+        return riskInfoVo;
+    }
+
 }
 }

+ 0 - 3
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/component/AnShengCrawlerRequestComponent.java

@@ -50,10 +50,7 @@ public class AnShengCrawlerRequestComponent {
                 .map(HttpEntity::getBody)
                 .map(HttpEntity::getBody)
                 .orElseThrow(() -> new SystemException("程序异常请联系管理员"));
                 .orElseThrow(() -> new SystemException("程序异常请联系管理员"));
 
 
-        if (response.getCode() == 200) {
             return response;
             return response;
-        }
-        throw new SystemException(response.getMessage());
     }
     }
 
 
     /**
     /**

+ 67 - 2
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/request/AnShengCrawlerCalculatePremiumApplyMessage.java

@@ -15,6 +15,7 @@ import lombok.NoArgsConstructor;
 import org.springframework.util.ObjectUtils;
 import org.springframework.util.ObjectUtils;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 import java.util.Optional;
 import java.util.Optional;
@@ -107,6 +108,10 @@ public class AnShengCrawlerCalculatePremiumApplyMessage {
         @JSONField(name = "policyRatios")
         @JSONField(name = "policyRatios")
         private List<PolicyRatiosDTO> policyRatios;
         private List<PolicyRatiosDTO> policyRatios;
 
 
+        @JsonProperty("quotationList")
+        @JSONField(name = "quotationList")
+        private List<QuotationListDTO> quotationList;
+
         public void addCompulsoryInsurance() {
         public void addCompulsoryInsurance() {
             PolicyCoveragesDTO policyCoveragesDTO = new PolicyCoveragesDTO();
             PolicyCoveragesDTO policyCoveragesDTO = new PolicyCoveragesDTO();
             policyCoveragesDTO.setDutyCode("TPF");
             policyCoveragesDTO.setDutyCode("TPF");
@@ -176,6 +181,7 @@ public class AnShengCrawlerCalculatePremiumApplyMessage {
             this.policyCoverages = new ArrayList<>();
             this.policyCoverages = new ArrayList<>();
             this.policyPersons = buildPolicyPersons(quoteVo.getOwnersInfo(), quoteVo.getPolicyHolderInfo(), quoteVo.getInsuredPersonInfo(), userDetailResponse.getDepartmentCode());
             this.policyPersons = buildPolicyPersons(quoteVo.getOwnersInfo(), quoteVo.getPolicyHolderInfo(), quoteVo.getInsuredPersonInfo(), userDetailResponse.getDepartmentCode());
             this.policyRatios = new ArrayList<>();
             this.policyRatios = new ArrayList<>();
+            this.quotationList = buildQuotationList(quoteVo);
         }
         }
 
 
         private List<PolicyPersonsDTO> buildPolicyPersons(CustomerInfoVo ownersInfo, CustomerInfoVo policyHolderInfo, CustomerInfoVo insuredPersonInfo, String department) {
         private List<PolicyPersonsDTO> buildPolicyPersons(CustomerInfoVo ownersInfo, CustomerInfoVo policyHolderInfo, CustomerInfoVo insuredPersonInfo, String department) {
@@ -185,6 +191,16 @@ public class AnShengCrawlerCalculatePremiumApplyMessage {
             return List.of(owners, policyHolder, insuredPerson);
             return List.of(owners, policyHolder, insuredPerson);
         }
         }
 
 
+        private List<QuotationListDTO> buildQuotationList(QuoteVo quoteVo) {
+            List<QuotationListDTO> quotationListDTOS = new ArrayList<>();
+            if (quoteVo.getAccidentalDrivings() != null && quoteVo.getAccidentalDrivings().size() > 0) {
+                for (AccidentalDrivingVo accidentalDriving : quoteVo.getAccidentalDrivings()) {
+                    quotationListDTOS.add(new QuotationListDTO(accidentalDriving, quoteVo));
+                }
+            }
+            return quotationListDTOS;
+        }
+
         public void addCiPolicyRatios() {
         public void addCiPolicyRatios() {
             PolicyRatiosDTO policyRatiosDTOF44 = new PolicyRatiosDTO("", "", "", "", "F44", "V6", 1, 1, 1, 1, 1);
             PolicyRatiosDTO policyRatiosDTOF44 = new PolicyRatiosDTO("", "", "", "", "F44", "V6", 1, 1, 1, 1, 1);
             this.policyRatios.add(policyRatiosDTOF44);
             this.policyRatios.add(policyRatiosDTOF44);
@@ -1204,8 +1220,8 @@ public class AnShengCrawlerCalculatePremiumApplyMessage {
                     this.advicediscount = "";
                     this.advicediscount = "";
                     this.dbVehicleBrand = brandAutoModel.getBrandChnName();
                     this.dbVehicleBrand = brandAutoModel.getBrandChnName();
                     Optional.ofNullable(brandAutoModel.getVtrList())
                     Optional.ofNullable(brandAutoModel.getVtrList())
-                            .filter(x->!x.isEmpty())
-                            .ifPresent(x->{
+                            .filter(x -> !x.isEmpty())
+                            .ifPresent(x -> {
                                 this.dbVehicleTypeName = x.get(0).getJyVehicleTypeName();
                                 this.dbVehicleTypeName = x.get(0).getJyVehicleTypeName();
                                 this.vehicleTypeChiName = x.get(0).getVehicleTypeName();
                                 this.vehicleTypeChiName = x.get(0).getVehicleTypeName();
                             });
                             });
@@ -1900,5 +1916,54 @@ public class AnShengCrawlerCalculatePremiumApplyMessage {
             @JSONField(name = "ratiototal")
             @JSONField(name = "ratiototal")
             private Integer ratiototal;
             private Integer ratiototal;
         }
         }
+
+        @AllArgsConstructor
+        @NoArgsConstructor
+        @Data
+        public static class QuotationListDTO {
+            @JsonProperty("totalStandardPremium")
+            @JSONField(name = "totalStandardPremium")
+            private Integer totalStandardPremium;
+
+            @JsonProperty("totalAgreePremium")
+            @JSONField(name = "totalAgreePremium")
+            private Integer totalAgreePremium;
+
+            @JsonProperty("totalActualPremium")
+            @JSONField(name = "totalActualPremium")
+            private Integer totalActualPremium;
+
+            @JsonProperty("insuranceBeginTime")
+            @JSONField(name = "insuranceBeginTime")
+            private String insuranceBeginTime;
+
+            @JsonProperty("insuranceEndTime")
+            @JSONField(name = "insuranceEndTime")
+            private String insuranceEndTime;
+
+            @JsonProperty("productCode")
+            @JSONField(name = "productCode")
+            private String productCode;
+
+            @JsonProperty("totalInsuredAmount")
+            @JSONField(name = "totalInsuredAmount")
+            private Integer totalInsuredAmount;
+
+            public QuotationListDTO(AccidentalDrivingVo accidentalDrivingVo, QuoteVo quoteVo) {
+                BigDecimal premiumBigDecimal = new BigDecimal(accidentalDrivingVo.getPremium());
+                int premiumInt = premiumBigDecimal.setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
+                this.totalStandardPremium = premiumInt;
+                this.totalAgreePremium = premiumInt;
+                this.totalActualPremium = premiumInt;
+                if (quoteVo.getCiRiskInfoVo() != null) {
+                    this.insuranceBeginTime = quoteVo.getCiRiskInfoVo().getStartDate();
+                    this.insuranceEndTime = quoteVo.getCiRiskInfoVo().getEndDate();
+                } else {
+                    this.insuranceBeginTime = quoteVo.getBiRiskInfoVo().getStartDate();
+                    this.insuranceEndTime = quoteVo.getBiRiskInfoVo().getEndDate();
+                }
+                this.productCode = accidentalDrivingVo.getProductCode();
+            }
+        }
     }
     }
 }
 }

+ 50 - 6
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/impl/AnShengCrawlerRequestImpl.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.ansheng.crawler.service.impl;
 package com.jzg.quotation.ansheng.crawler.service.impl;
 
 
+import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
@@ -19,6 +20,7 @@ import com.jzg.quotation.ansheng.crawler.utils.CheckVehicleCodeSecretGenerateUti
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
+import com.jzg.quotation.commons.utils.TimeProcessing;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpHeaders;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
@@ -27,6 +29,8 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Optional;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 @QuoteCrawlerService(value = InsuranceCode.INSURANCE_TPBX)
 @QuoteCrawlerService(value = InsuranceCode.INSURANCE_TPBX)
@@ -78,16 +82,42 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
         // 报价
         // 报价
         AnShengCrawlerCalculatePremiumApplyMessage crawlerCalculatePremiumApply = new AnShengCrawlerCalculatePremiumApplyMessage(quoteVo, dataDTO, userDetailResponse, departmentPlanCode, checkVehicleCodeSecretGenerate);
         AnShengCrawlerCalculatePremiumApplyMessage crawlerCalculatePremiumApply = new AnShengCrawlerCalculatePremiumApplyMessage(quoteVo, dataDTO, userDetailResponse, departmentPlanCode, checkVehicleCodeSecretGenerate);
         AnShengCrawlerCalculatePremiumApplyResponse calculatePremiumApply = anShengCrawlerRequestComponent.calculatePremiumApply(crawlerCalculatePremiumApply, httpHeaders);
         AnShengCrawlerCalculatePremiumApplyResponse calculatePremiumApply = anShengCrawlerRequestComponent.calculatePremiumApply(crawlerCalculatePremiumApply, httpHeaders);
-        // 缓存报价信息
-        AnShengCrawlerApplyApplicationRequest autoSpecialPromiseRequest = AnShengCrawlerApplyApplicationRequestBuild.build(crawlerCalculatePremiumApply, calculatePremiumApply, userDetailResponse, compulsoryVersionNo);
-
-        // 缓存数据
-        anShengCrawlerCacheComponent.cacheQuoteRequest(ordersNo, autoSpecialPromiseRequest);
+        // 处理重复投保
+        if (calculatePremiumApply.getMessage().contains("重复投保")) {
+            String startTime = extractDuplicateEndTime(calculatePremiumApply.getMessage());
+            String endTime = TimeProcessing.minusOneSecondAfterYear(startTime);
+            crawlerCalculatePremiumApply.getContracts().get(0).getPolicyBase().setInsuranceBeginTime(startTime);
+            crawlerCalculatePremiumApply.getContracts().get(0).getPolicyBase().setInsuranceEndTime(endTime);
+            calculatePremiumApply = anShengCrawlerRequestComponent.calculatePremiumApply(crawlerCalculatePremiumApply, httpHeaders);
+        }
+        if (calculatePremiumApply.getCode() == 200) {
+            // 缓存报价信息
+            AnShengCrawlerApplyApplicationRequest autoSpecialPromiseRequest = AnShengCrawlerApplyApplicationRequestBuild.build(crawlerCalculatePremiumApply, calculatePremiumApply, userDetailResponse, compulsoryVersionNo);
+            // 缓存数据
+            anShengCrawlerCacheComponent.cacheQuoteRequest(ordersNo, autoSpecialPromiseRequest);
+        }
         anShengCrawlerOrderService.saveRecordingTime(ordersNo);
         anShengCrawlerOrderService.saveRecordingTime(ordersNo);
         // 构造返回参数
         // 构造返回参数
         return AnShengCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(ordersNo, quoteVo, calculatePremiumApply);
         return AnShengCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(ordersNo, quoteVo, calculatePremiumApply);
     }
     }
 
 
+    // 截取重复投保终保日期
+    private static final Pattern DUPLICATE_END_TIME_PATTERN = Pattern.compile("终保日期 (\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2})");
+
+    /**
+     * 提取系统自动分配的起保时间
+     * @param returnMessage 核心提示
+     * @return 提取到的时间字符串,未提取到返回 null
+     */
+    private String extractDuplicateEndTime(String returnMessage) {
+        Matcher matcher = DUPLICATE_END_TIME_PATTERN.matcher(returnMessage);
+        if (matcher.find()) {
+            String shortEndTime = matcher.group(1);
+            return shortEndTime + ":00";
+        }
+        return null;
+    }
+
     @Override
     @Override
     public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) {
     public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) {
         final String ordersNo = underwritingVo.getOrder().getOrdersNo();
         final String ordersNo = underwritingVo.getOrder().getOrdersNo();
@@ -126,7 +156,21 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
         AnShengCrawlerApplyApplicationResponse applyApplicationResponse = anShengCrawlerRequestComponent.applyApplication(applicationRequest, httpHeaders);
         AnShengCrawlerApplyApplicationResponse applyApplicationResponse = anShengCrawlerRequestComponent.applyApplication(applicationRequest, httpHeaders);
         // 投保订单号保存
         // 投保订单号保存
         saveThePolicyNumber(ordersNo, applyApplicationResponse);
         saveThePolicyNumber(ordersNo, applyApplicationResponse);
-        return null;
+        UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
+        AnShengCrawlerOrder anShengCrawlerOrder = anShengCrawlerOrderService.getById(ordersNo);
+        if (!applyApplicationResponse.getCode().equals(200)) {
+            underwritingResultsVo.setUnderwritingResult(applyApplicationResponse.getMessage());
+            underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
+            return underwritingResultsVo;
+        } else {
+            underwritingResultsVo.setJqApplyNo(anShengCrawlerOrder.getCiPolicyNumber());
+            underwritingResultsVo.setSyApplyNo(anShengCrawlerOrder.getBiPolicyNumber());
+            if (anShengCrawlerOrder.getNiInfos().size() > 0) {
+                underwritingResultsVo.setJyApplyNo(anShengCrawlerOrder.getNiInfos().get(0).getNiPolicyNumber());
+            }
+            underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
+        }
+        return underwritingResultsVo;
     }
     }
 
 
     /**
     /**