Browse Source

feat(rebate): 总预算上限改为非必填,以及按比例可分配到每个区间;年度返利批量核销字段增加

master
Yen 2 months ago
parent
commit
c7948d42e5
  1. 18
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebatePeriod.java
  2. 7
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController2.java
  3. 1
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityTemplateController.java
  4. 4
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityTemplate.java
  5. 39
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebatePeriodController.java
  6. 20
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateApplication4CostService.java
  7. 8
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java
  8. 8
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4VerificationServiceImpl.java
  9. 36
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplicationServiceImpl.java
  10. 3
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationBatch.java
  11. 3
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/entity/bo/VtbVerificationBatchBo.java
  12. 2
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java
  13. 1
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationBatchServiceImpl.java

18
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;

7
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<TzcRebatePeriod> periods = tzcRebatePeriodService.list(
new LambdaQueryWrapper<TzcRebatePeriod>()
.eq(TzcRebatePeriod::getRebateId, costApplyId)
.eq(TzcRebatePeriod::getRebateId, costApply.getRebateId())
// 过滤不需要补充的返利期间
.eq(TzcRebatePeriod::getCompensationFlag,1)
);
List<Long> pIds = periods.stream().map(TzcRebatePeriod::getId).collect(Collectors.toList());
if(CollUtil.isEmpty(pIds)){
return R.error();
return R.error("获取不到有效的补偿期间");
}
List<TbsActivity> activityList = tbsActivityService.list(
new LambdaQueryWrapper<TbsActivity>()
.eq(TbsActivity::getId,costApplyId)
.eq(TbsActivity::getCostApplyId,costApplyId)
.in(TbsActivity::getRebatePeriodId,pIds)
);
for (TbsActivity activity : activityList) {

1
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityTemplateController.java

@ -112,6 +112,7 @@ public class TbsActivityTemplateController {
Map<String,List<TbsActivityTemplateRegion>> 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);
}

4
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<TbsActivityTemplateRegion> bizRegionList;
/** 行政区域 */
@TableField(exist = false)
List<TbsActivityTemplateRegion> customerList;
}

39
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<Long> activityIds) {
List<TbsActivity> activityList = tbsActivityService.listByIds(activityIds);
List<Long> ids = activityList.stream().map(TbsActivity::getRebatePeriodId).collect(Collectors.toList());
List<TzcRebatePeriod> periodList = tzcRebatePeriodService.listByIds(ids);
return R.ok(periodList);
}
}

20
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<TzcRebateLevelsArgument> argumentList,
List<TzcRebateSubject> subjectList,
List<TzcRebatePeriod> periodList,
List<TzcRebateGoods> goodsList,
List<TzcRebateLevelsConfig> configList,
List<TzcRebateCenter> centerList,
List<TzcRebateLevels> levelsList);
Long buildCostAndActivity(BigDecimal maxComboAmount,
TzcRebate rebate,
List<TzcRebateLevelsArgument> argumentList,
List<TzcRebateSubject> subjectList,
List<TzcRebatePeriod> periodList,
List<TzcRebateGoods> goodsList,
List<TzcRebateLevelsConfig> configList,
List<TzcRebateCenter> centerList,
List<TzcRebateLevels> levelsList);
/**
* 计算叠加的最高金额

8
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<TzcRebateLevelsArgument> argumentList,
List<TzcRebateSubject> subjectList,
List<TzcRebatePeriod> 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

8
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<Long> 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<TbsActivity> activityList = tbsActivityMapper.selectBatchIds(activityIds);
if (CollUtil.isEmpty(activityList)){
Assert.throwEx("无效的活动id");
}
Long rebateId = activityList.get(0).getRebateId();
String supplierCode = activityList.get(0).getSupplierCode();

36
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<TzcRebateGoods> tzcRebateGoodsList = this.buildRebateGoodsList(param.getGoodsType(),param.getGoodsList());
// 期间及补偿参数保存
List<TzcRebatePeriod> periodList = this.savePeriodList(param.getPeriodList(), rebateId);
// 保存坎级和设置参数
List<TzcRebateLevelsArgument> argumentList = new ArrayList<>();
List<TzcRebateLevels> 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<TzcRebatePeriod> periodList = this.savePeriodList(param.getPeriodList(), rebateId, periodMsg);
// 计算和平摊到科目和成本中心(不再读取前端的金额)
List<TzcRebateSubjectParam> 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<TzcRebate>()
.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<TzcRebatePeriod> savePeriodList(List<TzcRebatePeriodParam> periodParamList, Long rebateId) {
private List<TzcRebatePeriod> savePeriodList(List<TzcRebatePeriodParam> periodParamList, Long rebateId,String msg) {
List<TzcRebatePeriod> 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);

3
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")

3
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;
}

2
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<VtbVerificationSubjectCenter> verificationSubjectCenterList = vtbVerificationSubjectCenterService.listByVerificationId(verification.getId());

1
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<VtbVerification
verificationBatch.setVtbBatchCode("BHX"+ CodeGenUtil.generate(CodeGenUtil.SourceKey.VerificationBatch));
verificationBatch.setVtbBatchStatus(0);
verificationBatch.setCostApplyId(costApply.getId());
verificationBatch.setRebateOfYearFlag(submitBo.getRebateOfYearFlag());
verificationBatch.setRemark(submitBo.getRemark());
verificationBatch.setSupplierId(supplier.getId());
verificationBatch.setApplyCheckAmount(totalAmt);

Loading…
Cancel
Save