diff --git a/cms-framework/cms-framework-base/src/main/java/com/qs/serve/framework/base/util/DebugStrUtil.java b/cms-framework/cms-framework-base/src/main/java/com/qs/serve/framework/base/util/DebugStrUtil.java new file mode 100644 index 0000000..a9b2ddd --- /dev/null +++ b/cms-framework/cms-framework-base/src/main/java/com/qs/serve/framework/base/util/DebugStrUtil.java @@ -0,0 +1,30 @@ +package com.qs.serve.framework.base.util; + +import com.qs.serve.common.context.SecurityUserUtil; + +/** + * @author YenHex + * @since 2025/5/26 + */ +public class DebugStrUtil { + + private final static ThreadLocal DEBUG_STRING = new ThreadLocal<>(); + + public static void removeThreadLocal(){ + DEBUG_STRING.remove(); + } + + public static String getStr(){ + return DEBUG_STRING.get(); + } + + public static void appendStr(String string){ + String debugString = DEBUG_STRING.get(); + if(debugString == null){ + debugString = string; + }else{ + debugString = debugString +" \n"+ string; + } + DEBUG_STRING.set(debugString); + } +} diff --git a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevelsArgument.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevelsArgument.java index 896263d..d7ef913 100644 --- a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevelsArgument.java +++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevelsArgument.java @@ -44,7 +44,7 @@ public class TzcRebateLevelsArgument implements Serializable { /** 目标销量维度:0-总量;1-增量 */ private Integer sumAddFlag; - /** 选择的策略:0-百分比;固定金额 */ + /** 选择的策略:0-百分比;1-固定金额 */ private Integer rateAmtFlag; /** 返利百分比 */ diff --git a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateArgumentParam.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateArgumentParam.java index 44eedea..d468acf 100644 --- a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateArgumentParam.java +++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateArgumentParam.java @@ -51,9 +51,9 @@ public class TzcRebateArgumentParam implements Serializable { if (this.rateAmtFlag == 1 && this.returnFixed == null){ Assert.throwEx(businessType+":返利固定金额不能为空"); } - if(this.maxReturn==null){ - Assert.throwEx(businessType+":总量最高返利金额不能为空"); - } +// if(this.maxReturn==null){ +// Assert.throwEx(businessType+":总量最高返利金额不能为空"); +// } } } diff --git a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateParam.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateParam.java index c1ea4ce..3844054 100644 --- a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateParam.java +++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateParam.java @@ -70,7 +70,6 @@ public class TzcRebateParam{ private Long supplierId; /** 返利总金额 */ - @NotNull(message = "返利总金额(总预算上限)不能为空") private BigDecimal rebateAmount; /** 备注 */ diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebateController.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebateController.java index 00a699b..604a7df 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebateController.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebateController.java @@ -10,6 +10,7 @@ import com.qs.serve.common.utils.PageUtil; import com.qs.serve.common.utils.StringUtils; import com.qs.serve.framework.base.model.PageVo; import com.qs.serve.framework.base.model.R; +import com.qs.serve.framework.base.util.DebugStrUtil; import com.qs.serve.modules.tzc.entity.bo.TzcRebateParam; import com.qs.serve.modules.tzc.entity.dto.TzcRebateCalculateDTO; import com.qs.serve.modules.tzc.entity.qo.TzcGetActivityRebateQuery; @@ -106,7 +107,9 @@ public class TzcRebateController { @SysLog(module = SystemModule.Policy, title = "返利信息", biz = BizType.UPDATE) public R modifyRebate(@RequestBody @Valid TzcRebateParam param){ TzcRebate tzcRebate = tzcRebateApplicationService.modifyRebate(param); - return R.ok(tzcRebate); + String msg = DebugStrUtil.getStr(); + DebugStrUtil.removeThreadLocal(); + return R.ok(tzcRebate,msg); } /** 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 a5f923e..1c8fbb0 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 @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.qs.serve.common.exception.Assert; import com.qs.serve.common.utils.CopierUtil; +import com.qs.serve.framework.base.util.DebugStrUtil; import com.qs.serve.modules.tbs.common.TbsActivityState; import com.qs.serve.modules.tbs.common.TbsCostApplyState; import com.qs.serve.modules.tbs.entity.*; @@ -315,25 +316,39 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio List configList, BigDecimal maxPeriodAmt, boolean hasCompensationFlag){ + DebugStrUtil.appendStr("是否需要年度补偿:"+hasCompensationFlag+";期间目标最大金额:"+maxPeriodAmt); BigDecimal maxAmount = BigDecimal.ZERO; + String maxLevelNumConfig = ""; + // 存储每坎级最高金额 + Map levelAmountMap = new HashMap<>(); + for (TzcRebateLevels levels : levelsList) { + int levelNum = levels.getLevelNum(); + BigDecimal levelAmt = getCurrentLevelMaxAmount(levelsList,argumentList,levelNum,maxPeriodAmt,hasCompensationFlag); + levelAmountMap.put(levelNum+"",levelAmt); + DebugStrUtil.appendStr("坎级 "+levelNum+" ,返利金额:"+levelAmt); + } for (TzcRebateLevelsConfig config : configList) { Set levelNumSet = Arrays.stream(config.getLevelConfigs()).collect(Collectors.toSet()); // 默认包含当前坎级 levelNumSet.add(config.getLevelNum()+""); BigDecimal currentConfAmount = BigDecimal.ZERO; for (String levelNumStr : levelNumSet) { - int levelNum = Integer.parseInt(levelNumStr); // 当前坎级最高返利金额 - BigDecimal currentLevelMaxAmount = getCurrentLevelMaxAmount( - levelsList, argumentList, levelNum,maxPeriodAmt,hasCompensationFlag); + BigDecimal currentLevelMaxAmount = levelAmountMap.get(levelNumStr); if (currentLevelMaxAmount.compareTo(BigDecimal.ZERO)>0){ currentConfAmount = currentConfAmount.add(currentLevelMaxAmount); } } + String levelNumConfig = Arrays.stream(config.getLevelConfigs()).collect(Collectors.joining(",")); + DebugStrUtil.appendStr("坎级叠加:" + + levelNumConfig + +",合计金额:"+currentConfAmount); if (currentConfAmount.compareTo(maxAmount)>0){ maxAmount = currentConfAmount; + maxLevelNumConfig = levelNumConfig; } } + DebugStrUtil.appendStr("使用坎级配置:"+maxLevelNumConfig+";最高坎级叠加金额:"+maxAmount); return maxAmount; } @@ -356,6 +371,10 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio // 排除返利和补偿返利的最高金额 BigDecimal currentArgAmount = BigDecimal.ZERO; for (TzcRebateLevelsArgument argument : argumentList) { + // 不需要年度补偿则跳过 + if (argument.getBusinessType().equals(TzcArgTypes.LevelOverallReturn.name())&&!hasCompensationFlag){ + continue; + } if(argument.getLevelId().equals(levels.getId())){ BigDecimal argAmount = BigDecimal.ZERO; // 使用最高金额 @@ -363,9 +382,9 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio argAmount = argument.getMaxReturn(); }else { // 使用固定金额 - if (argument.getRateAmtFlag().equals(0)){ + if (argument.getRateAmtFlag().equals(1)){ argAmount = argument.getReturnFixed(); - }else if (argument.getRateAmtFlag().equals(1)){ + }else if (argument.getRateAmtFlag().equals(0)){ // 使用比例金额(目标返利x比例) if (argument.getSumAddFlag().equals(0)){ argAmount = argument.getReturnRate().multiply(maxPeriodAmt) 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 89bc056..a97dfc9 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 @@ -9,6 +9,7 @@ import com.qs.serve.common.utils.CopierUtil; import com.qs.serve.common.utils.StringUtils; import com.qs.serve.framework.base.model.ResultFlag; import com.qs.serve.framework.base.util.CollectionUtil; +import com.qs.serve.framework.base.util.DebugStrUtil; import com.qs.serve.framework.redis.utils.CodeGenUtil; import com.qs.serve.modules.bms.entity.BmsSubject; import com.qs.serve.modules.bms.entity.BmsSupplier; @@ -233,11 +234,11 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ BigDecimal maxAmount = tzcRebateApplication4CostService.getMaxLevelsAmount( levelsList, argumentList, configList,maxPeriodTarAmount,hasCompensationFlag); BigDecimal totalAllAmount = maxAmount.multiply(new BigDecimal(param.getPeriodList().size())); - String periodMsg = "坎级叠加最高金额为:"+maxAmount; + String periodMsg = "坎级叠加总金额为:"+maxAmount; // 判断是否超预算 if (param.getRebateAmount()!=null){ if(totalAllAmount.compareTo(param.getRebateAmount())>0){ - Assert.throwEx("返利金额超预算"); + Assert.throwEx("期间总预算,超过总返利金额上限"); } // 计算需要增加的金额 BigDecimal needAddAmt = param.getRebateAmount().subtract(totalAllAmount); @@ -246,6 +247,7 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ maxAmount = maxAmount.add(needAddAvgAmt); totalAllAmount = param.getRebateAmount(); periodMsg = periodMsg+";设置最高返利金额:"+param.getRebateAmount()+",补充活动金额:"+needAddAvgAmt+"。活动合计金额:"+maxAmount; + DebugStrUtil.appendStr(periodMsg); } // 期间及补偿参数保存