From c6c6ff5549f4791c14edc981d9198f2d92f04f3e Mon Sep 17 00:00:00 2001 From: Yen Date: Thu, 24 Apr 2025 15:29:28 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=BF=94=E5=88=A9=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serve/modules/tzc/consts/TzcArgTypes.java | 2 +- .../serve/modules/tzc/entity/TzcRebate.java | 15 ++++ .../modules/tzc/entity/TzcRebateLevels.java | 3 + .../tzc/entity/TzcRebateLevelsArgument.java | 40 ++++++++++ .../tzc/entity/TzcRebateLevelsConfig.java | 3 + .../modules/tzc/entity/TzcRebatePeriod.java | 3 + .../entity/bo/TzcRebateLevelsConfigParam.java | 3 + .../tzc/entity/bo/TzcRebateLevelsParam.java | 3 + .../tzc/entity/bo/TzcRebatePeriodParam.java | 12 ++- .../modules/tzc/entity/vo/TzcRebateVo.java | 2 +- .../service/TzcRebateApplicationService.java | 5 ++ .../impl/TzcRebateApplicationServiceImpl.java | 46 +++-------- .../TzcRebateCheckApplicationServiceImpl.java | 77 +++++++++++++++++++ 13 files changed, 168 insertions(+), 46 deletions(-) diff --git a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/consts/TzcArgTypes.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/consts/TzcArgTypes.java index 824a6c0..a996e42 100644 --- a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/consts/TzcArgTypes.java +++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/consts/TzcArgTypes.java @@ -10,7 +10,7 @@ public enum TzcArgTypes { PeriodSupplement, // 坎级返利 扩展 LevelReturn, - // 坎级总目标返利 扩展 + // 坎级总目标返利 扩展(期间补偿) LevelOverallReturn } diff --git a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebate.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebate.java index 23ec6c0..e93f535 100644 --- a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebate.java +++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebate.java @@ -104,6 +104,21 @@ public class TzcRebate implements Serializable { @Length(max = 255,message = "备注长度不能超过255字") private String remark; + /** 申请人 */ + @NotBlank(message = "申请人不能为空") + @Length(max = 32,message = "申请人长度不能超过32字") + private String userId; + + /** 用户编码 */ + @Length(max = 32,message = "长度不能超过32字") + @TableField(condition = SqlCondition.LIKE) + private String userCode; + + /** 用户名称 */ + @Length(max = 32,message = "长度不能超过32字") + @TableField(condition = SqlCondition.LIKE) + private String userName; + /** 创建时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") diff --git a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevels.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevels.java index 94195ae..6aae046 100644 --- a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevels.java +++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevels.java @@ -61,6 +61,9 @@ public class TzcRebateLevels implements Serializable { @Length(max = 255,message = "备注长度不能超过255字") private String remark; + /** 前端用于绑定模板id */ + private String tmpUk; + /** 创建时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 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 444f89f..962a0e7 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 @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; +import com.qs.serve.common.exception.Assert; import lombok.Data; import org.hibernate.validator.constraints.Length; import org.springframework.format.annotation.DateTimeFormat; @@ -99,5 +100,44 @@ public class TzcRebateLevelsArgument implements Serializable { @JsonProperty private String delFlag; + public void check(String businessType) { + if (this.sumAddFlag == null) { + Assert.throwEx(businessType+":目标销量维度不能为空"); + } + if (this.rateAmtFlag == null) { + Assert.throwEx(businessType+":选择的策略不能为空"); + } + if (this.sumAddFlag == 0) { + if (this.rateAmtFlag == 0 && this.sumReturnRate == null){ + Assert.throwEx(businessType+":总量返利百分比不能为空"); + } + if (this.rateAmtFlag == 1 && this.sumReturnFixed == null){ + Assert.throwEx(businessType+":总量返利固定金额不能为空"); + } + if(sumMaxReturn==null){ + Assert.throwEx(businessType+":总量最高返利金额不能为空"); + } + }else if (this.sumAddFlag == 1) { + if (this.rateAmtFlag == 0 && this.addReturnRate == null){ + Assert.throwEx(businessType+":增量返利百分比不能为空"); + } + if (this.rateAmtFlag == 1 && this.addReturnFixed == null){ + Assert.throwEx(businessType+":增量返利固定金额不能为空"); + } + if(addMaxReturn==null){ + Assert.throwEx(businessType+":增量最高返利金额不能为空"); + } + } + } + + public BigDecimal getMaxReturnAmt(){ + if (this.sumAddFlag == 0) { + return this.sumMaxReturn; + }else if (this.sumAddFlag == 1) { + return this.addMaxReturn; + }else { + return null; + } + } } diff --git a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevelsConfig.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevelsConfig.java index 1a1af18..2e2539c 100644 --- a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevelsConfig.java +++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevelsConfig.java @@ -46,6 +46,9 @@ public class TzcRebateLevelsConfig implements Serializable { @Length(max = 255,message = "备注长度不能超过255字") private String remark; + /** 前端用于绑定模板id */ + private String tmpUk; + /** 创建时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") diff --git a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebatePeriod.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebatePeriod.java index f55ce70..df7946b 100644 --- a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebatePeriod.java +++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebatePeriod.java @@ -79,6 +79,9 @@ public class TzcRebatePeriod implements Serializable { @Length(max = 255,message = "备注长度不能超过255字") private String remark; + /** 前端用于绑定模板id */ + private String tmpUk; + /** 创建时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") diff --git a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateLevelsConfigParam.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateLevelsConfigParam.java index 0843721..67c8c19 100644 --- a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateLevelsConfigParam.java +++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateLevelsConfigParam.java @@ -27,5 +27,8 @@ public class TzcRebateLevelsConfigParam implements Serializable { /** 坎级设置;格式如:1,3,5 */ private String levelConfigs; + /** 前端用于绑定模板id */ + private String tmpUk; + } 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 72c2128..f13b906 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 @@ -56,5 +56,8 @@ public class TzcRebateLevelsParam implements Serializable { @Length(max = 255,message = "备注长度不能超过255字") private String remark; + /** 前端用于绑定模板id */ + private String tmpUk; + } diff --git a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebatePeriodParam.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebatePeriodParam.java index 6c40e70..a4ffd57 100644 --- a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebatePeriodParam.java +++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebatePeriodParam.java @@ -43,20 +43,18 @@ public class TzcRebatePeriodParam implements Serializable { /** 同期进货金额 */ private BigDecimal samePeriodAmount; - /** 总目标达标补偿 - * compensationFlag=1时,argumentParam不能为空 - */ - private Integer compensationFlag; - /** - * 补偿方案 + * 总目标达标补偿 */ - private TzcRebateArgumentParam argumentParam; + private Integer compensationFlag; /** 补充说明 */ @Length(max = 255,message = "备注长度不能超过255字") private String remark; + /** 前端用于绑定模板id */ + private String tmpUk; + } diff --git a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebateVo.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebateVo.java index 3a6680a..aded02c 100644 --- a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebateVo.java +++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebateVo.java @@ -16,7 +16,7 @@ public class TzcRebateVo extends TzcRebate { private List subjectList; - private List periodList; + private List periodList; private List configList; diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateApplicationService.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateApplicationService.java index 20766cb..049cf11 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateApplicationService.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateApplicationService.java @@ -11,6 +11,11 @@ import com.qs.serve.modules.tzc.entity.vo.TzcRebateVo; */ public interface TzcRebateApplicationService { + /** + * 根据id获取返利信息 + * @param id + * @return + */ TzcRebateVo getRebateVoById(Long id); /** 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 6a330f4..115b4a3 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 @@ -82,9 +82,7 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ List subjectVoList = buildSubjectVoList(subjectList, centerList); tzcRebateVo.setSubjectList(subjectVoList); - List periodVoList = buildPeriodVoList(argumentList, periodList); - tzcRebateVo.setPeriodList(periodVoList); - + tzcRebateVo.setPeriodList(periodList); tzcRebateVo.setGoodsList(goodsList); tzcRebateVo.setConfigList(configList); @@ -128,22 +126,6 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ return subjectVoList; } - @NotNull - private List buildPeriodVoList(List argumentList, List periodList) { - List periodVoList = new ArrayList<>(); - for (TzcRebatePeriod period : periodList) { - TzcRebatePeriodVo periodVo = CopierUtil.copy(period,new TzcRebatePeriodVo()); - for (TzcRebateLevelsArgument argument : argumentList) { - if(argument.getPeriodId().equals(period.getId())&& - argument.getBusinessType().equals(TzcArgTypes.PeriodSupplement.name())){ - periodVo.setArgument(argument); - } - } - periodVoList.add(periodVo); - } - return periodVoList; - } - @Override @Transactional(rollbackFor = Exception.class) public TzcRebate modifyRebate(TzcRebateParam param) { @@ -212,8 +194,9 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ for (TzcRebateLevelsConfigParam configParam : param.getConfigList()) { TzcRebateLevelsConfig config = new TzcRebateLevelsConfig(); config.setRebateId(rebateId); - config.setLevelNum(config.getLevelNum()); - config.setLevelConfigs(config.getLevelConfigs()); + config.setLevelNum(configParam.getLevelNum()); + config.setLevelConfigs(configParam.getLevelConfigs()); + config.setTmpUk(configParam.getTmpUk()); tzcRebateLevelsConfigService.save(config); } @@ -288,14 +271,14 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ */ public BigDecimal getMaxLevelsAmount(TzcRebateParam param){ int level = 0; - String config = ""; + String configString = ""; for (TzcRebateLevelsConfigParam configParam : param.getConfigList()) { if(configParam.getLevelNum()>level){ level = configParam.getLevelNum(); - config = configParam.getLevelConfigs(); + configString = configParam.getLevelConfigs(); } } - String[] configArr = config.split(","); + String[] configArr = configString.split(","); BigDecimal maxAmount = BigDecimal.ZERO; for (TzcRebateLevelsParam levelsParam : param.getLevelsList()) { String lvNum = levelsParam.getLevelNum()+""; @@ -330,6 +313,7 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ levels.setConditionAmount(levelsParam.getConditionAmount()); levels.setExampleRemark(levelsParam.getExampleRemark()); levels.setRemark(levelsParam.getRemark()); + levels.setTmpUk(levelsParam.getTmpUk()); tzcRebateLevelsService.save(levels); Long levelId = levels.getId(); @@ -389,15 +373,8 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ period.setSamePeriodAmount(periodParam.getSamePeriodAmount()); period.setCompensationFlag(periodParam.getCompensationFlag()); period.setRemark(periodParam.getRemark()); + period.setTmpUk(periodParam.getTmpUk()); tzcRebatePeriodService.save(period); - Long periodId = period.getId(); - - // 保存返利参数 - TzcRebateLevelsArgument argument = buildArgByParam(periodParam.getArgumentParam()); - argument.setBusinessType(TzcArgTypes.PeriodSupplement.name()); - argument.setLevelId(0L); - argument.setPeriodId(periodId); - tzcRebateLevelsArgumentService.save(argument); } } @@ -552,11 +529,6 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ Assert.throwEx("["+period.getPeriodTitle()+"]与["+period2.getPeriodTitle()+"],时间段存在交集"); } } - if(ResultFlag.isTrue(period.getCompensationFlag())){ - if(period.getArgumentParam()==null){ - Assert.throwEx("["+period.getPeriodTitle()+"]返利补偿不能为空"); - } - } } // 坎级数字必须唯一 diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateCheckApplicationServiceImpl.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateCheckApplicationServiceImpl.java index 60022fb..eeaf9ca 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateCheckApplicationServiceImpl.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateCheckApplicationServiceImpl.java @@ -1,13 +1,20 @@ package com.qs.serve.modules.tzc.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.qs.serve.modules.tbs.common.TbsCostApplyState; +import com.qs.serve.modules.tbs.entity.TbsCostApply; import com.qs.serve.modules.tbs.service.*; +import com.qs.serve.modules.tzc.consts.TzcArgTypes; import com.qs.serve.modules.tzc.entity.*; +import com.qs.serve.modules.tzc.entity.bo.TzcRebateLevelsConfigParam; +import com.qs.serve.modules.tzc.entity.bo.TzcRebateLevelsParam; import com.qs.serve.modules.tzc.service.*; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.List; /** @@ -48,6 +55,76 @@ public class TzcRebateCheckApplicationServiceImpl implements TzcRebateCheckAppli List centerList = tzcRebateCenterService.list(qw); List levelsList = tzcRebateLevelsService.list(qw); + // 计算最高坎级金额 + BigDecimal maxLevelsAmount = getMaxLevelsAmount(levelsList, argumentList, configList); + // 总返利金额 + BigDecimal totalAllAmount = maxLevelsAmount.multiply(new BigDecimal(periodList.size())); + + // TODO:校验返利参数 + + // 转化为费用申请 + TbsCostApply costApply = new TbsCostApply(); + costApply.setCode(rebate.getRebateCode()); + costApply.setMatchType(1); + costApply.setChargeTheme(rebate.getRebateName()); + costApply.setChargeState(TbsCostApplyState.State_0_unPublish.getCode()); + costApply.setSupplierId(rebate.getSupplierId()); + costApply.setSupplierName(rebate.getSupplierName()); + costApply.setSupplierCode(rebate.getSupplierCode()); + costApply.setUserId(rebate.getUserId()); + costApply.setUserCode(rebate.getUserCode()); + costApply.setUserName(rebate.getUserName()); + costApply.setTotalActivity(periodList.size()); + costApply.setTotalActivityAmount(totalAllAmount); + costApply.setSubmitTime(LocalDateTime.now()); + costApply.setRemark(rebate.getRemark()); + + } + + /** + * 获取最高坎级返回的金额 + * @param levelsList + * @param argumentList + * @param configList + * @return + */ + public BigDecimal getMaxLevelsAmount(List levelsList, + List argumentList, + List configList){ + int level = 0; + String configString = ""; + for (TzcRebateLevelsConfig config: configList) { + if(config.getLevelNum()>level){ + level = config.getLevelNum(); + configString = config.getLevelConfigs(); + } + } + String[] configArr = configString.split(","); + BigDecimal maxAmount = BigDecimal.ZERO; + for (TzcRebateLevels levels : levelsList) { + String lvNum = levels.getLevelNum()+""; + for (String levelNum : configArr) { + if(lvNum.equals(levelNum)){ + BigDecimal amt1 = BigDecimal.ZERO; + BigDecimal amt2 = BigDecimal.ZERO; + for (TzcRebateLevelsArgument argument : argumentList) { + if(argument.getLevelId().equals(levels.getId())){ + if (argument.getBusinessType().equals(TzcArgTypes.LevelReturn.name())){ + amt1 = argument.getMaxReturnAmt(); + }else if (argument.getBusinessType().equals(TzcArgTypes.LevelOverallReturn.name())){ + amt2 = argument.getMaxReturnAmt(); + } + } + } + if(amt1.compareTo(amt2)>0){ + maxAmount = amt1; + }else { + maxAmount = amt2; + } + } + } + } + return maxAmount; } }