From ded2ab4e0b621e7f03efce741d5a361baf231640 Mon Sep 17 00:00:00 2001 From: Yen Date: Sun, 27 Apr 2025 11:29:21 +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/entity/TzcRebate.java | 2 + .../TzcRebateApplication4CostService.java | 38 ++++ .../TzcRebateCheckApplicationService.java | 21 --- ...TzcRebateApplication4CostServiceImpl.java} | 172 ++++++++++-------- .../impl/TzcRebateApplicationServiceImpl.java | 33 +++- 5 files changed, 166 insertions(+), 100 deletions(-) create mode 100644 cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateApplication4CostService.java delete mode 100644 cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateCheckApplicationService.java rename cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/{TzcRebateCheckApplicationServiceImpl.java => TzcRebateApplication4CostServiceImpl.java} (63%) 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 be02a81..1a10adc 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 @@ -31,6 +31,8 @@ public class TzcRebate implements Serializable { @TableId(type = IdType.AUTO) private Long id; + private Long costApplyId; + /** 模板id */ private Long templateId; diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateApplication4CostService.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateApplication4CostService.java new file mode 100644 index 0000000..e4059af --- /dev/null +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateApplication4CostService.java @@ -0,0 +1,38 @@ +package com.qs.serve.modules.tzc.service; + +import com.qs.serve.modules.tzc.entity.*; +import com.qs.serve.modules.tzc.entity.bo.TzcRebateParam; +import com.qs.serve.modules.tzc.entity.vo.TzcRebateVo; + +import java.util.List; + +/** + * 返利信息 服务接口 + * @author YenHex + * @date 2025-04-15 + */ +public interface TzcRebateApplication4CostService { + + /** + * 通过返利构建费用和活动 + * @param rebate + * @param argumentList + * @param subjectList + * @param periodList + * @param goodsList + * @param configList + * @param centerList + * @param levelsList + * @return 费用ID + */ + Long buildCostAndActivity(TzcRebate rebate, + List argumentList, + List subjectList, + List periodList, + List goodsList, + List configList, + List centerList, + List levelsList); + +} + 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 deleted file mode 100644 index d4ec1ab..0000000 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateCheckApplicationService.java +++ /dev/null @@ -1,21 +0,0 @@ -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/TzcRebateCheckApplicationServiceImpl.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java similarity index 63% rename from cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateCheckApplicationServiceImpl.java rename to cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java index 7e5a94e..02c03ff 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/TzcRebateApplication4CostServiceImpl.java @@ -1,7 +1,7 @@ package com.qs.serve.modules.tzc.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.qs.serve.framework.base.model.ResultFlag; import com.qs.serve.modules.tbs.common.TbsActivityState; import com.qs.serve.modules.tbs.common.TbsCostApplyState; import com.qs.serve.modules.tbs.entity.*; @@ -9,11 +9,10 @@ import com.qs.serve.modules.tbs.mapper.TbsActivityMapper; 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.jetbrains.annotations.NotNull; import org.springframework.stereotype.Service; import java.math.BigDecimal; @@ -31,16 +30,7 @@ import java.util.stream.Collectors; @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; +public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplication4CostService { private final TbsActivityMapper tbsActivityMapper; private final TbsCostApplyService tbsCostApplyService; @@ -51,7 +41,15 @@ public class TzcRebateCheckApplicationServiceImpl implements TzcRebateCheckAppli private final TbsActivityCenterGoodsService tbsActivityCenterGoodsService; @Override - public void commitRebate(Long rebateId) { + public Long buildCostAndActivity(TzcRebate rebate, + List argumentList, + List subjectList, + List periodList, + List goodsList, + List configList, + List centerList, + List levelsList) { + Long rebateId = rebate.getId(); // 100 final BigDecimal n100 = new BigDecimal("100"); @@ -61,23 +59,26 @@ public class TzcRebateCheckApplicationServiceImpl implements TzcRebateCheckAppli preCheckDays = 15; } - TzcRebate rebate = tzcRebateService.getById(rebateId); - QueryWrapper qw = new QueryWrapper<>(); - qw.eq("rebate_id", rebateId); - 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); - // 计算最高坎级金额 BigDecimal maxLevelsAmount = getMaxLevelsAmount(levelsList, argumentList, configList); // 总返利金额 BigDecimal totalAllAmount = maxLevelsAmount.multiply(new BigDecimal(periodList.size())); // 移除旧的返利费用 + List orgCostList = tbsCostApplyService + .list( + new LambdaQueryWrapper() + .eq(TbsCostApply::getRebateId, rebateId) + ); + for (TbsCostApply apply : orgCostList) { + tbsCostApplyService.removeById(apply.getId()); + QueryWrapper delQw = new QueryWrapper<>(); + delQw.eq("cost_apply_id",apply.getId()); + tbsActivityCenterService.remove(delQw); + tbsActivityCenterGoodsService.remove(delQw); + tbsActivityGoodsService.remove(delQw); + tbsActivitySubjectService.remove(delQw); + } // 转化为费用申请 @@ -128,35 +129,17 @@ public class TzcRebateCheckApplicationServiceImpl implements TzcRebateCheckAppli this.saveActivityGoodsList(goodsList, costApplyId, activityId); for (TzcRebateSubject rebateSubject : subjectList) { - TbsActivitySubject activitySubject = new TbsActivitySubject(); - activitySubject.setSubjectId(rebateSubject.getSubjectId()); - activitySubject.setSubjectCode(rebateSubject.getSubjectCode()); - activitySubject.setSubjectName(rebateSubject.getSubjectName()); - activitySubject.setAmount(rebateSubject.getSubjectAmount()); - activitySubject.setOrgAmount(rebateSubject.getSubjectAmount()); - activitySubject.setUsedAmount(BigDecimal.ZERO); - activitySubject.setCountSession(0); - activitySubject.setCountPerson(0); - activitySubject.setRemark(rebateSubject.getRemark()); + TbsActivitySubject activitySubject = buildActSubject(rebateSubject); + activitySubject.setActivityId(activityId); + activitySubject.setActivityId(costApplyId); tbsActivitySubjectService.save(activitySubject); List activityCenterList = new ArrayList<>(); List centerGoodsList = new ArrayList<>(); for (TzcRebateCenter rebateCenter : centerMap.get(rebateSubject.getId())) { - TbsActivityCenter activityCenter = new TbsActivityCenter(); + TbsActivityCenter activityCenter = buildActCenter(activitySubject, rebateCenter); activityCenter.setCostApplyId(costApplyId); activityCenter.setActivityId(activityId); - activityCenter.setSubjectId(activitySubject.getSubjectId()); - activityCenter.setCenterRate(rebateCenter.getCenterRate()); - activityCenter.setOrgCenterAmount(rebateCenter.getCenterAmount()); - activityCenter.setCenterAmount(rebateCenter.getCenterAmount()); - activityCenter.setUsedAmount(BigDecimal.ZERO); - activityCenter.setPayAmount(BigDecimal.ZERO); - activityCenter.setCenterType(rebateCenter.getCenterType()); - activityCenter.setCenterId(rebateCenter.getCenterId()); - activityCenter.setCenterCode(rebateCenter.getCenterCode()); - activityCenter.setCenterName(rebateCenter.getCenterName()); - activityCenter.setRemark(rebateCenter.getRemark()); activityCenterList.add(activityCenter); // 平摊商品的比重 = 100 / goodsList.size() @@ -177,39 +160,13 @@ public class TzcRebateCheckApplicationServiceImpl implements TzcRebateCheckAppli surplusAmt = surplusAmt.subtract(goodsAvgAmount); } TzcRebateGoods rebateGoods = goodsList.get(i1); - TbsActivityCenterGoods centerGoods = new TbsActivityCenterGoods(); - centerGoods.setCenterGoodsCode(activity.getActivityCode()+"_"+(i1+1)); + TbsActivityCenterGoods centerGoods = buildActCenterGoods(activity, rebateSubject, rebateCenter, rebateGoods); centerGoods.setCostApplyId(costApplyId); centerGoods.setActivityId(activityId); - centerGoods.setActivityCode(activity.getActivityCode()); - centerGoods.setSubjectId(rebateSubject.getSubjectId()); - centerGoods.setSubjectCode(rebateSubject.getSubjectCode()); - centerGoods.setSubjectName(rebateSubject.getSubjectName()); + centerGoods.setCenterGoodsCode(activity.getActivityCode()+"_"+(i1+1)); centerGoods.setCenterGoodsAmount(goodsAvgAmount); centerGoods.setOrgCenterGoodsAmount(goodsAvgAmount); centerGoods.setCenterGoodsRate(goodsAvgRate); - centerGoods.setCenterType(rebateCenter.getCenterType()); - centerGoods.setCenterId(rebateCenter.getCenterId()); - centerGoods.setCenterCode(rebateCenter.getCenterCode()); - centerGoods.setCenterName(rebateCenter.getCenterName()); - centerGoods.setOrgCenterAmount(rebateCenter.getCenterAmount()); - centerGoods.setCenterAmount(rebateCenter.getCenterAmount()); - centerGoods.setCenterRate(rebateCenter.getCenterRate()); - centerGoods.setTargetType(rebateGoods.getTargetType()); - centerGoods.setTargetId(rebateGoods.getTargetId()); - centerGoods.setTargetCode(rebateGoods.getTargetCode()); - centerGoods.setTargetName(rebateGoods.getTargetName()); - centerGoods.setTargetLevelPathIds(rebateGoods.getTargetLevelPathIds()); - centerGoods.setTargetLevelPathNames(rebateGoods.getTargetLevelPathNames()); - centerGoods.setRemark(rebateGoods.getRemark()); - centerGoods.setActStartDate(activity.getActStartDate()); - centerGoods.setActEndDate(activity.getActEndDate()); - centerGoods.setPreStartDate(activity.getPreStartDate()); - centerGoods.setPreEndDate(activity.getPreEndDate()); - centerGoods.setPreCheckDate(activity.getPreCheckDate()); - centerGoods.setSupplierId(activity.getSupplierId()); - centerGoods.setSupplierCode(activity.getSupplierCode()); - centerGoods.setSupplierName(activity.getSupplierName()); centerGoodsList.add(centerGoods); } } @@ -217,6 +174,71 @@ public class TzcRebateCheckApplicationServiceImpl implements TzcRebateCheckAppli tbsActivityCenterGoodsService.saveBatch(centerGoodsList); } } + return costApplyId; + } + + @NotNull + private TbsActivitySubject buildActSubject(TzcRebateSubject rebateSubject) { + TbsActivitySubject activitySubject = new TbsActivitySubject(); + activitySubject.setSubjectId(rebateSubject.getSubjectId()); + activitySubject.setSubjectCode(rebateSubject.getSubjectCode()); + activitySubject.setSubjectName(rebateSubject.getSubjectName()); + activitySubject.setAmount(rebateSubject.getSubjectAmount()); + activitySubject.setOrgAmount(rebateSubject.getSubjectAmount()); + activitySubject.setUsedAmount(BigDecimal.ZERO); + activitySubject.setCountSession(0); + activitySubject.setCountPerson(0); + activitySubject.setRemark(rebateSubject.getRemark()); + return activitySubject; + } + + @NotNull + private TbsActivityCenter buildActCenter(TbsActivitySubject activitySubject, TzcRebateCenter rebateCenter) { + TbsActivityCenter activityCenter = new TbsActivityCenter(); + activityCenter.setSubjectId(activitySubject.getSubjectId()); + activityCenter.setCenterRate(rebateCenter.getCenterRate()); + activityCenter.setOrgCenterAmount(rebateCenter.getCenterAmount()); + activityCenter.setCenterAmount(rebateCenter.getCenterAmount()); + activityCenter.setUsedAmount(BigDecimal.ZERO); + activityCenter.setPayAmount(BigDecimal.ZERO); + activityCenter.setCenterType(rebateCenter.getCenterType()); + activityCenter.setCenterId(rebateCenter.getCenterId()); + activityCenter.setCenterCode(rebateCenter.getCenterCode()); + activityCenter.setCenterName(rebateCenter.getCenterName()); + activityCenter.setRemark(rebateCenter.getRemark()); + return activityCenter; + } + + @NotNull + private TbsActivityCenterGoods buildActCenterGoods(TbsActivity activity, TzcRebateSubject rebateSubject, TzcRebateCenter rebateCenter, TzcRebateGoods rebateGoods) { + TbsActivityCenterGoods centerGoods = new TbsActivityCenterGoods(); + centerGoods.setActivityCode(activity.getActivityCode()); + centerGoods.setSubjectId(rebateSubject.getSubjectId()); + centerGoods.setSubjectCode(rebateSubject.getSubjectCode()); + centerGoods.setSubjectName(rebateSubject.getSubjectName()); + centerGoods.setCenterType(rebateCenter.getCenterType()); + centerGoods.setCenterId(rebateCenter.getCenterId()); + centerGoods.setCenterCode(rebateCenter.getCenterCode()); + centerGoods.setCenterName(rebateCenter.getCenterName()); + centerGoods.setOrgCenterAmount(rebateCenter.getCenterAmount()); + centerGoods.setCenterAmount(rebateCenter.getCenterAmount()); + centerGoods.setCenterRate(rebateCenter.getCenterRate()); + centerGoods.setTargetType(rebateGoods.getTargetType()); + centerGoods.setTargetId(rebateGoods.getTargetId()); + centerGoods.setTargetCode(rebateGoods.getTargetCode()); + centerGoods.setTargetName(rebateGoods.getTargetName()); + centerGoods.setTargetLevelPathIds(rebateGoods.getTargetLevelPathIds()); + centerGoods.setTargetLevelPathNames(rebateGoods.getTargetLevelPathNames()); + centerGoods.setRemark(rebateGoods.getRemark()); + centerGoods.setActStartDate(activity.getActStartDate()); + centerGoods.setActEndDate(activity.getActEndDate()); + centerGoods.setPreStartDate(activity.getPreStartDate()); + centerGoods.setPreEndDate(activity.getPreEndDate()); + centerGoods.setPreCheckDate(activity.getPreCheckDate()); + centerGoods.setSupplierId(activity.getSupplierId()); + centerGoods.setSupplierCode(activity.getSupplierCode()); + centerGoods.setSupplierName(activity.getSupplierName()); + return centerGoods; } /** 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 6c6d064..1079f62 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,7 +1,9 @@ package com.qs.serve.modules.tzc.service.impl; import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.qs.serve.common.exception.Assert; import com.qs.serve.common.utils.CopierUtil; import com.qs.serve.framework.base.model.ResultFlag; @@ -46,6 +48,8 @@ import java.util.stream.Collectors; @AllArgsConstructor public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationService { + private final TzcRebateApplication4CostService tzcRebateApplication4CostService; + private final TzcRebateService tzcRebateService; private final TzcRebateSubjectService tzcRebateSubjectService; private final TzcRebateCenterService tzcRebateCenterService; @@ -185,12 +189,14 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ List tzcRebateSubjectList = this.buildRebateSubjectList(rebateId,param.getSubjectList(),rebateCenterList); // 期间及补偿参数保存 - this.savePeriodList(param.getPeriodList(), rebateId); + List periodList = this.savePeriodList(param.getPeriodList(), rebateId); // 保存坎级和设置参数 - this.saveLevelListAndArgs(param, rebateId); + List argumentList = new ArrayList<>(); + List levelsList = this.saveLevelListAndArgs(param, rebateId,argumentList); // 保存坎级叠加配置 + List configList = new ArrayList<>(); for (TzcRebateLevelsConfigParam configParam : param.getConfigList()) { TzcRebateLevelsConfig config = new TzcRebateLevelsConfig(); config.setRebateId(rebateId); @@ -198,11 +204,21 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ config.setLevelConfigs(configParam.getLevelConfigs()); config.setTmpUk(configParam.getTmpUk()); tzcRebateLevelsConfigService.save(config); + configList.add(config); } + // 建立费用 + Long costApplyId = tzcRebateApplication4CostService.buildCostAndActivity(rebate, argumentList, tzcRebateSubjectList, periodList, tzcRebateGoodsList, configList, rebateCenterList, levelsList); + + // 绑定费用id + tzcRebateService.update( + new LambdaUpdateWrapper().eq(TzcRebate::getId,rebateId) + .set(TzcRebate::getCostApplyId,costApplyId)); return rebate; } + + /** * 计算和平摊到科目和成本中心(不再读取前端的金额) * 均摊TzcRebateSubjectParam的subjectAmount @@ -302,7 +318,8 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ * @param param * @param rebateId */ - private void saveLevelListAndArgs(TzcRebateParam param, Long rebateId) { + private List saveLevelListAndArgs(TzcRebateParam param, Long rebateId,List argumentList) { + List levelsList = new ArrayList<>(); for (TzcRebateLevelsParam levelsParam : param.getLevelsList()) { TzcRebateLevels levels = new TzcRebateLevels(); levels.setRebateId(rebateId); @@ -315,6 +332,7 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ levels.setRemark(levelsParam.getRemark()); levels.setTmpUk(levelsParam.getTmpUk()); tzcRebateLevelsService.save(levels); + levelsList.add(levels); Long levelId = levels.getId(); TzcRebateLevelsArgument argument = buildArgByParam(levelsParam.getOverallTargetArgument()); @@ -328,7 +346,11 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ argument2.setLevelId(levelId); argument2.setPeriodId(0L); tzcRebateLevelsArgumentService.save(argument2); + + argumentList.add(argument); + argumentList.add(argument2); } + return levelsList; } @NotNull @@ -360,7 +382,8 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ * @param periodParamList * @param rebateId */ - private void savePeriodList(List periodParamList, Long rebateId) { + private List savePeriodList(List periodParamList, Long rebateId) { + List periodList = new ArrayList<>(); for (TzcRebatePeriodParam periodParam : periodParamList) { TzcRebatePeriod period = new TzcRebatePeriod(); period.setRebateId(rebateId); @@ -373,7 +396,9 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ period.setRemark(periodParam.getRemark()); period.setTmpUk(periodParam.getTmpUk()); tzcRebatePeriodService.save(period); + periodList.add(period); } + return periodList; } @NotNull