Explorar o código

优化影像上传代码

wangrq hai 2 meses
pai
achega
5a3ae7bd14

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

@@ -219,96 +219,67 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
         return underwritingResultsVo;
     }
 
-    private void buildCheckCar(TKEntranceFor000038Result tkEntranceFor000038Result, UnderwritingVo underwritingVo, PreciseInitResult preciseInitResult, UnderwritingResultsVo underwritingResultsVo) {
+    /**
+     * 处理验车上传影像流程
+     * <p>
+     * 当核保返回需要验车上传影像时,执行以下流程:
+     * 1. 获取核保返回的保司订单号
+     * 2. 从 Redis 获取前端提前缓存的影像上传参数
+     * 3. 设置保司订单号并上传影像到保司
+     * 4. 查询订单状态并更新核保结果
+     *
+     * @param tkEntranceFor000038Result 核保结果
+     * @param underwritingVo            核保参数
+     * @param preciseInitResult         精准报价结果
+     * @param underwritingResultsVo     核保结果返回
+     */
+    private void buildCheckCar(TKEntranceFor000038Result tkEntranceFor000038Result, 
+                               UnderwritingVo underwritingVo, 
+                               PreciseInitResult preciseInitResult, 
+                               UnderwritingResultsVo underwritingResultsVo) {
         log.info("========== 开始处理验车上传影像流程 ==========");
 
         try {
-            // 获取登录会话信息
-            AttributionInformationVo attributionInformationVo = underwritingVo.getOrder().getAttributionInformationVo();
-            TKLoginSession session = loginSession(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
-
-            // 获取核保返回的保司订单号
-            TKOrderData tkOrderData = tkEntranceFor000038Result.getData();
-            String proposalNo = null;
-            if (tkOrderData != null && tkOrderData.getProposalNo() != null) {
-                proposalNo = tkOrderData.getProposalNo();
-                underwritingVo.getOrder().setCompanyOrderNo(proposalNo);
-                log.info("核保返回保司订单号: {}", proposalNo);
-            }
-
-            // 1. 查询验车照片详情列表(保司要求上传的影像类型)
-            // List<TKOrderCheckCarSpecification> checkCarSpecification = tkEntranceFor000038Result.getCheckCarSpecification();
-            // if (checkCarSpecification != null && !checkCarSpecification.isEmpty()) {
-            //     log.info("验车照片详情列表: {}", new Gson().toJson(checkCarSpecification));
-            // }
-
+            // 1. 获取核保返回的保司订单号
+            String proposalNo = extractProposalNo(tkEntranceFor000038Result, underwritingVo);
+            
             // 2. 从 Redis 获取缓存的影像上传参数(前端提前上传的)
-            InsuranceUploadImageVo insuranceUploadImageVo = redisCacheUtil.getImageUploadParam(underwritingVo.getOrder().getOrdersNo());
+            String ordersNo = underwritingVo.getOrder().getOrdersNo();
+            InsuranceUploadImageVo insuranceUploadImageVo = redisCacheUtil.getImageUploadParam(ordersNo);
 
-            // 3. 如果 Redis 中有缓存的影像上传参数,设置保司订单号
+            // 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(underwritingVo.getOrder().getOrdersNo());
+                redisCacheUtil.deleteImageUploadParam(ordersNo);
             }
 
-            // 5. 如果有影像资料,上传到保司
-            if (insuranceUploadImageVo != null && insuranceUploadImageVo.getImageVoList() != null && !insuranceUploadImageVo.getImageVoList().isEmpty()) {
+            // 4. 如果有影像资料,上传到保司并查询订单状态
+            if (hasValidImages(insuranceUploadImageVo)) {
                 // 上传影像
                 log.info("开始上传影像资料...");
                 qualityVerifyImg(insuranceUploadImageVo);
                 log.info("影像资料上传成功");
 
-                // 6. 上传成功后查询订单状态
+                // 查询订单状态
                 log.info("开始查询订单状态...");
-                OrderStatusVo orderStatusVo = new OrderStatusVo();
-                orderStatusVo.setOrder(underwritingVo.getOrder());
-                OrderStatusResultVo orderStatusResultVo = queryOrderState(orderStatusVo);
+                OrderStatusResultVo orderStatusResultVo = queryOrderStatus(underwritingVo);
                 log.info("订单状态查询完成,响应: {}", JSONObject.toJSONString(orderStatusResultVo));
 
-                // 根据状态查询结果更新核保结果
-                if (orderStatusResultVo != null && orderStatusResultVo.getOrderStatus() != null) {
-                    underwritingResultsVo.setUnderwritingStatus(orderStatusResultVo.getOrderStatus());
-                    if (InsOrderStatusEnum.PAY_PENDING.equals(orderStatusResultVo.getOrderStatus())) {
-                        underwritingResultsVo.setUnderwritingResult("核保成功");
-                        underwritingResultsVo.setPaymentLink(orderStatusResultVo.getPaymentLink());
-                    } else if (InsOrderStatusEnum.UNDERWRITED.equals(orderStatusResultVo.getOrderStatus())) {
-                        underwritingResultsVo.setUnderwritingResult("已承保");
-                    } else if (InsOrderStatusEnum.WAIT_AUDIT.equals(orderStatusResultVo.getOrderStatus())) {
-                        underwritingResultsVo.setUnderwritingResult("待核保");
-                    } else if (InsOrderStatusEnum.AUDIT_FAIL.equals(orderStatusResultVo.getOrderStatus())) {
-                        underwritingResultsVo.setUnderwritingResult("核保失败");
-                    } else if (InsOrderStatusEnum.STAFF_PROCESS.equals(orderStatusResultVo.getOrderStatus())) {
-                        underwritingResultsVo.setUnderwritingResult("人工审核,原因:" + orderStatusResultVo.getErrorMsg());
-                    } else {
-                        underwritingResultsVo.setUnderwritingResult(tkEntranceFor000038Result.getData().getSpResMsg() + ",原因:" + tkEntranceFor000038Result.getCheckCarData());
-                    }
-
-                    // 更新投保单号
-                    if (orderStatusResultVo.getJqApplyNo() != null) {
-                        underwritingResultsVo.setJqApplyNo(orderStatusResultVo.getJqApplyNo());
-                    }
-                    if (orderStatusResultVo.getSyApplyNo() != null) {
-                        underwritingResultsVo.setSyApplyNo(orderStatusResultVo.getSyApplyNo());
-                    }
-                    if (orderStatusResultVo.getJyApplyNo() != null) {
-                        underwritingResultsVo.setJyApplyNo(orderStatusResultVo.getJyApplyNo());
-                    }
-                }
+                // 更新核保结果
+                updateUnderwritingResultByOrderStatus(tkEntranceFor000038Result, orderStatusResultVo, underwritingResultsVo);
                 log.info("订单状态查询完成,状态: {}", underwritingResultsVo.getUnderwritingStatus());
             } else {
                 // 没有影像资料,保持人工处理状态
-                log.warn("未查询到影像资料,保持人工处理状态");
-                underwritingResultsVo.setUnderwritingResult(tkEntranceFor000038Result.getData().getSpResMsg() + ",原因:" + tkEntranceFor000038Result.getCheckCarData());
-                underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.STAFF_PROCESS);
+                setStaffProcessStatus(tkEntranceFor000038Result, underwritingResultsVo, "未查询到影像资料");
             }
 
         } catch (Exception e) {
@@ -322,68 +293,132 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
     }
 
     /**
-     * 重新核保
+     * 从核保结果中提取保司订单号
      *
-     * @param session               登录会话
-     * @param underwritingVo        核保参数
-     * @param preciseInitResult     初始化结果
-     * @param underwritingResultsVo 核保结果
+     * @param tkEntranceFor000038Result 核保结果
+     * @param underwritingVo            核保参数
+     * @return 保司订单号
      */
-    private void reUnderwriting(TKLoginSession session, UnderwritingVo underwritingVo,
-                                PreciseInitResult preciseInitResult, UnderwritingResultsVo underwritingResultsVo) {
-        try {
-            // 获取车主信息(与第一次核保相同)
-            List<InsOrdersCarUserInfo> insOrdersCarUserInfoList = underwritingVo.getInsOrdersCarUserInfoList();
-            if (insOrdersCarUserInfoList == null || insOrdersCarUserInfoList.isEmpty()) {
-                log.warn("车主信息为空,无法重新核保");
-                return;
-            }
+    private String extractProposalNo(TKEntranceFor000038Result tkEntranceFor000038Result, UnderwritingVo underwritingVo) {
+        TKOrderData tkOrderData = tkEntranceFor000038Result.getData();
+        if (tkOrderData == null || tkOrderData.getProposalNo() == null) {
+            return null;
+        }
+        
+        String proposalNo = tkOrderData.getProposalNo();
+        underwritingVo.getOrder().setCompanyOrderNo(proposalNo);
+        log.info("核保返回保司订单号: {}", proposalNo);
+        return proposalNo;
+    }
+
+    /**
+     * 判断是否有有效的影像资料
+     *
+     * @param insuranceUploadImageVo 影像上传参数
+     * @return true 表示有有效影像,false 表示无
+     */
+    private boolean hasValidImages(InsuranceUploadImageVo insuranceUploadImageVo) {
+        return insuranceUploadImageVo != null && CollectionUtils.isNotEmpty(insuranceUploadImageVo.getImageVoList());
+    }
+
+    /**
+     * 查询订单状态
+     *
+     * @param underwritingVo 核保参数
+     * @return 订单状态查询结果
+     */
+    private OrderStatusResultVo queryOrderStatus(UnderwritingVo underwritingVo) {
+        OrderStatusVo orderStatusVo = new OrderStatusVo();
+        orderStatusVo.setOrder(underwritingVo.getOrder());
+        return queryOrderState(orderStatusVo);
+    }
 
-            InsOrdersCarUserInfo insOrdersCarUserInfo = insOrdersCarUserInfoList.get(0);
-            InitProposalResult initProposalResult = tkSimpleService.queryCarOwner(session, preciseInitResult.getMainOrderId());
-            TKInsureInfo insureInfo = tkSimpleService.dataCreateInsureInfo(initProposalResult, insOrdersCarUserInfo);
+    /**
+     * 根据订单状态查询结果更新核保结果
+     *
+     * @param tkEntranceFor000038Result 核保结果
+     * @param orderStatusResultVo       订单状态查询结果
+     * @param underwritingResultsVo     核保结果返回
+     */
+    private void updateUnderwritingResultByOrderStatus(TKEntranceFor000038Result tkEntranceFor000038Result,
+                                                       OrderStatusResultVo orderStatusResultVo,
+                                                       UnderwritingResultsVo underwritingResultsVo) {
+        if (orderStatusResultVo == null || orderStatusResultVo.getOrderStatus() == null) {
+            return;
+        }
 
-            log.info("重新核保 - 车主信息: {}", new Gson().toJson(insureInfo));
+        InsOrderStatusEnum orderStatus = orderStatusResultVo.getOrderStatus();
+        underwritingResultsVo.setUnderwritingStatus(orderStatus);
 
-            // 调用核保接口
-            TKEntranceFor000038Result reUnderwritingResult = tkSimpleService.orderSubmit(session, preciseInitResult.getMainOrderId(), insureInfo);
+        // 根据不同状态设置核保结果描述
+        String resultDesc = buildResultDescription(orderStatus, orderStatusResultVo, tkEntranceFor000038Result);
+        underwritingResultsVo.setUnderwritingResult(resultDesc);
 
-            if (reUnderwritingResult != null) {
-                TKOrderData tkOrderData = reUnderwritingResult.getData();
+        // 设置支付链接(仅待支付状态)
+        if (InsOrderStatusEnum.PAY_PENDING.equals(orderStatus)) {
+            underwritingResultsVo.setPaymentLink(orderStatusResultVo.getPaymentLink());
+        }
 
-                // 更新保单编号缓存
-                if (tkOrderData != null && tkOrderData.getProposalNo() != null) {
-                    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);
-                }
+        // 更新投保单号(交强险、商业险、驾意险)
+        updateApplyNos(orderStatusResultVo, underwritingResultsVo);
+    }
 
-                // 检查是否还需要验车
-                if ("1".equals(reUnderwritingResult.getCheckCarFlag()) && "9".equals(reUnderwritingResult.getData().getUnderWriteFlag())) {
-                    // 仍然需要验车,保持人工处理状态
-                    underwritingResultsVo.setUnderwritingResult(reUnderwritingResult.getData().getSpResMsg() + ",原因:" + reUnderwritingResult.getCheckCarData());
-                    underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.STAFF_PROCESS);
-                    log.info("重新核保后仍需要验车: {}", underwritingResultsVo.getUnderwritingResult());
-                } else {
-                    // 核保通过
-                    underwritingResultsVo.setUnderwritingResult("核保成功");
-                    underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
-                    log.info("重新核保通过");
-                }
-            } else {
-                // 重新核保失败
-                underwritingResultsVo.setUnderwritingResult("重新核保失败");
-                underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
-                log.warn("重新核保返回null,核保失败");
+    /**
+     * 构建核保结果描述
+     *
+     * @param orderStatus               订单状态
+     * @param orderStatusResultVo       订单状态查询结果
+     * @param tkEntranceFor000038Result 核保结果
+     * @return 核保结果描述
+     */
+    private String buildResultDescription(InsOrderStatusEnum orderStatus,
+                                          OrderStatusResultVo orderStatusResultVo,
+                                          TKEntranceFor000038Result tkEntranceFor000038Result) {
+        return switch (orderStatus) {
+            case PAY_PENDING -> "核保成功";
+            case UNDERWRITED -> "已承保";
+            case WAIT_AUDIT -> "待核保";
+            case AUDIT_FAIL -> "核保失败";
+            case STAFF_PROCESS -> "人工审核,原因:" + orderStatusResultVo.getErrorMsg();
+            default -> {
+                TKOrderData data = tkEntranceFor000038Result.getData();
+                yield (data != null ? data.getSpResMsg() : "") + ",原因:" + tkEntranceFor000038Result.getCheckCarData();
             }
+        };
+    }
 
-        } catch (Exception e) {
-            log.error("重新核保失败", e);
-            underwritingResultsVo.setUnderwritingResult("重新核保异常:" + e.getMessage());
-            underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.STAFF_PROCESS);
+    /**
+     * 更新投保单号信息
+     *
+     * @param orderStatusResultVo   订单状态查询结果
+     * @param underwritingResultsVo 核保结果返回
+     */
+    private void updateApplyNos(OrderStatusResultVo orderStatusResultVo, UnderwritingResultsVo underwritingResultsVo) {
+        if (orderStatusResultVo.getJqApplyNo() != null) {
+            underwritingResultsVo.setJqApplyNo(orderStatusResultVo.getJqApplyNo());
         }
+        if (orderStatusResultVo.getSyApplyNo() != null) {
+            underwritingResultsVo.setSyApplyNo(orderStatusResultVo.getSyApplyNo());
+        }
+        if (orderStatusResultVo.getJyApplyNo() != null) {
+            underwritingResultsVo.setJyApplyNo(orderStatusResultVo.getJyApplyNo());
+        }
+    }
+
+    /**
+     * 设置人工处理状态
+     *
+     * @param tkEntranceFor000038Result 核保结果
+     * @param underwritingResultsVo     核保结果返回
+     * @param reason                    原因描述
+     */
+    private void setStaffProcessStatus(TKEntranceFor000038Result tkEntranceFor000038Result,
+                                       UnderwritingResultsVo underwritingResultsVo,
+                                       String reason) {
+        log.warn("{},保持人工处理状态", reason);
+        TKOrderData data = tkEntranceFor000038Result.getData();
+        underwritingResultsVo.setUnderwritingResult((data != null ? data.getSpResMsg() : "") + ",原因:" + tkEntranceFor000038Result.getCheckCarData());
+        underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.STAFF_PROCESS);
     }
 
     @Override