From d0be5028ac65914301bc489f3f7e0f8a9b8f474b Mon Sep 17 00:00:00 2001 From: Yen Date: Mon, 12 May 2025 17:07:10 +0800 Subject: [PATCH] =?UTF-8?q?feat(rebate):=20=E5=9D=8E=E7=BA=A7=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E6=B7=BB=E5=8A=A0=E5=8C=BA=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tzc/entity/bo/TzcRebateLevelsParam.java | 5 ++++- .../TzcRebateApplication4CostServiceImpl.java | 15 +++++++++------ .../impl/TzcRebateApplicationServiceImpl.java | 9 ++++----- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateLevelsParam.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateLevelsParam.java index 25c49db..0a6a44f 100644 --- a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateLevelsParam.java +++ b/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-固定金额不能为空") private Integer conditionSelect; - /** 满足条件的比例 */ + /** 满足条件的比例-开始 */ private BigDecimal conditionRate; + /** 满足条件的比例-结束 */ + private BigDecimal conditionRateEnd; + /** 满足条件的金额 */ private BigDecimal conditionAmount; diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java index 89a6ed7..be47d03 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java +++ b/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) { TzcRebateCalculateDTO dto = new TzcRebateCalculateDTO(); // 判断是否同期 - int samePeriodFlag = sameDispatchAmt.compareTo(BigDecimal.ZERO)==0?0:1; + int samePeriodFlag = sameDispatchAmt.compareTo(BigDecimal.ZERO)==0?2:1; List levelsList = tzcRebateLevelsService.list( new LambdaQueryWrapper() .eq(TzcRebateLevels::getRebateId, rebateId) // 同期数据过滤 - .eq(TzcRebateLevels::getSamePeriodFlag, samePeriodFlag) + .in(TzcRebateLevels::getSamePeriodFlag, 0,samePeriodFlag) .orderByDesc(TzcRebateLevels::getLevelNum) ); if (CollUtil.isEmpty(levelsList)){ - dto.appendErrorMsg(samePeriodFlag==0?"未找到匹配无同期的坎级":"未找到匹配有同期的坎级"); + dto.appendErrorMsg(samePeriodFlag==2?"未找到匹配无同期的坎级":"未找到匹配有同期的坎级"); } dto.setSamePeriodLevelList(levelsList); // 命中的最高坎级 @@ -365,12 +365,15 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio periodAmount = tarPeriodAmount; msg = "目标金额:"+periodAmount; } - msg = "("+msg+",占比:"+levels.getConditionRate()+"%)"; + msg = "("+msg+",占比:"+levels.getConditionRate()+"(含)-"+levels.getConditionRateEnd()+"%)"; BigDecimal targetAmt = periodAmount.multiply(levels.getConditionRate()) .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; - if (!ok){ + boolean ok1 = dispatchAmt.compareTo(targetAmt)>=0; // 包含 + boolean ok2 = dispatchAmt.compareTo(targetAmtEnd)<0; // 不包含 + if (!ok1 || !ok2){ dto.appendDebugMsg("跳过坎级:"+levels.getLevelNum()+",门槛金额:"+targetAmt+msg+",发货金额:"+dispatchAmt); continue; } diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplicationServiceImpl.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplicationServiceImpl.java index fb83d28..470e1eb 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplicationServiceImpl.java +++ b/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) .set(TzcRebate::getCostApplyId,costApplyId) ); - return rebate; } - /** * 计算和平摊到科目和成本中心(不再读取前端的金额) * 均摊TzcRebateSubjectParam的subjectAmount @@ -360,6 +358,7 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ levels.setSamePeriodFlag(levelsParam.getSamePeriodFlag()); levels.setConditionSelect(levelsParam.getConditionSelect()); levels.setConditionRate(levelsParam.getConditionRate()); + levels.setConditionRateEnd(levelsParam.getConditionRateEnd()); levels.setConditionAmount(levelsParam.getConditionAmount()); levels.setExampleRemark(levelsParam.getExampleRemark()); levels.setRemark(levelsParam.getRemark()); @@ -613,7 +612,7 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ for (Map.Entry> entry : map.entrySet()) { List levelsList = entry.getValue(); // 检查同期或不同期是否设置重复 - this.checkLevelSameSettings(entry.getKey(), levelsList); + this.checkSameLevelSameSettings(entry.getKey(), levelsList); TzcRebateLevelsParam levels = levelsList.get(0); levels.getTargetArgument().check("返利"); levels.getOverallTargetArgument().check("总目标返利"); @@ -628,11 +627,11 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ } /** - * 判断坎级同期设置 + * 判断同坎级同期设置 * @param levelNum * @param levelsList */ - private void checkLevelSameSettings(Integer levelNum, List levelsList) { + private void checkSameLevelSameSettings(Integer levelNum, List levelsList) { for (TzcRebateLevelsParam levelsParam : levelsList) { if(levelsParam.getSamePeriodFlag()==0&& levelsList.size()>1){ Assert.throwEx("坎级["+ levelNum+"]已设置不限同期,但配置找到了多个");