|
|
@@ -1,23 +1,31 @@
|
|
|
package com.jzg.quotation.zijin.api.service.Impl;
|
|
|
|
|
|
import com.jzg.commons.constants.dict.InsOrderStatusEnum;
|
|
|
+import com.jzg.commons.constants.quote.enums.base.InsuranceImageEnum;
|
|
|
+import com.jzg.commons.core.page.HttpResult;
|
|
|
import com.jzg.commons.entity.orders.po.InsOrdersCosts;
|
|
|
-import com.jzg.commons.entity.po.InsCompanyClause;
|
|
|
+import com.jzg.commons.entity.po.JyxConfig;
|
|
|
+import com.jzg.commons.entity.po.SysUploadFiles;
|
|
|
+import com.jzg.commons.entity.quote.vo.AccidentalDrivingVo;
|
|
|
import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
|
|
|
import com.jzg.commons.entity.quote.vo.CarInfoVo;
|
|
|
import com.jzg.commons.entity.quote.vo.QuoteVo;
|
|
|
import com.jzg.commons.entity.quote.vo.aggregated.*;
|
|
|
+import com.jzg.commons.entity.quote.vo.base.OrderBase;
|
|
|
+import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
|
|
|
+import com.jzg.commons.entity.quote.vo.underwriting.SpecialAppointmentsVo;
|
|
|
+import com.jzg.commons.entity.vo.JyxConfigVo;
|
|
|
import com.jzg.commons.exception.SystemException;
|
|
|
+import com.jzg.commons.util.MinioUtils;
|
|
|
import com.jzg.quotation.commons.annotation.QuoteApiService;
|
|
|
import com.jzg.quotation.commons.client.PlatformClient;
|
|
|
import com.jzg.quotation.commons.constant.InsuranceCode;
|
|
|
-import com.jzg.commons.entity.quote.vo.base.OrderBase;
|
|
|
-import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
|
|
|
-import com.jzg.commons.entity.quote.vo.underwriting.SpecialAppointmentsVo;
|
|
|
import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
|
|
|
import com.jzg.quotation.commons.standard.conversion.ConfigureParametersConversion;
|
|
|
import com.jzg.quotation.zijin.api.build.ZiJinAPIQuoteResultsVoBuild;
|
|
|
import com.jzg.quotation.zijin.api.component.ZiJinApiRequestComponent;
|
|
|
+import com.jzg.quotation.zijin.api.constant.enums.AccidentHealthInsuranceProductsEnum;
|
|
|
+import com.jzg.quotation.zijin.api.constant.enums.FileTypeEnum;
|
|
|
import com.jzg.quotation.zijin.api.constant.enums.RiskCodeEnum;
|
|
|
import com.jzg.quotation.zijin.api.entity.ZiJinApiConfigureParameters;
|
|
|
import com.jzg.quotation.zijin.api.entity.constants.enums.BusType;
|
|
|
@@ -27,13 +35,15 @@ import com.jzg.quotation.zijin.api.entity.request.*;
|
|
|
import com.jzg.quotation.zijin.api.entity.response.*;
|
|
|
import com.jzg.quotation.zijin.api.service.ZiJinApiRequest;
|
|
|
import com.jzg.quotation.zijin.api.service.ZiJinOrderService;
|
|
|
-import com.jzg.quotation.zijin.crawler.service.ZiJinCrawlerOrderService;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
+import org.apache.commons.io.IOUtils;
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.http.HttpHeaders;
|
|
|
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.InputStream;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Base64;
|
|
|
import java.util.List;
|
|
|
import java.util.Objects;
|
|
|
|
|
|
@@ -52,6 +62,8 @@ public class ZiJinApiRequestImpl implements ZiJinApiRequest {
|
|
|
|
|
|
private final PlatformClient platformClient;
|
|
|
|
|
|
+ private final MinioUtils minioUtils;
|
|
|
+
|
|
|
|
|
|
// 重复投保次数
|
|
|
private static final int REPEAT_NUMBER = 3;
|
|
|
@@ -75,6 +87,8 @@ public class ZiJinApiRequestImpl implements ZiJinApiRequest {
|
|
|
// 计算车辆价格
|
|
|
QueryActualValueRequest queryActualValueRequest = new QueryActualValueRequest(carInfoVo, vehicleModelInfosDTO.getPurchasePrice(), quoteVo);
|
|
|
QueryActualValueResponse queryActualValueResponse = ziJinApiRequestComponent.queryActualValue(queryActualValueRequest, httpHeaders);
|
|
|
+ // 补全驾意险的参数
|
|
|
+ setAccidentalDriving(quoteVo);
|
|
|
// 报价
|
|
|
CalculatePremiumRequest calculatePremiumRequest = new CalculatePremiumRequest(quoteVo, vehicleModelInfosDTO, queryActualValueResponse.getActualValue(), parameters, modelQueryResponse);
|
|
|
CalculatePremiumResponse calculatePremiumResponse = ziJinApiRequestComponent.calculatePremium(calculatePremiumRequest, httpHeaders,modelQueryRequest,queryActualValueRequest,REPEAT_NUMBER,RETRY_NUMBER);
|
|
|
@@ -219,6 +233,27 @@ public class ZiJinApiRequestImpl implements ZiJinApiRequest {
|
|
|
imageVo
|
|
|
.getImageBase64List()
|
|
|
.forEach(imageBase64 -> {
|
|
|
+ // 只有imageId,根据imageId获取文件流,然后获取base64编码后的文件
|
|
|
+ String imageId = imageBase64.getImageId();
|
|
|
+ // 1. 根据 imageId 获取文件信息
|
|
|
+ SysUploadFiles sysUploadFiles = platformClient.getUploadFile(imageId);
|
|
|
+ String fileName = sysUploadFiles.getFileName();
|
|
|
+ // 2. 从 MinIO 获取文件输入流
|
|
|
+ InputStream inputStream = minioUtils.getObject("jzg", fileName);
|
|
|
+ // 3. 输入流转 byte[] → 再转 Base64
|
|
|
+ byte[] fileBytes = null;
|
|
|
+ try {
|
|
|
+ fileBytes = IOUtils.toByteArray(inputStream);
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ String fileBase64 = Base64.getEncoder().encodeToString(fileBytes);
|
|
|
+ // 组装参数
|
|
|
+ imageBase64.setImageName(fileName);
|
|
|
+ imageBase64.setImageBase64Str(fileBase64);
|
|
|
+ // 文件类型映射
|
|
|
+ fileTypeMapping(imageVo);
|
|
|
+
|
|
|
UploadFileRequest uploadImageRequest = new UploadFileRequest(imageBase64, imageVo.getImageCode(), ziJinApiOrder.getOrderNo());
|
|
|
// 文件上传
|
|
|
UploadFileResponse uploadFileResponse = ziJinApiRequestComponent.uploadFile(uploadImageRequest, httpHeaders);
|
|
|
@@ -320,4 +355,73 @@ public class ZiJinApiRequestImpl implements ZiJinApiRequest {
|
|
|
}
|
|
|
return orderStatusResultVo;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 文件类型映射,从系统定义的值转换成紫金对应的文件类型
|
|
|
+ * @param imageVo
|
|
|
+ */
|
|
|
+ private static void fileTypeMapping(InsuranceImageVo imageVo) {
|
|
|
+ if (InsuranceImageEnum.C01.getCode().equals(imageVo.getImageCode()) || InsuranceImageEnum.D01.getCode().equals(imageVo.getImageCode())) {
|
|
|
+ // 行驶证正面/反面 → 行驶证(56)
|
|
|
+ imageVo.setImageCode(FileTypeEnum.XING_SHI_ZHENG.getCode());
|
|
|
+ } else if (InsuranceImageEnum.C02.getCode().equals(imageVo.getImageCode()) || InsuranceImageEnum.D02.getCode().equals(imageVo.getImageCode())
|
|
|
+ || InsuranceImageEnum.C03.getCode().equals(imageVo.getImageCode()) || InsuranceImageEnum.D03.getCode().equals(imageVo.getImageCode())
|
|
|
+ || InsuranceImageEnum.C04.getCode().equals(imageVo.getImageCode()) || InsuranceImageEnum.D04.getCode().equals(imageVo.getImageCode())) {
|
|
|
+ // 车主/投保人/被保人 身份证正反面 → 身份证(53)
|
|
|
+ imageVo.setImageCode(FileTypeEnum.SHEN_FEN_ZHENG.getCode());
|
|
|
+ } else if (InsuranceImageEnum.Y02.getCode().equals(imageVo.getImageCode()) || InsuranceImageEnum.Y03.getCode().equals(imageVo.getImageCode())
|
|
|
+ || InsuranceImageEnum.Y04.getCode().equals(imageVo.getImageCode())) {
|
|
|
+ // 车主/投保人/被保人 营业执照 → 社会统一信用代码证(57)
|
|
|
+ imageVo.setImageCode(FileTypeEnum.SHE_HUI_TONG_YI_XIN_YONG_DAI_MA_ZHENG.getCode());
|
|
|
+ } else if (InsuranceImageEnum.YHK_01.getCode().equals(imageVo.getImageCode())) {
|
|
|
+ // 银行卡正面 → 银行卡(51)
|
|
|
+ imageVo.setImageCode(FileTypeEnum.YIN_HANG_KA.getCode());
|
|
|
+ } else if (InsuranceImageEnum.XC00.getCode().equals(imageVo.getImageCode())) {
|
|
|
+ // 新车合格证 → 车辆合格证(55)
|
|
|
+ imageVo.setImageCode(FileTypeEnum.CHE_LIANG_HE_GE_ZHENG.getCode());
|
|
|
+ } else if (InsuranceImageEnum.GC00.getCode().equals(imageVo.getImageCode())) {
|
|
|
+ // 购车发票 → 增值税发票(54)
|
|
|
+ imageVo.setImageCode(FileTypeEnum.ZENG_ZHI_SHUI_FA_PIAO.getCode());
|
|
|
+ } else if (InsuranceImageEnum.SQ00.getCode().equals(imageVo.getImageCode())) {
|
|
|
+ // 授权书 → 授权委托书(30)
|
|
|
+ imageVo.setImageCode(FileTypeEnum.SHOU_QUAN_WEI_TUO_SHU.getCode());
|
|
|
+ } else if (InsuranceImageEnum.C0500.getCode().equals(imageVo.getImageCode()) || InsuranceImageEnum.C0501.getCode().equals(imageVo.getImageCode())
|
|
|
+ || InsuranceImageEnum.C0502.getCode().equals(imageVo.getImageCode()) || InsuranceImageEnum.C0503.getCode().equals(imageVo.getImageCode())
|
|
|
+ || InsuranceImageEnum.C0504.getCode().equals(imageVo.getImageCode()) || InsuranceImageEnum.C0505.getCode().equals(imageVo.getImageCode())
|
|
|
+ || InsuranceImageEnum.C0506.getCode().equals(imageVo.getImageCode()) || InsuranceImageEnum.C0507.getCode().equals(imageVo.getImageCode())
|
|
|
+ || InsuranceImageEnum.C0508.getCode().equals(imageVo.getImageCode()) || InsuranceImageEnum.C0509.getCode().equals(imageVo.getImageCode())
|
|
|
+ || InsuranceImageEnum.C0510.getCode().equals(imageVo.getImageCode())) {
|
|
|
+ // 所有验车照 → 验车照片(1)
|
|
|
+ imageVo.setImageCode(FileTypeEnum.YAN_CHE_ZHAO_PIAN.getCode());
|
|
|
+ } else if (InsuranceImageEnum.TAR05.getCode().equals(imageVo.getImageCode())) {
|
|
|
+ // 机动车辆登记证书 → 其他车辆证件(2)
|
|
|
+ imageVo.setImageCode(FileTypeEnum.QI_TA_CHE_LIANG_ZHENG_JIAN.getCode());
|
|
|
+ } else if (InsuranceImageEnum.INSURANCE_POLICY.getCode().equals(imageVo.getImageCode())) {
|
|
|
+ // 上年商业险保单 → 单证(7)
|
|
|
+ imageVo.setImageCode(FileTypeEnum.DAN_ZHENG.getCode());
|
|
|
+ } else if (InsuranceImageEnum.GX00.getCode().equals(imageVo.getImageCode())) {
|
|
|
+ // 关系证明 → 其他(9)
|
|
|
+ imageVo.setImageCode(FileTypeEnum.QI_TA.getCode());
|
|
|
+ } else {
|
|
|
+ // 未匹配到的 → 其他(9)
|
|
|
+ imageVo.setImageCode(FileTypeEnum.QI_TA.getCode());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 补全驾意险的参数
|
|
|
+ * @param quoteVo
|
|
|
+ */
|
|
|
+ private void setAccidentalDriving(QuoteVo quoteVo) {
|
|
|
+ // 默认选中"0767"->"紫金驾乘人员人生意外保险"
|
|
|
+ for (AccidentalDrivingVo accidentalDriving : quoteVo.getAccidentalDrivings()) {
|
|
|
+ accidentalDriving.setRiskCode(AccidentHealthInsuranceProductsEnum.ZIJIN_CHENGJIA_PERSONNEL_ACCIDENT.getCode());
|
|
|
+ accidentalDriving.setRiskName(AccidentHealthInsuranceProductsEnum.ZIJIN_CHENGJIA_PERSONNEL_ACCIDENT.getName());
|
|
|
+ // 查询jyx_config表,拿到总保额和总保费
|
|
|
+ HttpResult<JyxConfigVo> jyxConfigVoHttpResult = platformClient.jyxConfigGetById(accidentalDriving.getId());
|
|
|
+ JyxConfigVo jyxConfigVo = jyxConfigVoHttpResult.getData();
|
|
|
+ accidentalDriving.setSumAmount(jyxConfigVo.getCoverage());
|
|
|
+ accidentalDriving.setSumPremium(jyxConfigVo.getPremium());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|