|
|
@@ -1,5 +1,7 @@
|
|
|
package com.jzg.quotation.taikang.crawler.service.impl;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.alibaba.nacos.common.utils.CollectionUtils;
|
|
|
import com.google.gson.Gson;
|
|
|
import com.jzg.commons.constants.dict.InsOrderStatusEnum;
|
|
|
import com.jzg.commons.entity.orders.po.InsOrdersCarUserInfo;
|
|
|
@@ -9,6 +11,7 @@ import com.jzg.commons.entity.quote.vo.aggregated.*;
|
|
|
import com.jzg.commons.entity.quote.vo.base.LoginBase;
|
|
|
import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
|
|
|
import com.jzg.commons.util.ImageUtil;
|
|
|
+import com.jzg.commons.util.StringUtils;
|
|
|
import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
|
|
|
import com.jzg.quotation.commons.constant.InsuranceCode;
|
|
|
import com.jzg.quotation.commons.entity.DetectLoginRequest;
|
|
|
@@ -21,7 +24,6 @@ import com.jzg.quotation.taikang.crawler.model.TKLoginSession;
|
|
|
import com.jzg.quotation.taikang.crawler.model.api.*;
|
|
|
import com.jzg.quotation.taikang.crawler.model.entity.TKAreaInfoVo;
|
|
|
import com.jzg.quotation.taikang.crawler.model.entity.TKInsureInfo;
|
|
|
-import com.jzg.quotation.taikang.crawler.model.entity.TKOrderCheckCarSpecification;
|
|
|
import com.jzg.quotation.taikang.crawler.model.entity.TKOrderData;
|
|
|
import com.jzg.quotation.taikang.crawler.model.entity.po.TKCrawlerOrder;
|
|
|
import com.jzg.quotation.taikang.crawler.repository.TKLoginSessionRepository;
|
|
|
@@ -38,6 +40,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
|
import java.io.File;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
|
|
|
@@ -216,29 +219,205 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
|
|
|
return underwritingResultsVo;
|
|
|
}
|
|
|
|
|
|
- private void buildCheckCar(TKEntranceFor000038Result tkEntranceFor000038Result, UnderwritingVo underwritingVo, PreciseInitResult preciseInitResult, UnderwritingResultsVo underwritingResultsVo) {
|
|
|
- // 需要验车,需要上传影像
|
|
|
-
|
|
|
- // 验车照片详情列表
|
|
|
- // List<TKOrderCheckCarSpecification> checkCarSpecification = tkEntranceFor000038Result.getCheckCarSpecification();
|
|
|
- // // 验车原因
|
|
|
- // Object checkReason = tkEntranceFor000038Result.getCheckReason();
|
|
|
- // // 人工审核
|
|
|
- // List<String> underwriteReason = tkEntranceFor000038Result.getUnderwriteReason();
|
|
|
- // 验车码
|
|
|
- // String checkCarCode = httpService.entranceFor000133(session.getToken(), preciseInitResult.getMainOrderId());
|
|
|
- // 上传视频图像的二维码数据示例:https://car.tk.cn/carTKInsure/#/schema?type=checkcar&fullProposalNo=00671070808142500000004429&orderType=1
|
|
|
- // 其中 00671070808142500000004429 的商业保险单号
|
|
|
-
|
|
|
- // todo: 需要找个有验车码的车辆进行测试
|
|
|
- // InsuranceUploadImageVo insuranceUploadImageVo = new InsuranceUploadImageVo();
|
|
|
- // insuranceUploadImageVo.setOrder(underwritingVo.getOrder());
|
|
|
- // insuranceUploadImageVo.setImageVoList();
|
|
|
- // uploadImage(insuranceUploadImageVo);
|
|
|
-
|
|
|
- // 核保结果
|
|
|
- underwritingResultsVo.setUnderwritingResult(tkEntranceFor000038Result.getData().getSpResMsg() + ",原因:" + tkEntranceFor000038Result.getCheckReason());
|
|
|
- // 核保状态
|
|
|
+ /**
|
|
|
+ * 处理验车上传影像流程
|
|
|
+ * <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 {
|
|
|
+ // 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 获取到缓存的影像上传参数,影像数量: {}",
|
|
|
+ insuranceUploadImageVo.getImageVoList() != null ? insuranceUploadImageVo.getImageVoList().size() : 0);
|
|
|
+
|
|
|
+ // 设置保司订单号(核保成功后已返回)
|
|
|
+ if (proposalNo != null) {
|
|
|
+ insuranceUploadImageVo.getOrder().setCompanyOrderNo(proposalNo);
|
|
|
+ log.info("已为缓存的影像上传参数设置保司订单号: {}", proposalNo);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 删除 Redis 中的缓存(已使用,不再需要)
|
|
|
+ redisCacheUtil.deleteImageUploadParam(ordersNo);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 4. 如果有影像资料,上传到保司并查询订单状态
|
|
|
+ if (hasValidImages(insuranceUploadImageVo)) {
|
|
|
+ // 上传影像
|
|
|
+ log.info("开始上传影像资料...");
|
|
|
+ qualityVerifyImg(insuranceUploadImageVo);
|
|
|
+ log.info("影像资料上传成功");
|
|
|
+
|
|
|
+ // 查询订单状态
|
|
|
+ log.info("开始查询订单状态...");
|
|
|
+ OrderStatusResultVo orderStatusResultVo = queryOrderStatus(underwritingVo);
|
|
|
+ log.info("订单状态查询完成,响应: {}", JSONObject.toJSONString(orderStatusResultVo));
|
|
|
+
|
|
|
+ // 更新核保结果
|
|
|
+ updateUnderwritingResultByOrderStatus(tkEntranceFor000038Result, orderStatusResultVo, underwritingResultsVo);
|
|
|
+ log.info("订单状态查询完成,状态: {}", underwritingResultsVo.getUnderwritingStatus());
|
|
|
+ } else {
|
|
|
+ // 没有影像资料,保持人工处理状态
|
|
|
+ setStaffProcessStatus(tkEntranceFor000038Result, underwritingResultsVo, "未查询到影像资料");
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("处理验车上传影像失败", e);
|
|
|
+ // 处理失败时保持人工处理状态
|
|
|
+ underwritingResultsVo.setUnderwritingResult("验车影像上传处理异常:" + e.getMessage());
|
|
|
+ underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.STAFF_PROCESS);
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("========== 验车上传影像流程处理结束 ==========");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 从核保结果中提取保司订单号
|
|
|
+ *
|
|
|
+ * @param tkEntranceFor000038Result 核保结果
|
|
|
+ * @param underwritingVo 核保参数
|
|
|
+ * @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);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据订单状态查询结果更新核保结果
|
|
|
+ *
|
|
|
+ * @param tkEntranceFor000038Result 核保结果
|
|
|
+ * @param orderStatusResultVo 订单状态查询结果
|
|
|
+ * @param underwritingResultsVo 核保结果返回
|
|
|
+ */
|
|
|
+ private void updateUnderwritingResultByOrderStatus(TKEntranceFor000038Result tkEntranceFor000038Result,
|
|
|
+ OrderStatusResultVo orderStatusResultVo,
|
|
|
+ UnderwritingResultsVo underwritingResultsVo) {
|
|
|
+ if (orderStatusResultVo == null || orderStatusResultVo.getOrderStatus() == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ InsOrderStatusEnum orderStatus = orderStatusResultVo.getOrderStatus();
|
|
|
+ underwritingResultsVo.setUnderwritingStatus(orderStatus);
|
|
|
+
|
|
|
+ // 根据不同状态设置核保结果描述
|
|
|
+ String resultDesc = buildResultDescription(orderStatus, orderStatusResultVo, tkEntranceFor000038Result);
|
|
|
+ underwritingResultsVo.setUnderwritingResult(resultDesc);
|
|
|
+
|
|
|
+ // 设置支付链接(仅待支付状态)
|
|
|
+ if (InsOrderStatusEnum.PAY_PENDING.equals(orderStatus)) {
|
|
|
+ underwritingResultsVo.setPaymentLink(orderStatusResultVo.getPaymentLink());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新投保单号(交强险、商业险、驾意险)
|
|
|
+ updateApplyNos(orderStatusResultVo, underwritingResultsVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 构建核保结果描述
|
|
|
+ *
|
|
|
+ * @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();
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新投保单号信息
|
|
|
+ *
|
|
|
+ * @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);
|
|
|
}
|
|
|
|
|
|
@@ -255,19 +434,41 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
|
|
|
|
|
|
@Override
|
|
|
public void uploadImage(InsuranceUploadImageVo insuranceUploadImageVo) {
|
|
|
+ // 获取保司订单号(fullProposalNo),核保成功后才会有值
|
|
|
+ String companyOrderNo = insuranceUploadImageVo.getOrder().getCompanyOrderNo();
|
|
|
+
|
|
|
+ // 如果保司订单号为空,说明第一次进行核保,将影像上传参数缓存到 Redis
|
|
|
+ // 泰康只有进行验车时必须要进行影像资料上传,其他情况没有验车资料也可以进行核保
|
|
|
+ if (companyOrderNo == null || companyOrderNo.isEmpty()) {
|
|
|
+ log.info("保司订单号为空,影像上传参数将缓存到 Redis,等待核保完成后再上传: ordersNo={}",
|
|
|
+ insuranceUploadImageVo.getOrder().getOrdersNo());
|
|
|
+ redisCacheUtil.setImageUploadParam(insuranceUploadImageVo.getOrder().getOrdersNo(), insuranceUploadImageVo);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保司订单号已存在,直接进行影像上传
|
|
|
+ qualityVerifyImg(insuranceUploadImageVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 执行影像上传操作
|
|
|
+ *
|
|
|
+ * @param insuranceUploadImageVo 影像上传参数
|
|
|
+ */
|
|
|
+ private void doUploadImage(InsuranceUploadImageVo insuranceUploadImageVo) {
|
|
|
AttributionInformationVo attributionInformationVo = insuranceUploadImageVo.getOrder().getAttributionInformationVo();
|
|
|
TKLoginSession session = loginSession(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
|
|
|
CarCheckUploadFileParam param = new CarCheckUploadFileParam();
|
|
|
- // 泰康订单
|
|
|
+
|
|
|
+ // 获取泰康订单号
|
|
|
String orderID = redisCacheUtil.getCache(insuranceUploadImageVo.getOrder().getOrdersNo(), "DD");
|
|
|
- // 泰康保单号, 现在获取不到,核保成功之后才会返回
|
|
|
- // String proposalNo = redisCacheUtil.getCache(insuranceUploadImageVo.getOrder().getOrdersNo(), "HB");
|
|
|
|
|
|
+ // 设置上传参数
|
|
|
param.setChannelCode("OffWeb");
|
|
|
param.setTplatformId(session.getTplatformId());
|
|
|
param.setOnlyId(orderID);
|
|
|
param.setOrderID(orderID);
|
|
|
- param.setFullProposalNo(insuranceUploadImageVo.getOrder().getCompanyOrderNo() == null ? insuranceUploadImageVo.getOrder().getQuoteNo() : insuranceUploadImageVo.getOrder().getCompanyOrderNo());
|
|
|
+ param.setFullProposalNo(insuranceUploadImageVo.getOrder().getCompanyOrderNo());
|
|
|
param.setLastFullProposalNo(insuranceUploadImageVo.getOrder().getCompanyOrderNo());
|
|
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
Date date = new Date();
|
|
|
@@ -329,8 +530,158 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
-
|
|
|
});
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 执行影像上传操作(批量上传)
|
|
|
+ * <p>
|
|
|
+ * 该方法负责将前端上传的影像资料(行驶证、身份证等)批量上传到泰康保司系统。
|
|
|
+ * 流程:
|
|
|
+ * 1. 获取登录会话信息
|
|
|
+ * 2. 从Redis获取泰康订单号
|
|
|
+ * 3. 遍历影像列表,根据影像类型构建上传参数
|
|
|
+ * 4. 调用批量上传接口将所有影像一次性上传
|
|
|
+ * 5. 调用影像提交接口完成上传流程
|
|
|
+ *
|
|
|
+ * @param insuranceUploadImageVo 影像上传参数,包含订单信息和影像列表
|
|
|
+ */
|
|
|
+ private void qualityVerifyImg(InsuranceUploadImageVo insuranceUploadImageVo) {
|
|
|
+ // 1. 获取归属信息(用户名、密码)用于登录保司系统
|
|
|
+ AttributionInformationVo attributionInformationVo = insuranceUploadImageVo.getOrder().getAttributionInformationVo();
|
|
|
+
|
|
|
+ // 2. 获取登录会话信息
|
|
|
+ TKLoginSession session = loginSession(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
|
|
|
+
|
|
|
+ // 3. 从Redis缓存中获取泰康订单号(DD标识)
|
|
|
+ String orderID = redisCacheUtil.getCache(insuranceUploadImageVo.getOrder().getOrdersNo(), "DD");
|
|
|
+ log.info("影像上传 - 获取泰康订单号: {}", orderID);
|
|
|
+
|
|
|
+ // 4. 获取影像列表
|
|
|
+ List<InsuranceImageVo> imageVoList = insuranceUploadImageVo.getImageVoList();
|
|
|
+ if (CollectionUtils.isEmpty(imageVoList)) {
|
|
|
+ log.warn("影像上传 - 影像列表为空,跳过上传");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 5. 构建批量上传参数列表
|
|
|
+ List<CarCheckUploadFileVerifyImgParam> uploadParamsList = buildUploadParams(insuranceUploadImageVo, imageVoList);
|
|
|
+
|
|
|
+ // 6. 如果没有需要上传的参数,直接返回
|
|
|
+ if (CollectionUtils.isEmpty(uploadParamsList)) {
|
|
|
+ log.warn("影像上传 - 未构建到有效的上传参数,跳过上传");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("影像上传 - 准备批量上传 {} 个影像参数", uploadParamsList.size());
|
|
|
+
|
|
|
+ // 7. 调用批量上传接口,一次性发送所有影像参数
|
|
|
+ httpService.qualityVerifyImgBatch(uploadParamsList);
|
|
|
+
|
|
|
+ // 8. 调用影像提交接口,完成上传流程
|
|
|
+ httpService.carCheckUploadFileSubmit(
|
|
|
+ session.getToken(),
|
|
|
+ session.getTplatformId(),
|
|
|
+ insuranceUploadImageVo.getOrder().getCompanyOrderNo(),
|
|
|
+ orderID
|
|
|
+ );
|
|
|
+
|
|
|
+ log.info("影像上传 - 上传完成,订单号: {}", orderID);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 构建影像上传参数列表
|
|
|
+ * <p>
|
|
|
+ * 根据影像类型(行驶证、身份证)构建对应的上传参数对象。
|
|
|
+ * 影像类型编码说明:
|
|
|
+ * - C01: 行驶证正面
|
|
|
+ * - D01: 行驶证反面
|
|
|
+ * - C02: 车主身份证正面
|
|
|
+ * - D02: 车主身份证反面
|
|
|
+ *
|
|
|
+ * @param insuranceUploadImageVo 影像上传参数
|
|
|
+ * @param imageVoList 影像列表
|
|
|
+ * @return 上传参数列表
|
|
|
+ */
|
|
|
+ private List<CarCheckUploadFileVerifyImgParam> buildUploadParams(
|
|
|
+ InsuranceUploadImageVo insuranceUploadImageVo,
|
|
|
+ List<InsuranceImageVo> imageVoList) {
|
|
|
+
|
|
|
+ List<CarCheckUploadFileVerifyImgParam> uploadParamsList = new ArrayList<>();
|
|
|
+
|
|
|
+ // 获取保司订单号(核保成功后返回的ProposalNo)
|
|
|
+ String companyOrderNo = insuranceUploadImageVo.getOrder().getCompanyOrderNo();
|
|
|
+
|
|
|
+ // 遍历影像列表
|
|
|
+ for (InsuranceImageVo imageVo : imageVoList) {
|
|
|
+ String imageCode = imageVo.getImageCode();
|
|
|
+ List<InsuranceImageVo.ImageDTO> imageBase64List = imageVo.getImageBase64List();
|
|
|
+
|
|
|
+ // 如果影像编码或Base64列表为空,跳过当前影像
|
|
|
+ if (StringUtils.isEmpty(imageCode) || CollectionUtils.isEmpty(imageBase64List)) {
|
|
|
+ log.warn("影像上传 - 影像编码为空或Base64列表为空,跳过: imageCode={}", imageCode);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 根据影像编码确定类型路径
|
|
|
+ String typePath = getTypePathByImageCode(imageCode);
|
|
|
+ if (StringUtils.isEmpty(typePath)) {
|
|
|
+ log.warn("影像上传 - 未匹配到影像类型路径,跳过: imageCode={}", imageCode);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 遍历Base64图片列表,为每张图片构建一个上传参数
|
|
|
+ for (InsuranceImageVo.ImageDTO imageDTO : imageBase64List) {
|
|
|
+ CarCheckUploadFileVerifyImgParam param = new CarCheckUploadFileVerifyImgParam();
|
|
|
+
|
|
|
+ // 设置渠道编码(固定值)
|
|
|
+ param.setChannelCode("OffWeb");
|
|
|
+ // 设置保司订单号(核保成功后返回)
|
|
|
+ param.setFullProposalNo(companyOrderNo);
|
|
|
+ // 设置拍摄城市(暂时为空)
|
|
|
+ param.setShootCity("");
|
|
|
+ // 设置拍摄省份(暂时为空)
|
|
|
+ param.setShootProvince("");
|
|
|
+ // 设置上传类型(1表示正常上传)
|
|
|
+ param.setUploadType(1);
|
|
|
+ // 设置类型路径(根据影像类型确定)
|
|
|
+ param.setTypePath(typePath);
|
|
|
+ // 设置Base64编码的图片内容
|
|
|
+ param.setBase64File(imageDTO.getImageBase64Str());
|
|
|
+ // 生成Base64文件名(保司订单号+类型路径+序号)
|
|
|
+ param.setBase64FileName(companyOrderNo + typePath + "0.png");
|
|
|
+ // 生成文件类型标识(包含时间戳确保唯一性)
|
|
|
+ param.setFileType("1fileOrgName" + typePath + System.currentTimeMillis() + "0");
|
|
|
+
|
|
|
+ uploadParamsList.add(param);
|
|
|
+ log.debug("影像上传 - 构建上传参数: imageCode={}, typePath={}", imageCode, typePath);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return uploadParamsList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据影像编码获取类型路径
|
|
|
+ * <p>
|
|
|
+ * 影像类型与类型路径的映射关系:
|
|
|
+ * - C01/C02: 行驶证(正面/反面)-> 01-15-01(投保业务-车辆证件-行驶证)
|
|
|
+ * - C02/D02: 身份证(正面/反面)-> 01-14-01(投保业务-证件照-证件照)
|
|
|
+ *
|
|
|
+ * @param imageCode 影像编码
|
|
|
+ * @return 类型路径,未匹配返回null
|
|
|
+ */
|
|
|
+ private String getTypePathByImageCode(String imageCode) {
|
|
|
+ if (imageCode == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ return switch (imageCode) {
|
|
|
+ case "C01", "D01" -> "01-15-01"; // 行驶证
|
|
|
+ case "C02", "D02" -> "01-14-01"; // 身份证
|
|
|
+ default -> null;
|
|
|
+ };
|
|
|
+ }
|
|
|
|
|
|
|
|
|
// {
|
|
|
@@ -454,9 +805,6 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
|
|
|
// param.setFileType("1fileOrgName01-12-0117429775996580");
|
|
|
// }
|
|
|
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
@Override
|
|
|
public void queryClauseData(ClauseDataVo clauseDataVo) {
|
|
|
|
|
|
@@ -532,6 +880,9 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
|
|
|
orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.UNDERWRITED);
|
|
|
} else if (orderStatus.equals("X")) {
|
|
|
orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.ORDER_CLOSE);
|
|
|
+ } else if (orderStatus.equals("A3")) {
|
|
|
+ orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.STAFF_PROCESS);
|
|
|
+ orderStatusResultVo.setErrorMsg(tkEntranceFor000086Result.getCarRuleMessage());
|
|
|
}
|
|
|
orderStatusResultVo.setJqPolicyno(tkEntranceFor000086Result.getQuotationNoCI());
|
|
|
orderStatusResultVo.setSyPolicyno(tkEntranceFor000086Result.getQuotationNoBI());
|