From 0c4c36264554d82c9d522980bf611ccefddd5e9a Mon Sep 17 00:00:00 2001 From: Yen Date: Thu, 24 Apr 2025 09:24:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BC=96=E8=BE=91=E5=92=8C=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E8=BF=94=E5=88=A9=E5=AE=9E=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/qs/serve/common/exception/Assert.java | 8 + .../serve/modules/tzc/consts/TzcArgTypes.java | 8 +- .../tzc/entity/bo/TzcRebateGoodsParam.java | 5 - .../tzc/entity/bo/TzcRebateLevelsParam.java | 2 +- .../modules/tzc/entity/bo/TzcRebateParam.java | 12 + .../tzc/entity/vo/TzcRebatePeriodVo.java | 22 ++ .../tzc/entity/vo/TzcRebateSubjectVo.java | 18 ++ .../modules/tzc/entity/vo/TzcRebateVo.java | 23 ++ .../impl/TzcRebateApplicationServiceImpl.java | 14 +- .../tzc/controller/TzcRebateController.java | 90 ++++++ .../service/TzcRebateApplicationService.java | 6 +- .../impl/TzcRebateApplicationServiceImpl.java | 258 ++++++++++++++---- 12 files changed, 393 insertions(+), 73 deletions(-) create mode 100644 cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebatePeriodVo.java create mode 100644 cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebateSubjectVo.java create mode 100644 cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebateVo.java create mode 100644 cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebateController.java diff --git a/cms-common/src/main/java/com/qs/serve/common/exception/Assert.java b/cms-common/src/main/java/com/qs/serve/common/exception/Assert.java index 4177e0d..abc80ed 100644 --- a/cms-common/src/main/java/com/qs/serve/common/exception/Assert.java +++ b/cms-common/src/main/java/com/qs/serve/common/exception/Assert.java @@ -25,4 +25,12 @@ public class Assert { throw new BusinessException(msg,500); } + public static void isNull(Object obj,String msg){ + if(obj == null){ + throw new BusinessException(msg,500); + } + } + + + } 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 d5f69ce..824a6c0 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 @@ -7,8 +7,10 @@ package com.qs.serve.modules.tzc.consts; public enum TzcArgTypes { // 期间补偿 扩展 - PeriodExtend, - // 坎级 扩展 - LevelExtend + PeriodSupplement, + // 坎级返利 扩展 + LevelReturn, + // 坎级总目标返利 扩展 + LevelOverallReturn } diff --git a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateGoodsParam.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateGoodsParam.java index a809950..3e50ad2 100644 --- a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateGoodsParam.java +++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateGoodsParam.java @@ -16,11 +16,6 @@ import java.time.LocalDateTime; @Data public class TzcRebateGoodsParam { - /** - * 产品类型:brand、category、series、spu、sku - */ - private String goodsType; - /** * 产品id */ 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 75266e0..72c2128 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 @@ -46,7 +46,7 @@ public class TzcRebateLevelsParam implements Serializable { private TzcRebateArgumentParam targetArgument; /** 总目标返利-参数 */ - private TzcRebateArgumentParam allTargetArgument; + private TzcRebateArgumentParam overallTargetArgument; /** 返利说明和计算例子 */ @Length(max = 600,message = "返利说明和计算例子长度不能超过600字") 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 34000ee..c6c3cd0 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 @@ -1,6 +1,8 @@ package com.qs.serve.modules.tzc.entity.bo; import com.fasterxml.jackson.annotation.JsonFormat; +import com.qs.serve.modules.tzc.entity.TzcRebate; +import com.qs.serve.modules.tzc.entity.TzcRebateLevels; import com.qs.serve.modules.tzc.entity.TzcRebateSubject; import lombok.Data; import org.hibernate.validator.constraints.Length; @@ -69,6 +71,11 @@ public class TzcRebateParam{ /** 备注 */ private String remark; + /** + * 产品类型:brand、category、series、spu、sku + */ + private String goodsType; + /** * 商品列表 */ @@ -89,4 +96,9 @@ public class TzcRebateParam{ */ private List configList; + /** + * 坎级配置列 + */ + private List levelsList; + } diff --git a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebatePeriodVo.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebatePeriodVo.java new file mode 100644 index 0000000..7a5d5ea --- /dev/null +++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebatePeriodVo.java @@ -0,0 +1,22 @@ +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 com.qs.serve.modules.tzc.entity.TzcRebatePeriod; +import com.qs.serve.modules.tzc.entity.bo.TzcRebateArgumentParam; +import lombok.Data; + +/** + * @author YenHex + * @since 2025/4/24 + */ +@Data +public class TzcRebatePeriodVo extends TzcRebatePeriod { + + + /** + * 补偿方案 + */ + private TzcRebateLevelsArgument argument; + +} diff --git a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebateSubjectVo.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebateSubjectVo.java new file mode 100644 index 0000000..8b16e53 --- /dev/null +++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebateSubjectVo.java @@ -0,0 +1,18 @@ +package com.qs.serve.modules.tzc.entity.vo; + +import com.qs.serve.modules.tzc.entity.TzcRebateCenter; +import com.qs.serve.modules.tzc.entity.TzcRebateSubject; +import lombok.Data; + +import java.util.List; + +/** + * @author YenHex + * @since 2025/4/24 + */ +@Data +public class TzcRebateSubjectVo extends TzcRebateSubject { + + List centerList; + +} 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 new file mode 100644 index 0000000..c432252 --- /dev/null +++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebateVo.java @@ -0,0 +1,23 @@ +package com.qs.serve.modules.tzc.entity.vo; + +import com.qs.serve.modules.tzc.entity.*; +import lombok.Data; + +import java.util.List; + +/** + * @author YenHex + * @since 2025/4/23 + */ +@Data +public class TzcRebateVo extends TzcRebate { + + private List goodsList; + + private List subjectList; + + private List periodList; + + private List configList; + +} diff --git a/cms-modules/cms-policy/cms-policy-bus/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplicationServiceImpl.java b/cms-modules/cms-policy/cms-policy-bus/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplicationServiceImpl.java index b8d84da..b9887f3 100644 --- a/cms-modules/cms-policy/cms-policy-bus/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplicationServiceImpl.java +++ b/cms-modules/cms-policy/cms-policy-bus/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplicationServiceImpl.java @@ -26,6 +26,7 @@ import org.springframework.stereotype.Service; 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; @@ -93,7 +94,7 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ rebate.setRemark(param.getRemark()); // 返利的商品 - List tzcRebateGoodsList = this.buildRebateGoodsList(param.getGoodsList()); + List tzcRebateGoodsList = this.buildRebateGoodsList(param.getGoodsType(),param.getGoodsList()); // 返利的商品,关联主表id和code for (TzcRebateGoods rebateGoods : tzcRebateGoodsList) { rebateGoods.setRebateId(rebate.getId()); @@ -127,10 +128,15 @@ 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)); + // 方式一:支持多种 +// Map> goodsListMap = goodsList.stream() +// .collect(Collectors.groupingBy(TzcRebateGoodsParam::getGoodsType)); + // 方式二:只支持一种,兼容旧活动接口参数 + Map> goodsListMap = new HashMap<>(); + goodsListMap.put(goodsTypeAll,goodsList); + for (Map.Entry> entry : goodsListMap.entrySet()) { String goodsType = entry.getKey(); List goodsParamList = entry.getValue(); 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 new file mode 100644 index 0000000..93d5297 --- /dev/null +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebateController.java @@ -0,0 +1,90 @@ +package com.qs.serve.modules.tzc.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qs.serve.common.annotation.SysLog; +import com.qs.serve.common.enums.BizType; +import com.qs.serve.common.enums.SystemModule; +import com.qs.serve.common.utils.CopierUtil; +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.modules.tzc.entity.bo.TzcRebateParam; +import com.qs.serve.modules.tzc.service.TzcRebateApplicationService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import com.qs.serve.modules.tzc.entity.TzcRebate; +import com.qs.serve.modules.tzc.service.TzcRebateService; + +import javax.validation.Valid; +import java.util.List; + +/** + * 政策 返利信息 + * @author YenHex + * @since 2025-04-23 + */ +@Slf4j +@AllArgsConstructor +@RestController +@RequestMapping("tzc/rebate") +public class TzcRebateController { + + private TzcRebateService tzcRebateService; + private TzcRebateApplicationService tzcRebateApplicationService; + + + /** + * 翻页 + * @param param + * @return + */ + @GetMapping("/page") + public R> getPage(TzcRebate param){ + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(param); + PageUtil.startPage(); + List list = tzcRebateService.list(lqw); + return R.byPageHelperList(list); + } + + /** + * ID查询 + * @param id + * @return + */ + @GetMapping("/getById/{id}") + public R getById(@PathVariable("id") String id){ + TzcRebate tzcRebate = tzcRebateService.getById(id); + return R.ok(tzcRebate); + } + + /** + * 更新 + * @param param + * @return + */ + @PostMapping("/modifyRebate") + @SysLog(module = SystemModule.Policy, title = "返利信息", biz = BizType.UPDATE) + public R modifyRebate(@RequestBody @Valid TzcRebateParam param){ + TzcRebate tzcRebate = tzcRebateApplicationService.modifyRebate(param); + return R.ok(tzcRebate); + } + + /** + * 删除 + * @param ids + * @return + */ + @DeleteMapping("/deleteById/{ids}") + @SysLog(module = SystemModule.Policy, title = "返利信息", biz = BizType.DELETE) + public R deleteById(@PathVariable("ids") String ids){ + List idsLong = StringUtils.splitIdLong(ids); + boolean result = tzcRebateService.removeByIds(idsLong); + return R.isTrue(result); + } + +} + 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 22ed83d..a309b54 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 @@ -1,6 +1,8 @@ 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; /** * 返利信息 服务接口 @@ -9,12 +11,14 @@ import com.qs.serve.modules.tzc.entity.bo.TzcRebateParam; */ public interface TzcRebateApplicationService { + TzcRebateVo getRebateVoById(Long id); + /** * 编辑返利实体类 * @param param * @return */ - Object modifyRebate(TzcRebateParam param); + TzcRebate modifyRebate(TzcRebateParam param); /** * 提交返利到OA 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 9e3c48c..cf4cfb4 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 @@ -1,6 +1,7 @@ package com.qs.serve.modules.tzc.service.impl; import cn.hutool.core.collection.CollUtil; +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.model.ResultFlag; @@ -17,6 +18,9 @@ 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.TzcRebatePeriodVo; +import com.qs.serve.modules.tzc.entity.vo.TzcRebateSubjectVo; +import com.qs.serve.modules.tzc.entity.vo.TzcRebateVo; import com.qs.serve.modules.tzc.enums.TzcRebateStatus; import com.qs.serve.modules.tzc.service.*; import lombok.AllArgsConstructor; @@ -47,6 +51,7 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ private final TzcRebateLevelsArgumentService tzcRebateLevelsArgumentService; private final TzcRebateGoodsService tzcRebateGoodsService; private final TzcRebateLevelsConfigService tzcRebateLevelsConfigService; + private final TzcRebateLevelsService tzcRebateLevelsService; private final BmsCostCenterMapper bmsCostCenterMapper; private final BmsSupplierMapper bmsSupplierMapper; @@ -54,14 +59,74 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ private final GoodsApplicationService goodsApplicationService; private final TbsCenterDtoService tbsCenterDtoService; + @Override + public TzcRebateVo getRebateVoById(Long id) { + TzcRebate tzcRebate = tzcRebateService.getById(id); + Assert.isNull(tzcRebate, "返利不存在"); + TzcRebateVo tzcRebateVo = CopierUtil.copy(tzcRebate,new TzcRebateVo()); + 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 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 buildSubjectVoList(List subjectList, List centerList) { + List subjectVoList = new ArrayList<>(); + for (TzcRebateSubject subject : subjectList) { + List currentCenterList = new ArrayList<>(); + for (TzcRebateCenter center : centerList) { + if (center.getRebateSubjectId().equals(subject.getId())){ + currentCenterList.add(center); + } + } + TzcRebateSubjectVo subjectVo = CopierUtil.copy(subject,new TzcRebateSubjectVo()); + subjectVo.setCenterList(currentCenterList); + subjectVoList.add(subjectVo); + } + 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 Object modifyRebate(TzcRebateParam param) { + public TzcRebate modifyRebate(TzcRebateParam param) { + boolean isUpdate = false; Long rebateId = param.getId(); - String rebateCode = null; + String rebateCode; if(rebateId!=null){ + isUpdate = true; TzcRebate rebate = tzcRebateService.getById(rebateId); if(TzcRebateStatus.DRAFT.isEqual(rebate.getRebateStatus())){ Assert.throwEx("返利状态为初始化,不能修改"); @@ -74,11 +139,89 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ // 校验返利参数 this.validRebateParam(param); + if (isUpdate){ + //删除旧数据 + this.removeOldRebateDataById(rebateId); + } + BmsSupplier supplier = bmsSupplierMapper.selectById(param.getSupplierId()); if(supplier==null){ Assert.throwEx("客户不存在"); } + // 返利主表信息 + TzcRebate rebate = buildRebateInfo(param, rebateId, rebateCode, supplier); + tzcRebateService.saveOrUpdate(rebate); + // 重新赋值获取最新id + rebateId = rebate.getId(); + + // 返利的商品 + List tzcRebateGoodsList = this.buildRebateGoodsList(param.getGoodsList()); + // 返利的商品,关联主表id和code + for (TzcRebateGoods rebateGoods : tzcRebateGoodsList) { + rebateGoods.setRebateId(rebate.getId()); + rebateGoods.setRebateCode(rebate.getRebateCode()); + } + tzcRebateGoodsService.saveBatch(tzcRebateGoodsList); + + // 返利的成本中心(引用类型赋值) + List rebateCenterList = new ArrayList<>(); + // 返利的科目 + List tzcRebateSubjectList = this.buildRebateSubjectList(rebateId,param.getSubjectList(),rebateCenterList); + + // 期间及补偿参数保存 + this.savePeriodList(param.getPeriodList(), rebateId); + + // 保存坎级和设置参数 + this.saveLevelListAndArgs(param, rebateId); + + // 保存坎级叠加配置 + for (TzcRebateLevelsConfigParam configParam : param.getConfigList()) { + TzcRebateLevelsConfig config = new TzcRebateLevelsConfig(); + config.setRebateId(rebateId); + config.setLevelNum(config.getLevelNum()); + config.setLevelConfigs(config.getLevelConfigs()); + tzcRebateLevelsConfigService.save(config); + } + + return rebate; + } + + /** + * 保存坎级和设置参数 + * @param param + * @param rebateId + */ + private void saveLevelListAndArgs(TzcRebateParam param, Long rebateId) { + for (TzcRebateLevelsParam levelsParam : param.getLevelsList()) { + TzcRebateLevels levels = new TzcRebateLevels(); + levels.setRebateId(rebateId); + levels.setLevelNum(levelsParam.getLevelNum()); + levels.setConditionType(levelsParam.getConditionType()); + levels.setConditionSelect(levelsParam.getConditionSelect()); + levels.setConditionRate(levelsParam.getConditionRate()); + levels.setConditionAmount(levelsParam.getConditionAmount()); + levels.setExampleRemark(levelsParam.getExampleRemark()); + levels.setRemark(levelsParam.getRemark()); + tzcRebateLevelsService.save(levels); + Long levelId = levels.getId(); + + TzcRebateLevelsArgument argument = buildArgByParam(levelsParam.getOverallTargetArgument()); + argument.setBusinessType(TzcArgTypes.LevelOverallReturn.name()); + argument.setLevelId(levelId); + argument.setPeriodId(0L); + tzcRebateLevelsArgumentService.save(argument); + + TzcRebateLevelsArgument argument2 = buildArgByParam(levelsParam.getTargetArgument()); + argument2.setBusinessType(TzcArgTypes.LevelReturn.name()); + argument2.setLevelId(levelId); + argument2.setPeriodId(0L); + tzcRebateLevelsArgumentService.save(argument2); + } + } + + @NotNull + private TzcRebate buildRebateInfo(TzcRebateParam param, Long rebateId, String rebateCode, BmsSupplier supplier) { TzcRebate rebate = new TzcRebate(); rebate.setId(rebateId); rebate.setRebateCode(rebateCode); @@ -100,26 +243,16 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ rebate.setRebateAmount(param.getRebateAmount()); rebate.setOverlayFlag(param.getOverlayFlag()); rebate.setRemark(param.getRemark()); - tzcRebateService.saveOrUpdate(rebate); - // 重新赋值获取最新id - rebateId = rebate.getId(); - - // 返利的商品 - List tzcRebateGoodsList = this.buildRebateGoodsList(param.getGoodsList()); - // 返利的商品,关联主表id和code - for (TzcRebateGoods rebateGoods : tzcRebateGoodsList) { - rebateGoods.setRebateId(rebate.getId()); - rebateGoods.setRebateCode(rebate.getRebateCode()); - } - tzcRebateGoodsService.saveBatch(tzcRebateGoodsList); - - // 返利的成本中心(引用类型赋值) - List rebateCenterList = new ArrayList<>(); - // 返利的科目 - List tzcRebateSubjectList = this.buildRebateSubjectList(rebateId,param.getSubjectList(),rebateCenterList); + return rebate; + } - // 期间及补偿参数保存 - for (TzcRebatePeriodParam periodParam : param.getPeriodList()) { + /** + * 期间及补偿参数保存 + * @param periodParamList + * @param rebateId + */ + private void savePeriodList(List periodParamList, Long rebateId) { + for (TzcRebatePeriodParam periodParam : periodParamList) { TzcRebatePeriod period = new TzcRebatePeriod(); period.setRebateId(rebateId); period.setPeriodTitle(periodParam.getPeriodTitle()); @@ -132,31 +265,38 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ tzcRebatePeriodService.save(period); Long periodId = period.getId(); - TzcRebateArgumentParam argumentParam = periodParam.getArgumentParam(); - TzcRebateLevelsArgument argument = new TzcRebateLevelsArgument(); - argument.setBusinessType(TzcArgTypes.PeriodExtend.name()); + // 保存返利参数 + TzcRebateLevelsArgument argument = buildArgByParam(periodParam.getArgumentParam()); + argument.setBusinessType(TzcArgTypes.PeriodSupplement.name()); argument.setLevelId(0L); argument.setPeriodId(periodId); - argument.setSumAddFlag(argumentParam.getSumAddFlag()); - argument.setRateAmtFlag(argumentParam.getRateAmtFlag()); - argument.setSumReturnRate(argumentParam.getSumReturnRate()); - argument.setSumReturnFixed(argumentParam.getSumReturnFixed()); - argument.setSumMaxReturn(argumentParam.getSumMaxReturn()); - argument.setAddReturnRate(argumentParam.getAddReturnRate()); - argument.setAddReturnFixed(argumentParam.getAddReturnFixed()); - argument.setAddMaxReturn(argumentParam.getAddMaxReturn()); tzcRebateLevelsArgumentService.save(argument); } + } - for (TzcRebateLevelsConfigParam configParam : param.getConfigList()) { - TzcRebateLevelsConfig config = new TzcRebateLevelsConfig(); - config.setRebateId(rebateId); - config.setLevelNum(config.getLevelNum()); - config.setLevelConfigs(config.getLevelConfigs()); - tzcRebateLevelsConfigService.save(config); - } + @NotNull + private TzcRebateLevelsArgument buildArgByParam(TzcRebateArgumentParam argumentParam) { + TzcRebateLevelsArgument argument = new TzcRebateLevelsArgument(); + argument.setSumAddFlag(argumentParam.getSumAddFlag()); + argument.setRateAmtFlag(argumentParam.getRateAmtFlag()); + argument.setSumReturnRate(argumentParam.getSumReturnRate()); + argument.setSumReturnFixed(argumentParam.getSumReturnFixed()); + argument.setSumMaxReturn(argumentParam.getSumMaxReturn()); + argument.setAddReturnRate(argumentParam.getAddReturnRate()); + argument.setAddReturnFixed(argumentParam.getAddReturnFixed()); + argument.setAddMaxReturn(argumentParam.getAddMaxReturn()); + return argument; + } - return null; + private void removeOldRebateDataById(Long rebateId) { + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("rebate_id", rebateId); + tzcRebateSubjectService.remove(qw); + tzcRebateCenterService.remove(qw); + tzcRebatePeriodService.remove(qw); + tzcRebateLevelsArgumentService.remove(qw); + tzcRebateGoodsService.remove(qw); + tzcRebateLevelsConfigService.remove(qw); } @NotNull @@ -205,25 +345,25 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ @NotNull private List buildRebateGoodsList(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 = 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); +// } +// } return tzcRebateGoodsList; }