Browse Source

各种费用跟单存表

cuixinpeng 3 years ago
parent
commit
8b50994209

+ 3 - 10
src/main/java/com/ydtech/modules/fee/service/FeeRuleSchemeService.java

@@ -11,20 +11,13 @@ import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
  * 跟单费用的获取、跟单费用的拆分等
  */
 public interface FeeRuleSchemeService {
-    /**
-     * 根据跟单信息,以及配置的费用因子,获取合适的跟单费用
-     * @param feeSchemeReqDto
-     * @return
-     */
-    public FeeSchemeResDto matchTheAppropriateFees(FeeSchemeReqDto feeSchemeReqDto);
 
     /**
-     * 根据跟单信息,组装费用匹配入参
+     * 总处理费用匹配方法
      * @param quoteInfoVo
      * @param quoteRespVo
      * @param agreementId
-     * @param productId
-     * @return
+     * @param businessNo
      */
-    FeeSchemeReqDto getFeeSchemeInfo(BaseQuoteInfoVo quoteInfoVo, QuoteRespVo quoteRespVo, String agreementId, String productId);
+    public void dealFeeOrderInfo(BaseQuoteInfoVo quoteInfoVo, QuoteRespVo quoteRespVo, String agreementId,String businessNo);
 }

+ 215 - 3
src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceImpl.java

@@ -1,6 +1,14 @@
 package com.ydtech.modules.fee.service.impl;
 
 import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.model.SysDept;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.service.SysDeptService;
+import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.esm.model.EsmRetail;
+import com.ydtech.modules.esm.model.EsmUserReferrer;
+import com.ydtech.modules.esm.service.EsmRetailService;
+import com.ydtech.modules.esm.service.EsmUserReferrerService;
 import com.ydtech.modules.fee.dto.FeeFactorInfoDto;
 import com.ydtech.modules.fee.dto.FeeSchemeReqDto;
 import com.ydtech.modules.fee.dto.FeeSchemeResDto;
@@ -8,13 +16,20 @@ import com.ydtech.modules.fee.service.FeeRuleSchemeService;
 import com.ydtech.modules.ins.model.vo.CarInfoVo;
 import com.ydtech.modules.ins.model.vo.KindInfoVo;
 import com.ydtech.modules.ins.model.vo.QuoteRespVo;
+import com.ydtech.modules.ins.service.InsOrderService;
+import com.ydtech.modules.order.entity.InsFeeOrder;
+import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
+import com.ydtech.modules.order.service.InsFeeOrderService;
+import com.ydtech.modules.order.service.InsOrdersService;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts;
 import com.ydtech.modules.protocol.service.PtlAgreementProductCostsService;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.math.NumberUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -27,6 +42,18 @@ import java.util.Map;
 public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
     @Autowired
     private   PtlAgreementProductCostsService ptlAgreementProductCostsService;
+    @Autowired
+    private InsOrdersService insOrdersService;
+    @Autowired
+    private InsFeeOrderService insFeeOrderService;
+    @Autowired
+    private SysUserService sysUserService;
+    @Autowired
+    private SysDeptService sysDeptService;
+    @Autowired
+    private EsmRetailService esmRetailService;
+    @Autowired
+    private EsmUserReferrerService esmUserReferrerService;
 
     /**
      * 根据跟单信息,以及配置的费用因子,获取合适的跟单费用
@@ -566,8 +593,8 @@ public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
         String isTransfer = "0";
         String isNewCar = "0";
         String isRenewal = "0";
-        String useNature = "";
-        String carType="";
+        String useNature = "家庭自用";
+        String carType="客车";
         String isNewEnergy = "0";
         feeSchemeReqDto.setBusType(productId);//"业务类型:单交0330、单商034001、单三034002、交三0330034002、交商0330034001"
         feeSchemeReqDto.setAgreementId(agreementId);//协议ID
@@ -585,7 +612,7 @@ public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
         feeSchemeReqDto.setIsNewEnergy(isNewEnergy);//是否新能源    1是  0否
         feeSchemeReqDto.setIsRenewal("0");//是否续保    1是  0否    续保取值有争议 默认送否 暂时搁置
         //页面要素及中煤交互请求返参没有,先默认写死
-        if("A0".equals(carInfoVo.getCartype())){
+        if("A0".equals(carInfoVo.getCimodelclass())){
             carType="客车";
         }
         feeSchemeReqDto.setVehicleCategory(carType);//车辆大类: 客车、货车、特种车、挂车、摩托车、拖拉机
@@ -612,4 +639,189 @@ public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
         }
         return feeSchemeReqDto;
     }
+
+    public void dealFeeOrderInfo(BaseQuoteInfoVo quoteInfoVo, QuoteRespVo quoteRespVo, String agreementId,String businessNo){
+        BigDecimal jqNoTaxPremium = new BigDecimal(0);
+        BigDecimal syNoTaxPremium = new BigDecimal(0);
+        InsOrders insOrders = insOrdersService.getById(quoteRespVo.getOrderno());
+        FeeSchemeReqDto feeSchemeReqDto = this.getFeeSchemeInfo(quoteInfoVo,quoteRespVo,agreementId,insOrders.getProductid());
+        FeeSchemeResDto feeSchemeResDto = this.matchTheAppropriateFees(feeSchemeReqDto);
+        InsFeeOrder insFeeOrder = new InsFeeOrder(feeSchemeReqDto,feeSchemeResDto,businessNo);
+        //先通过含税保费计算出不含税保费 公式 总保费/(1+增值税率) 目前增值税率是0.06
+        if(insFeeOrder.getJqPremium().doubleValue()>0){
+            jqNoTaxPremium = insFeeOrder.getJqPremium().divide(new BigDecimal(1+0.06),BigDecimal.ROUND_HALF_UP,2);
+            insFeeOrder.setJqNoTaxPremium(jqNoTaxPremium);
+            //交强险总费用
+            insFeeOrder.setJqCostsPremiums(getPremium(jqNoTaxPremium,insFeeOrder.getJqCostsProportion()));
+            //监管费比例
+            if("1".equals(feeSchemeReqDto.getIsNewCar())){
+                insFeeOrder.setJqSuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getJqNewCarCostsProportion()));
+            }else if("0".equals(feeSchemeReqDto.getIsNewCar())){
+                insFeeOrder.setJqSuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getJqOldCarCostsProportion()));
+            }else{
+                insFeeOrder.setJqSuperviseCostsProportion(new BigDecimal(0));
+            }
+            //监管费
+            insFeeOrder.setJqSuperviseCostsPremiums(getPremium(jqNoTaxPremium,insFeeOrder.getJqSuperviseCostsProportion()));
+            //溢出费比例 先搁置放0
+            insFeeOrder.setJqSpilloverProportion(new BigDecimal(feeSchemeResDto.getJqSpilloverProportion()));
+            //溢出费 先搁置放0
+            insFeeOrder.setJqSpilloverPremiums(getPremium(jqNoTaxPremium,insFeeOrder.getJqSpilloverProportion()));
+        }
+        if(insFeeOrder.getSyPremium().doubleValue()>0){
+            syNoTaxPremium = insFeeOrder.getJqPremium().divide(new BigDecimal(1+0.06),BigDecimal.ROUND_HALF_UP,2);
+            insFeeOrder.setSyNoTaxPremium(syNoTaxPremium);
+            //商业险总费用
+            insFeeOrder.setSyCostsPremiums(getPremium(syNoTaxPremium,insFeeOrder.getJqCostsProportion()));
+            //监管费比例
+            if("1".equals(feeSchemeReqDto.getIsNewCar())){
+                insFeeOrder.setSySuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getJqNewCarCostsProportion()));
+            }else if("0".equals(feeSchemeReqDto.getIsNewCar())){
+                insFeeOrder.setSySuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getJqOldCarCostsProportion()));
+            }else{
+                insFeeOrder.setSySuperviseCostsProportion(new BigDecimal(0));
+            }
+            //监管费
+            insFeeOrder.setSySuperviseCostsPremiums(getPremium(syNoTaxPremium,insFeeOrder.getJqSuperviseCostsProportion()));
+            //溢出费比例 先搁置放0
+            insFeeOrder.setSySpilloverProportion(new BigDecimal(feeSchemeResDto.getJqSpilloverProportion()));
+            //溢出费 先搁置放0
+            insFeeOrder.setSySpilloverPremiums(getPremium(syNoTaxPremium,insFeeOrder.getJqSpilloverProportion()));
+        }
+
+        if(jqNoTaxPremium.doubleValue() >0 || syNoTaxPremium.doubleValue() >0){
+            BigDecimal totalNoTaxPremium = jqNoTaxPremium.add(syNoTaxPremium);
+            SysUser sysUser = sysUserService.findByUserId(insOrders.getUserid());
+            /**
+             * 机构管理费比例逻辑
+             * 当前出单员的机构编码找他的上一级就是五级
+             * 机构层级划分方式
+             * 99 总公司              一级
+             * 9914山西分公司         二级
+             * 991401太原中支         三级
+             * 99140105小店中支       四级
+             * 9914010501 营销服务部  五级
+             *            1团队       无机构层级
+             */
+            SysDept sysDept = sysDeptService.getById(sysUser.getDeptId());
+            if(StringUtils.isNotEmpty(sysDept.getComlevel())){
+                throw new SystemException("当前出单员归属团队有误,请检查机构层级配置!");
+            }
+            //得到五级机构
+            SysDept sysDeptFifth = sysDeptService.getById(sysDept.getParentId());
+            SysDept sysDeptForth = sysDeptService.getById(sysDeptFifth.getParentId());
+            SysDept sysDeptThird = sysDeptService.getById(sysDeptForth.getParentId());
+            SysDept sysDeptSecond = sysDeptService.getById(sysDeptThird.getParentId());
+            SysDept sysDeptFirst = sysDeptService.getById(sysDeptSecond.getParentId());
+            //五级机构管理费用比例
+            if(sysDeptFifth!=null && "5".equals(sysDeptFifth.getComlevel())){
+                insFeeOrder.setFifthDeptProportion(new BigDecimal(sysDeptFifth.getManagementFee()));
+                insFeeOrder.setFifthDeptPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getFifthDeptProportion()));
+            }
+            //四级机构管理费用比例
+            if(sysDeptForth!=null && "4".equals(sysDeptForth.getComlevel())){
+                insFeeOrder.setForthDeptProportion(new BigDecimal(sysDeptForth.getManagementFee()));
+                insFeeOrder.setForthDeptPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getForthDeptProportion()));
+            }
+            //三级机构管理费用比例
+            if(sysDeptThird!=null && "3".equals(sysDeptThird.getComlevel())){
+                insFeeOrder.setThirdDeptProportion(new BigDecimal(sysDeptThird.getManagementFee()));
+                insFeeOrder.setThirdDeptPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getThirdDeptProportion()));
+            }
+            //二级机构管理费用比例
+            if(sysDeptSecond!=null && "2".equals(sysDeptSecond.getComlevel())){
+                insFeeOrder.setSecondDeptProportion(new BigDecimal(sysDeptSecond.getManagementFee()));
+                insFeeOrder.setSecondDeptPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getSecondDeptProportion()));
+            }
+            //一级机构管理费用比例
+            if(sysDeptFirst!=null && "1".equals(sysDeptFirst.getComlevel())){
+                insFeeOrder.setFirstDeptProportion(new BigDecimal(sysDeptFirst.getManagementFee()));
+                insFeeOrder.setFirstDeptPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getFirstDeptProportion()));
+            }
+            //一级分销比例   推荐人
+            //二级分销比例
+            //三级分销比例
+            /**
+             * 分销一级、二级、三级存值取团队配置的分销佣金比例,若该团队走三级分销模式,当前出单员出单时,跟单的分销取值方式为:
+             * 根据出单员的推荐人向上找三级,若可以找到,则跟单存一、二、三分销比例;
+             * 若向上只能找到一级或者二级,则跟单存一级或者一级、二级
+             * 比如 A 1 B 2 C 3 D  若D出单 则给 C 3个 B 2个 A 1个;C出单给 B 3个 A 2个
+             * 第一步,先判断团队配置的分销模式
+             * 第二步,根据分销模式找上级存值相应分销比例
+             * 第三步,仅有一个上级的情况分销比例存啥
+             */
+            List<EsmRetail> esmRetailList = esmRetailService.selectList(" where t.deptid=? and t.status = '1' ", new Object[]{sysUser.getDeptId()});
+
+            if(esmRetailList!=null && esmRetailList.size()>0){
+                EsmRetail esmRetail = esmRetailList.get(0);
+                if(esmRetail!=null){
+                    int cycleIndex = 0;
+                    if("3".equals(esmRetail.getRetailtype())){//团队配置了三级分销模式
+                        cycleIndex = 3;
+                    }else if("2".equals(esmRetail.getRetailtype())){//团队配置了二级分销模式
+                        cycleIndex = 2;
+                    }else if("1".equals(esmRetail.getRetailtype())){//团队配置了一级分销模式
+                        cycleIndex = 1;
+                    }else if("0".equals(esmRetail.getRetailtype())){//团队没有配置分销模式
+                        cycleIndex = 0;
+                    }
+
+                    //利用当前工号,循环向上找推荐人
+                    String userId = sysUser.getId();
+                    int breakCycle = 99999999;
+                    for(int i=0;i<=cycleIndex;i++){
+                        EsmUserReferrer userReferrer = esmUserReferrerService.getById(userId);
+                        if(userReferrer.getReferrerId().equals(userReferrer.getId())){//团队长,没有上级
+                            //跳出循环
+                            breakCycle = cycleIndex;
+                            break;
+                        }else {
+                            userId = userReferrer.getReferrerId();
+                        }
+                    }
+                    //breakCycle是3,当前工号的上级的上级的上级就是团队长
+                    //breakCycle是2,当前工号的上级的上级就是团队长
+                    //breakCycle是1,当前工号的上级就是团队长
+                    //breakCycle是0,当前工号就是团队长
+
+                    if("3".equals(esmRetail.getRetailtype())){//团队配置了三级分销模式
+                        if(breakCycle==99999999||breakCycle==3){
+                            insFeeOrder.setFirstRetailProportion(new BigDecimal(esmRetail.getDisrate1()));
+                            insFeeOrder.setSecondRetailProportion(new BigDecimal(esmRetail.getDisrate2()));
+                            insFeeOrder.setThirdRetailProportion(new BigDecimal(esmRetail.getDisrate3()));
+                        }else if(breakCycle==2){
+                            insFeeOrder.setSecondRetailProportion(new BigDecimal(esmRetail.getDisrate2()));
+                            insFeeOrder.setThirdRetailProportion(new BigDecimal(esmRetail.getDisrate3()));
+                        }else if(breakCycle==1){
+                            insFeeOrder.setThirdRetailProportion(new BigDecimal(esmRetail.getDisrate3()));
+                        }
+                    }else if("2".equals(esmRetail.getRetailtype())){//团队配置了二级分销模式
+                        if(breakCycle==99999999||breakCycle==3 || breakCycle==2){
+                            insFeeOrder.setFirstRetailProportion(new BigDecimal(esmRetail.getDisrate1()));
+                            insFeeOrder.setSecondRetailProportion(new BigDecimal(esmRetail.getDisrate2()));
+                        }else if(breakCycle==1){
+                            insFeeOrder.setSecondRetailProportion(new BigDecimal(esmRetail.getDisrate2()));
+                        }
+                    }else if("1".equals(esmRetail.getRetailtype())){//团队配置了一级分销模式
+                        if(breakCycle==99999999||breakCycle==3 || breakCycle==2||breakCycle==1){
+                            insFeeOrder.setFirstRetailProportion(new BigDecimal(esmRetail.getDisrate1()));
+                        }
+                    }
+                    insFeeOrder.setFirstRetailPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getFirstRetailProportion()));
+                    insFeeOrder.setSecondRetailPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getSecondRetailProportion()));
+                    insFeeOrder.setThirdRetailPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getThirdRetailProportion()));
+
+                }
+            }
+        }
+        insFeeOrderService.insertCompanyAndOrders(insFeeOrder);
+    }
+
+    private BigDecimal getPremium(BigDecimal noTaxPremium,BigDecimal costsProportion){
+        BigDecimal premium = new BigDecimal(0);
+        if(costsProportion.doubleValue()>0){
+            premium = noTaxPremium.multiply(costsProportion).divide(new BigDecimal(100),4,BigDecimal.ROUND_HALF_UP);
+        }
+        return premium;
+    }
 }

+ 18 - 0
src/main/java/com/ydtech/modules/order/dao/InsFeeOrderSubMapper.java

@@ -0,0 +1,18 @@
+package com.ydtech.modules.order.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.order.entity.InsFeeOrderSub;
+
+/**
+ * @author CXP
+ * @description 针对表【ins_agreement_order_sub(报价渠道)】的数据库操作Mapper
+ * @createDate 2023-01-31 15:51:19
+ * @Entity generator.domain.InsAgreementOrder
+ */
+public interface InsFeeOrderSubMapper extends BaseMapper<InsFeeOrderSub> {
+
+}
+
+
+
+

+ 172 - 4
src/main/java/com/ydtech/modules/order/entity/InsFeeOrder.java

@@ -3,14 +3,19 @@ package com.ydtech.modules.order.entity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ydtech.modules.fee.dto.FeeSchemeReqDto;
 import com.ydtech.modules.fee.dto.FeeSchemeResDto;
+import com.ydtech.utils.BigDecimalUtils;
 import com.ydtech.utils.idgen.IdGenerate;
 import io.swagger.annotations.ApiModel;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
  * 订单费用跟单表
@@ -42,13 +47,174 @@ public class InsFeeOrder implements Serializable {
      * 交强险费用比例
      */
     @TableField(value = "jq_costs_proportion")
-    private String jqCostsProportion;
+    private BigDecimal jqCostsProportion;
 
     /**
      * 商业险费用比例
      */
     @TableField(value = "sy_costs_proportion")
-    private String syCostsProportion;
+    private BigDecimal syCostsProportion;
+
+    /**
+     * 交强险总费用
+     */
+    @TableField(value = "jq_costs_premiums")
+    private BigDecimal jqCostsPremiums;
+
+    /**
+     * 商业险总费用
+     */
+    @TableField(value = "sy_costs_premiums")
+    private BigDecimal syCostsPremiums;
+    /**
+     * 交强险保费
+     */
+    @TableField(value = "jq_premium")
+    private BigDecimal jqPremium;
+
+    /**
+     * 商业险保费
+     */
+    @TableField(value = "sy_premium")
+    private BigDecimal syPremium;
+    /**
+     * 交强险不含税保费
+     */
+    @TableField(value = "jq_no_tax_premium")
+    private BigDecimal jqNoTaxPremium;
+
+    /**
+     * 商业险不含税保费
+     */
+    @TableField(value = "sy_no_tax_premium")
+    private BigDecimal syNoTaxPremium;
+    /**
+     * 交强监管费比例
+     */
+    @TableField(value = "jq_supervise_costs_proportion")
+    private BigDecimal jqSuperviseCostsProportion;
+
+    /**
+     * 交强监管费
+     */
+    @TableField(value = "jq_supervise_costs_premiums")
+    private BigDecimal jqSuperviseCostsPremiums;
+    /**
+     * 商业监管费比例
+     */
+    @TableField(value = "sy_supervise_costs_proportion")
+    private BigDecimal sySuperviseCostsProportion;
+    /**
+     * 商业监管费
+     */
+    @TableField(value = "sy_supervise_costs_premiums")
+    private BigDecimal sySuperviseCostsPremiums;
+    /**
+     * 交强溢出比例
+     */
+    @TableField(value = "jq_spillover_proportion")
+    private BigDecimal jqSpilloverProportion;
+    /**
+     * 交强溢出费用
+     */
+    @TableField(value = "jq_spillover_premiums")
+    private BigDecimal jqSpilloverPremiums;
+    /**
+     * 商业溢出比例
+     */
+    @TableField(value = "sy_spillover_proportion")
+    private BigDecimal sySpilloverProportion;
+    /**
+     * 商业溢出费用
+     */
+    @TableField(value = "sy_spillover_premiums")
+    private BigDecimal sySpilloverPremiums;
+    /**
+     * 一级机构管理费比例
+     */
+    @TableField(value = "first_dept_proportion")
+    private BigDecimal firstDeptProportion;
+    /**
+     * 一级机构管理费
+     */
+    @TableField(value = "first_dept_premiums")
+    private BigDecimal firstDeptPremiums;
+    /**
+     * 二级机构管理费比例
+     */
+    @TableField(value = "second_dept_proportion")
+    private BigDecimal secondDeptProportion;
+    /**
+     * 二级机构管理费
+     */
+    @TableField(value = "second_dept_premiums")
+    private BigDecimal secondDeptPremiums;
+    /**
+     * 三级机构管理费比例
+     */
+    @TableField(value = "third_dept_proportion")
+    private BigDecimal thirdDeptProportion;
+    /**
+     * 三级机构管理费
+     */
+    @TableField(value = "third_dept_premiums")
+    private BigDecimal thirdDeptPremiums;
+    /**
+     * 四级机构管理费比例
+     */
+    @TableField(value = "forth_dept_proportion")
+    private BigDecimal forthDeptProportion;
+    /**
+     * 四级机构管理费
+     */
+    @TableField(value = "forth_dept_premiums")
+    private BigDecimal forthDeptPremiums;
+    /**
+     * 五级机构管理费比例
+     */
+    @TableField(value = "fifth_dept_proportion")
+    private BigDecimal fifthDeptProportion;
+    /**
+     * 五级机构管理费
+     */
+    @TableField(value = "fifth_dept_premiums")
+    private BigDecimal fifthDeptPremiums;
+    /**
+     * 一级分销比例
+     */
+    @TableField(value = "first_detail_proportion")
+    private BigDecimal firstRetailProportion;
+    /**
+     * 一级分销费
+     */
+    @TableField(value = "first_detail_premiums")
+    private BigDecimal firstRetailPremiums;
+    /**
+     * 二级分销比例
+     */
+    @TableField(value = "second_detail_proportion")
+    private BigDecimal secondRetailProportion;
+    /**
+     * 二级分销费
+     */
+    @TableField(value = "second_detail_premiums")
+    private BigDecimal secondRetailPremiums;
+    /**
+     * 三级分销比例
+     */
+    @TableField(value = "third_detail_proportion")
+    private BigDecimal thirdRetailProportion;
+    /**
+     * 三级分销费
+     */
+    @TableField(value = "third_detail_premiums")
+    private BigDecimal thirdRetailPremiums;
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
 
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
@@ -57,8 +223,10 @@ public class InsFeeOrder implements Serializable {
         this.id = IdGenerate.nextId();
         this.insOrderNo = insOrderNo;
         this.agreementId = feeSchemeReqDto.getAgreementId();
-        this.jqCostsProportion = feeSchemeResDto.getJqCostsProportion();
-        this.syCostsProportion = feeSchemeResDto.getSyCostsProportion();
+        this.jqCostsProportion = BigDecimalUtils.transferToBigDecmail(feeSchemeResDto.getJqCostsProportion());
+        this.syCostsProportion = BigDecimalUtils.transferToBigDecmail(feeSchemeResDto.getSyCostsProportion());
+        this.jqPremium = BigDecimalUtils.transferToBigDecmail(feeSchemeReqDto.getJqPremium());
+        this.syPremium = BigDecimalUtils.transferToBigDecmail(feeSchemeReqDto.getSyPremium());
     }
 
 }

+ 110 - 0
src/main/java/com/ydtech/modules/order/entity/InsFeeOrderSub.java

@@ -0,0 +1,110 @@
+package com.ydtech.modules.order.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ydtech.modules.fee.dto.FeeSchemeReqDto;
+import com.ydtech.modules.fee.dto.FeeSchemeResDto;
+import com.ydtech.utils.idgen.IdGenerate;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 订单费用跟单子表
+ *
+ * @TableName ins_fee_order_sub
+ */
+@TableName(value = "ins_fee_order_sub", autoResultMap = true)
+@Data
+@ApiModel(value = "报价渠道")
+@NoArgsConstructor
+public class InsFeeOrderSub implements Serializable {
+    /**
+     * 主键
+     */
+    @TableId(value = "id")
+    private String id;
+    /**
+     * 订单号
+     */
+    @TableField(value = "ins_order_no")
+    private String insOrderNo;
+    /**
+     * 非车订单号
+     */
+    @TableField(value = "fc_ins_order_no")
+    private String fcInsOrderNo;
+    /**
+     * 协议id
+     */
+    @TableField(value = "agreement_id")
+    private String agreementId;
+
+    /**
+     * 非车费用比例
+     */
+    @TableField(value = "fc_costs_proportion")
+    private BigDecimal fcCostsProportion;
+
+    /**
+     * 非车总费用
+     */
+    @TableField(value = "fc_costs_premiums")
+    private BigDecimal fcCostsPremiums;
+
+    /**
+     * 非车险保费
+     */
+    @TableField(value = "fc_premium")
+    private BigDecimal fcPremium;
+
+    /**
+     * 非车不含税保费
+     */
+    @TableField(value = "fc_no_tax_premium")
+    private BigDecimal fcNoTaxPremium;
+    /**
+     * 非车监管费比例
+     */
+    @TableField(value = "fc_supervise_costs_proportion")
+    private BigDecimal fcSuperviseCostsProportion;
+
+    /**
+     * 非车监管费
+     */
+    @TableField(value = "fc_supervise_costs_premiums")
+    private BigDecimal fcSuperviseCostsPremiums;
+    /**
+     * 非车溢出比例
+     */
+    @TableField(value = "fc_spillover_proportion")
+    private BigDecimal fcSpilloverProportion;
+    /**
+     * 非车溢出费用
+     */
+    @TableField(value = "fc_spillover_premiums")
+    private BigDecimal fcSpilloverPremiums;
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    public InsFeeOrderSub(FeeSchemeReqDto feeSchemeReqDto, FeeSchemeResDto feeSchemeResDto, String insOrderNo) {
+        this.id = IdGenerate.nextId();
+        this.insOrderNo = insOrderNo;
+        this.agreementId = feeSchemeReqDto.getAgreementId();
+        this.fcPremium = new BigDecimal(feeSchemeReqDto.getNoCarPremium());
+    }
+
+}

+ 44 - 0
src/main/java/com/ydtech/modules/order/service/InsFeeOrderSubService.java

@@ -0,0 +1,44 @@
+package com.ydtech.modules.order.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.order.entity.InsFeeOrder;
+import com.ydtech.modules.order.entity.InsFeeOrderSub;
+
+/**
+ * @author CXP
+ * @description 针对表【ins_area_company(费用跟单)】的数据库操作Service
+ * @createDate 2023-9-12 21:30:24
+ */
+public interface InsFeeOrderSubService extends IService<InsFeeOrderSub> {
+
+    /**
+     * 通过子订单查询费用跟单表
+     *
+     * @param companyId 子订单
+     * @return InsAreaCompany
+     */
+    InsFeeOrderSub getByIdIsExist(String companyId);
+
+
+    /**
+     * 通过 保险公司订单号查询费用跟单表
+     *
+     * @param insOrderNo 保险公司订单号
+     * @return InsAreaCompany
+     */
+    InsFeeOrderSub getByInsOrderNo(String insOrderNo);
+
+    /**
+     * 修改费用跟单表
+     *
+     * @param insFeeOrder
+     */
+    void updateCompanyAndOrders(InsFeeOrderSub insFeeOrder);
+
+    /**
+     * 插入费用跟单表
+     *
+     * @param insFeeOrder
+     */
+    void insertCompanyAndOrders(InsFeeOrderSub insFeeOrder);
+}

+ 55 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsFeeOrderSubServiceImpl.java

@@ -0,0 +1,55 @@
+package com.ydtech.modules.order.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.order.dao.InsFeeOrderMapper;
+import com.ydtech.modules.order.dao.InsFeeOrderSubMapper;
+import com.ydtech.modules.order.entity.InsFeeOrder;
+import com.ydtech.modules.order.entity.InsFeeOrderSub;
+import com.ydtech.modules.order.service.InsFeeOrderService;
+import com.ydtech.modules.order.service.InsFeeOrderSubService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ObjectUtils;
+
+/**
+ * @author CXP
+ * @description 针对表【ins_agreement_order(费用跟单)】的数据库操作Service实现
+ * @createDate 2023-9-12 21:29:23
+ */
+@Service
+public class InsFeeOrderSubServiceImpl extends ServiceImpl<InsFeeOrderSubMapper, InsFeeOrderSub>
+        implements InsFeeOrderSubService {
+
+
+    @Override
+    public InsFeeOrderSub getByIdIsExist(String companyId) {
+        InsFeeOrderSub insFeeOrderSub = this.getById(companyId);
+        if (ObjectUtils.isEmpty(insFeeOrderSub)) {
+            throw new SystemException("费用跟单表不存在");
+        }
+        return insFeeOrderSub;
+    }
+
+    @Override
+    public InsFeeOrderSub getByInsOrderNo(String insOrderNo) {
+        return baseMapper.selectOne(new LambdaQueryWrapper<InsFeeOrderSub>().eq(InsFeeOrderSub::getInsOrderNo, insOrderNo));
+    }
+
+    @Override
+    @Transactional
+    public void updateCompanyAndOrders(InsFeeOrderSub insFeeOrderSub) {
+        baseMapper.updateById(insFeeOrderSub);
+    }
+
+    @Override
+    public void insertCompanyAndOrders(InsFeeOrderSub insFeeOrderSub) {
+        baseMapper.insert(insFeeOrderSub);
+    }
+
+}
+
+
+
+

+ 1 - 59
src/main/java/com/ydtech/modules/order/service/impl/ZhongMeiOrderApiServiceImpl.java

@@ -153,11 +153,7 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         QuoteRespVo quoteRespVo = getQuoteRespVo(quotedPriceResponse, quoteInfo);
 
         //这里调用费用匹配功能
-        /*InsOrders insOrders = insOrdersService.getById(quoteRespVo.getOrderno());
-        FeeSchemeReqDto feeSchemeReqDto = feeRuleSchemeService.getFeeSchemeInfo(quoteInfo,quoteRespVo,ptlAgreementAttribution.getId(),insOrders.getProductid());
-        FeeSchemeResDto feeSchemeResDto = feeRuleSchemeService.matchTheAppropriateFees(feeSchemeReqDto);
-        InsFeeOrder insFeeOrder = new InsFeeOrder(feeSchemeReqDto,feeSchemeResDto,quotedPriceResponse.getBusinessNo());
-        insFeeOrderService.insertCompanyAndOrders(insFeeOrder);*/
+        //feeRuleSchemeService.dealFeeOrderInfo(quoteInfo,quoteRespVo,ptlAgreementAttribution.getId(),quotedPriceResponse.getBusinessNo());
         return responseOrder(quotedPriceResponse, quoteRespVo, ptlAgreementAttribution);
     }
 
@@ -411,60 +407,6 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         quoteRespVo.setTaxArrears(taxArrearsList);
         return HttpResult.ok(quotedPriceResponse.getHead().getReturnMessage(), quoteRespVo);
     }
-   /* private FeeSchemeReqDto getFeeSchemeInfo(QuotedPriceRequest quotedPriceRequest,QuotedPriceResponse quotedPriceResponse, QuoteRespVo quoteRespVo,String agreementId,String productId){
-        QuotedPriceRequest.BusinessDataDTO.InsuredObjectDTO.PolicyCarDTO policyCarDTO = quotedPriceRequest.getBusinessData().getInsuredObject().getPolicyCar();
-        ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCarDTO = quotedPriceRequest.getBusinessData().getInsuredObject().getSimpleStadarCar();
-        List<QuoteKindRespVo> kindList = quoteRespVo.getKindList();
-        String thirdPartyInsurance = "";
-        if(kindList!=null && kindList.size()>0){
-            for(QuoteKindRespVo quoteKindRespVo:kindList){
-                if("B".equals(quoteKindRespVo.getKindCode())){
-                    thirdPartyInsurance = String.valueOf(quoteKindRespVo.getAmount());
-                }
-            }
-        }
-        FeeSchemeReqDto feeSchemeReqDto = new FeeSchemeReqDto();
-        String isTransfer = "0";
-        String isNewCar = "0";
-        String isRenewal = "0";
-        String useNature = "";
-        feeSchemeReqDto.setBusType(productId);//"业务类型:单交0330、单商034001、单三034002、交三0330034002、交商0330034001"
-        feeSchemeReqDto.setAgreementId(agreementId);//协议ID
-        if(StringUtils.isNotEmpty(policyCarDTO.getChgOwnerFlag())&& "01".equals(policyCarDTO.getChgOwnerFlag())){
-            isTransfer = "1";
-        }
-        feeSchemeReqDto.setIsTransfer(isTransfer);//是否过户    1是  0否"
-        if(policyCarDTO.getNewCarSign()){
-            isNewCar = "1";
-        }
-        feeSchemeReqDto.setIsNewCar(isNewCar);//是否新车    1是  0否
-        feeSchemeReqDto.setIsNewEnergy("");//是否新能源    1是  0否
-        if(quotedPriceResponse.getBizPremium().getIsRenewal()){
-            isRenewal = "1";
-        }
-        feeSchemeReqDto.setIsRenewal(isRenewal);//是否续保    1是  0否
-        //页面要素及中煤交互请求返参没有,先默认写死
-        feeSchemeReqDto.setVehicleCategory("客车");//车辆大类: 客车、货车、特种车、挂车、摩托车、拖拉机
-        if("01".equals(policyCarDTO.getCarUseType())){
-            useNature = "家庭自用";
-        }
-        feeSchemeReqDto.setUseNature(useNature);//使用性质: 营业出租、营业租赁、营业公交、营业客运、营业货运、营业旅游、家庭自用、非营业机关事业、非营业企业、非营业个人
-        feeSchemeReqDto.setSeatNum(String.valueOf(simpleStadarCarDTO.getApprovedPassengersCapacity()));//座位数
-        feeSchemeReqDto.setPurchasePrice(simpleStadarCarDTO.getPurchasePrice());//新车购置价
-        feeSchemeReqDto.setApprovedLoadCapacity(String.valueOf(simpleStadarCarDTO.getApprovedLoad()));//核定载质量
-        feeSchemeReqDto.setJqPremium(String.valueOf(quoteRespVo.getJqPremium()));//交强保费
-        feeSchemeReqDto.setSyPremium(String.valueOf(quoteRespVo.getSyPremium()));//商业保费
-        feeSchemeReqDto.setSumPayTax(String.valueOf(quoteRespVo.getTaxAmount()));//车船税金额
-        feeSchemeReqDto.setThirdPartyInsurance(thirdPartyInsurance);//三者险保额
-        feeSchemeReqDto.setNoCarPremium("");//随车产品保费
-        feeSchemeReqDto.setSyDiscount("");//商业险折扣
-        feeSchemeReqDto.setJqDiscount("");//交强险折扣
-        feeSchemeReqDto.setInsuranceScore(quotedPriceResponse.getPlatMain().getZmScore());//保司评分 这里直接取中煤分
-        feeSchemeReqDto.setExpectedLossRate("");//预期赔付率
-        feeSchemeReqDto.setLicenseNo(policyCarDTO.getPlateNo());//车牌号
-
-        return feeSchemeReqDto;
-    }*/
 
     @Override
     public HttpResult<Object> auditStatusQuery(String companyId) {

+ 12 - 0
src/main/java/com/ydtech/utils/BigDecimalUtils.java

@@ -78,4 +78,16 @@ public class BigDecimalUtils {
         }
         return bigDecimal;
     }
+
+    public static BigDecimal transferToBigDecmail(Object object) {
+        BigDecimal result = new BigDecimal(0.0);
+        if (object instanceof String){
+            String ex = (String)object;
+            if(StringUtils.isNotEmpty(ex)){
+                result = new BigDecimal(ex);
+            }
+        }
+        return result;
+    }
+
 }

+ 33 - 3
src/main/resources/mapper/modules/order/InsFeeOrder.xml

@@ -8,9 +8,39 @@
         <id property="id" column="id" jdbcType="VARCHAR"/>
         <result property="insOrderNo" column="ins_order_no" jdbcType="VARCHAR"/>
         <result property="agreementId" column="agreement_id" jdbcType="VARCHAR"/>
-        <result property="jqCostsProportion" column="jq_costs_proportion" jdbcType="VARCHAR"/>
-        <result property="syCostsProportion" column="sy_costs_proportion" jdbcType="VARCHAR"/>
-
+        <result property="jqCostsProportion" column="jq_costs_proportion" jdbcType="DECIMAL"/>
+        <result property="syCostsProportion" column="sy_costs_proportion" jdbcType="DECIMAL"/>
+        <result property="jqCostsPremiums" column="jq_costs_premiums" jdbcType="DECIMAL"/>
+        <result property="syCostsPremiums" column="sy_costs_premiums" jdbcType="DECIMAL"/>
+        <result property="jqPremium" column="jq_premium" jdbcType="DECIMAL"/>
+        <result property="syPremium" column="sy_premium" jdbcType="DECIMAL"/>
+        <result property="jqNoTaxPremium" column="jq_no_tax_premium" jdbcType="DECIMAL"/>
+        <result property="syNoTaxPremium" column="sy_no_tax_premium" jdbcType="DECIMAL"/>
+        <result property="jqSuperviseCostsProportion" column="jq_supervise_costs_proportion" jdbcType="DECIMAL"/>
+        <result property="jqSuperviseCostsPremiums" column="jq_supervise_costs_premiums" jdbcType="DECIMAL"/>
+        <result property="sySuperviseCostsProportion" column="sy_supervise_costs_proportion" jdbcType="DECIMAL"/>
+        <result property="sySuperviseCostsPremiums" column="sy_supervise_costs_premiums" jdbcType="DECIMAL"/>
+        <result property="jqSpilloverProportion" column="jq_spillover_proportion" jdbcType="DECIMAL"/>
+        <result property="jqSpilloverPremiums" column="jq_spillover_premiums" jdbcType="DECIMAL"/>
+        <result property="sySpilloverProportion" column="sy_spillover_proportion" jdbcType="DECIMAL"/>
+        <result property="sySpilloverPremiums" column="sy_spillover_premiums" jdbcType="DECIMAL"/>
+        <result property="firstDeptProportion" column="first_dept_proportion" jdbcType="DECIMAL"/>
+        <result property="firstDeptPremiums" column="first_dept_premiums" jdbcType="DECIMAL"/>
+        <result property="secondDeptProportion" column="second_dept_proportion" jdbcType="DECIMAL"/>
+        <result property="secondDeptPremiums" column="second_dept_premiums" jdbcType="DECIMAL"/>
+        <result property="thirdDeptProportion" column="third_dept_proportion" jdbcType="DECIMAL"/>
+        <result property="thirdDeptPremiums" column="third_dept_premiums" jdbcType="DECIMAL"/>
+        <result property="forthDeptProportion" column="forth_dept_proportion" jdbcType="DECIMAL"/>
+        <result property="forthDeptPremiums" column="forth_dept_premiums" jdbcType="DECIMAL"/>
+        <result property="fifthDeptProportion" column="fifth_dept_proportion" jdbcType="DECIMAL"/>
+        <result property="fifthDeptPremiums" column="fifth_dept_premiums" jdbcType="DECIMAL"/>
+        <result property="firstRetailProportion" column="first_detail_proportion" jdbcType="DECIMAL"/>
+        <result property="firstRetailPremiums" column="first_detail_premiums" jdbcType="DECIMAL"/>
+        <result property="secondRetailProportion" column="second_detail_proportion" jdbcType="DECIMAL"/>
+        <result property="secondRetailPremiums" column="second_detail_premiums" jdbcType="DECIMAL"/>
+        <result property="thirdRetailProportion" column="third_detail_proportion" jdbcType="DECIMAL"/>
+        <result property="thirdRetailPremiums" column="third_detail_premiums" jdbcType="DECIMAL"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
     </resultMap>
 
     <sql id="Base_Column_List">

+ 27 - 0
src/main/resources/mapper/modules/order/InsFeeOrderSub.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ydtech.modules.order.dao.InsFeeOrderSubMapper">
+
+    <resultMap id="BaseResultMap" type="com.ydtech.modules.order.entity.InsFeeOrderSub">
+        <id property="id" column="id" jdbcType="VARCHAR"/>
+        <result property="insOrderNo" column="ins_order_no" jdbcType="VARCHAR"/>
+        <result property="fcInsOrderNo" column="fc_ins_order_no" jdbcType="VARCHAR"/>
+        <result property="agreementId" column="agreement_id" jdbcType="VARCHAR"/>
+        <result property="fcCostsProportion" column="fc_costs_proportion" jdbcType="DECIMAL"/>
+        <result property="fcCostsPremiums" column="fc_costs_premiums" jdbcType="DECIMAL"/>
+        <result property="fcPremium" column="fc_premium" jdbcType="DECIMAL"/>
+        <result property="fcNoTaxPremium" column="fc_no_tax_premium" jdbcType="DECIMAL"/>
+        <result property="fcSuperviseCostsProportion" column="fc_supervise_costs_proportion" jdbcType="DECIMAL"/>
+        <result property="fcSuperviseCostsPremiums" column="fc_supervise_costs_premiums" jdbcType="DECIMAL"/>
+        <result property="fcSpilloverProportion" column="fc_spillover_proportion" jdbcType="DECIMAL"/>
+        <result property="fcSpilloverPremiums" column="fc_spillover_premiums" jdbcType="DECIMAL"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,orderno,agreementId,jqPolicyNo,syPolicyNo,jqCostsProportion,syCostsProportion
+    </sql>
+
+</mapper>