Explorar o código

诚泰折扣功能的添加

dongxin hai 1 ano
pai
achega
d38da43122

+ 5 - 1
sql/Online.sql

@@ -17,4 +17,8 @@ CREATE TABLE `sys_message`  (
                                 `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '修改者',
                                 `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
                                 PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '核心系统消息列表' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '核心系统消息列表' ROW_FORMAT = Dynamic;
+
+
+ALTER TABLE `agent`.`ins_area_company`
+    ADD COLUMN `extend_info` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '扩展字段' AFTER `code_valid_status`;

+ 2 - 0
src/main/java/com/ydtech/modules/admin/constants/SwitchConfig.java

@@ -37,6 +37,8 @@ public enum SwitchConfig {
     YETX_01("balanceExtract","提现控制(线上或线下)"),
 
     APP_UNDEVELOPED("appUndeveloped", "app未开发完功能隐藏"),
+
+    CT_DISCOUNT_01("ctDiscountFlag", "诚泰自动调整折扣"),
     ;
 
 

+ 6 - 0
src/main/java/com/ydtech/modules/admin/service/SysSwitchConfigService.java

@@ -110,4 +110,10 @@ public interface SysSwitchConfigService extends BaseIService<SysSwitchConfig> {
      * @return
      */
     boolean appUndeveloped();
+
+    /**
+     * 诚泰自动调整折扣开关
+     * @return
+     */
+    boolean ctDiscountSwitches();
 }

+ 5 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysSwitchConfigServiceImpl.java

@@ -203,6 +203,11 @@ public class SysSwitchConfigServiceImpl extends ServiceImpl<SysSwitchConfigMappe
         return isEnabled(SwitchConfig.APP_UNDEVELOPED.getCode());
     }
 
+    @Override
+    public boolean ctDiscountSwitches() {
+        return isEnabled(SwitchConfig.CT_DISCOUNT_01.getCode());
+    }
+
 }
 
 

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

@@ -14,6 +14,7 @@ import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
 import com.ydtech.utils.StringUtils;
 import com.ydtech.utils.idgen.IdGenerate;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -577,6 +578,11 @@ public class InsAreaCompany implements Serializable {
     @TableField(value = "ci_message")
     private String ciMessage;
 
+    /**
+     * 扩展字段
+     */
+    @TableField(value = "extend_info")
+    private Object extendInfo;
     /**
      * 交商含增值服务合并经营成本率 阳光使用
      */
@@ -672,6 +678,14 @@ public class InsAreaCompany implements Serializable {
         if (StringUtils.isNotEmpty(quoteRespVo.getIszdj())) {
             this.isDjq = quoteRespVo.getIszdj();
         }
+        if(StringUtils.isNotBlank(quoteRespVo.getInitialProposalDiscount())
+                && StringUtils.isNotBlank(quoteRespVo.getExpectedDiscount())){
+            JSONObject discountJson = new JSONObject();
+            discountJson.put("initDiscount", quoteRespVo.getInitialProposalDiscount());
+            discountJson.put("hopeDiscount", quoteRespVo.getExpectedDiscount());
+            discountJson.put("hopeCoefficient", quoteRespVo.getPricingCoefficient());
+            this.extendInfo = discountJson.toJSONString();
+        }
     }
 
     public void setPaymentLink(String paymentLink) {

+ 19 - 9
src/main/java/com/ydtech/modules/order/entity/api/chengtai/request/InsurePremiumRequest.java

@@ -2,20 +2,19 @@ package com.ydtech.modules.order.entity.api.chengtai.request;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ArrayUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ydtech.constants.enums.InsuranceRisk;
 import com.ydtech.exception.SystemException;
-import com.ydtech.modules.admin.model.vo.PersonAreaVo;
 import com.ydtech.modules.ins.model.vo.CarInfoVo;
 import com.ydtech.modules.ins.model.vo.CustomerInfoVo;
 import com.ydtech.modules.ins.model.vo.KindInfoVo;
 import com.ydtech.modules.ins.model.vo.RiskInfoVo;
 import com.ydtech.modules.order.constants.InsuranceTypeCorrespondence;
 import com.ydtech.modules.order.entity.InsDrivingIntentionInsurance;
-import com.ydtech.modules.order.entity.InsDrivingIntentionInsuranceSon;
 import com.ydtech.modules.order.entity.api.chengtai.constants.*;
 import com.ydtech.modules.order.entity.api.chengtai.response.CarInfoResponse;
-import com.ydtech.modules.order.entity.api.chengtai.response.InsurePremiumResponse;
 import com.ydtech.modules.order.entity.api.chengtai.response.QueryCarActualValueResponse;
 import com.ydtech.modules.order.entity.config.ChengTaiConfigureParameters;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
@@ -85,7 +84,7 @@ public class InsurePremiumRequest extends ChengTaiBaseRequest{
         // 商业险
         Boolean isSy = InsuranceRisk.getFlagByBUSINESS(quoteInfoVo.getRiskList());
         if (isSy){
-            BiContractDTO biContract = new BiContractDTO(quoteInfoVo,carActualValueResponse.getActualValue());
+            BiContractDTO biContract = new BiContractDTO(quoteInfoVo,carActualValueResponse.getActualValue(),quoteVo);
             this.biContract = biContract;
         }
         // 意外险
@@ -226,10 +225,10 @@ public class InsurePremiumRequest extends ChengTaiBaseRequest{
         @JsonProperty("platFormMessage")
         private PlatFormMessageDTO platFormMessage;
 
-        public BiContractDTO(BaseQuoteInfoVo quoteInfoVo,BigDecimal actualValue){
+        public BiContractDTO(BaseQuoteInfoVo quoteInfoVo, BigDecimal actualValue, BaseQuoteVo<InsDrivingIntentionInsurance> quoteVo){
             boolean isNewEnergy = quoteInfoVo.getCarInfo().isNewEnergy();
             // 险种信息
-            ContractMainDTO contractMain = new ContractMainDTO(quoteInfoVo,isNewEnergy);
+            ContractMainDTO contractMain = new ContractMainDTO(quoteInfoVo,isNewEnergy,quoteVo);
             this.contractMain = contractMain;
             // 投保险别列表
             this.coverage = CoverageDTO.toCoverageList(isNewEnergy,quoteInfoVo,actualValue);
@@ -310,9 +309,9 @@ public class InsurePremiumRequest extends ChengTaiBaseRequest{
         @Data
         public static class ContractMainDTO {
             @JsonProperty("hopeCoefficient")
-            private Integer hopeCoefficient;
+            private Double hopeCoefficient;
             @JsonProperty("hopeDiscount")
-            private Integer hopeDiscount;
+            private Double hopeDiscount;
             @JsonProperty("lastYearPolicyNo")
             private String lastYearPolicyNo;
             @JsonProperty("othBusinessNo")
@@ -330,7 +329,7 @@ public class InsurePremiumRequest extends ChengTaiBaseRequest{
             @JsonProperty("expiryDate")
             private String expiryDate;
 
-            public ContractMainDTO(BaseQuoteInfoVo quoteInfoVo,boolean isNewEnergy){
+            public ContractMainDTO(BaseQuoteInfoVo quoteInfoVo, boolean isNewEnergy, BaseQuoteVo<InsDrivingIntentionInsurance> quoteVo){
                 if(isNewEnergy){
                     this.riskCode = RiskCodeEnum.R0825.getCode();
                     this.riskName = RiskCodeEnum.R0825.getDesc();
@@ -348,6 +347,17 @@ public class InsurePremiumRequest extends ChengTaiBaseRequest{
                         this.renewalFlag = "0";
                     }
                 }
+                String discount = quoteVo.getDiscount();
+                String coefficient = quoteVo.getCoefficient();
+                if(StringUtils.isNotBlank(discount)){
+                    // 获取商业险的初始建议折扣 和 期望折扣
+                    Double hopeDiscount = Double.parseDouble(discount); // 期望折扣
+                    this.hopeDiscount = hopeDiscount;
+                }else if(StringUtils.isNotBlank(coefficient)){
+                    // 获取商业险的初始建议折扣 和 期望折扣
+                    Double hopeCoefficient = Double.parseDouble(coefficient); // 期望折扣
+                    this.hopeCoefficient = hopeCoefficient;
+                }
             }
         }
 

+ 0 - 1
src/main/java/com/ydtech/modules/order/entity/vo/BaseQuoteVo.java

@@ -98,7 +98,6 @@ public class BaseQuoteVo<T> {
     @ApiModelProperty("商业续保")
     private String syRenewal;
 
-
     @ApiModelProperty("交强保单号")
     private String jqpolicyno;
 

+ 6 - 0
src/main/java/com/ydtech/modules/order/entity/vo/OrderVo.java

@@ -358,6 +358,12 @@ public class OrderVo implements Serializable {
      * 扩展字段
      */
     private Object ExtendInfo;
+
+    /**
+     * 扩展字段
+     */
+    private Object extendInfo1;
+
     /**
      * 费用审核状态
      */

+ 44 - 4
src/main/java/com/ydtech/modules/order/service/impl/ChengTaiOrderApiServiceImpl.java

@@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.mchange.lang.DoubleUtils;
 import com.ydtech.constants.enums.InsuranceOrderPdf;
 import com.ydtech.constants.enums.InsuranceRisk;
 import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
@@ -15,6 +16,7 @@ import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.model.vo.PersonAreaVo;
 import com.ydtech.modules.admin.service.SysAreaService;
+import com.ydtech.modules.admin.service.SysSwitchConfigService;
 import com.ydtech.modules.ins.model.vo.*;
 import com.ydtech.modules.order.components.ConfigureParametersComponents;
 import com.ydtech.modules.order.components.InsImagesUploadCacheComponents;
@@ -75,6 +77,9 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
     @Autowired
     private InsOrdersService insOrdersService;
 
+    @Autowired
+    private SysSwitchConfigService switchConfigService;
+
     @Autowired
     private InsAreaCompanyService insAreaCompanyService;
 
@@ -136,7 +141,7 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
         /** 4. 报价 */
         InsurePremiumRequest insurePremiumRequest = new InsurePremiumRequest(quoteInfoVo,carModelListDTO, carActualValueResponse,parameters,quoteVo);
         // 重复报价
-        InsurePremiumResponse insurePremiumResponse = this.getResponse(insurePremiumRequest, httpHeaders,quoteInfoVo, quoteVo.getCompanyId(),maxQuoteNum,sysQuoteRecords);
+        InsurePremiumResponse insurePremiumResponse = this.getResponse(insurePremiumRequest, httpHeaders,quoteInfoVo, quoteVo,maxQuoteNum,sysQuoteRecords);
 
         String message = "";
         if(!ResponseCode.R_000.getCode().equals(insurePremiumResponse.getCode())){
@@ -202,14 +207,14 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
      * @return
      */
     private InsurePremiumResponse getResponse(InsurePremiumRequest insurePremiumRequest, HttpHeaders httpHeaders,BaseQuoteInfoVo quoteInfoVo,
-                                              String companyId,Integer maxQuoteNum,List<SysQuoteRecord> sysQuoteRecords) throws Exception {
+                                              BaseQuoteVo<InsDrivingIntentionInsurance> quoteVo ,Integer maxQuoteNum,List<SysQuoteRecord> sysQuoteRecords) throws Exception {
 
         InsurePremiumResponse insurePremiumResponse = chengTaiRequestApiComponents.quoteApi(insurePremiumRequest,httpHeaders);
         maxQuoteNum--;
         if(!ResponseCode.R_000.getCode().equals(insurePremiumResponse.getCode()) && insurePremiumResponse.getMessage().contains("重复投保")){
             // 交强险 商业险 重复投保处理
             this.repetitionInsure(insurePremiumResponse,insurePremiumRequest);
-            SysQuoteRecord sysQuoteRecord = new SysQuoteRecord(quoteInfoVo.getUserid(),companyId,quoteInfoVo.getCarInfo().getLicenseNo(),
+            SysQuoteRecord sysQuoteRecord = new SysQuoteRecord(quoteInfoVo.getUserid(),quoteVo.getCompanyId(),quoteInfoVo.getCarInfo().getLicenseNo(),
                     QuoteNumberConstant.QuoteAction.DATE_DEAL.getCode().toString(),QuoteNumberConstant.QuoteResult.FAIL.getCode().toString());
             sysQuoteRecords.add(sysQuoteRecord);
             if(maxQuoteNum <= 0){
@@ -221,10 +226,12 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
         // 转保车处理
         InsurePremiumResponse.BiContractDTO biContract = insurePremiumResponse.getBiContract();
         InsurePremiumResponse.CiContractDTO ciContract = insurePremiumResponse.getCiContract();
+
         Double biTotalPremium = null;
         Double ciTotalPremium = null;
         Boolean biBoo = false;
         Boolean ciBoo = false;
+        Boolean biDiscountBoo = false;
         if(Objects.nonNull(biContract)){
             biTotalPremium = biContract.getContractMain().getTotalPremium();
             if(Objects.isNull(biTotalPremium)){
@@ -237,6 +244,25 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
                 ciBoo = true;
             }
         }
+
+        if(switchConfigService.ctDiscountSwitches()){ //是否自动计算折扣
+            String EntireInitialDiscountStr = biContract.getDiscountInfo().getEntireInitialDiscount();
+            String hopeDiscountStr = biContract.getContractMain().getHopeDiscount();
+//            String hopeCoefficientStr = biContract.getContractMain().getHopeCoefficient();
+            if(StringUtils.isNotBlank(hopeDiscountStr) && StringUtils.isNotBlank(EntireInitialDiscountStr)){
+                // 获取商业险的初始建议折扣 和 期望折扣
+                Double entireInitialDiscount = Double.parseDouble(EntireInitialDiscountStr); //初始建议折扣
+                Double hopeDiscount = Double.parseDouble(hopeDiscountStr); // 期望折扣
+                if(entireInitialDiscount > hopeDiscount){
+                    biDiscountBoo = true;
+                }
+                if(biDiscountBoo){
+                    this.replaceDiscount(insurePremiumRequest,entireInitialDiscount);
+                    insurePremiumResponse = chengTaiRequestApiComponents.quoteApi(insurePremiumRequest,httpHeaders);
+                }
+            }
+        }
+
         if (biBoo || ciBoo) {
             this.platRepetition(biContract,ciContract,insurePremiumRequest);
             insurePremiumResponse = chengTaiRequestApiComponents.quoteApi(insurePremiumRequest,httpHeaders);
@@ -249,6 +275,14 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
         return insurePremiumResponse;
     }
 
+    private void replaceDiscount(InsurePremiumRequest insurePremiumRequest, Double entireInitialDiscount) {
+        InsurePremiumRequest.BiContractDTO biContractReq = insurePremiumRequest.getBiContract();
+        if(Objects.nonNull(biContractReq)){
+            InsurePremiumRequest.BiContractDTO.ContractMainDTO mainDTO =  biContractReq.getContractMain();
+            mainDTO.setHopeDiscount(entireInitialDiscount);
+        }
+    }
+
     /**
      * 错误字符替换
      * @param insurePremiumRequest
@@ -468,6 +502,12 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
         if(Objects.nonNull(insurePremiumResponse.getBiContract())){
             InsurePremiumResponse.BiContractDTO.ContractMainDTO biContractMain = insurePremiumResponse.getBiContract().getContractMain();
             syPremium = biContractMain.getTotalPremium();
+            String hopeDiscount = biContractMain.getHopeDiscount();
+            String hopeCoefficient = biContractMain.getHopeCoefficient();
+            String entireInitialDiscount = insurePremiumResponse.getBiContract().getDiscountInfo().getEntireInitialDiscount();
+            quoteRespVo.setInitialProposalDiscount(entireInitialDiscount);
+            quoteRespVo.setExpectedDiscount(hopeDiscount);
+            quoteRespVo.setPricingCoefficient(hopeCoefficient);
             quoteRespVo.setStartDateSy(biContractMain.getValidDate());
             quoteRespVo.setEndDateSy(biContractMain.getExpiryDate());
         }
@@ -982,7 +1022,7 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
         String jqPath =  getPdfUrl(insAreaCompany, insOrders,InsuranceRisk.TRAFFIC_CODE,PolicyPrintVo.PolicyPrintType.PPT_2.getCode(),insAreaCompany.getJqpolicyno(),flag);
         String syPath = getPdfUrl(insAreaCompany,insOrders,InsuranceRisk.BUSINESS_CODE,PolicyPrintVo.PolicyPrintType.PPT_2.getCode(), insAreaCompany.getSypolicyno(),flag);
         String jyPath = getPdfUrl(insAreaCompany,insOrders,InsuranceRisk.ACCIDENT_CODE,PolicyPrintVo.PolicyPrintType.PPT_2.getCode(), jypolicyno,flag);
-        InsAreaCompanyExternalPolicy insAreaCompanyExternalPolicy =new InsAreaCompanyExternalPolicy(insAreaCompany.getId(),jqPath,syPath,jyPath,null);
+        InsAreaCompanyExternalPolicy insAreaCompanyExternalPolicy = new InsAreaCompanyExternalPolicy(insAreaCompany.getId(),jqPath,syPath,jyPath,null);
         return new ReadPdfUrlListDto(insAreaCompanyExternalPolicy,insAreaCompany,null);
     }
 

+ 2 - 1
src/main/resources/mapper/modules/order/InsOrdersMapper.xml

@@ -253,7 +253,8 @@
                iac.agreement_id,
                o.entry_status,
                eic.namesimple as partnerCompaniesName,
-               iac.merge_cost_rate
+               iac.merge_cost_rate,
+               iac.extend_info as extendInfo1
         from ins_orders as o
                  join ins_area_company iac on o.orderno = iac.orderno
                  LEFT JOIN ptl_agreement pa ON pa.id = iac.agreement_id