Răsfoiți Sursa

新增兜底费用配置功能

li.pengfei 3 ani în urmă
părinte
comite
c71786fe7c

+ 17 - 14
src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceImpl.java

@@ -30,10 +30,8 @@ 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;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 费用接口中相关功能的实现类
@@ -60,7 +58,6 @@ public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
      * @param feeSchemeReqDto
      * @return
      */
-    @Override
     public FeeSchemeResDto matchTheAppropriateFees(FeeSchemeReqDto feeSchemeReqDto) {
         FeeSchemeResDto feeSchemeResDto=new FeeSchemeResDto();
 
@@ -71,7 +68,7 @@ public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
             throw new SystemException("未查询到费用配置,请先配置该协议的费用方案!");
         }else{
             //符合跟单信息的方案列表
-            List validSchemeList=new ArrayList();
+            List<PtlAgreementProductCosts> validSchemeList=new ArrayList();
             //循环符合的方案列表,再进行细化的因子匹配,获取最终可以匹配到的方案
             for(int i=0;i<ptlAgreementProductCosts.size();i++){
                 PtlAgreementProductCosts factorCost=ptlAgreementProductCosts.get(i);
@@ -88,6 +85,12 @@ public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
             }
 
             if(validSchemeList.size()>0){
+                //先判断匹配到的是不是只有兜底类型,如果不是则过滤掉兜底类型的费用,优先以跟单的为准,如果只有兜底类型,则按同样逻辑进行筛选
+                //根据ProductId去重后的结果集
+                List tempList=validSchemeList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(PtlAgreementProductCosts :: getProductId))), ArrayList::new));
+                if(tempList.size()>1){//如果有多种类型,则过滤掉兜底类型的
+                    validSchemeList=validSchemeList.stream().filter(x -> !"039999".equals(x.getProductId())).collect(Collectors.toList());
+                }
                 //匹配到唯一一条费用方案,直接用这条
                 if(validSchemeList.size()==1){
                     //进行费用比例赋值,给返回对象
@@ -296,11 +299,11 @@ public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
         factor0.setFactorName("是否过户");
         factor0.setMatchType("1");
         factor0.setMatchSequence(0);
-        if(factorCost.getTransfer()!=null){
+        if(factorCost.getTransfer()!=null&&factorCost.getTransfer()!=9){
             factor0.setNeedMatch(true);
             factor0.setSingleSelectVal(String.valueOf(factorCost.getTransfer()));
         }else{
-            //如果方案中未录入,则不校验该项因子
+            //如果方案中未录入(是空或为9时),则不校验该项因子
             factor0.setNeedMatch(false);
         }
         resultMqp.put(0,factor0);
@@ -309,11 +312,11 @@ public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
         factor1.setFactorName("新旧车");
         factor1.setMatchType("1");
         factor1.setMatchSequence(1);
-        if(factorCost.getOldAndNew()!=null){
+        if(factorCost.getOldAndNew()!=null&&factorCost.getOldAndNew()!=9){
             factor1.setNeedMatch(true);
             factor1.setSingleSelectVal(String.valueOf(factorCost.getOldAndNew()));
         }else{
-            //如果方案中未录入,则不校验该项因子
+            //如果方案中未录入(是空或为9时),则不校验该项因子
             factor1.setNeedMatch(false);
         }
         resultMqp.put(1,factor1);
@@ -322,11 +325,11 @@ public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
         factor2.setFactorName("是否新能源");
         factor2.setMatchType("1");
         factor2.setMatchSequence(2);
-        if(factorCost.getNewEnergy()!=null){
+        if(factorCost.getNewEnergy()!=null&&factorCost.getNewEnergy()!=9){
             factor2.setNeedMatch(true);
             factor2.setSingleSelectVal(String.valueOf(factorCost.getNewEnergy()));
         }else{
-            //如果方案中未录入,则不校验该项因子
+            //如果方案中未录入(是空或为9时),则不校验该项因子
             factor2.setNeedMatch(false);
         }
         resultMqp.put(2,factor2);
@@ -335,11 +338,11 @@ public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
         factor3.setFactorName("是否续保");
         factor3.setMatchType("1");
         factor3.setMatchSequence(3);
-        if(factorCost.getRenewal()!=null){
+        if(factorCost.getRenewal()!=null&&factorCost.getRenewal()!=9){
             factor3.setNeedMatch(true);
             factor3.setSingleSelectVal(String.valueOf(factorCost.getRenewal()));
         }else{
-            //如果方案中未录入,则不校验该项因子
+            //如果方案中未录入(是空或为9时),则不校验该项因子
             factor3.setNeedMatch(false);
         }
         resultMqp.put(3,factor3);

+ 4 - 1
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementProductCostsServiceImpl.java

@@ -114,9 +114,12 @@ public class PtlAgreementProductCostsServiceImpl extends ServiceImpl<PtlAgreemen
         SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         String nowDate=sdf.format(date);
         //组织查询条件
+        List tempTypes=new ArrayList();
+        tempTypes.add(busType);//跟单类型
+        tempTypes.add("039999");//兜底类型
         LambdaQueryWrapper<PtlAgreementProductCosts> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(PtlAgreementProductCosts::getAgreementId, agreementId);
-        wrapper.eq(PtlAgreementProductCosts::getProductId,busType);
+        wrapper.in(PtlAgreementProductCosts::getProductId,tempTypes);
         wrapper.le(PtlAgreementProductCosts::getCostsStartDate,nowDate);//有效起期小于等于当前时间
         wrapper.ge(PtlAgreementProductCosts::getCostsEndDate,nowDate);//有效止期大于等于当前时间
         wrapper.eq(PtlAgreementProductCosts::getHistory, 0);//查询所有非历史记录的