Browse Source

fix(rebate): 修复金额异常

master
Yen 2 months ago
parent
commit
2a540192a0
  1. 18
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateParam.java
  2. 4
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/controller/api/OmsOrderApi.java
  3. 1
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityTemplateController.java
  4. 2
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebateController.java
  5. 11
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateApplication4CostService.java
  6. 4
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateApplication4VerificationService.java
  7. 94
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java
  8. 57
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4VerificationServiceImpl.java
  9. 58
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplicationServiceImpl.java

18
cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateParam.java

@ -55,15 +55,15 @@ public class TzcRebateParam{
@NotNull(message = "自动核销日期类型不能为空") @NotNull(message = "自动核销日期类型不能为空")
private Integer checkAutoDateType; private Integer checkAutoDateType;
/** 核销开始时间 */ // /** 核销开始时间 */
@NotNull(message = "核销开始时间不能为空") // @NotNull(message = "核销开始时间不能为空")
@DateTimeFormat(pattern = "yyyy-MM-dd") // @DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate checkStartDate; // private LocalDate checkStartDate;
//
/** 核销结束时间 */ // /** 核销结束时间 */
@NotNull(message = "核销结束时间不能为空") // @NotNull(message = "核销结束时间不能为空")
@DateTimeFormat(pattern = "yyyy-MM-dd") // @DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate checkEndDate; // private LocalDate checkEndDate;
/** 客户id */ /** 客户id */
@NotNull(message = "客户id不能为空") @NotNull(message = "客户id不能为空")

4
cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/controller/api/OmsOrderApi.java

@ -138,6 +138,7 @@ public class OmsOrderApi {
*/ */
@PostMapping("/createOrder") @PostMapping("/createOrder")
public R<OmsOrder> createOrderPC(@RequestBody @Valid OmsOrderBo omsOrderBo){ public R<OmsOrder> createOrderPC(@RequestBody @Valid OmsOrderBo omsOrderBo){
Assert.throwEx("请在最新订单模块下单");
return R.ok(omsOrderService.createOrder(omsOrderBo)); return R.ok(omsOrderService.createOrder(omsOrderBo));
} }
@ -148,6 +149,7 @@ public class OmsOrderApi {
*/ */
@PostMapping("/modifyOrder") @PostMapping("/modifyOrder")
public R<OmsOrder> modifyOrder(@RequestBody @Valid OmsOrderModifyParam param){ public R<OmsOrder> modifyOrder(@RequestBody @Valid OmsOrderModifyParam param){
Assert.throwEx("请在最新订单模块下单");
omsOrderService.modifyOrder(param); omsOrderService.modifyOrder(param);
return R.ok(); return R.ok();
} }
@ -159,6 +161,7 @@ public class OmsOrderApi {
*/ */
@PostMapping("/createOrderOnPC") @PostMapping("/createOrderOnPC")
public R<OmsOrder> createOrder(@RequestBody @Valid OmsOrderSkuBo omsOrderBo){ public R<OmsOrder> createOrder(@RequestBody @Valid OmsOrderSkuBo omsOrderBo){
Assert.throwEx("请在最新订单模块下单");
return R.ok(omsOrderService.createOrderPc(omsOrderBo)); return R.ok(omsOrderService.createOrderPc(omsOrderBo));
} }
@ -418,6 +421,7 @@ public class OmsOrderApi {
@PostMapping("/buildPriceOrder/{id}/{amount}") @PostMapping("/buildPriceOrder/{id}/{amount}")
@SysLog(module = SystemModule.BASE, title = "订单", biz = BizType.DELETE) @SysLog(module = SystemModule.BASE, title = "订单", biz = BizType.DELETE)
public R<?> buildPriceOrder(@PathVariable("id") String id,@PathVariable("amount") String amount){ public R<?> buildPriceOrder(@PathVariable("id") String id,@PathVariable("amount") String amount){
Assert.throwEx("请在最新订单模块下单");
omsOrderService.buildPriceOrder(id,amount); omsOrderService.buildPriceOrder(id,amount);
return R.ok(); return R.ok();
} }

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

@ -249,6 +249,7 @@ public class TbsActivityTemplateController {
if(contractFlag!=null){ if(contractFlag!=null){
tmpLqw.eq(TbsActivityTemplate::getContractFlag,contractFlag); tmpLqw.eq(TbsActivityTemplate::getContractFlag,contractFlag);
} }
tmpLqw.orderByDesc(TbsActivityTemplate::getCreateTime);
PageUtil.startPage(); PageUtil.startPage();
List<TbsActivityTemplate> templates = tbsActivityTemplateService.list(tmpLqw); List<TbsActivityTemplate> templates = tbsActivityTemplateService.list(tmpLqw);
return R.byPageHelperList(templates); return R.byPageHelperList(templates);

2
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebateController.java

@ -69,7 +69,7 @@ public class TzcRebateController {
*/ */
@PostMapping("/getRebateInfoOfYear") @PostMapping("/getRebateInfoOfYear")
public R<List<TzcRebateCalculateDTO>> getRebateByYear(@RequestBody List<TzcGetActivityRebateQuery> queryList){ public R<List<TzcRebateCalculateDTO>> getRebateByYear(@RequestBody List<TzcGetActivityRebateQuery> queryList){
return R.ok(tzcRebateApplication4VerificationService.getRebateBatchVerificationList(queryList)); return R.ok(tzcRebateApplication4VerificationService.getRebateBatchVerificationList(queryList,null));
} }
/** /**

11
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateApplication4CostService.java

@ -36,7 +36,16 @@ public interface TzcRebateApplication4CostService {
List<TzcRebateCenter> centerList, List<TzcRebateCenter> centerList,
List<TzcRebateLevels> levelsList); List<TzcRebateLevels> levelsList);
/**
* 计算叠加的最高金额
* @param levelsList
* @param argumentList
* @param configList
* @return
*/
BigDecimal getMaxLevelsAmount(List<TzcRebateLevels> levelsList,
List<TzcRebateLevelsArgument> argumentList,
List<TzcRebateLevelsConfig> configList);
/** /**
* 获取最高命中返利坎级的信息及坎级列表 * 获取最高命中返利坎级的信息及坎级列表

4
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateApplication4VerificationService.java

@ -17,10 +17,12 @@ public interface TzcRebateApplication4VerificationService {
/** /**
* 获取批量核销列表(总目标达标补偿) * 获取批量核销列表(总目标达标补偿)
* queryList costId 二选一
* @param queryList * @param queryList
* @param costId
* @return * @return
*/ */
List<TzcRebateCalculateDTO> getRebateBatchVerificationList(List<TzcGetActivityRebateQuery> queryList); List<TzcRebateCalculateDTO> getRebateBatchVerificationList(List<TzcGetActivityRebateQuery> queryList,Long costId);
/** /**
* 获取活动返利金额 * 获取活动返利金额

94
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java

@ -22,10 +22,7 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -100,6 +97,7 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio
TbsCostApply costApply = new TbsCostApply(); TbsCostApply costApply = new TbsCostApply();
costApply.setRebateId(rebateId); costApply.setRebateId(rebateId);
costApply.setCode(rebate.getRebateCode()); costApply.setCode(rebate.getRebateCode());
costApply.setTemplateId(rebate.getTemplateId());
// 标记为返利类型 // 标记为返利类型
costApply.setContractFlag(3); costApply.setContractFlag(3);
costApply.setMatchType(1); costApply.setMatchType(1);
@ -294,42 +292,59 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio
* @param configList * @param configList
* @return * @return
*/ */
@Override
public BigDecimal getMaxLevelsAmount(List<TzcRebateLevels> levelsList, public BigDecimal getMaxLevelsAmount(List<TzcRebateLevels> levelsList,
List<TzcRebateLevelsArgument> argumentList, List<TzcRebateLevelsArgument> argumentList,
List<TzcRebateLevelsConfig> configList){ List<TzcRebateLevelsConfig> configList){
int level = 0; BigDecimal maxAmount = BigDecimal.ZERO;
String[] configArr = null; for (TzcRebateLevelsConfig config : configList) {
for (TzcRebateLevelsConfig config: configList) { Set<String> levelNumSet = Arrays.stream(config.getLevelConfigs()).collect(Collectors.toSet());
if(config.getLevelNum()>level){ // 默认包含当前坎级
level = config.getLevelNum(); levelNumSet.add(config.getLevelNum()+"");
configArr = config.getLevelConfigs(); BigDecimal currentConfAmount = BigDecimal.ZERO;
for (String levelNumStr : levelNumSet) {
int levelNum = Integer.parseInt(levelNumStr);
// 当前坎级最高返利金额
BigDecimal currentLevelMaxAmount = getCurrentLevelMaxAmount(levelsList, argumentList, levelNum);
if (currentLevelMaxAmount.compareTo(BigDecimal.ZERO)>0){
currentConfAmount = currentConfAmount.add(currentLevelMaxAmount);
}
}
if (currentConfAmount.compareTo(maxAmount)>0){
maxAmount = currentConfAmount;
} }
} }
BigDecimal maxAmount = BigDecimal.ZERO; return maxAmount;
}
/**
* 获取当前坎级最高金额
* @param levelsList
* @param argumentList
* @param levelNum
* @return
*/
@NotNull
private BigDecimal getCurrentLevelMaxAmount(List<TzcRebateLevels> levelsList, List<TzcRebateLevelsArgument> argumentList, int levelNum) {
BigDecimal currentLevelMaxAmount = BigDecimal.ZERO;
for (TzcRebateLevels levels : levelsList) { for (TzcRebateLevels levels : levelsList) {
String lvNum = levels.getLevelNum()+""; if(levels.getLevelNum()== levelNum){
for (String levelNum : configArr) { // 排除返利和补偿返利的最高金额
if(lvNum.equals(levelNum)){ BigDecimal currentArgAmount = BigDecimal.ZERO;
BigDecimal amt1 = BigDecimal.ZERO; for (TzcRebateLevelsArgument argument : argumentList) {
BigDecimal amt2 = BigDecimal.ZERO; if(argument.getLevelId().equals(levels.getId())){
for (TzcRebateLevelsArgument argument : argumentList) { if (argument.getMaxReturn().compareTo(currentArgAmount)>0){
if(argument.getLevelId().equals(levels.getId())){ currentArgAmount = argument.getMaxReturn();
if (argument.getBusinessType().equals(TzcArgTypes.LevelReturn.name())){
amt1 = argument.getMaxReturn();
}else if (argument.getBusinessType().equals(TzcArgTypes.LevelOverallReturn.name())){
amt2 = argument.getMaxReturn();
}
} }
} }
if(amt1.compareTo(amt2)>0){ }
maxAmount = amt1; // 排除同坎级的有同期和无同期的最高金额
}else { if (currentArgAmount.compareTo(currentLevelMaxAmount)>0){
maxAmount = amt2; currentLevelMaxAmount = currentArgAmount;
}
} }
} }
} }
return maxAmount; return currentLevelMaxAmount;
} }
@Override @Override
@ -360,12 +375,12 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio
String msg = ""; String msg = "";
if (levels.getConditionType().equals(0)){ if (levels.getConditionType().equals(0)){
periodAmount = sameDispatchAmt; periodAmount = sameDispatchAmt;
msg = "同期金额:"+periodAmount; msg = "同期金额:"+periodAmount;
}else if (levels.getConditionType().equals(1)){ }else if (levels.getConditionType().equals(1)){
periodAmount = tarPeriodAmount; periodAmount = tarPeriodAmount;
msg = "目标金额:"+periodAmount; msg = "目标金额:"+periodAmount;
} }
msg = "("+msg+"占比:"+levels.getConditionRate()+"(含)-"+levels.getConditionRateEnd()+"%"; msg = msg+"占比:"+levels.getConditionRate()+"(含)-"+levels.getConditionRateEnd()+"%";
BigDecimal targetAmt = periodAmount.multiply(levels.getConditionRate()) BigDecimal targetAmt = periodAmount.multiply(levels.getConditionRate())
.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP); .divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
BigDecimal targetAmtEnd = periodAmount.multiply(levels.getConditionRateEnd()) BigDecimal targetAmtEnd = periodAmount.multiply(levels.getConditionRateEnd())
@ -374,10 +389,10 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio
boolean ok1 = dispatchAmt.compareTo(targetAmt)>=0; // 包含 boolean ok1 = dispatchAmt.compareTo(targetAmt)>=0; // 包含
boolean ok2 = dispatchAmt.compareTo(targetAmtEnd)<0; // 不包含 boolean ok2 = dispatchAmt.compareTo(targetAmtEnd)<0; // 不包含
if (!ok1 || !ok2){ if (!ok1 || !ok2){
dto.appendDebugMsg("跳过坎级:"+levels.getLevelNum()+",门槛金额:"+targetAmt+msg+",发货金额:"+dispatchAmt); dto.appendDebugMsg("跳过坎级:"+levels.getLevelNum()+",门槛金额:"+targetAmt+"-"+targetAmtEnd + msg+",发货金额:"+dispatchAmt);
continue; continue;
} }
dto.appendDebugMsg("命中坎级:"+levels.getLevelNum()+",条件金额:"+targetAmt+msg+",发货金额:"+dispatchAmt); dto.appendDebugMsg("命中坎级:"+levels.getLevelNum()+",门槛金额:"+targetAmt+"-"+targetAmtEnd + msg+",发货金额:"+dispatchAmt);
dto.setMaxLevels(levels); dto.setMaxLevels(levels);
return dto; return dto;
}else if (levels.getConditionSelect().equals(1)){ }else if (levels.getConditionSelect().equals(1)){
@ -464,7 +479,6 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio
dto.appendDebugMsg("读取坎级("+rebateLevels.getLevelNum()+")配置 ,返利参数:"+currentArgument.getBusinessType()); dto.appendDebugMsg("读取坎级("+rebateLevels.getLevelNum()+")配置 ,返利参数:"+currentArgument.getBusinessType());
TzcRebateLevelAmountDTO rebateLevelsDTO = CopierUtil.copy(rebateLevels,new TzcRebateLevelAmountDTO()); TzcRebateLevelAmountDTO rebateLevelsDTO = CopierUtil.copy(rebateLevels,new TzcRebateLevelAmountDTO());
rebateLevelsDTO.setArgument(currentArgument); rebateLevelsDTO.setArgument(currentArgument);
rebateLevelsDTO.setMaxReturn(currentArgument.getMaxReturn());
// 选择的策略:0-百分比;1-固定金额 // 选择的策略:0-百分比;1-固定金额
if (currentArgument.getRateAmtFlag().equals(1)){ if (currentArgument.getRateAmtFlag().equals(1)){
rebateLevelsDTO.setReturnAmt(currentArgument.getReturnFixed()); rebateLevelsDTO.setReturnAmt(currentArgument.getReturnFixed());
@ -474,8 +488,11 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio
if (currentArgument.getSumAddFlag().equals(0)){ if (currentArgument.getSumAddFlag().equals(0)){
BigDecimal rs = dispatchAmt.multiply(currentArgument.getReturnRate()) BigDecimal rs = dispatchAmt.multiply(currentArgument.getReturnRate())
.divide(BigDecimal.valueOf(100),2,RoundingMode.HALF_UP); .divide(BigDecimal.valueOf(100),2,RoundingMode.HALF_UP);
if (rs.compareTo(currentArgument.getMaxReturn())>0){
rs = currentArgument.getMaxReturn();
}
rebateLevelsDTO.setReturnAmt(rs); rebateLevelsDTO.setReturnAmt(rs);
rebateLevelsDTO.setDebugMsg("基于总量("+rs+")=返货金额("+dispatchAmt+")*返利百分比("+currentArgument.getReturnRate()+"%)"); rebateLevelsDTO.setDebugMsg("基于总量("+rs+")=返货金额("+dispatchAmt+")*返利百分比("+currentArgument.getReturnRate()+"%);最高返利:"+currentArgument.getMaxReturn());
}else if (currentArgument.getSumAddFlag().equals(1)){ }else if (currentArgument.getSumAddFlag().equals(1)){
// 增量 = (发货金额 - 同比发货金额) * 返利比例 / 100 // 增量 = (发货金额 - 同比发货金额) * 返利比例 / 100
BigDecimal rs = dispatchAmt.subtract(sameDispatchAmt) BigDecimal rs = dispatchAmt.subtract(sameDispatchAmt)
@ -483,7 +500,10 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio
.divide(BigDecimal.valueOf(100),2,RoundingMode.HALF_UP); .divide(BigDecimal.valueOf(100),2,RoundingMode.HALF_UP);
if (rs.compareTo(BigDecimal.ZERO)>0){ if (rs.compareTo(BigDecimal.ZERO)>0){
rebateLevelsDTO.setDebugMsg("基于增量("+rs+") " + rebateLevelsDTO.setDebugMsg("基于增量("+rs+") " +
"= (发货金额["+dispatchAmt+"] - 同比发货金额["+sameDispatchAmt+"]) * 返利比例["+currentArgument.getReturnRate()+"%]"); "= (发货金额["+dispatchAmt+"] - 同比发货金额["+sameDispatchAmt+"]) * 返利比例["+currentArgument.getReturnRate()+"%];最高返利"+currentArgument.getMaxReturn());
if (rs.compareTo(currentArgument.getMaxReturn())>0){
rs = currentArgument.getMaxReturn();
}
rebateLevelsDTO.setReturnAmt(rs); rebateLevelsDTO.setReturnAmt(rs);
}else { }else {
rebateLevelsDTO.setReturnAmt(BigDecimal.ZERO); rebateLevelsDTO.setReturnAmt(BigDecimal.ZERO);

57
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4VerificationServiceImpl.java

@ -62,11 +62,27 @@ public class TzcRebateApplication4VerificationServiceImpl implements TzcRebateAp
private final TzcRebateLevelsService tzcRebateLevelsService; private final TzcRebateLevelsService tzcRebateLevelsService;
private final ErpDispatchDataMapper erpDispatchDataMapper; private final ErpDispatchDataMapper erpDispatchDataMapper;
@Override @Override
public List<TzcRebateCalculateDTO> getRebateBatchVerificationList(List<TzcGetActivityRebateQuery> queryList) { public List<TzcRebateCalculateDTO> getRebateBatchVerificationList(List<TzcGetActivityRebateQuery> queryList,Long costId) {
// 方法类型:0 :通过前端传参,1:通过数据库查询
int methodType = 1;
List<Long> activityIds = null;
if (CollUtil.isEmpty(queryList)){
methodType = 0;
activityIds = queryList.stream()
.map(TzcGetActivityRebateQuery::getActivityId).collect(Collectors.toList());
}else {
methodType = 1;
activityIds = tbsActivityMapper.selectList(
new LambdaQueryWrapper<TbsActivity>()
.select(TbsActivity::getId)
.eq(TbsActivity::getCostApplyId, costId)
).stream().map(TbsActivity::getId).collect(Collectors.toList());
}
List<Long> activityIds = queryList.stream()
.map(TzcGetActivityRebateQuery::getActivityId).collect(Collectors.toList());
List<TbsActivity> activityList = tbsActivityMapper.selectBatchIds(activityIds); List<TbsActivity> activityList = tbsActivityMapper.selectBatchIds(activityIds);
if (CollUtil.isEmpty(activityList)){ if (CollUtil.isEmpty(activityList)){
@ -100,23 +116,30 @@ public class TzcRebateApplication4VerificationServiceImpl implements TzcRebateAp
if (activity == null){ if (activity == null){
Assert.throwEx("缺少有效的活动id"); Assert.throwEx("缺少有效的活动id");
} }
// 实际发货金额,方式一(前端传参)
BigDecimal dispatchAmt = null; BigDecimal dispatchAmt = null;
for (TzcGetActivityRebateQuery query : queryList) { // 实际发货金额,方式一(前端传参)
if (query.getActivityId().equals(activity.getId())){ if (methodType==0){
// 获取发货金额 for (TzcGetActivityRebateQuery query : queryList) {
dispatchAmt = query.getDispatchAmount(); if (query.getActivityId().equals(activity.getId())){
// 获取发货金额
dispatchAmt = query.getDispatchAmount();
}
}
if (dispatchAmt == null){
Assert.throwEx("缺少有效的发货金额");
}
}else {
// 实际发货金额,方式二(通过数据库查询)
dispatchAmt = this.getPeriodDispatch(
supplierCode,
period.getPeriodStartDate(),
period.getPeriodEndDate(),
goodsMap);
if (dispatchAmt==null){
dispatchAmt = BigDecimal.ZERO;
} }
} }
if (dispatchAmt == null){
Assert.throwEx("缺少有效的发货金额");
}
// 实际发货金额,方式二(通过数据库查询)
// BigDecimal dispatchAmt = this.getPeriodDispatch(
// supplierCode,
// period.getPeriodStartDate(),
// period.getPeriodEndDate(),
// goodsMap);
// 区间目标合计金额 // 区间目标合计金额
BigDecimal periodAmt = period.getPeriodAmount(); BigDecimal periodAmt = period.getPeriodAmount();
// 同期进货合计金额 // 同期进货合计金额

58
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplicationServiceImpl.java

@ -169,12 +169,6 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
// 校验返利参数(取消判断金额) // 校验返利参数(取消判断金额)
this.validRebateParam(param); this.validRebateParam(param);
// 获取最高坎级返回的金额
BigDecimal maxAmount = this.getMaxLevelsAmount(param);
// 计算和平摊到科目和成本中心(不再读取前端的金额)
List<TzcRebateSubjectParam> subjectParamList = param.getSubjectList();
this.calculateSubjectAndCenter(subjectParamList, maxAmount);
if (isUpdate){ if (isUpdate){
//删除旧数据 //删除旧数据
this.removeOldRebateDataById(rebateId); this.removeOldRebateDataById(rebateId);
@ -197,24 +191,20 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
// 返利的商品 // 返利的商品
List<TzcRebateGoods> tzcRebateGoodsList = this.buildRebateGoodsList(param.getGoodsType(),param.getGoodsList()); List<TzcRebateGoods> tzcRebateGoodsList = this.buildRebateGoodsList(param.getGoodsType(),param.getGoodsList());
// 返利的商品,关联主表id和code
for (TzcRebateGoods rebateGoods : tzcRebateGoodsList) {
rebateGoods.setRebateId(rebate.getId());
rebateGoods.setRebateCode(rebate.getRebateCode());
}
tzcRebateGoodsService.saveBatch(tzcRebateGoodsList);
// 返利的成本中心(引用类型赋值)
List<TzcRebateCenter> rebateCenterList = new ArrayList<>();
// 返利的科目
List<TzcRebateSubject> tzcRebateSubjectList = this.buildRebateSubjectList(rebateId,param.getSubjectList(),rebateCenterList);
// 期间及补偿参数保存 // 期间及补偿参数保存
List<TzcRebatePeriod> periodList = this.savePeriodList(param.getPeriodList(), rebateId); List<TzcRebatePeriod> periodList = this.savePeriodList(param.getPeriodList(), rebateId);
// 保存坎级和设置参数 // 保存坎级和设置参数
List<TzcRebateLevelsArgument> argumentList = new ArrayList<>(); List<TzcRebateLevelsArgument> argumentList = new ArrayList<>();
List<TzcRebateLevels> levelsList = this.saveLevelListAndArgs(param, rebateId,argumentList); List<TzcRebateLevels> levelsList = this.saveLevelListAndArgs(param.getLevelsList(), rebateId,argumentList);
// 返利的商品,关联主表id和code
for (TzcRebateGoods rebateGoods : tzcRebateGoodsList) {
rebateGoods.setRebateId(rebate.getId());
rebateGoods.setRebateCode(rebate.getRebateCode());
}
tzcRebateGoodsService.saveBatch(tzcRebateGoodsList);
// 保存坎级叠加配置 // 保存坎级叠加配置
List<TzcRebateLevelsConfig> configList = new ArrayList<>(); List<TzcRebateLevelsConfig> configList = new ArrayList<>();
@ -227,6 +217,18 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
tzcRebateLevelsConfigService.save(config); tzcRebateLevelsConfigService.save(config);
configList.add(config); configList.add(config);
} }
// 获取最高坎级返回的金额
BigDecimal maxAmount = tzcRebateApplication4CostService.getMaxLevelsAmount(levelsList, argumentList, configList);
// 计算和平摊到科目和成本中心(不再读取前端的金额)
List<TzcRebateSubjectParam> subjectParamList = param.getSubjectList();
this.calculateSubjectAndCenter(subjectParamList, maxAmount);
// 返利的成本中心(引用类型赋值)
List<TzcRebateCenter> rebateCenterList = new ArrayList<>();
// 返利的科目
List<TzcRebateSubject> tzcRebateSubjectList = this.buildRebateSubjectList(rebateId,param.getSubjectList(),rebateCenterList);
// 建立费用 // 建立费用
Long costApplyId = tzcRebateApplication4CostService.buildCostAndActivity( Long costApplyId = tzcRebateApplication4CostService.buildCostAndActivity(
rebate, rebate,
@ -345,12 +347,15 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
/** /**
* 保存坎级和设置参数 * 保存坎级和设置参数
* @param param * @param levelsParamList
* @param rebateId * @param rebateId
* @param argumentList
*/ */
private List<TzcRebateLevels> saveLevelListAndArgs(TzcRebateParam param, Long rebateId,List<TzcRebateLevelsArgument> argumentList) { private List<TzcRebateLevels> saveLevelListAndArgs(List<TzcRebateLevelsParam> levelsParamList,
Long rebateId,
List<TzcRebateLevelsArgument> argumentList) {
List<TzcRebateLevels> levelsList = new ArrayList<>(); List<TzcRebateLevels> levelsList = new ArrayList<>();
for (TzcRebateLevelsParam levelsParam : param.getLevelsList()) { for (TzcRebateLevelsParam levelsParam : levelsParamList) {
TzcRebateLevels levels = new TzcRebateLevels(); TzcRebateLevels levels = new TzcRebateLevels();
levels.setRebateId(rebateId); levels.setRebateId(rebateId);
levels.setLevelNum(levelsParam.getLevelNum()); levels.setLevelNum(levelsParam.getLevelNum());
@ -417,8 +422,15 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
rebate.setCheckModel(param.getCheckModel()); rebate.setCheckModel(param.getCheckModel());
rebate.setCheckMaxAmount(param.getCheckMaxAmount()); rebate.setCheckMaxAmount(param.getCheckMaxAmount());
rebate.setCheckAutoDateType(param.getCheckAutoDateType()); rebate.setCheckAutoDateType(param.getCheckAutoDateType());
rebate.setCheckStartDate(param.getCheckStartDate()); // 自动核销日期类型:0-手动设置;1-自然月;2-自然周
rebate.setCheckEndDate(param.getCheckEndDate()); int days = 15;
if (param.getCheckAutoDateType().equals(1)){
days = 30;
}else if (param.getCheckAutoDateType().equals(2)){
days = 7;
}
rebate.setCheckStartDate(param.getActivityStartTime().plusDays(days));
rebate.setCheckEndDate(param.getActivityEndTime().plusDays(days));
rebate.setSupplierId(param.getSupplierId()); rebate.setSupplierId(param.getSupplierId());
rebate.setSupplierCode(supplier.getCode()); rebate.setSupplierCode(supplier.getCode());
rebate.setSupplierName(supplier.getName()); rebate.setSupplierName(supplier.getName());

Loading…
Cancel
Save