Browse Source

报价失败 重复投保 添加

785834757 1 year ago
parent
commit
97aac6e236

+ 7 - 0
src/main/java/com/ydtech/constants/enums/dict/InsOrderStatusEnum.java

@@ -26,6 +26,13 @@ public enum InsOrderStatusEnum implements IBaseEnum {
 
     //人工核保退回状态,直至再次提交核保,状态修改为待核保
     TO_BACK("4", "核保退回", 6, 0),
+
+    //报价失败
+    QUOTE_FAILED("10","报价失败",8,0),
+
+    //重复投保
+    REPEAT_INSURE("11","重复投保",9,0)
+
     //撤回二维码
 //    BACK_QR_CODE("5", "撤销二维码", 7, 0),
     ;

+ 3 - 0
src/main/java/com/ydtech/modules/order/aop/aspect/QuoteVerificationAspect.java

@@ -135,6 +135,9 @@ public class QuoteVerificationAspect {
                     }
 
                 }else{
+                    //将匹配失败的费用日志存储
+                    insAreaCompanyService.updateFeeMatchErrMsg(result.getData().getCompanyId(),logs.toString());
+
                     //输出费用匹配失败日志
                     result.getData().setFeeNoDescription(logs.toString());
                 }

+ 3 - 1
src/main/java/com/ydtech/modules/order/components/zijin/ZijinDuplicateInsuranceComponents.java

@@ -103,7 +103,9 @@ public class ZijinDuplicateInsuranceComponents extends ResponseMessageAbstractHa
         }
 
         if (jqEndDate.isEmpty() && syEndDate.isEmpty()) {
-            throw new SystemException(rtnMsg);
+            // 修改 需要在外部获取异常信息
+            return calculatePremiumResponse;
+//            throw new SystemException(rtnMsg);
         }
         repeatNumber -= 1;
         baseInfo.setTrafficTime(jqEndDate);

+ 10 - 0
src/main/java/com/ydtech/modules/order/entity/InsAreaCompany.java

@@ -513,6 +513,16 @@ public class InsAreaCompany implements Serializable {
     @TableField("order_source")
     private Integer orderSource;
 
+    //费用匹配信息
+    @TableField("fee_match_err_msg")
+//    @TableField(exist = false)
+    private String feeMatchErrMsg;
+
+    //报价错误信息
+    @TableField("quote_err_msg")
+//    @TableField(exist = false)
+    private String quoteErrMsg;
+
     /**
      * 0 删除 1 正常
      * 删除订单

+ 13 - 0
src/main/java/com/ydtech/modules/order/entity/vo/InsOrdersEditingVo.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.modules.ins.model.vo.AccidentResponseVo;
 import com.ydtech.modules.ins.model.vo.QuoteKindRespVo;
 import com.ydtech.modules.ins.model.vo.QuoteRiskRespVo;
@@ -252,6 +253,15 @@ public class InsOrdersEditingVo extends InsOrders implements Serializable {
         @ApiModelProperty("驾意险名称")
         private String jyName;
 
+        @ApiModelProperty("费用匹配信息")
+        private String feeMatchErrMsg;
+
+        @ApiModelProperty("报价错误信息")
+        private String quoteErrMsg;
+
+        @ApiModelProperty("状态信息")
+        private String orderStatusInfo;
+
         public void feeVacant() {
             this.jqExportFee = null;
             this.syExportFee = null;
@@ -295,6 +305,9 @@ public class InsOrdersEditingVo extends InsOrders implements Serializable {
             this.jqLossRation = insAreaCompany.getJqLossRation();
             this.syLossRation = insAreaCompany.getSyLossRation();
             this.ubiPredictedInfoScore = insAreaCompany.getUbiPredictedInfoScore();
+            this.feeMatchErrMsg = insAreaCompany.getFeeMatchErrMsg();
+            this.quoteErrMsg = insAreaCompany.getQuoteErrMsg();
+            this.orderStatusInfo = InsOrderStatusEnum.matchKey(insAreaCompany.getOrderstatus()).getDesc();
         }
     }
 

+ 8 - 0
src/main/java/com/ydtech/modules/order/service/InsAreaCompanyService.java

@@ -259,4 +259,12 @@ public interface InsAreaCompanyService extends IService<InsAreaCompany> {
      *  @Description: 财务查询所有的驳回订单数据
      */
     Page<InsAreaCompany> getAllRejectOrders(Page page, RejectPageQueryVo rejectPageQueryVo);
+
+    /**
+     * 更新费用匹配失败的日志
+     * @param companyId
+     * @param feeMatchErrMsg
+     * @return
+     */
+    boolean updateFeeMatchErrMsg(String companyId,String feeMatchErrMsg);
 }

+ 8 - 0
src/main/java/com/ydtech/modules/order/service/InsOrdersService.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.order.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.ins.model.InsOrdersExcelVo;
@@ -17,6 +18,7 @@ import com.ydtech.modules.order.entity.vo.*;
 import com.ydtech.modules.order.entity.vo.telemarketing.TelemarketingAuditOrderQueryVo;
 import com.ydtech.modules.order.entity.vo.zj.ZjQuoteAccidentVo;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
 
 import java.util.List;
 
@@ -273,4 +275,10 @@ public interface InsOrdersService extends IService<InsOrders> {
      */
     List<String> queryInsuredInOrder(QueryLicenseInOrderVo queryInsuredInOrderVo);
 
+    /**
+     * 生成失败订单数据
+     * @return
+     */
+    boolean responseFailedOrder(BaseQuoteVo quoteVo, PtlAgreementAttribution ptlAgreementAttribution, InsOrders insOrder, String errorMessage, InsOrderStatusEnum statusEnum);
+
 }

+ 6 - 0
src/main/java/com/ydtech/modules/order/service/impl/BoHaiOrderApiServiceImpl.java

@@ -192,6 +192,12 @@ public class BoHaiOrderApiServiceImpl implements BoHaiOrderApiService {
                         throw new SystemException(response.getResponseMsg());
                     }
                 } else {
+                    InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
+                    InsOrders byId = insOrdersService.getById(quoteVo.getOrderNo());
+                    if(responseMsg.contains("重复投保")){
+                        insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
+                    }
+                    insOrdersService.responseFailedOrder(quoteVo,ptlAgreementAttribution,byId,responseMsg,insOrderStatusEnum);
                     throw new SystemException(responseMsg);
                 }
                 // add by hxl  2024-04-07  报价接口报错  算费微服务返回报错信息_保信返回错误信息:录入的校验码有误

+ 8 - 0
src/main/java/com/ydtech/modules/order/service/impl/DaJiaOrderServiceImpl.java

@@ -262,6 +262,14 @@ public class DaJiaOrderServiceImpl implements DaJiaOrderService {
                 HttpResult<QuoteRespVo> quoteRespVoHttpResult = responseOrder(odr1009Response, quoteRespVo, ptlAgreementAttribution, orderNo, quoteInfoVo, busiId, nvhlodr1001Response, insAreaCompanyAccidentalDriving);
                 return quoteRespVoHttpResult;
             } else {
+                String errorMessage = odr1009Response.getResult().getJqAppStatusMessage().toString() + odr1009Response.getResult().getSyAppStatusMessage().toString();
+                //如果错误信息中存在重复投保则订单状态置为重复投保
+                InsOrderStatusEnum orderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
+                if(odr1009Response.getResult().getJqAppStatusMessage().toString().contains("重复投保")) {
+                    orderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
+                }
+                insOrdersService.responseFailedOrder(t,ptlAgreementAttribution, insOrders, errorMessage, orderStatusEnum);
+
                 if (Message.M0003.getCode().equals(odr1009Response.getStatus())) {
                     return HttpResult.error("报价失败,原因:" + odr1009Response.getMessage());
                 }

+ 16 - 7
src/main/java/com/ydtech/modules/order/service/impl/GuorenOrderApiServiceImpl.java

@@ -271,8 +271,21 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
         // 特别约定
         List<GuoRenSpecialAgreementVo> specialAgreementVo = quoteVo.getGuoRenSpecialAgreementVo();
         // 4、保费计算
-        PremiumResp.DataDTO premiumResult = premiumQuery(yaQuoteInfoVo, carPriceResult, vinQ, isNoCar,
+        PremiumResp resp = premiumQuery(yaQuoteInfoVo, carPriceResult, vinQ, isNoCar,
                 specialAgreementVo, noCarPremium, goodsCode);
+
+        if (resp.getResultCode() == 1) {
+            InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
+            if(resp.getResultMsg().contains("重复投保"))
+            {
+                insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
+            }
+            PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(quoteVo.getAgreementId());
+            insOrdersService.responseFailedOrder(quoteVo,ptlAgreementAttribution, order,resp.getResultMsg(),insOrderStatusEnum);
+            throw new SystemException(resp.getResultMsg() == null ? "保费计算失败,请联系管理员" : resp.getResultMsg());
+        }
+
+        PremiumResp.DataDTO premiumResult = resp.getData();
         AssertionUtils.isEmpty(premiumResult, "保费计算失败");
 
         // 5、 生成订单
@@ -1067,7 +1080,7 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
     /**
      * 保费计算
      */
-    public PremiumResp.DataDTO premiumQuery(BaseQuoteInfoVo yaQuoteInfoVo,
+    public PremiumResp premiumQuery(BaseQuoteInfoVo yaQuoteInfoVo,
                                             CarPriceResp.DataDTO carPriceResult,
                                             VinQueryResp.DataDTO vinQ,
                                             boolean isNoCar,
@@ -1110,11 +1123,7 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
         resp.getData().setBiStartDate(req.getBi().getPrpTmain().getStartDate());
         resp.getData().setBiEndDate(req.getBi().getPrpTmain().getEndDate());
 
-        if (resp.getResultCode() == 1) {
-            throw new SystemException(resp.getResultMsg() == null ? "保费计算失败,请联系管理员" : resp.getResultMsg());
-        }
-        return resp.getData();
-
+        return resp;
     }
 
 

+ 7 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsCrawlerOrderServiceImpl.java

@@ -135,6 +135,13 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
         CrawlerQuoteResponse response = insCrawlerOrderComponents.request(apiUrl, ptlAgreementAttribution.getInsCompanyId(),
                 PtlCrawlerApiType.API_2.getDesc(), crawlerQuoteRequest, CrawlerQuoteResponse.class);
         if (response.getCode() != 200) {
+            InsOrders order = insOrdersService.getById(t.getOrderNo());
+            //判断错误订单是否是重复投保
+            InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
+            if(response.getMessage().contains("重复投保")){
+                insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
+            }
+            insOrdersService.responseFailedOrder(t,ptlAgreementAttribution,order,response.getMessage(),insOrderStatusEnum);
             throw new SystemException(response.getMessage());
         }
 

+ 41 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ydtech.modules.order.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -31,6 +32,7 @@ import com.ydtech.modules.admin.model.dto.SysUserLinkPtlAgreementDto;
 import com.ydtech.modules.admin.model.po.SysUserIsDial;
 import com.ydtech.modules.admin.service.*;
 import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.esm.model.EsmInsCompany;
 import com.ydtech.modules.esm.model.EsmUserReferrer;
 import com.ydtech.modules.esm.service.EsmUserReferrerService;
 import com.ydtech.modules.fee.service.CostsCalcService;
@@ -66,6 +68,7 @@ import com.ydtech.modules.order.service.*;
 import com.ydtech.modules.protocol.entity.constants.PtlApiType;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
 import com.ydtech.modules.protocol.entity.po.PtlAgreement;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
 import com.ydtech.modules.protocol.service.PtlAgreementService;
 import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
 import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
@@ -2030,6 +2033,44 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         return baseMapper.queryInsured(queryInsuredInOrderVo, userId);
     }
 
+    @Override
+    public boolean responseFailedOrder(BaseQuoteVo quoteVo, PtlAgreementAttribution ptlAgreementAttribution, InsOrders insOrder, String errorMessage, InsOrderStatusEnum statusEnum) {
+
+        //保存订单信息
+        InsAreaCompany insAreaCompany = new InsAreaCompany();
+        insAreaCompany.setEntryStatus(insOrder.getEntryStatus());
+        insAreaCompany.setOrderno(insOrder.getOrderno());
+        insAreaCompany.setApiType(PtlApiType.PTL_API_1.getCode());
+        insAreaCompany.setOrderstatus(statusEnum.getCode());
+        insAreaCompany.setCreatetime(LocalDateTime.now());
+        insAreaCompany.setCompanyId(quoteVo.getCompanyId());
+        insAreaCompany.setInscompany(ptlAgreementAttribution.getInsCompanyName());
+        insAreaCompany.setAgreementId(quoteVo.getAgreementId());
+
+        insAreaCompany.setJqStartDate(insOrder.getJqstartdate());
+        insAreaCompany.setJqEndDate(insOrder.getJqenddate());
+        insAreaCompany.setSyStartDate(insOrder.getSystartdate());
+        insAreaCompany.setSyEndDate(insOrder.getSyenddate());
+
+        if (CollUtil.isEmpty(quoteVo.getRisks())) {
+            insAreaCompany.setRiskinfo(new JSONArray());
+        } else {
+            insAreaCompany.setRiskinfo(JSON.parseArray(JSON.toJSONString(quoteVo.getRisks())));
+        }
+
+        if (CollUtil.isEmpty(quoteVo.getKinds())) {
+            insAreaCompany.setKindinfo(new JSONArray());
+        } else {
+            insAreaCompany.setKindinfo(JSON.parseArray(JSON.toJSONString(quoteVo.getKinds())));
+        }
+
+        insAreaCompany.setQuoteErrMsg(errorMessage);
+
+        InsAreaCompanyAccidentalDriving insAreaCompanyAccidentalDriving = new InsAreaCompanyAccidentalDriving();
+        insAreaCompanyService.insertCompanyAndOrders(insAreaCompany, insAreaCompanyAccidentalDriving);
+        return true;
+    }
+
     /**
      * 更新订单的起保与终保时间
      */

+ 17 - 6
src/main/java/com/ydtech/modules/order/service/impl/YongchengOrderApiServiceImpl.java

@@ -71,6 +71,8 @@ import com.ydtech.modules.order.entity.vo.*;
 import com.ydtech.modules.order.service.*;
 import com.ydtech.modules.order.utils.InsuranceLog;
 import com.ydtech.modules.protocol.entity.constants.PtlApiType;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
+import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
 import com.ydtech.utils.DateTimeUtil;
 import com.ydtech.utils.StringUtils;
@@ -166,6 +168,9 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
     @Autowired
     private InsSubOrderUpdateDetailService insSubOrderUpdateDetailService;
 
+    @Autowired
+    private PtlAgreementAttributionService ptlAgreementAttributionService;
+
     public void gainVehicleModel(YcConfigureParameters ycConfigureParameters, CarInfoVo carInfo, CoreModelsVo coreModelsVo) {
         CarModel_Req carModelReq = new CarModel_Req();
         carModelReq.setFrameNo(carInfo.getFrameNo());
@@ -318,9 +323,7 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
             //1、商业险重复投保处理
             String sy = commerceRepetitionInsure(rr, m, requestInfoList, appSYFlag);
 
-            if (jq.isEmpty() && sy.isEmpty()) {
-                throw new SystemException(errorMsg);
-            } else {
+            if (!jq.isEmpty() || !sy.isEmpty()) {
                 InsuranceLog.infoLog(InsuranceEnum.AICS.getPinyin(), "\n\n---------> {} - 重复投保处理", vinNo);
                 return this.getResponse(m, vinNo, requestInfoList, yaQuoteInfoVo);
             }
@@ -403,14 +406,22 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
             throw new SystemException(errorInfo.toString());
         }
 
+        //查询订单信息
+        InsOrders order = insOrdersService.getById(yaQuoteInfoVo.getOrderNo());
+
         //报价失败
         if (!"000000".equals(rr.getHead().getErrorCode())) {
+            //保存报价失败的子订单
+            InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
+            if(rr.getHead().getErrorMessage().contains("重复投保"))
+            {
+                insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
+            }
+            PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(quoteVo.getAgreementId());
+            insOrdersService.responseFailedOrder(quoteVo,ptlAgreementAttribution, order,rr.getHead().getErrorMessage(),insOrderStatusEnum);
             return HttpResult.error(rr.getHead().getErrorMessage());
         }
 
-        //查询订单信息
-        InsOrders order = insOrdersService.getById(yaQuoteInfoVo.getOrderNo());
-
         QuoteRespVo quoteRespVo = YcBuildData.buildQuoteRespVo(order, rr, yaQuoteInfoVo);
         //8 生成订单
         InsAreaCompany iac = responseOrder(order, quoteRespVo, rr, quoteVo);

+ 13 - 0
src/main/java/com/ydtech/modules/order/service/impl/ZijinOrderApiServiceImpl.java

@@ -151,6 +151,19 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
         String message = "";
         CalculatePremiumResponse calculatePremiumResponse = zijinRequestApiComponents.calculatePremium(calculatePremiumRequest,
                 httpHeaders, modelQueryRequest, message, queryActualValueRequest, REPEAT_NUMBER, RETRY_NUMBER);
+
+        if(!calculatePremiumResponse.getRtnCode().equals(ResultEnum.C_0000)){
+            QuoteRespVo resp  = new QuoteRespVo();
+            InsOrders order = insOrdersService.getById(quoteVo.getOrderNo());
+            InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
+            if(calculatePremiumResponse.getRtnMsg().contains("重复投保"))
+            {
+                insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
+            }
+            insOrdersService.responseFailedOrder(quoteVo,ptlAgreementAttribution, order,calculatePremiumResponse.getRtnMsg(),insOrderStatusEnum);
+            throw new SystemException(calculatePremiumResponse.getRtnMsg());
+        }
+
         // 警告信息
         QuoteRespVo quoteRespVo = getQuoteRespVo(calculatePremiumResponse, quoteInfoVo, quoteVo.getAccidentalDrivingVo(), isEnergy);
         if (!StringUtils.isEmpty(message)) {

+ 2 - 0
src/main/resources/mapper/modules/order/InsAreaCompanyMapper.xml

@@ -71,6 +71,8 @@
         <result property="syRenewal" column="sy_renewal" jdbcType="VARCHAR"/>
         <result property="jqClaims" column="jq_claims" jdbcType="VARCHAR"/>
         <result property="syClaims" column="sy_claims" jdbcType="VARCHAR"/>
+        <result property="feeMatchErrMsg" column="fee_match_err_msg" jdbcType="VARCHAR"/>
+        <result property="quoteErrMsg" column="quote_err_msg" jdbcType="VARCHAR"/>
 
     </resultMap>