|
|
@@ -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());
|
|
|
+ }
|
|
|
+
|
|
|
}
|