From c7948d42e523fa416bba1a72de4d6512b7cd16f6 Mon Sep 17 00:00:00 2001 From: Yen Date: Mon, 19 May 2025 16:02:49 +0800 Subject: [PATCH] =?UTF-8?q?feat(rebate):=20=E6=80=BB=E9=A2=84=E7=AE=97?= =?UTF-8?q?=E4=B8=8A=E9=99=90=E6=94=B9=E4=B8=BA=E9=9D=9E=E5=BF=85=E5=A1=AB?= =?UTF-8?q?=EF=BC=8C=E4=BB=A5=E5=8F=8A=E6=8C=89=E6=AF=94=E4=BE=8B=E5=8F=AF?= =?UTF-8?q?=E5=88=86=E9=85=8D=E5=88=B0=E6=AF=8F=E4=B8=AA=E5=8C=BA=E9=97=B4?= =?UTF-8?q?=EF=BC=9B=E5=B9=B4=E5=BA=A6=E8=BF=94=E5=88=A9=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E6=A0=B8=E9=94=80=E5=AD=97=E6=AE=B5=E5=A2=9E=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/tzc/entity/TzcRebatePeriod.java | 18 +++++++++ .../controller/TbsActivityController2.java | 7 ++-- .../TbsActivityTemplateController.java | 1 + .../tbs/entity/TbsActivityTemplate.java | 4 ++ .../controller/TzcRebatePeriodController.java | 39 +++++++++++++++++++ .../TzcRebateApplication4CostService.java | 20 +++++----- .../TzcRebateApplication4CostServiceImpl.java | 8 ++-- ...teApplication4VerificationServiceImpl.java | 8 ++-- .../impl/TzcRebateApplicationServiceImpl.java | 36 ++++++++++++++--- .../vtb/entity/VtbVerificationBatch.java | 3 ++ .../vtb/entity/bo/VtbVerificationBatchBo.java | 3 ++ .../service/VtbVerificationApplication.java | 2 +- .../impl/VtbVerificationBatchServiceImpl.java | 1 + 13 files changed, 122 insertions(+), 28 deletions(-) create mode 100644 cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebatePeriodController.java 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 a7a5501..e3c0c92 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 @@ -57,6 +57,24 @@ public class TzcRebatePeriod implements Serializable { /** 总目标达标补偿 */ private Integer compensationFlag; + /** 自动获取发货金额(针对返利业务) */ + private BigDecimal autoDispatchAmt; + + /** 实际发货金额 */ + private BigDecimal finalDispatchAmt; + + /** 周期结算 */ + private BigDecimal autoRebatePeriodAmt; + + /** 周期结算 */ + private BigDecimal finalRebatePeriodAmt; + + /** 周期结算 */ + private BigDecimal autoRebateYearAmt; + + /** 周期结算 */ + private BigDecimal finalRebateYearAmt; + /** 补偿说明 */ @Length(max = 255,message = "备注长度不能超过255字") private String extRemark; diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController2.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController2.java index 3fcd5e6..e399d60 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController2.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController2.java @@ -57,19 +57,20 @@ public class TbsActivityController2 { */ @GetMapping("/getList4RebateCheckYear/{costApplyId}") public R getList4RebateCheckYear(@PathVariable Long costApplyId){ + TbsCostApply costApply = tbsCostApplyService.getById(costApplyId); List periods = tzcRebatePeriodService.list( new LambdaQueryWrapper() - .eq(TzcRebatePeriod::getRebateId, costApplyId) + .eq(TzcRebatePeriod::getRebateId, costApply.getRebateId()) // 过滤不需要补充的返利期间 .eq(TzcRebatePeriod::getCompensationFlag,1) ); List pIds = periods.stream().map(TzcRebatePeriod::getId).collect(Collectors.toList()); if(CollUtil.isEmpty(pIds)){ - return R.error(); + return R.error("获取不到有效的补偿期间"); } List activityList = tbsActivityService.list( new LambdaQueryWrapper() - .eq(TbsActivity::getId,costApplyId) + .eq(TbsActivity::getCostApplyId,costApplyId) .in(TbsActivity::getRebatePeriodId,pIds) ); for (TbsActivity activity : activityList) { diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityTemplateController.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityTemplateController.java index 6a7f7ca..f21ac6f 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityTemplateController.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityTemplateController.java @@ -112,6 +112,7 @@ public class TbsActivityTemplateController { Map> templateRegionListMap = templateRegionList.stream().collect(Collectors.groupingBy(TbsActivityTemplateRegion::getType)); tbsActivityTemplate.setSaleRegionList(templateRegionListMap.get("sale")); tbsActivityTemplate.setBizRegionList(templateRegionListMap.get("biz")); + tbsActivityTemplate.setCustomerList(templateRegionListMap.get("cus")); return R.ok(tbsActivityTemplate); } diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityTemplate.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityTemplate.java index 7516257..be56ab7 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityTemplate.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityTemplate.java @@ -146,5 +146,9 @@ public class TbsActivityTemplate implements Serializable { @TableField(exist = false) List bizRegionList; + /** 行政区域 */ + @TableField(exist = false) + List customerList; + } diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebatePeriodController.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebatePeriodController.java new file mode 100644 index 0000000..82d80ea --- /dev/null +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebatePeriodController.java @@ -0,0 +1,39 @@ +package com.qs.serve.modules.tzc.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qs.serve.framework.base.model.R; +import com.qs.serve.modules.tbs.entity.TbsActivity; +import com.qs.serve.modules.tbs.service.TbsActivityService; +import com.qs.serve.modules.tzc.entity.TzcRebatePeriod; +import com.qs.serve.modules.tzc.service.TzcRebatePeriodService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author YenHex + * @since 2025/5/19 + */ +@Slf4j +@AllArgsConstructor +@RestController +@RequestMapping("tzc/rebatePeriod") +public class TzcRebatePeriodController { + + private final TzcRebatePeriodService tzcRebatePeriodService; + private final TbsActivityService tbsActivityService; + + @GetMapping("/listByActivityIds") + public R listByActivityIds(List activityIds) { + List activityList = tbsActivityService.listByIds(activityIds); + List ids = activityList.stream().map(TbsActivity::getRebatePeriodId).collect(Collectors.toList()); + List periodList = tzcRebatePeriodService.listByIds(ids); + return R.ok(periodList); + } + +} 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 index 1ac71d5..2a34e04 100644 --- 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 @@ -17,6 +17,7 @@ public interface TzcRebateApplication4CostService { /** * 通过返利构建费用和活动 + * @param maxComboAmount * @param rebate * @param argumentList * @param subjectList @@ -25,16 +26,17 @@ public interface TzcRebateApplication4CostService { * @param configList * @param centerList * @param levelsList - * @return 费用ID + * @return */ - Long buildCostAndActivity(TzcRebate rebate, - List argumentList, - List subjectList, - List periodList, - List goodsList, - List configList, - List centerList, - List levelsList); + Long buildCostAndActivity(BigDecimal maxComboAmount, + 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/impl/TzcRebateApplication4CostServiceImpl.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java index eb51669..844fcca 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java @@ -53,7 +53,8 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio private final TzcRebateLevelsService tzcRebateLevelsService; @Override - public Long buildCostAndActivity(TzcRebate rebate, + public Long buildCostAndActivity(BigDecimal maxLevelsAmount, + TzcRebate rebate, List argumentList, List subjectList, List periodList, @@ -70,9 +71,6 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio // 默认延迟半个月 preCheckDays = 15; } - - // 计算最高坎级金额 - BigDecimal maxLevelsAmount = getMaxLevelsAmount(levelsList, argumentList, configList); // 总返利金额 BigDecimal totalAllAmount = maxLevelsAmount.multiply(new BigDecimal(periodList.size())); @@ -286,7 +284,7 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio } /** - * 获取最高坎级返回的金额 + * 获取最高坎级返回的金额(conf的叠加金额) * @param levelsList * @param argumentList * @param configList diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4VerificationServiceImpl.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4VerificationServiceImpl.java index 4c5c555..987b1b3 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4VerificationServiceImpl.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4VerificationServiceImpl.java @@ -69,7 +69,7 @@ public class TzcRebateApplication4VerificationServiceImpl implements TzcRebateAp // 方法类型:0 :通过前端传参,1:通过数据库查询 int methodType = 1; List activityIds = null; - if (CollUtil.isEmpty(queryList)){ + if (CollUtil.isNotEmpty(queryList)){ methodType = 0; activityIds = queryList.stream() .map(TzcGetActivityRebateQuery::getActivityId).collect(Collectors.toList()); @@ -82,12 +82,12 @@ public class TzcRebateApplication4VerificationServiceImpl implements TzcRebateAp ).stream().map(TbsActivity::getId).collect(Collectors.toList()); } + if (CollUtil.isEmpty(activityIds)){ + Assert.throwEx("无效的活动id"); + } List activityList = tbsActivityMapper.selectBatchIds(activityIds); - if (CollUtil.isEmpty(activityList)){ - Assert.throwEx("无效的活动id"); - } Long rebateId = activityList.get(0).getRebateId(); String supplierCode = activityList.get(0).getSupplierCode(); 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 ac707bb..73be8c8 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 @@ -6,6 +6,7 @@ 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.common.utils.StringUtils; import com.qs.serve.framework.base.model.ResultFlag; import com.qs.serve.framework.base.util.CollectionUtil; import com.qs.serve.framework.redis.utils.CodeGenUtil; @@ -192,9 +193,6 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ // 返利的商品 List tzcRebateGoodsList = this.buildRebateGoodsList(param.getGoodsType(),param.getGoodsList()); - // 期间及补偿参数保存 - List periodList = this.savePeriodList(param.getPeriodList(), rebateId); - // 保存坎级和设置参数 List argumentList = new ArrayList<>(); List levelsList = this.saveLevelListAndArgs(param.getLevelsList(), rebateId,argumentList); @@ -218,8 +216,27 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ configList.add(config); } - // 获取最高坎级返回的金额 + // 获取最高坎级返回的金额(叠加金额) BigDecimal maxAmount = tzcRebateApplication4CostService.getMaxLevelsAmount(levelsList, argumentList, configList); + BigDecimal totalAllAmount = maxAmount.multiply(new BigDecimal(param.getPeriodList().size())); + String periodMsg = "坎级叠加最高金额为:"+maxAmount; + // 判断是否超预算 + if (param.getRebateAmount()!=null){ + if(totalAllAmount.compareTo(param.getRebateAmount())>0){ + Assert.throwEx("返利金额超预算"); + } + // 计算需要增加的金额 + BigDecimal needAddAmt = param.getRebateAmount().subtract(totalAllAmount); + BigDecimal needAddAvgAmt = needAddAmt.divide(new BigDecimal(param.getPeriodList().size()),2,BigDecimal.ROUND_DOWN); + // 添加补偿金额 + maxAmount = maxAmount.add(needAddAvgAmt); + totalAllAmount = param.getRebateAmount(); + periodMsg = periodMsg+";设置最高返利金额:"+param.getRebateAmount()+",补充活动金额:"+needAddAvgAmt+"。活动合计金额:"+maxAmount; + } + + // 期间及补偿参数保存 + List periodList = this.savePeriodList(param.getPeriodList(), rebateId, periodMsg); + // 计算和平摊到科目和成本中心(不再读取前端的金额) List subjectParamList = param.getSubjectList(); this.calculateSubjectAndCenter(subjectParamList, maxAmount); @@ -231,6 +248,7 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ // 建立费用 Long costApplyId = tzcRebateApplication4CostService.buildCostAndActivity( + maxAmount, rebate, argumentList, tzcRebateSubjectList, @@ -243,10 +261,12 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ // 绑定费用id rebate.setCostApplyId(costApplyId); + rebate.setRebateAmount(totalAllAmount); tzcRebateService.update( new LambdaUpdateWrapper() .eq(TzcRebate::getId,rebateId) .set(TzcRebate::getCostApplyId,costApplyId) + .set(TzcRebate::getRebateAmount,totalAllAmount) ); return rebate; } @@ -445,7 +465,7 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ * @param periodParamList * @param rebateId */ - private List savePeriodList(List periodParamList, Long rebateId) { + private List savePeriodList(List periodParamList, Long rebateId,String msg) { List periodList = new ArrayList<>(); for (TzcRebatePeriodParam periodParam : periodParamList) { TzcRebatePeriod period = new TzcRebatePeriod(); @@ -456,7 +476,11 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ period.setPeriodAmount(periodParam.getPeriodAmount()); period.setSamePeriodAmount(periodParam.getSamePeriodAmount()); period.setCompensationFlag(periodParam.getCompensationFlag()); - period.setRemark(periodParam.getRemark()); + if (StringUtils.isNotEmpty(periodParam.getRemark())){ + period.setRemark(periodParam.getRemark()+";"+msg); + }else { + period.setRemark(msg); + } period.setExtRemark(periodParam.getExtRemark()); period.setTmpUk(periodParam.getTmpUk()); tzcRebatePeriodService.save(period); diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationBatch.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationBatch.java index e97f47b..c29f82a 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationBatch.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationBatch.java @@ -41,6 +41,9 @@ public class VtbVerificationBatch implements Serializable { @NotNull(message = "状态不能为空") private Integer vtbBatchStatus; + /** 是否年返利:0-否;1-是 */ + private Integer rebateOfYearFlag; + /** 核销通过时间 */ @Length(max = 0,message = "核销通过时间长度不能超过0字") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationBatchBo.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationBatchBo.java index ed73307..67c451d 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationBatchBo.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationBatchBo.java @@ -30,4 +30,7 @@ public class VtbVerificationBatchBo { /** 申请时的合计金额 */ private BigDecimal totalAmount; + /** 是否返利年度核销 */ + private Integer rebateOfYearFlag; + } diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java index 5d0d2ea..baca32b 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java @@ -95,7 +95,7 @@ public class VtbVerificationApplication { optSvc.runCompensate(verification.getId()+""); verification = vtbVerificationService.getById(affairCommit.getCostApplyId()); if(!verification.getVerificationState().equals(VtbVerificationState.Commiting.getCode())){ - Assert.throwEx("费用申请处于未非审批状态!"); + Assert.throwEx("核销单据状态已变更,请刷新页面"); } } List verificationSubjectCenterList = vtbVerificationSubjectCenterService.listByVerificationId(verification.getId()); diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationBatchServiceImpl.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationBatchServiceImpl.java index 87db3a9..b6d3653 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationBatchServiceImpl.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationBatchServiceImpl.java @@ -176,6 +176,7 @@ public class VtbVerificationBatchServiceImpl extends ServiceImpl