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 60b96a5..23ec6c0 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 @@ -134,36 +134,5 @@ public class TzcRebate implements Serializable { @JsonProperty private String delFlag; - - public static TzcRebate toNewObject(TzcRebate source){ - TzcRebate rebate = new TzcRebate(); - rebate.setId(source.getId()); - rebate.setTemplateId(source.getTemplateId()); - rebate.setTemplateName(source.getTemplateName()); - rebate.setRebateCode(source.getRebateCode()); - rebate.setRebateName(source.getRebateName()); - rebate.setActivityStartTime(source.getActivityStartTime()); - rebate.setActivityEndTime(source.getActivityEndTime()); - rebate.setAutoDispatchFlag(source.getAutoDispatchFlag()); - rebate.setCheckModel(source.getCheckModel()); - rebate.setCheckMaxAmount(source.getCheckMaxAmount()); - rebate.setCheckAutoDateType(source.getCheckAutoDateType()); - rebate.setCheckStartDate(source.getCheckStartDate()); - rebate.setCheckEndDate(source.getCheckEndDate()); - rebate.setSupplierId(source.getSupplierId()); - rebate.setSupplierCode(source.getSupplierCode()); - rebate.setSupplierName(source.getSupplierName()); - rebate.setRebateAmount(source.getRebateAmount()); - rebate.setOverlayFlag(source.getOverlayFlag()); - rebate.setRemark(source.getRemark()); - rebate.setCreateTime(source.getCreateTime()); - rebate.setUpdateTime(source.getUpdateTime()); - rebate.setTenantId(source.getTenantId()); - rebate.setCreateBy(source.getCreateBy()); - rebate.setUpdateBy(source.getUpdateBy()); - rebate.setDelFlag(source.getDelFlag()); - return rebate; - } - } diff --git a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateCenter.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateCenter.java index 17e5721..42392a3 100644 --- a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateCenter.java +++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateCenter.java @@ -109,29 +109,5 @@ public class TzcRebateCenter implements Serializable { @Length(max = 200,message = "模板唯一健长度不能超过200字") private String tmpUk; - - public static TzcRebateCenter toNewObject(TzcRebateCenter source){ - TzcRebateCenter rebateCenter = new TzcRebateCenter(); - rebateCenter.setId(source.getId()); - rebateCenter.setRebateId(source.getRebateId()); - rebateCenter.setRebateSubjectId(source.getRebateSubjectId()); - rebateCenter.setSubjectId(source.getSubjectId()); - rebateCenter.setCenterAmount(source.getCenterAmount()); - rebateCenter.setCenterRate(source.getCenterRate()); - rebateCenter.setCenterType(source.getCenterType()); - rebateCenter.setCenterId(source.getCenterId()); - rebateCenter.setCenterCode(source.getCenterCode()); - rebateCenter.setCenterName(source.getCenterName()); - rebateCenter.setRemark(source.getRemark()); - rebateCenter.setCreateTime(source.getCreateTime()); - rebateCenter.setUpdateTime(source.getUpdateTime()); - rebateCenter.setTenantId(source.getTenantId()); - rebateCenter.setCreateBy(source.getCreateBy()); - rebateCenter.setUpdateBy(source.getUpdateBy()); - rebateCenter.setDelFlag(source.getDelFlag()); - rebateCenter.setTmpUk(source.getTmpUk()); - return rebateCenter; - } - } diff --git a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateGoods.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateGoods.java index fbfa81b..ef5eb38 100644 --- a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateGoods.java +++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateGoods.java @@ -104,27 +104,5 @@ public class TzcRebateGoods implements Serializable { @JsonProperty private String delFlag; - - public static TzcRebateGoods toNewObject(TzcRebateGoods source){ - TzcRebateGoods rebateGoods = new TzcRebateGoods(); - rebateGoods.setId(source.getId()); - rebateGoods.setRebateId(source.getRebateId()); - rebateGoods.setRebateCode(source.getRebateCode()); - rebateGoods.setTargetType(source.getTargetType()); - rebateGoods.setTargetId(source.getTargetId()); - rebateGoods.setTargetCode(source.getTargetCode()); - rebateGoods.setTargetName(source.getTargetName()); - rebateGoods.setTargetLevelPathIds(source.getTargetLevelPathIds()); - rebateGoods.setTargetLevelPathNames(source.getTargetLevelPathNames()); - rebateGoods.setRemark(source.getRemark()); - rebateGoods.setCreateTime(source.getCreateTime()); - rebateGoods.setUpdateTime(source.getUpdateTime()); - rebateGoods.setTenantId(source.getTenantId()); - rebateGoods.setCreateBy(source.getCreateBy()); - rebateGoods.setUpdateBy(source.getUpdateBy()); - rebateGoods.setDelFlag(source.getDelFlag()); - return rebateGoods; - } - } 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 5e2a693..94195ae 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 @@ -91,26 +91,5 @@ public class TzcRebateLevels implements Serializable { @JsonProperty private String delFlag; - - public static TzcRebateLevels toNewObject(TzcRebateLevels source){ - TzcRebateLevels rebateLevels = new TzcRebateLevels(); - rebateLevels.setId(source.getId()); - rebateLevels.setRebateId(source.getRebateId()); - rebateLevels.setLevelNum(source.getLevelNum()); - rebateLevels.setConditionType(source.getConditionType()); - rebateLevels.setConditionSelect(source.getConditionSelect()); - rebateLevels.setConditionRate(source.getConditionRate()); - rebateLevels.setConditionAmount(source.getConditionAmount()); - rebateLevels.setExampleRemark(source.getExampleRemark()); - rebateLevels.setRemark(source.getRemark()); - rebateLevels.setCreateTime(source.getCreateTime()); - rebateLevels.setUpdateTime(source.getUpdateTime()); - rebateLevels.setTenantId(source.getTenantId()); - rebateLevels.setCreateBy(source.getCreateBy()); - rebateLevels.setUpdateBy(source.getUpdateBy()); - rebateLevels.setDelFlag(source.getDelFlag()); - return rebateLevels; - } - } 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 9119084..444f89f 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 @@ -99,30 +99,5 @@ public class TzcRebateLevelsArgument implements Serializable { @JsonProperty private String delFlag; - - public static TzcRebateLevelsArgument toNewObject(TzcRebateLevelsArgument source){ - TzcRebateLevelsArgument rebateLevelsArgument = new TzcRebateLevelsArgument(); - rebateLevelsArgument.setId(source.getId()); - rebateLevelsArgument.setLevelId(source.getLevelId()); - rebateLevelsArgument.setBusinessType(source.getBusinessType()); - rebateLevelsArgument.setPeriodId(source.getPeriodId()); - rebateLevelsArgument.setSumAddFlag(source.getSumAddFlag()); - rebateLevelsArgument.setRateAmtFlag(source.getRateAmtFlag()); - rebateLevelsArgument.setSumReturnRate(source.getSumReturnRate()); - rebateLevelsArgument.setSumReturnFixed(source.getSumReturnFixed()); - rebateLevelsArgument.setSumMaxReturn(source.getSumMaxReturn()); - rebateLevelsArgument.setAddReturnRate(source.getAddReturnRate()); - rebateLevelsArgument.setAddReturnFixed(source.getAddReturnFixed()); - rebateLevelsArgument.setAddMaxReturn(source.getAddMaxReturn()); - rebateLevelsArgument.setRemark(source.getRemark()); - rebateLevelsArgument.setCreateTime(source.getCreateTime()); - rebateLevelsArgument.setUpdateTime(source.getUpdateTime()); - rebateLevelsArgument.setTenantId(source.getTenantId()); - rebateLevelsArgument.setCreateBy(source.getCreateBy()); - rebateLevelsArgument.setUpdateBy(source.getUpdateBy()); - rebateLevelsArgument.setDelFlag(source.getDelFlag()); - return rebateLevelsArgument; - } - } 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 0a3f37b..38d1ecf 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 @@ -4,6 +4,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; @@ -46,5 +47,45 @@ public class TzcRebateArgumentParam implements Serializable { /** 增量最高返利金额 */ private BigDecimal addMaxReturn; + 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/vo/TzcRebateLevelsVo.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebateLevelsVo.java new file mode 100644 index 0000000..d984ea7 --- /dev/null +++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebateLevelsVo.java @@ -0,0 +1,20 @@ +package com.qs.serve.modules.tzc.entity.vo; + +import com.qs.serve.modules.tzc.entity.TzcRebateLevels; +import com.qs.serve.modules.tzc.entity.TzcRebateLevelsArgument; +import lombok.Data; + +/** + * @author YenHex + * @since 2025/4/24 + */ +@Data +public class TzcRebateLevelsVo extends TzcRebateLevels { + + /** 返利-参数 */ + private TzcRebateLevelsArgument targetArgument; + + /** 总目标返利-参数 */ + private TzcRebateLevelsArgument overallTargetArgument; + +} 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 c432252..3a6680a 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 @@ -20,4 +20,6 @@ public class TzcRebateVo extends TzcRebate { private List configList; + private List levelsList; + } diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java index 7599125..4ef4976 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java @@ -1068,6 +1068,7 @@ public class BmsSupplierController { if(bmsRegionNames.size()>0){ LambdaQueryWrapper bmsRegionLambdaQueryWrapper = new LambdaQueryWrapper<>(); bmsRegionLambdaQueryWrapper.in(BmsRegion::getName,bmsRegionNames); + bmsRegionLambdaQueryWrapper.eq(BmsRegion::getStopFlag,0); regionList = bmsRegionService.list(bmsRegionLambdaQueryWrapper); List existBmsRegionName = regionList.stream().map(a->a.getName()).collect(Collectors.toList()); if(regionList.size() getById(@PathVariable("id") String id){ - TzcRebate tzcRebate = tzcRebateService.getById(id); + public R getById(@PathVariable("id") Long id){ + TzcRebateVo tzcRebate = tzcRebateApplicationService.getRebateVoById(id); return R.ok(tzcRebate); } 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 a309b54..20766cb 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 @@ -20,11 +20,5 @@ public interface TzcRebateApplicationService { */ TzcRebate modifyRebate(TzcRebateParam param); - /** - * 提交返利到OA - * @param id - */ - void commitRebate(Long id); - } diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateCheckApplicationService.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateCheckApplicationService.java new file mode 100644 index 0000000..d4ec1ab --- /dev/null +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateCheckApplicationService.java @@ -0,0 +1,21 @@ +package com.qs.serve.modules.tzc.service; + +import com.qs.serve.modules.tzc.entity.TzcRebate; +import com.qs.serve.modules.tzc.entity.bo.TzcRebateParam; +import com.qs.serve.modules.tzc.entity.vo.TzcRebateVo; + +/** + * 返利信息 服务接口 + * @author YenHex + * @date 2025-04-15 + */ +public interface TzcRebateCheckApplicationService { + + /** + * 提交返利到OA + * @param id + */ + void commitRebate(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 cf4cfb4..6a330f4 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 @@ -18,6 +18,7 @@ import com.qs.serve.modules.tbs.service.TbsCenterDtoService; import com.qs.serve.modules.tzc.consts.TzcArgTypes; import com.qs.serve.modules.tzc.entity.*; import com.qs.serve.modules.tzc.entity.bo.*; +import com.qs.serve.modules.tzc.entity.vo.TzcRebateLevelsVo; import com.qs.serve.modules.tzc.entity.vo.TzcRebatePeriodVo; import com.qs.serve.modules.tzc.entity.vo.TzcRebateSubjectVo; import com.qs.serve.modules.tzc.entity.vo.TzcRebateVo; @@ -31,6 +32,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -72,18 +74,43 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ List goodsList = tzcRebateGoodsService.list(qw); List configList = tzcRebateLevelsConfigService.list(qw); List centerList = tzcRebateCenterService.list(qw); + List levelsList = tzcRebateLevelsService.list(qw); + + List levelsVoList = buildLevelVoList(argumentList, levelsList); + tzcRebateVo.setLevelsList(levelsVoList); List subjectVoList = buildSubjectVoList(subjectList, centerList); tzcRebateVo.setSubjectList(subjectVoList); List periodVoList = buildPeriodVoList(argumentList, periodList); tzcRebateVo.setPeriodList(periodVoList); + tzcRebateVo.setGoodsList(goodsList); tzcRebateVo.setConfigList(configList); return tzcRebateVo; } + @NotNull + private List buildLevelVoList(List argumentList, List levelsList) { + List levelsVoList = new ArrayList<>(); + for (TzcRebateLevels levels : levelsList) { + TzcRebateLevelsVo levelsVo = CopierUtil.copy(levels,new TzcRebateLevelsVo()); + for (TzcRebateLevelsArgument argument : argumentList) { + if(argument.getLevelId().equals(levels.getId())){ + if (argument.getBusinessType().equals(TzcArgTypes.LevelReturn.name())){ + levelsVo.setTargetArgument(argument); + }else if (argument.getBusinessType().equals(TzcArgTypes.LevelOverallReturn.name())){ + levelsVo.setOverallTargetArgument(argument); + }else { + Assert.throwEx("坎级参数类型错误"); + } + } + } + } + return levelsVoList; + } + @NotNull private List buildSubjectVoList(List subjectList, List centerList) { List subjectVoList = new ArrayList<>(); @@ -136,9 +163,15 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ rebateCode = "FL"+CodeGenUtil.generate(CodeGenUtil.SourceKey.TZC_REBATE); } - // 校验返利参数 + // 校验返利参数(取消判断金额) this.validRebateParam(param); + // 获取最高坎级返回的金额 + BigDecimal maxAmount = this.getMaxLevelsAmount(param); + // 计算和平摊到科目和成本中心(不再读取前端的金额) + List subjectParamList = param.getSubjectList(); + this.calculateSubjectAndCenter(subjectParamList, maxAmount); + if (isUpdate){ //删除旧数据 this.removeOldRebateDataById(rebateId); @@ -156,7 +189,7 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ rebateId = rebate.getId(); // 返利的商品 - List tzcRebateGoodsList = this.buildRebateGoodsList(param.getGoodsList()); + List tzcRebateGoodsList = this.buildRebateGoodsList(param.getGoodsType(),param.getGoodsList()); // 返利的商品,关联主表id和code for (TzcRebateGoods rebateGoods : tzcRebateGoodsList) { rebateGoods.setRebateId(rebate.getId()); @@ -187,6 +220,100 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ return rebate; } + /** + * 计算和平摊到科目和成本中心(不再读取前端的金额) + * 均摊TzcRebateSubjectParam的subjectAmount + * 根据subjectAmount和centerRate均摊到TzcRebateCenterParam的centerAmount + * @param subjectParamList + * @param maxAmount + */ + private void calculateSubjectAndCenter(List subjectParamList, BigDecimal maxAmount) { + int subjectSize = subjectParamList.size(); + BigDecimal totalRate = BigDecimal.ZERO; + + // 计算总的比例 + for (TzcRebateSubjectParam subjectParam : subjectParamList) { + totalRate = totalRate.add(subjectParam.getSubjectRate()); + } + + BigDecimal remainingAmount = maxAmount; + for (int i = 0; i < subjectSize; i++) { + TzcRebateSubjectParam subjectParam = subjectParamList.get(i); + BigDecimal subjectRate = subjectParam.getSubjectRate(); + BigDecimal subjectAmount; + + if (i == subjectSize - 1) { + // 最后一个科目获得剩余金额 + subjectAmount = remainingAmount; + } else { + subjectAmount = maxAmount.multiply(subjectRate).divide(totalRate, 2, BigDecimal.ROUND_HALF_UP); + remainingAmount = remainingAmount.subtract(subjectAmount); + } + + subjectParam.setSubjectAmount(subjectAmount); + + // 处理成本中心 + List centerList = subjectParam.getCenterList(); + int centerSize = centerList.size(); + BigDecimal totalCenterRate = BigDecimal.ZERO; + + // 计算成本中心的总比例 + for (TzcRebateCenterParam centerParam : centerList) { + totalCenterRate = totalCenterRate.add(centerParam.getCenterRate()); + } + + BigDecimal remainingCenterAmount = subjectAmount; + for (int j = 0; j < centerSize; j++) { + TzcRebateCenterParam centerParam = centerList.get(j); + BigDecimal centerRate = centerParam.getCenterRate(); + BigDecimal centerAmount; + + if (j == centerSize - 1) { + // 最后一个成本中心获得剩余金额 + centerAmount = remainingCenterAmount; + } else { + centerAmount = subjectAmount.multiply(centerRate).divide(totalCenterRate, 2, BigDecimal.ROUND_HALF_UP); + remainingCenterAmount = remainingCenterAmount.subtract(centerAmount); + } + + centerParam.setCenterAmount(centerAmount); + } + } + } + + /** + * 获取最高坎级返回的金额 + * @param param + * @return + */ + public BigDecimal getMaxLevelsAmount(TzcRebateParam param){ + int level = 0; + String config = ""; + for (TzcRebateLevelsConfigParam configParam : param.getConfigList()) { + if(configParam.getLevelNum()>level){ + level = configParam.getLevelNum(); + config = configParam.getLevelConfigs(); + } + } + String[] configArr = config.split(","); + BigDecimal maxAmount = BigDecimal.ZERO; + for (TzcRebateLevelsParam levelsParam : param.getLevelsList()) { + String lvNum = levelsParam.getLevelNum()+""; + for (String levelNum : configArr) { + if(lvNum.equals(levelNum)){ + BigDecimal amt1 = levelsParam.getTargetArgument().getMaxReturnAmt(); + BigDecimal amt2 = levelsParam.getOverallTargetArgument().getMaxReturnAmt(); + if(amt1.compareTo(amt2)>0){ + maxAmount = amt1; + }else { + maxAmount = amt2; + } + } + } + } + return maxAmount; + } + /** * 保存坎级和设置参数 * @param param @@ -343,27 +470,32 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ } @NotNull - private List buildRebateGoodsList(List goodsList) { + private List buildRebateGoodsList(String goodsTypeAll,List goodsList) { List tzcRebateGoodsList = new ArrayList<>(); + // 方式一:支持多种 // Map> goodsListMap = goodsList.stream() // .collect(Collectors.groupingBy(TzcRebateGoodsParam::getGoodsType)); -// for (Map.Entry> entry : goodsListMap.entrySet()) { -// String goodsType = entry.getKey(); -// List goodsParamList = entry.getValue(); -// List goodsTargetList = goodsApplicationService.getGoodsTargetInfo(goodsType,goodsParamList.stream() -// .map(TzcRebateGoodsParam::getGoodsId).collect(Collectors.toList())); -// for (GoodsTargetInfo targetInfo : goodsTargetList) { -// TzcRebateGoods rebateGoods = CopierUtil.copy(targetInfo,new TzcRebateGoods()); -// for (TzcRebateGoodsParam goodsParam : goodsParamList) { -// if(goodsParam.getGoodsId().equals(targetInfo.getTargetId())){ -// rebateGoods.setTmpUk(goodsParam.getTmpUk()); -// rebateGoods.setRemark(goodsParam.getRemark()); -// break; -// } -// } -// tzcRebateGoodsList.add(rebateGoods); -// } -// } + // 方式二:只支持一种,兼容旧活动接口参数 + Map> goodsListMap = new HashMap<>(); + goodsListMap.put(goodsTypeAll,goodsList); + + for (Map.Entry> entry : goodsListMap.entrySet()) { + String goodsType = entry.getKey(); + List goodsParamList = entry.getValue(); + List goodsTargetList = goodsApplicationService.getGoodsTargetInfo(goodsType,goodsParamList.stream() + .map(TzcRebateGoodsParam::getGoodsId).collect(Collectors.toList())); + for (GoodsTargetInfo targetInfo : goodsTargetList) { + TzcRebateGoods rebateGoods = CopierUtil.copy(targetInfo,new TzcRebateGoods()); + for (TzcRebateGoodsParam goodsParam : goodsParamList) { + if(goodsParam.getGoodsId().equals(targetInfo.getTargetId())){ + rebateGoods.setTmpUk(goodsParam.getTmpUk()); + rebateGoods.setRemark(goodsParam.getRemark()); + break; + } + } + tzcRebateGoodsList.add(rebateGoods); + } + } return tzcRebateGoodsList; } @@ -381,9 +513,9 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ if(centerParam.getCenterRate().compareTo(BigDecimal.ZERO)<0){ Assert.throwEx("成本中心占比不能小于0"); } - if(centerParam.getCenterAmount().compareTo(BigDecimal.ZERO)<0){ - Assert.throwEx("成本中心额度不能小于0"); - } +// if(centerParam.getCenterAmount().compareTo(BigDecimal.ZERO)<0){ +// Assert.throwEx("成本中心额度不能小于0"); +// } totalCenterRate = totalCenterRate.add(centerParam.getCenterRate()); totalCenterAmount = totalCenterAmount.add(centerParam.getCenterAmount()); } @@ -396,9 +528,9 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ if(subjectParam.getSubjectRate().compareTo(BigDecimal.ZERO)<0){ Assert.throwEx("科目占比不能小于0"); } - if(subjectParam.getSubjectAmount().compareTo(BigDecimal.ZERO)<0){ - Assert.throwEx("科目额度不能小于0"); - } +// if(subjectParam.getSubjectAmount().compareTo(BigDecimal.ZERO)<0){ +// Assert.throwEx("科目额度不能小于0"); +// } totalRate = totalRate.add(subjectParam.getSubjectRate()); totalAmount = totalAmount.add(subjectParam.getSubjectAmount()); @@ -406,9 +538,9 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ if(totalRate.compareTo(oneHundred)!=0){ Assert.throwEx("科目占比合计["+totalRate+"%]不为100%"); } - if(totalAmount.compareTo(param.getRebateAmount())!=0){ - Assert.throwEx("科目额度合计异常金额:"+totalAmount+"元"); - } +// if(totalAmount.compareTo(param.getRebateAmount())!=0){ +// Assert.throwEx("科目额度合计异常金额:"+totalAmount+"元"); +// } List periodList = param.getPeriodList(); for (int i = 0; i < periodList.size(); i++) { @@ -427,6 +559,21 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ } } + // 坎级数字必须唯一 + if(CollUtil.isNotEmpty(param.getLevelsList())){ + Map> map = param.getLevelsList().stream() + .collect(Collectors.groupingBy(TzcRebateLevelsParam::getLevelNum)); + for (Map.Entry> entry : map.entrySet()) { + List levelsList = entry.getValue(); + if(levelsList.size()>1){ + Assert.throwEx("坎级数字["+entry.getKey()+"]不能重复"); + } + TzcRebateLevelsParam levels = levelsList.get(0); + levels.getTargetArgument().check("返利"); + levels.getOverallTargetArgument().check("总目标返利"); + } + } + // 校验坎级叠加 if(ResultFlag.isTrue(param.getOverlayFlag())){ if(CollUtil.isEmpty(param.getConfigList())){ @@ -435,9 +582,4 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ } } - @Override - public void commitRebate(Long id) { - - } - } 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 new file mode 100644 index 0000000..60022fb --- /dev/null +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateCheckApplicationServiceImpl.java @@ -0,0 +1,53 @@ +package com.qs.serve.modules.tzc.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.qs.serve.modules.tbs.service.*; +import com.qs.serve.modules.tzc.entity.*; +import com.qs.serve.modules.tzc.service.*; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author YenHex + * @since 2025/4/24 + */ +@Slf4j +@Service +@AllArgsConstructor +public class TzcRebateCheckApplicationServiceImpl implements TzcRebateCheckApplicationService { + + private final TzcRebateService tzcRebateService; + private final TzcRebateSubjectService tzcRebateSubjectService; + private final TzcRebateCenterService tzcRebateCenterService; + private final TzcRebatePeriodService tzcRebatePeriodService; + private final TzcRebateLevelsArgumentService tzcRebateLevelsArgumentService; + private final TzcRebateGoodsService tzcRebateGoodsService; + private final TzcRebateLevelsConfigService tzcRebateLevelsConfigService; + private final TzcRebateLevelsService tzcRebateLevelsService; + + private final TbsCostApplyService tbsCostApplyService; + private final TbsActivityService tbsActivityService; + private final TbsActivityCenterService tbsActivityCenterService; + private final TbsActivitySubjectService tbsActivitySubjectService; + private final TbsActivityGoodsService tbsActivityGoodsService; + private final TbsActivityCenterGoodsService tbsActivityCenterGoodsService; + + @Override + public void commitRebate(Long id) { + TzcRebate rebate = tzcRebateService.getById(id); + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("rebate_id", id); + List argumentList = tzcRebateLevelsArgumentService.list(qw); + List subjectList = tzcRebateSubjectService.list(qw); + List periodList = tzcRebatePeriodService.list(qw); + List goodsList = tzcRebateGoodsService.list(qw); + List configList = tzcRebateLevelsConfigService.list(qw); + List centerList = tzcRebateCenterService.list(qw); + List levelsList = tzcRebateLevelsService.list(qw); + + } + +}