Przeglądaj źródła

解决紫金保险公司报价接口、上传文件接口和核保接口的异常信息

jiakai 4 miesięcy temu
rodzic
commit
b218a32b58

+ 5 - 0
commons/src/main/java/com/jzg/commons/entity/quote/vo/AccidentalDrivingVo.java

@@ -21,6 +21,11 @@ public class AccidentalDrivingVo implements Serializable {
     @Serial
     private static final long serialVersionUID = -4823674553515932817L;
 
+    /**
+     * 险种编码
+     */
+    @Schema(description = "驾意险id")
+    private String id;
     /**
      * 险种编码
      */

+ 9 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/PlatformClient.java

@@ -9,6 +9,7 @@ import com.jzg.commons.entity.po.QrBarcodeConfig;
 import com.jzg.commons.entity.po.SysUploadFiles;
 import com.jzg.commons.entity.vo.CompanyClauseVo;
 import com.jzg.commons.entity.vo.InsCompanyClauseVo;
+import com.jzg.commons.entity.vo.JyxConfigVo;
 import io.swagger.v3.oas.annotations.Operation;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.http.MediaType;
@@ -126,4 +127,12 @@ public interface PlatformClient {
     @PostMapping("/esmInsCompany/getParentIds")
     HttpResult getParentIds(@RequestBody List<String> companyIds);
 
+    /**
+     * 查询驾意险的信息
+     *
+     * @return
+     */
+    @GetMapping("/jyxConfig/getById")
+    HttpResult<JyxConfigVo> jyxConfigGetById(@RequestParam String id);
+
 }

+ 32 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/constant/enums/AccidentHealthInsuranceProductsEnum.java

@@ -0,0 +1,32 @@
+package com.jzg.quotation.zijin.api.constant.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @description: 关联单标识
+ * @author: wenks
+ * @date: 2023/9/20 9:19
+ **/
+
+@Getter
+@AllArgsConstructor
+public enum AccidentHealthInsuranceProductsEnum {
+    /**
+     * 紫金驾乘人意外伤害保险
+     */
+    ZIJIN_CHENGJIA_REN_ACCIDENT("0737", "紫金驾乘人意外伤害保险"),
+
+    /**
+     * 紫金驾驶人意外伤害保险
+     */
+    ZIJIN_JIASHI_REN_ACCIDENT("0733", "紫金驾驶人意外伤害保险"),
+
+    /**
+     * 紫金驾乘人员人生意外保险
+     */
+    ZIJIN_CHENGJIA_PERSONNEL_ACCIDENT("0767", "紫金驾乘人员人生意外保险");
+
+    private final String code;
+    private final String name;
+}

+ 108 - 0
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/constant/enums/FileTypeEnum.java

@@ -0,0 +1,108 @@
+package com.jzg.quotation.zijin.api.constant.enums;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+
+@AllArgsConstructor
+@Getter
+public enum FileTypeEnum {
+
+    /**
+     * 验车照片
+     */
+    YAN_CHE_ZHAO_PIAN("1", "验车照片"),
+    /**
+     * 其他车辆证件
+     */
+    QI_TA_CHE_LIANG_ZHENG_JIAN("2", "其他车辆证件"),
+    /**
+     * 其他客户证件
+     */
+    QI_TA_KE_HU_ZHENG_JIAN("3", "其他客户证件"),
+    /**
+     * 车辆购置证明
+     */
+    CHE_LIANG_GOU_ZHI_ZHENG_MING("4", "车辆购置证明"),
+    /**
+     * 过户证明
+     */
+    GUO_HU_ZHENG_MING("5", "过户证明"),
+    /**
+     * 退保证明
+     */
+    TUI_BAO_ZHENG_MING("6", "退保证明"),
+    /**
+     * 单证
+     */
+    DAN_ZHENG("7", "单证"),
+    /**
+     * 申请书
+     */
+    SHEN_QING_SHU("8", "申请书"),
+    /**
+     * 其他
+     */
+    QI_TA("9", "其他"),
+    /**
+     * OA审批
+     */
+    OA_SHEN_PI("16", "OA审批"),
+    /**
+     * 实名缴费证明
+     */
+    SHI_MING_JIAO_FEI_ZHENG_MING("19", "实名缴费证明"),
+    /**
+     * 银行卡
+     */
+    YIN_HANG_KA("51", "银行卡"),
+    /**
+     * 驾驶证
+     */
+    JIA_SHI_ZHENG("52", "驾驶证"),
+    /**
+     * 身份证
+     */
+    SHEN_FEN_ZHENG("53", "身份证"),
+    /**
+     * 增值税发票
+     */
+    ZENG_ZHI_SHUI_FA_PIAO("54", "增值税发票"),
+    /**
+     * 车辆合格证
+     */
+    CHE_LIANG_HE_GE_ZHENG("55", "车辆合格证"),
+    /**
+     * 行驶证
+     */
+    XING_SHI_ZHENG("56", "行驶证"),
+    /**
+     * 充电桩影像资料
+     */
+    CHONG_DIAN_ZHUANG_YING_XIANG_ZI_LIAO("41", "充电桩影像资料"),
+    /**
+     * 是否为新能源证明材料
+     */
+    SHI_FOU_WEI_XIN_NENG_YUAN_ZHENG_MING_CAI_LIAO("42", "是否为新能源证明材料"),
+    /**
+     * 授权委托书
+     */
+    SHOU_QUAN_WEI_TUO_SHU("30", "授权委托书"),
+    /**
+     * 完税凭证
+     */
+    WAN_SHUI_PING_ZHENG("31", "完税凭证"),
+    /**
+     * 电子投保单
+     */
+    DIAN_ZI_TOU_BAO_DAN("10", "电子投保单"),
+    /**
+     * 社会统一信用代码证
+     */
+    SHE_HUI_TONG_YI_XIN_YONG_DAI_MA_ZHENG("57", "社会统一信用代码证");
+
+    private final String code;
+    private final String name;
+
+}

+ 110 - 6
tenant/insurance/quotation-zijin/src/main/java/com/jzg/quotation/zijin/api/service/Impl/ZiJinApiRequestImpl.java

@@ -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());
+        }
+    }
 }