Просмотр исходного кода

泰康: 解决机动车损失险选择投保金额是1元的问题
泰康:解决核心返回人工审核驳回状态,与系统订单状态不一致问题

wangrq 2 месяцев назад
Родитель
Сommit
24f69ed998

+ 5 - 0
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/ConvertUtil.java

@@ -43,6 +43,11 @@ public class ConvertUtil {
         if (num.compareTo(new BigDecimal("10000")) < 0) {
             return quoteAmount;
         }
+        // 如果num是整数,直接返回不带小数拼接万
+        if (num.remainder(new BigDecimal("10000")).compareTo(BigDecimal.ZERO) == 0) {
+            BigDecimal wanNum = num.divide(new BigDecimal("10000"));
+            return wanNum + "万";
+        }
         BigDecimal res = num.divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP);
         return res + "万";
     }

+ 1 - 1
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/model/entity/TKCiKindsVo.java

@@ -106,7 +106,7 @@ public class TKCiKindsVo extends UnknownFieldEntity {
      *
      * 当不投保时,这个字段的值好像是无意义的,有些传的是10000、有的传0、有的传2。
      */
-    private String quoteAmount;
+    private BigDecimal quoteAmount;
 
     /**
      * 报价金额中文

+ 20 - 7
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/service/TKSimpleService.java

@@ -41,6 +41,12 @@ public class TKSimpleService {
             "4", "P"
     );
 
+    /**
+     * 机动车损失险险种代码(车辆损失保险)
+     * 该险种的金额由保司系统返回,前端传的值不准确,需要使用保司的金额
+     */
+    private static final String KIND_CODE_VEHICLE_DAMAGE = "101";
+
     /**
      * 通用空值检查与初始化方法
      * <p>
@@ -1041,17 +1047,24 @@ public class TKSimpleService {
                 .forEach(commonBiKindInfoVo -> {
                     TKCiKindsVo tkCiKindVo = tkCiKindsVoMap.get(commonBiKindInfoVo.getKindCode());
                     tkCiKindVo.setIsSelect("1");
-                    tkCiKindVo.setQuoteAmount(commonBiKindInfoVo.getAmount());
-                    tkCiKindVo.setQuoteAmountCN(ConvertUtil.simpleConvert(commonBiKindInfoVo.getAmount()));
-
-                    if (StringUtils.isNotBlank(commonBiKindInfoVo.getUnitAmount())) {
-                        tkCiKindVo.setUnitAmount(new BigDecimal(commonBiKindInfoVo.getUnitAmount()));
-                        tkCiKindVo.setUnitAmountCN(commonBiKindInfoVo.getUnitAmount());
-                    }
                     String quantity = commonBiKindInfoVo.getQuantity();
                     if (StringUtils.isNotBlank(quantity)) {
                         tkCiKindVo.setQuantity(Integer.parseInt(quantity));
                     }
+                    // 机动车损失险(101)的金额由保司系统返回,前端传的值不准确,使用保司已有的金额,无需覆盖
+                    if (KIND_CODE_VEHICLE_DAMAGE.equals(commonBiKindInfoVo.getKindCode())) {
+                        return;
+                    }
+                    String amount = commonBiKindInfoVo.getAmount();
+                    if (StringUtils.isBlank(amount)) {
+                        log.warn("商业险险种[{}]金额为空,跳过金额设置", commonBiKindInfoVo.getKindCode());
+                        return;
+                    }
+                    BigDecimal amountBigDecimal = new BigDecimal(amount);
+                    tkCiKindVo.setQuoteAmount(amountBigDecimal);
+                    tkCiKindVo.setQuoteAmountCN(ConvertUtil.simpleConvert(amount));
+                    tkCiKindVo.setUnitAmount(amountBigDecimal);
+                    tkCiKindVo.setUnitAmountCN(ConvertUtil.simpleConvert(amount));
                 });
 
         // ========== 6. 驾意险信息同步 ==========

+ 36 - 32
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/service/impl/TKQuotationBaseServiceImpl.java

@@ -188,34 +188,38 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
         // # 车险投保单报价下单
         TKEntranceFor000038Result tkEntranceFor000038Result = tkSimpleService.orderSubmit(session, preciseInitResult.getMainOrderId(), insureInfo);
         UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
-        if (tkEntranceFor000038Result != null) {  // 核保通过
-            TKOrderData tkOrderData = tkEntranceFor000038Result.getData();
-            // 核保成功,保单编号缓存
-            redisCacheUtil.setCache(tkOrderData.getProposalNo(), underwritingVo.getOrder().getOrdersNo(), "HB");
-            // 保司订单号
-            underwritingResultsVo.setCompanyOrderNo(tkOrderData.getProposalNo());
-            // 交强险投保单号
-            underwritingResultsVo.setJqApplyNo(tkOrderData.getProposalNoCI());
-            // 商业险投保单号
-            underwritingResultsVo.setSyApplyNo(tkOrderData.getProposalNoBI());
-            // 驾意险投保单号
-            underwritingResultsVo.setJyApplyNo(tkOrderData.getCarAccident() != null ? tkOrderData.getCarAccident().getProposalNo() : null);
-            // 核保结果
-            underwritingResultsVo.setUnderwritingResult("核保成功");
-            // 核保状态
-            underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
-            // 验车标志,需要验车,需要上传影像
-            if ("1".equals(tkEntranceFor000038Result.getCheckCarFlag()) && "9".equals(tkEntranceFor000038Result.getData().getUnderWriteFlag())) {
-                buildCheckCar(tkEntranceFor000038Result, underwritingVo, preciseInitResult, underwritingResultsVo);
-            }
-            tkCrawlerOrderService.save(underwritingVo, underwritingResultsVo, preciseInitResult.getMainOrderId(), true);
-        } else {
-            // 核保失败
+        if (tkEntranceFor000038Result == null) {
             underwritingResultsVo.setUnderwritingResult("核保失败");
             underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
             tkCrawlerOrderService.save(underwritingVo, underwritingResultsVo, preciseInitResult.getMainOrderId(), false);
+            return underwritingResultsVo;
         }
-
+        // 核保通过
+        TKOrderData tkOrderData = tkEntranceFor000038Result.getData();
+        // 核保成功,保单编号缓存
+        redisCacheUtil.setCache(tkOrderData.getProposalNo(), underwritingVo.getOrder().getOrdersNo(), "HB");
+        // 保司订单号
+        underwritingResultsVo.setCompanyOrderNo(tkOrderData.getProposalNo());
+        // 交强险投保单号
+        underwritingResultsVo.setJqApplyNo(tkOrderData.getProposalNoCI());
+        // 商业险投保单号
+        underwritingResultsVo.setSyApplyNo(tkOrderData.getProposalNoBI());
+        // 驾意险投保单号
+        underwritingResultsVo.setJyApplyNo(tkOrderData.getCarAccident() != null ? tkOrderData.getCarAccident().getProposalNo() : null);
+        // 核保结果
+        underwritingResultsVo.setUnderwritingResult("核保成功");
+        // 核保状态
+        underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
+        // 验车标志,需要验车,需要上传影像
+        if ("1".equals(tkEntranceFor000038Result.getCheckCarFlag()) && "9".equals(tkEntranceFor000038Result.getData().getUnderWriteFlag())) {
+            buildCheckCar(tkEntranceFor000038Result, underwritingVo, preciseInitResult, underwritingResultsVo);
+        }
+        // 人工核保
+        if ("2".equals(tkOrderData.getCarCheckStatus())) {
+            underwritingResultsVo.setUnderwritingResult("人工审核返回:" + tkOrderData.getSpResMsg());
+            underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
+        }
+        tkCrawlerOrderService.save(underwritingVo, underwritingResultsVo, preciseInitResult.getMainOrderId(), true);
         return underwritingResultsVo;
     }
 
@@ -233,31 +237,31 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
      * @param preciseInitResult         精准报价结果
      * @param underwritingResultsVo     核保结果返回
      */
-    private void buildCheckCar(TKEntranceFor000038Result tkEntranceFor000038Result, 
-                               UnderwritingVo underwritingVo, 
-                               PreciseInitResult preciseInitResult, 
+    private void buildCheckCar(TKEntranceFor000038Result tkEntranceFor000038Result,
+                               UnderwritingVo underwritingVo,
+                               PreciseInitResult preciseInitResult,
                                UnderwritingResultsVo underwritingResultsVo) {
         log.info("========== 开始处理验车上传影像流程 ==========");
 
         try {
             // 1. 获取核保返回的保司订单号
             String proposalNo = extractProposalNo(tkEntranceFor000038Result, underwritingVo);
-            
+
             // 2. 从 Redis 获取缓存的影像上传参数(前端提前上传的)
             String ordersNo = underwritingVo.getOrder().getOrdersNo();
             InsuranceUploadImageVo insuranceUploadImageVo = redisCacheUtil.getImageUploadParam(ordersNo);
 
             // 3. 如果有缓存的影像参数,设置保司订单号并清除缓存
             if (insuranceUploadImageVo != null) {
-                log.info("从 Redis 获取到缓存的影像上传参数,影像数量: {}", 
+                log.info("从 Redis 获取到缓存的影像上传参数,影像数量: {}",
                         insuranceUploadImageVo.getImageVoList() != null ? insuranceUploadImageVo.getImageVoList().size() : 0);
-                
+
                 // 设置保司订单号(核保成功后已返回)
                 if (proposalNo != null) {
                     insuranceUploadImageVo.getOrder().setCompanyOrderNo(proposalNo);
                     log.info("已为缓存的影像上传参数设置保司订单号: {}", proposalNo);
                 }
-                
+
                 // 删除 Redis 中的缓存(已使用,不再需要)
                 redisCacheUtil.deleteImageUploadParam(ordersNo);
             }
@@ -304,7 +308,7 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
         if (tkOrderData == null || tkOrderData.getProposalNo() == null) {
             return null;
         }
-        
+
         String proposalNo = tkOrderData.getProposalNo();
         underwritingVo.getOrder().setCompanyOrderNo(proposalNo);
         log.info("核保返回保司订单号: {}", proposalNo);