|
|
@@ -217,29 +217,137 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
|
|
|
}
|
|
|
|
|
|
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());
|
|
|
- // 核保状态
|
|
|
- underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.STAFF_PROCESS);
|
|
|
+ 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));
|
|
|
+ // }
|
|
|
+
|
|
|
+ // 2. 从 Redis 获取缓存的影像上传参数(前端提前上传的)
|
|
|
+ InsuranceUploadImageVo insuranceUploadImageVo = redisCacheUtil.getImageUploadParam(underwritingVo.getOrder().getOrdersNo());
|
|
|
+
|
|
|
+ // 3. 如果 Redis 中有缓存的影像上传参数,设置保司订单号
|
|
|
+ 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(underwritingVo.getOrder().getOrdersNo());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 5. 如果有影像资料,上传到保司
|
|
|
+ if (insuranceUploadImageVo != null && insuranceUploadImageVo.getImageVoList() != null && !insuranceUploadImageVo.getImageVoList().isEmpty()) {
|
|
|
+ // 上传影像
|
|
|
+ log.info("开始上传影像资料...");
|
|
|
+ doUploadImage(insuranceUploadImageVo);
|
|
|
+ log.info("影像资料上传成功");
|
|
|
+
|
|
|
+ // 6. 上传成功后重新进行核保
|
|
|
+ log.info("开始重新核保...");
|
|
|
+ reUnderwriting(session, underwritingVo, preciseInitResult, underwritingResultsVo);
|
|
|
+ log.info("重新核保完成");
|
|
|
+ } else {
|
|
|
+ // 没有影像资料,保持人工处理状态
|
|
|
+ log.warn("未查询到影像资料,保持人工处理状态");
|
|
|
+ underwritingResultsVo.setUnderwritingResult(tkEntranceFor000038Result.getData().getSpResMsg() + ",原因:" + tkEntranceFor000038Result.getCheckCarData());
|
|
|
+ underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.STAFF_PROCESS);
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("处理验车上传影像失败", e);
|
|
|
+ // 处理失败时保持人工处理状态
|
|
|
+ underwritingResultsVo.setUnderwritingResult("验车影像上传处理异常:" + e.getMessage());
|
|
|
+ underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.STAFF_PROCESS);
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("========== 验车上传影像流程处理结束 ==========");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 重新核保
|
|
|
+ *
|
|
|
+ * @param session 登录会话
|
|
|
+ * @param underwritingVo 核保参数
|
|
|
+ * @param preciseInitResult 初始化结果
|
|
|
+ * @param underwritingResultsVo 核保结果
|
|
|
+ */
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
+ InsOrdersCarUserInfo insOrdersCarUserInfo = insOrdersCarUserInfoList.get(0);
|
|
|
+ InitProposalResult initProposalResult = tkSimpleService.queryCarOwner(session, preciseInitResult.getMainOrderId());
|
|
|
+ TKInsureInfo insureInfo = tkSimpleService.dataCreateInsureInfo(initProposalResult, insOrdersCarUserInfo);
|
|
|
+
|
|
|
+ log.info("重新核保 - 车主信息: {}", new Gson().toJson(insureInfo));
|
|
|
+
|
|
|
+ // 调用核保接口
|
|
|
+ TKEntranceFor000038Result reUnderwritingResult = tkSimpleService.orderSubmit(session, preciseInitResult.getMainOrderId(), insureInfo);
|
|
|
+
|
|
|
+ if (reUnderwritingResult != null) {
|
|
|
+ TKOrderData tkOrderData = reUnderwritingResult.getData();
|
|
|
+
|
|
|
+ // 更新保单编号缓存
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检查是否还需要验车
|
|
|
+ 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,核保失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("重新核保失败", e);
|
|
|
+ underwritingResultsVo.setUnderwritingResult("重新核保异常:" + e.getMessage());
|
|
|
+ underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.STAFF_PROCESS);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -255,19 +363,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;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保司订单号已存在,直接进行影像上传
|
|
|
+ doUploadImage(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 +459,8 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
-
|
|
|
});
|
|
|
+ }
|
|
|
|
|
|
|
|
|
// {
|
|
|
@@ -454,9 +584,6 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
|
|
|
// param.setFileType("1fileOrgName01-12-0117429775996580");
|
|
|
// }
|
|
|
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
@Override
|
|
|
public void queryClauseData(ClauseDataVo clauseDataVo) {
|
|
|
|