liub 2 месяцев назад
Родитель
Сommit
cdee3456ea

+ 111 - 15
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/service/impl/TaipingCrawlerRequestImpl.java

@@ -6,13 +6,13 @@ import com.jzg.commons.constants.quote.enums.base.InsuranceImageEnum;
 import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 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.OrderBase;
+import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.constant.InsuranceCode;
-import com.jzg.commons.entity.quote.vo.base.LoginBase;
-import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.quotation.commons.entity.DetectLoginRequest;
 import com.jzg.quotation.commons.entity.GetCaptchaRequest;
 import com.jzg.quotation.commons.entity.GetCaptchaResponse;
@@ -351,27 +351,123 @@ public class TaipingCrawlerRequestImpl implements TaipingCrawlerRequest {
 
     @Override
     public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) {
+        // 获取配置信息
         OrderBase order = underwritingVo.getOrder();
         AttributionInformationVo attributionInformationVo = order.getAttributionInformationVo();
-        TaipingCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(TaipingCrawlerConfigureParameters.class,
-                attributionInformationVo.getConfigInfo());
+        TaipingCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(
+                TaipingCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
         HttpHeaders httpHeaders = taiPingCrawlerRequestComponent.getHeaders(parameters.getGw_user_token());
+
+        // 获取订单信息
         TaiPingCrawlerOrder taiPingCrawlerOrder = taiPingCrawlerOrderRepository.findByOrdersNo(underwritingVo.getOrder().getOrdersNo());
-        // 验证信息
-        TaiPingCrawlerPremiumCalculateData taiPingCrawlerPremiumCalculateData = taiPingCrawlerCacheComponent.getTaiPingCrawlerPremiumCalculateData(underwritingVo.getOrder()
-                .getOrdersNo());
-        TaiPingCrawlerPremiumCalculateRequest taiPingCrawlerPremiumCalculateRequest = taiPingCrawlerCacheComponent.getTaiPingCrawlerPremiumCalculateRequest(underwritingVo.getOrder()
-                .getOrdersNo());
+
+        // 获取缓存的报价请求
+        TaiPingCrawlerPremiumCalculateRequest taiPingCrawlerPremiumCalculateRequest = taiPingCrawlerCacheComponent
+                .getTaiPingCrawlerPremiumCalculateRequest(underwritingVo.getOrder().getOrdersNo());
+
+        // 重新计算保费(核保前必须设置forceLinkCIFlag关联交商)
         taiPingCrawlerPremiumCalculateRequest.getPfMainDto().setForceLinkCIFlag(true);
-        TaiPingCrawlerBaseResponse<TaiPingCrawlerPremiumCalculateData> taiPingCrawlerPremiumCalculate = taiPingCrawlerRequestComponent.premiumCalculate(taiPingCrawlerPremiumCalculateRequest, httpHeaders, parameters);
-        TaiPingCrawlerSubmitValidateRequest taiPingCrawlerSubmitValidateRequest = new TaiPingCrawlerSubmitValidateRequest(taiPingCrawlerPremiumCalculate.getData(), taiPingCrawlerPremiumCalculateRequest,taiPingCrawlerOrder);
-        String request = JSON.toJSONString(taiPingCrawlerSubmitValidateRequest);
-        TaiPingCrawlerBaseResponse<TaiPingCrawlerSubmitValidateData> taiPingCrawlerSubmitValidateData = taiPingCrawlerRequestComponent.submitValidate(taiPingCrawlerPremiumCalculate.getData(), httpHeaders,parameters);
-        // 核保
+        log.info("[太平核保]保费重算请求: orderNo={}", taiPingCrawlerOrder.getCompanyOrderNo());
+        TaiPingCrawlerBaseResponse<TaiPingCrawlerPremiumCalculateData> recalculateResponse =
+                taiPingCrawlerRequestComponent.premiumCalculate(taiPingCrawlerPremiumCalculateRequest, httpHeaders, parameters);
+        if (!recalculateResponse.isSucc()) {
+            throw new SystemException("保费重算失败:" + recalculateResponse.getErrMsg());
+        }
+        log.info("[太平核保]保费重算成功");
+
+        // 提交验证
+        TaiPingCrawlerSubmitValidateRequest submitValidateRequest = new TaiPingCrawlerSubmitValidateRequest(
+                recalculateResponse.getData(), taiPingCrawlerPremiumCalculateRequest, taiPingCrawlerOrder);
+        log.info("[太平核保]提交验证请求: {}", JSON.toJSONString(submitValidateRequest));
+        TaiPingCrawlerBaseResponse<TaiPingCrawlerSubmitValidateData> submitValidateResponse =
+                taiPingCrawlerRequestComponent.submitValidate(recalculateResponse.getData(), httpHeaders, parameters);
+        log.info("[太平核保]提交验证响应: succ={}, errMsg={}", submitValidateResponse.isSucc(), submitValidateResponse.getErrMsg());
+        if (!submitValidateResponse.isSucc()) {
+            throw new SystemException("提交验证失败:" + submitValidateResponse.getErrMsg());
+        }
+
+        // 提交核保
         TaiPingCrawlersSubmitToAuditRequest submitToAuditRequest = new TaiPingCrawlersSubmitToAuditRequest(taiPingCrawlerOrder.getCompanyOrderNo());
-        TaiPingCrawlerBaseResponse<TaiPingCrawlersSubmitToAuditData> submitToAuditData = taiPingCrawlerRequestComponent.submitToAudit(submitToAuditRequest, httpHeaders,parameters);
+        log.info("[太平核保]提交核保请求: {}", JSON.toJSONString(submitToAuditRequest));
+        TaiPingCrawlerBaseResponse<TaiPingCrawlersSubmitToAuditData> submitToAuditResponse =
+                taiPingCrawlerRequestComponent.submitToAudit(submitToAuditRequest, httpHeaders, parameters);
+        log.info("[太平核保]提交核保响应: {}", JSON.toJSONString(submitToAuditResponse));
 
+        // 构建返回结果
         UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
+        underwritingResultsVo.setOrdersNo(underwritingVo.getOrder().getOrdersNo());
+        underwritingResultsVo.setCompanyOrderNo(taiPingCrawlerOrder.getCompanyOrderNo());
+
+        // 核保请求失败
+        if (!submitToAuditResponse.isSucc()) {
+            underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
+            underwritingResultsVo.setUnderwritingResult(submitToAuditResponse.getErrMsg());
+            return underwritingResultsVo;
+        }
+
+        // 解析核保结果
+        TaiPingCrawlersSubmitToAuditData submitToAuditData = submitToAuditResponse.getData();
+        if (submitToAuditData == null || submitToAuditData.getSubmitAuditResultDto() == null
+                || submitToAuditData.getSubmitAuditResultDto().getAuditResultList() == null
+                || submitToAuditData.getSubmitAuditResultDto().getAuditResultList().isEmpty()) {
+            underwritingResultsVo.setUnderwritingResult("核保处理中");
+            underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.STAFF_PROCESS);
+            return underwritingResultsVo;
+        }
+
+        // 提取交强险和商业险核保结果
+        List<TaiPingCrawlersSubmitToAuditData.SubmitAuditResultDtoDTO.AuditResultListDTO> auditResultList =
+                submitToAuditData.getSubmitAuditResultDto().getAuditResultList();
+        String jqUnderWriteInd = "";
+        String syUnderWriteInd = "";
+        String jqProposalNo = "";
+        String syProposalNo = "";
+        for (TaiPingCrawlersSubmitToAuditData.SubmitAuditResultDtoDTO.AuditResultListDTO result : auditResultList) {
+            if ("0801".equals(result.getProductCode())) {
+                jqUnderWriteInd = result.getUnderWriteInd();
+                jqProposalNo = result.getProposalNo();
+            } else if ("0802".equals(result.getProductCode())) {
+                syUnderWriteInd = result.getUnderWriteInd();
+                syProposalNo = result.getProposalNo();
+            }
+        }
+
+        // 设置投保单号
+        underwritingResultsVo.setJqApplyNo(jqProposalNo);
+        underwritingResultsVo.setSyApplyNo(syProposalNo);
+
+        // 根据underWriteInd判断核保状态(与queryOrderState保持一致的映射规则)
+        if ("8".equals(jqUnderWriteInd) || "9".equals(jqUnderWriteInd)
+                || "8".equals(syUnderWriteInd) || "9".equals(syUnderWriteInd)) {
+            // 人工核保
+            underwritingResultsVo.setUnderwritingResult("人工核保");
+            underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.STAFF_PROCESS);
+        } else if ("2".equals(jqUnderWriteInd) || "2".equals(syUnderWriteInd)) {
+            // 核保失败
+            underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
+            underwritingResultsVo.setUnderwritingResult("核保失败");
+        } else if (containsPass(jqUnderWriteInd) || containsPass(syUnderWriteInd)) {
+            // 核保通过,获取支付链接
+            underwritingResultsVo.setUnderwritingResult("核保通过");
+            underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
+            try {
+                PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
+                paymentLinkVo.setOrder(underwritingVo.getOrder());
+                PaymentLinkResultsVo paymentLinkResultsVo = getPaymentLink(paymentLinkVo);
+                underwritingResultsVo.setPaymentLink(paymentLinkResultsVo.getPaymentLink());
+            } catch (Exception e) {
+                log.warn("[太平核保]获取支付链接失败: {}", e.getMessage());
+            }
+        } else if ("6".equals(jqUnderWriteInd) || "6".equals(syUnderWriteInd)) {
+            // 已承保
+            underwritingResultsVo.setUnderwritingResult("已承保");
+            underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.UNDERWRITED);
+        } else {
+            // 未知状态,默认转人工处理
+            underwritingResultsVo.setUnderwritingResult("核保处理中");
+            underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.STAFF_PROCESS);
+        }
+
         return underwritingResultsVo;
     }