Browse Source

feat: 返利保存调整

master
Yen 3 months ago
parent
commit
ded2ab4e0b
  1. 2
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebate.java
  2. 38
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateApplication4CostService.java
  3. 21
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateCheckApplicationService.java
  4. 172
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java
  5. 33
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplicationServiceImpl.java

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

38
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<TzcRebateLevelsArgument> argumentList,
List<TzcRebateSubject> subjectList,
List<TzcRebatePeriod> periodList,
List<TzcRebateGoods> goodsList,
List<TzcRebateLevelsConfig> configList,
List<TzcRebateCenter> centerList,
List<TzcRebateLevels> levelsList);
}

21
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateCheckApplicationService.java

@ -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);
}

172
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateCheckApplicationServiceImpl.java → 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<TzcRebateLevelsArgument> argumentList,
List<TzcRebateSubject> subjectList,
List<TzcRebatePeriod> periodList,
List<TzcRebateGoods> goodsList,
List<TzcRebateLevelsConfig> configList,
List<TzcRebateCenter> centerList,
List<TzcRebateLevels> 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<TzcRebateLevelsArgument> argumentList = tzcRebateLevelsArgumentService.list(qw);
List<TzcRebateSubject> subjectList = tzcRebateSubjectService.list(qw);
List<TzcRebatePeriod> periodList = tzcRebatePeriodService.list(qw);
List<TzcRebateGoods> goodsList = tzcRebateGoodsService.list(qw);
List<TzcRebateLevelsConfig> configList = tzcRebateLevelsConfigService.list(qw);
List<TzcRebateCenter> centerList = tzcRebateCenterService.list(qw);
List<TzcRebateLevels> levelsList = tzcRebateLevelsService.list(qw);
// 计算最高坎级金额
BigDecimal maxLevelsAmount = getMaxLevelsAmount(levelsList, argumentList, configList);
// 总返利金额
BigDecimal totalAllAmount = maxLevelsAmount.multiply(new BigDecimal(periodList.size()));
// 移除旧的返利费用
List<TbsCostApply> orgCostList = tbsCostApplyService
.list(
new LambdaQueryWrapper<TbsCostApply>()
.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<TbsActivityCenter> activityCenterList = new ArrayList<>();
List<TbsActivityCenterGoods> 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;
}
/**

33
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<TzcRebateSubject> tzcRebateSubjectList = this.buildRebateSubjectList(rebateId,param.getSubjectList(),rebateCenterList);
// 期间及补偿参数保存
this.savePeriodList(param.getPeriodList(), rebateId);
List<TzcRebatePeriod> periodList = this.savePeriodList(param.getPeriodList(), rebateId);
// 保存坎级和设置参数
this.saveLevelListAndArgs(param, rebateId);
List<TzcRebateLevelsArgument> argumentList = new ArrayList<>();
List<TzcRebateLevels> levelsList = this.saveLevelListAndArgs(param, rebateId,argumentList);
// 保存坎级叠加配置
List<TzcRebateLevelsConfig> 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<TzcRebate>().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<TzcRebateLevels> saveLevelListAndArgs(TzcRebateParam param, Long rebateId,List<TzcRebateLevelsArgument> argumentList) {
List<TzcRebateLevels> 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<TzcRebatePeriodParam> periodParamList, Long rebateId) {
private List<TzcRebatePeriod> savePeriodList(List<TzcRebatePeriodParam> periodParamList, Long rebateId) {
List<TzcRebatePeriod> 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

Loading…
Cancel
Save