Browse Source

feat(rebate): 坎级调整添加区间

master
Yen 2 months ago
parent
commit
d0be5028ac
  1. 5
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateLevelsParam.java
  2. 15
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java
  3. 9
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplicationServiceImpl.java

5
cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateLevelsParam.java

@ -39,9 +39,12 @@ public class TzcRebateLevelsParam implements Serializable {
@NotNull(message = "条件选择:0-百分比;1-固定金额不能为空") @NotNull(message = "条件选择:0-百分比;1-固定金额不能为空")
private Integer conditionSelect; private Integer conditionSelect;
/** 满足条件的比例 */ /** 满足条件的比例-开始 */
private BigDecimal conditionRate; private BigDecimal conditionRate;
/** 满足条件的比例-结束 */
private BigDecimal conditionRateEnd;
/** 满足条件的金额 */ /** 满足条件的金额 */
private BigDecimal conditionAmount; private BigDecimal conditionAmount;

15
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java

@ -339,16 +339,16 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio
BigDecimal tarPeriodAmount) { BigDecimal tarPeriodAmount) {
TzcRebateCalculateDTO dto = new TzcRebateCalculateDTO(); TzcRebateCalculateDTO dto = new TzcRebateCalculateDTO();
// 判断是否同期 // 判断是否同期
int samePeriodFlag = sameDispatchAmt.compareTo(BigDecimal.ZERO)==0?0:1; int samePeriodFlag = sameDispatchAmt.compareTo(BigDecimal.ZERO)==0?2:1;
List<TzcRebateLevels> levelsList = tzcRebateLevelsService.list( List<TzcRebateLevels> levelsList = tzcRebateLevelsService.list(
new LambdaQueryWrapper<TzcRebateLevels>() new LambdaQueryWrapper<TzcRebateLevels>()
.eq(TzcRebateLevels::getRebateId, rebateId) .eq(TzcRebateLevels::getRebateId, rebateId)
// 同期数据过滤 // 同期数据过滤
.eq(TzcRebateLevels::getSamePeriodFlag, samePeriodFlag) .in(TzcRebateLevels::getSamePeriodFlag, 0,samePeriodFlag)
.orderByDesc(TzcRebateLevels::getLevelNum) .orderByDesc(TzcRebateLevels::getLevelNum)
); );
if (CollUtil.isEmpty(levelsList)){ if (CollUtil.isEmpty(levelsList)){
dto.appendErrorMsg(samePeriodFlag==0?"未找到匹配无同期的坎级":"未找到匹配有同期的坎级"); dto.appendErrorMsg(samePeriodFlag==2?"未找到匹配无同期的坎级":"未找到匹配有同期的坎级");
} }
dto.setSamePeriodLevelList(levelsList); dto.setSamePeriodLevelList(levelsList);
// 命中的最高坎级 // 命中的最高坎级
@ -365,12 +365,15 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio
periodAmount = tarPeriodAmount; periodAmount = tarPeriodAmount;
msg = "目标金额:"+periodAmount; msg = "目标金额:"+periodAmount;
} }
msg = "("+msg+",占比:"+levels.getConditionRate()+"%)"; msg = "("+msg+",占比:"+levels.getConditionRate()+"(含)-"+levels.getConditionRateEnd()+"%)";
BigDecimal targetAmt = periodAmount.multiply(levels.getConditionRate()) BigDecimal targetAmt = periodAmount.multiply(levels.getConditionRate())
.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP); .divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
BigDecimal targetAmtEnd = periodAmount.multiply(levels.getConditionRateEnd())
.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
// 发货金额大于坎级制定的百分比 // 发货金额大于坎级制定的百分比
boolean ok = dispatchAmt.compareTo(targetAmt)>=0; boolean ok1 = dispatchAmt.compareTo(targetAmt)>=0; // 包含
if (!ok){ boolean ok2 = dispatchAmt.compareTo(targetAmtEnd)<0; // 不包含
if (!ok1 || !ok2){
dto.appendDebugMsg("跳过坎级:"+levels.getLevelNum()+",门槛金额:"+targetAmt+msg+",发货金额:"+dispatchAmt); dto.appendDebugMsg("跳过坎级:"+levels.getLevelNum()+",门槛金额:"+targetAmt+msg+",发货金额:"+dispatchAmt);
continue; continue;
} }

9
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplicationServiceImpl.java

@ -246,12 +246,10 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
.eq(TzcRebate::getId,rebateId) .eq(TzcRebate::getId,rebateId)
.set(TzcRebate::getCostApplyId,costApplyId) .set(TzcRebate::getCostApplyId,costApplyId)
); );
return rebate; return rebate;
} }
/** /**
* 计算和平摊到科目和成本中心不再读取前端的金额 * 计算和平摊到科目和成本中心不再读取前端的金额
* 均摊TzcRebateSubjectParam的subjectAmount * 均摊TzcRebateSubjectParam的subjectAmount
@ -360,6 +358,7 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
levels.setSamePeriodFlag(levelsParam.getSamePeriodFlag()); levels.setSamePeriodFlag(levelsParam.getSamePeriodFlag());
levels.setConditionSelect(levelsParam.getConditionSelect()); levels.setConditionSelect(levelsParam.getConditionSelect());
levels.setConditionRate(levelsParam.getConditionRate()); levels.setConditionRate(levelsParam.getConditionRate());
levels.setConditionRateEnd(levelsParam.getConditionRateEnd());
levels.setConditionAmount(levelsParam.getConditionAmount()); levels.setConditionAmount(levelsParam.getConditionAmount());
levels.setExampleRemark(levelsParam.getExampleRemark()); levels.setExampleRemark(levelsParam.getExampleRemark());
levels.setRemark(levelsParam.getRemark()); levels.setRemark(levelsParam.getRemark());
@ -613,7 +612,7 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
for (Map.Entry<Integer, List<TzcRebateLevelsParam>> entry : map.entrySet()) { for (Map.Entry<Integer, List<TzcRebateLevelsParam>> entry : map.entrySet()) {
List<TzcRebateLevelsParam> levelsList = entry.getValue(); List<TzcRebateLevelsParam> levelsList = entry.getValue();
// 检查同期或不同期是否设置重复 // 检查同期或不同期是否设置重复
this.checkLevelSameSettings(entry.getKey(), levelsList); this.checkSameLevelSameSettings(entry.getKey(), levelsList);
TzcRebateLevelsParam levels = levelsList.get(0); TzcRebateLevelsParam levels = levelsList.get(0);
levels.getTargetArgument().check("返利"); levels.getTargetArgument().check("返利");
levels.getOverallTargetArgument().check("总目标返利"); levels.getOverallTargetArgument().check("总目标返利");
@ -628,11 +627,11 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
} }
/** /**
* 判断坎级同期设置 * 判断坎级同期设置
* @param levelNum * @param levelNum
* @param levelsList * @param levelsList
*/ */
private void checkLevelSameSettings(Integer levelNum, List<TzcRebateLevelsParam> levelsList) { private void checkSameLevelSameSettings(Integer levelNum, List<TzcRebateLevelsParam> levelsList) {
for (TzcRebateLevelsParam levelsParam : levelsList) { for (TzcRebateLevelsParam levelsParam : levelsList) {
if(levelsParam.getSamePeriodFlag()==0&& levelsList.size()>1){ if(levelsParam.getSamePeriodFlag()==0&& levelsList.size()>1){
Assert.throwEx("坎级["+ levelNum+"]已设置不限同期,但配置找到了多个"); Assert.throwEx("坎级["+ levelNum+"]已设置不限同期,但配置找到了多个");

Loading…
Cancel
Save