Browse Source

安盛非车险报价信息

xuqiang 1 month ago
parent
commit
fedc3e0dea

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

@@ -3,9 +3,9 @@ package com.jzg.quotation.ansheng.crawler.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
-import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
+import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.quote.vo.AccidentalDrivingVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
@@ -237,31 +237,17 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
         List<AnShengCrawlerNonInsuranceResponse.DutyPremiumDTO> dtoList = new ArrayList<>();
         BigDecimal nonPrice = BigDecimal.ZERO;
         List<QuotationListDTO> quotationList = new ArrayList<>();
-        final int SUCCESS_CODE = 200;
-
         if (CollectionUtil.isNotEmpty(quoteVo.getAccidentalDrivings())) {
             for (AccidentalDrivingVo accidentalDriving : quoteVo.getAccidentalDrivings()) {
                 // 1.组装请求获取附加险
-                AnShengCrawlerGetNonConfigCoveragesRequest coveragesRequest = new AnShengCrawlerGetNonConfigCoveragesRequest(
-                        userDetailResponse.getDepartmentCode(),
-                        accidentalDriving.getParentProductCode(),
-                        accidentalDriving.getProductCode()
-                );
-                AnShengCrawlerNonConfigCoveragesResponse crawlerNonConfigCoveragesResponse =
-                        anShengCrawlerRequestComponent.getNonConfigCoverages(coveragesRequest, httpHeaders);
+                AnShengCrawlerGetNonConfigCoveragesRequest coveragesRequest = new AnShengCrawlerGetNonConfigCoveragesRequest(userDetailResponse.getDepartmentCode(), accidentalDriving.getParentProductCode(), accidentalDriving.getProductCode());
+                AnShengCrawlerNonConfigCoveragesResponse crawlerNonConfigCoveragesResponse = anShengCrawlerRequestComponent.getNonConfigCoverages(coveragesRequest, httpHeaders);
 
                 // 2.保费计算请求
-                AnShengCrawlerCalculatePremiumNonApplyRequest applyRequest = new AnShengCrawlerCalculatePremiumNonApplyRequest(
-                        crawlerNonConfigCoveragesResponse,
-                        userDetailResponse,
-                        accidentalDriving,
-                        quoteVo,
-                        insureAdd,
-                        crawlerCalculatePremiumApply
-                );
+                AnShengCrawlerCalculatePremiumNonApplyRequest applyRequest = new AnShengCrawlerCalculatePremiumNonApplyRequest(crawlerNonConfigCoveragesResponse, userDetailResponse, accidentalDriving, quoteVo, insureAdd, crawlerCalculatePremiumApply);
                 AnShengCrawlerCalculatePremiumNonApplyResponse nonApplyResponse = anShengCrawlerRequestComponent.calculatePremiumNonApply(applyRequest, httpHeaders);
                 // 响应校验
-                if (SUCCESS_CODE != nonApplyResponse.getCode()) {
+                if (HttpResult.ok().getCode() != nonApplyResponse.getCode()) {
                     throw new SystemException(nonApplyResponse.getMessage());
                 }
                 List<AnShengCrawlerCalculatePremiumNonApplyResponse.ContractDTO> contracts = nonApplyResponse.getData().getContracts();
@@ -272,14 +258,13 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
                 AnShengCrawlerCalculatePremiumNonApplyResponse.PolicyBaseDTO policyBase = contract.getPolicyBase();
                 BigDecimal totalAgreePremium = policyBase.getTotalAgreePremium();
 
-                // 对象转换,避免两次JSON来回序列化
-                QuotationListDTO item = JSONObject.parseObject(JSONObject.toJSONString(policyBase),QuotationListDTO.class);
-                quotationList.add(item);
+                QuotationListDTO quotationItem = BeanUtil.copyProperties(policyBase, QuotationListDTO.class);
+                quotationList.add(quotationItem);
 
                 accidentalDriving.setPremium(totalAgreePremium.toPlainString());
                 nonPrice = nonPrice.add(totalAgreePremium);
                 // 责任保费集合赋值
-                dtoList.addAll(JSONArray.parseArray(JSONArray.toJSONString(contract.getPolicyCoverages()), AnShengCrawlerNonInsuranceResponse.DutyPremiumDTO.class));
+                dtoList.addAll(BeanUtil.copyToList(contract.getPolicyCoverages(), AnShengCrawlerNonInsuranceResponse.DutyPremiumDTO.class));
             }
         }
         anShengCrawlerNonInsuranceResponse.setFcxPrice(nonPrice);
@@ -332,9 +317,9 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
             contract.setPolicyAttachments(imagesInfo);
         });
         Map<String, Object> stringObjectMap = BeanUtil.beanToMap(applicationRequest);
-        //   存在非车险
-        if (!applicationRequest.getContracts().get(0).getQuotationList().isEmpty()){
-            stringObjectMap = AnShengCrawlerNonContractsBuild.build(applicationRequest,stringObjectMap);
+        //   存在非车险
+        if (hasNonAutoContracts(applicationRequest)) {
+            stringObjectMap = AnShengCrawlerNonContractsBuild.build(applicationRequest, stringObjectMap);
         }
         log.info("安盛核保参数:{}", JSONObject.toJSONString(applicationRequest));
         // 核保
@@ -371,6 +356,17 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
 
     }
 
+
+    private boolean hasNonAutoContracts(AnShengCrawlerApplyApplicationRequest request) {
+        return Optional.ofNullable(request)
+                .map(AnShengCrawlerApplyApplicationRequest::getContracts)
+                .filter(contracts -> !contracts.isEmpty())
+                .map(contracts -> contracts.get(0))
+                .map(AnShengCrawlerApplyApplicationRequest.ContractsDTO::getQuotationList)
+                .map(quotations -> !quotations.isEmpty())
+                .orElse(false);
+    }
+
     /**
      * 循环重试获取支付链接
      * @param paymentLinkVo 请求参数
@@ -673,32 +669,33 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
         if (CollectionUtils.isEmpty(targetPolicyNos)) {
             return "";
         }
-        StringBuilder reasonBuilder = new StringBuilder();
         Set<String> addedReasons = new HashSet<>();
-        for (String policyNo : targetPolicyNos) {
-            AnShengCrawlerSaleSlipRequest request = new AnShengCrawlerSaleSlipRequest(policyNo);
-            AnShengCrawlerPolicyResponse response = anShengCrawlerRequestComponent.getSaleSlip(request, httpHeaders);
-            if (response == null || response.getData() == null || response.getData().getContract() == null || CollectionUtils.isEmpty(response.getData().getContract().getUnderwriteInfos())) {
-                continue;
-            }
-            List<AnShengCrawlerPolicyResponse.DataVo.Contract.UnderwriteInfo> underwriteInfos = response.getData().getContract().getUnderwriteInfos();
-            for (AnShengCrawlerPolicyResponse.DataVo.Contract.UnderwriteInfo underwriteInfo : underwriteInfos) {
-                if (!StringUtils.equals("0", underwriteInfo.getUnderwriteMark())) {
-                    continue;
-                }
-                List<AnShengCrawlerPolicyResponse.DataVo.Contract.UnderwriteInfo.UnderwriteOpinion> opinions = underwriteInfo.getUnderwriteOpinions();
-                if (CollectionUtils.isEmpty(opinions)) {
-                    continue;
-                }
-                for (AnShengCrawlerPolicyResponse.DataVo.Contract.UnderwriteInfo.UnderwriteOpinion opinion : opinions) {
-                    String desc = opinion.getUnderwriteOpinionDesc();
-                    if (StringUtils.isNotBlank(desc) && addedReasons.add(desc)) {
-                        reasonBuilder.append(desc);
-                    }
-                }
-            }
-        }
+        StringBuilder reasonBuilder = new StringBuilder();
+        targetPolicyNos.forEach(policyNo ->
+                Optional.ofNullable(anShengCrawlerRequestComponent.getSaleSlip(
+                                new AnShengCrawlerSaleSlipRequest(policyNo), httpHeaders))
+                        .map(AnShengCrawlerPolicyResponse::getData)
+                        .map(AnShengCrawlerPolicyResponse.DataVo::getContract)
+                        .map(AnShengCrawlerPolicyResponse.DataVo.Contract::getUnderwriteInfos)
+                        .orElse(Collections.emptyList())
+                        .stream()
+                        .filter(this::isFailureUnderwrite)
+                        .map(AnShengCrawlerPolicyResponse.DataVo.Contract.UnderwriteInfo::getUnderwriteOpinions)
+                        .filter(CollectionUtils::isNotEmpty)
+                        .flatMap(List::stream)
+                        .map(AnShengCrawlerPolicyResponse.DataVo.Contract.UnderwriteInfo.UnderwriteOpinion::getUnderwriteOpinionDesc)
+                        .filter(StringUtils::isNotBlank)
+                        .forEach(desc -> {
+                            if (addedReasons.add(desc)) {
+                                reasonBuilder.append(desc).append("\n");
+                            }
+                        })
+        );
         return reasonBuilder.toString();
     }
 
+    private boolean isFailureUnderwrite(AnShengCrawlerPolicyResponse.DataVo.Contract.UnderwriteInfo underwriteInfo) {
+        return underwriteInfo != null && StringUtils.equals("0", underwriteInfo.getUnderwriteMark());
+    }
+
 }