|
|
@ -1,6 +1,7 @@ |
|
|
|
package com.qs.serve.modules.tzc.service.impl; |
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
import com.qs.serve.common.exception.Assert; |
|
|
|
import com.qs.serve.common.utils.CopierUtil; |
|
|
|
import com.qs.serve.framework.base.model.ResultFlag; |
|
|
@ -17,6 +18,9 @@ import com.qs.serve.modules.tbs.service.TbsCenterDtoService; |
|
|
|
import com.qs.serve.modules.tzc.consts.TzcArgTypes; |
|
|
|
import com.qs.serve.modules.tzc.entity.*; |
|
|
|
import com.qs.serve.modules.tzc.entity.bo.*; |
|
|
|
import com.qs.serve.modules.tzc.entity.vo.TzcRebatePeriodVo; |
|
|
|
import com.qs.serve.modules.tzc.entity.vo.TzcRebateSubjectVo; |
|
|
|
import com.qs.serve.modules.tzc.entity.vo.TzcRebateVo; |
|
|
|
import com.qs.serve.modules.tzc.enums.TzcRebateStatus; |
|
|
|
import com.qs.serve.modules.tzc.service.*; |
|
|
|
import lombok.AllArgsConstructor; |
|
|
@ -47,6 +51,7 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ |
|
|
|
private final TzcRebateLevelsArgumentService tzcRebateLevelsArgumentService; |
|
|
|
private final TzcRebateGoodsService tzcRebateGoodsService; |
|
|
|
private final TzcRebateLevelsConfigService tzcRebateLevelsConfigService; |
|
|
|
private final TzcRebateLevelsService tzcRebateLevelsService; |
|
|
|
|
|
|
|
private final BmsCostCenterMapper bmsCostCenterMapper; |
|
|
|
private final BmsSupplierMapper bmsSupplierMapper; |
|
|
@ -54,14 +59,74 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ |
|
|
|
private final GoodsApplicationService goodsApplicationService; |
|
|
|
private final TbsCenterDtoService tbsCenterDtoService; |
|
|
|
|
|
|
|
@Override |
|
|
|
public TzcRebateVo getRebateVoById(Long id) { |
|
|
|
TzcRebate tzcRebate = tzcRebateService.getById(id); |
|
|
|
Assert.isNull(tzcRebate, "返利不存在"); |
|
|
|
TzcRebateVo tzcRebateVo = CopierUtil.copy(tzcRebate,new TzcRebateVo()); |
|
|
|
QueryWrapper qw = new QueryWrapper<>(); |
|
|
|
qw.eq("rebate_id", id); |
|
|
|
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<TzcRebateSubjectVo> subjectVoList = buildSubjectVoList(subjectList, centerList); |
|
|
|
tzcRebateVo.setSubjectList(subjectVoList); |
|
|
|
|
|
|
|
List<TzcRebatePeriodVo> periodVoList = buildPeriodVoList(argumentList, periodList); |
|
|
|
tzcRebateVo.setPeriodList(periodVoList); |
|
|
|
tzcRebateVo.setGoodsList(goodsList); |
|
|
|
tzcRebateVo.setConfigList(configList); |
|
|
|
|
|
|
|
return tzcRebateVo; |
|
|
|
} |
|
|
|
|
|
|
|
@NotNull |
|
|
|
private List<TzcRebateSubjectVo> buildSubjectVoList(List<TzcRebateSubject> subjectList, List<TzcRebateCenter> centerList) { |
|
|
|
List<TzcRebateSubjectVo> subjectVoList = new ArrayList<>(); |
|
|
|
for (TzcRebateSubject subject : subjectList) { |
|
|
|
List<TzcRebateCenter> currentCenterList = new ArrayList<>(); |
|
|
|
for (TzcRebateCenter center : centerList) { |
|
|
|
if (center.getRebateSubjectId().equals(subject.getId())){ |
|
|
|
currentCenterList.add(center); |
|
|
|
} |
|
|
|
} |
|
|
|
TzcRebateSubjectVo subjectVo = CopierUtil.copy(subject,new TzcRebateSubjectVo()); |
|
|
|
subjectVo.setCenterList(currentCenterList); |
|
|
|
subjectVoList.add(subjectVo); |
|
|
|
} |
|
|
|
return subjectVoList; |
|
|
|
} |
|
|
|
|
|
|
|
@NotNull |
|
|
|
private List<TzcRebatePeriodVo> buildPeriodVoList(List<TzcRebateLevelsArgument> argumentList, List<TzcRebatePeriod> periodList) { |
|
|
|
List<TzcRebatePeriodVo> periodVoList = new ArrayList<>(); |
|
|
|
for (TzcRebatePeriod period : periodList) { |
|
|
|
TzcRebatePeriodVo periodVo = CopierUtil.copy(period,new TzcRebatePeriodVo()); |
|
|
|
for (TzcRebateLevelsArgument argument : argumentList) { |
|
|
|
if(argument.getPeriodId().equals(period.getId())&& |
|
|
|
argument.getBusinessType().equals(TzcArgTypes.PeriodSupplement.name())){ |
|
|
|
periodVo.setArgument(argument); |
|
|
|
} |
|
|
|
} |
|
|
|
periodVoList.add(periodVo); |
|
|
|
} |
|
|
|
return periodVoList; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
public Object modifyRebate(TzcRebateParam param) { |
|
|
|
public TzcRebate modifyRebate(TzcRebateParam param) { |
|
|
|
|
|
|
|
boolean isUpdate = false; |
|
|
|
Long rebateId = param.getId(); |
|
|
|
String rebateCode = null; |
|
|
|
String rebateCode; |
|
|
|
|
|
|
|
if(rebateId!=null){ |
|
|
|
isUpdate = true; |
|
|
|
TzcRebate rebate = tzcRebateService.getById(rebateId); |
|
|
|
if(TzcRebateStatus.DRAFT.isEqual(rebate.getRebateStatus())){ |
|
|
|
Assert.throwEx("返利状态为初始化,不能修改"); |
|
|
@ -74,11 +139,89 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ |
|
|
|
// 校验返利参数
|
|
|
|
this.validRebateParam(param); |
|
|
|
|
|
|
|
if (isUpdate){ |
|
|
|
//删除旧数据
|
|
|
|
this.removeOldRebateDataById(rebateId); |
|
|
|
} |
|
|
|
|
|
|
|
BmsSupplier supplier = bmsSupplierMapper.selectById(param.getSupplierId()); |
|
|
|
if(supplier==null){ |
|
|
|
Assert.throwEx("客户不存在"); |
|
|
|
} |
|
|
|
|
|
|
|
// 返利主表信息
|
|
|
|
TzcRebate rebate = buildRebateInfo(param, rebateId, rebateCode, supplier); |
|
|
|
tzcRebateService.saveOrUpdate(rebate); |
|
|
|
// 重新赋值获取最新id
|
|
|
|
rebateId = rebate.getId(); |
|
|
|
|
|
|
|
// 返利的商品
|
|
|
|
List<TzcRebateGoods> tzcRebateGoodsList = this.buildRebateGoodsList(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); |
|
|
|
|
|
|
|
// 期间及补偿参数保存
|
|
|
|
this.savePeriodList(param.getPeriodList(), rebateId); |
|
|
|
|
|
|
|
// 保存坎级和设置参数
|
|
|
|
this.saveLevelListAndArgs(param, rebateId); |
|
|
|
|
|
|
|
// 保存坎级叠加配置
|
|
|
|
for (TzcRebateLevelsConfigParam configParam : param.getConfigList()) { |
|
|
|
TzcRebateLevelsConfig config = new TzcRebateLevelsConfig(); |
|
|
|
config.setRebateId(rebateId); |
|
|
|
config.setLevelNum(config.getLevelNum()); |
|
|
|
config.setLevelConfigs(config.getLevelConfigs()); |
|
|
|
tzcRebateLevelsConfigService.save(config); |
|
|
|
} |
|
|
|
|
|
|
|
return rebate; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 保存坎级和设置参数 |
|
|
|
* @param param |
|
|
|
* @param rebateId |
|
|
|
*/ |
|
|
|
private void saveLevelListAndArgs(TzcRebateParam param, Long rebateId) { |
|
|
|
for (TzcRebateLevelsParam levelsParam : param.getLevelsList()) { |
|
|
|
TzcRebateLevels levels = new TzcRebateLevels(); |
|
|
|
levels.setRebateId(rebateId); |
|
|
|
levels.setLevelNum(levelsParam.getLevelNum()); |
|
|
|
levels.setConditionType(levelsParam.getConditionType()); |
|
|
|
levels.setConditionSelect(levelsParam.getConditionSelect()); |
|
|
|
levels.setConditionRate(levelsParam.getConditionRate()); |
|
|
|
levels.setConditionAmount(levelsParam.getConditionAmount()); |
|
|
|
levels.setExampleRemark(levelsParam.getExampleRemark()); |
|
|
|
levels.setRemark(levelsParam.getRemark()); |
|
|
|
tzcRebateLevelsService.save(levels); |
|
|
|
Long levelId = levels.getId(); |
|
|
|
|
|
|
|
TzcRebateLevelsArgument argument = buildArgByParam(levelsParam.getOverallTargetArgument()); |
|
|
|
argument.setBusinessType(TzcArgTypes.LevelOverallReturn.name()); |
|
|
|
argument.setLevelId(levelId); |
|
|
|
argument.setPeriodId(0L); |
|
|
|
tzcRebateLevelsArgumentService.save(argument); |
|
|
|
|
|
|
|
TzcRebateLevelsArgument argument2 = buildArgByParam(levelsParam.getTargetArgument()); |
|
|
|
argument2.setBusinessType(TzcArgTypes.LevelReturn.name()); |
|
|
|
argument2.setLevelId(levelId); |
|
|
|
argument2.setPeriodId(0L); |
|
|
|
tzcRebateLevelsArgumentService.save(argument2); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@NotNull |
|
|
|
private TzcRebate buildRebateInfo(TzcRebateParam param, Long rebateId, String rebateCode, BmsSupplier supplier) { |
|
|
|
TzcRebate rebate = new TzcRebate(); |
|
|
|
rebate.setId(rebateId); |
|
|
|
rebate.setRebateCode(rebateCode); |
|
|
@ -100,26 +243,16 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ |
|
|
|
rebate.setRebateAmount(param.getRebateAmount()); |
|
|
|
rebate.setOverlayFlag(param.getOverlayFlag()); |
|
|
|
rebate.setRemark(param.getRemark()); |
|
|
|
tzcRebateService.saveOrUpdate(rebate); |
|
|
|
// 重新赋值获取最新id
|
|
|
|
rebateId = rebate.getId(); |
|
|
|
|
|
|
|
// 返利的商品
|
|
|
|
List<TzcRebateGoods> tzcRebateGoodsList = this.buildRebateGoodsList(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); |
|
|
|
return rebate; |
|
|
|
} |
|
|
|
|
|
|
|
// 期间及补偿参数保存
|
|
|
|
for (TzcRebatePeriodParam periodParam : param.getPeriodList()) { |
|
|
|
/** |
|
|
|
* 期间及补偿参数保存 |
|
|
|
* @param periodParamList |
|
|
|
* @param rebateId |
|
|
|
*/ |
|
|
|
private void savePeriodList(List<TzcRebatePeriodParam> periodParamList, Long rebateId) { |
|
|
|
for (TzcRebatePeriodParam periodParam : periodParamList) { |
|
|
|
TzcRebatePeriod period = new TzcRebatePeriod(); |
|
|
|
period.setRebateId(rebateId); |
|
|
|
period.setPeriodTitle(periodParam.getPeriodTitle()); |
|
|
@ -132,31 +265,38 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ |
|
|
|
tzcRebatePeriodService.save(period); |
|
|
|
Long periodId = period.getId(); |
|
|
|
|
|
|
|
TzcRebateArgumentParam argumentParam = periodParam.getArgumentParam(); |
|
|
|
TzcRebateLevelsArgument argument = new TzcRebateLevelsArgument(); |
|
|
|
argument.setBusinessType(TzcArgTypes.PeriodExtend.name()); |
|
|
|
// 保存返利参数
|
|
|
|
TzcRebateLevelsArgument argument = buildArgByParam(periodParam.getArgumentParam()); |
|
|
|
argument.setBusinessType(TzcArgTypes.PeriodSupplement.name()); |
|
|
|
argument.setLevelId(0L); |
|
|
|
argument.setPeriodId(periodId); |
|
|
|
argument.setSumAddFlag(argumentParam.getSumAddFlag()); |
|
|
|
argument.setRateAmtFlag(argumentParam.getRateAmtFlag()); |
|
|
|
argument.setSumReturnRate(argumentParam.getSumReturnRate()); |
|
|
|
argument.setSumReturnFixed(argumentParam.getSumReturnFixed()); |
|
|
|
argument.setSumMaxReturn(argumentParam.getSumMaxReturn()); |
|
|
|
argument.setAddReturnRate(argumentParam.getAddReturnRate()); |
|
|
|
argument.setAddReturnFixed(argumentParam.getAddReturnFixed()); |
|
|
|
argument.setAddMaxReturn(argumentParam.getAddMaxReturn()); |
|
|
|
tzcRebateLevelsArgumentService.save(argument); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
for (TzcRebateLevelsConfigParam configParam : param.getConfigList()) { |
|
|
|
TzcRebateLevelsConfig config = new TzcRebateLevelsConfig(); |
|
|
|
config.setRebateId(rebateId); |
|
|
|
config.setLevelNum(config.getLevelNum()); |
|
|
|
config.setLevelConfigs(config.getLevelConfigs()); |
|
|
|
tzcRebateLevelsConfigService.save(config); |
|
|
|
} |
|
|
|
@NotNull |
|
|
|
private TzcRebateLevelsArgument buildArgByParam(TzcRebateArgumentParam argumentParam) { |
|
|
|
TzcRebateLevelsArgument argument = new TzcRebateLevelsArgument(); |
|
|
|
argument.setSumAddFlag(argumentParam.getSumAddFlag()); |
|
|
|
argument.setRateAmtFlag(argumentParam.getRateAmtFlag()); |
|
|
|
argument.setSumReturnRate(argumentParam.getSumReturnRate()); |
|
|
|
argument.setSumReturnFixed(argumentParam.getSumReturnFixed()); |
|
|
|
argument.setSumMaxReturn(argumentParam.getSumMaxReturn()); |
|
|
|
argument.setAddReturnRate(argumentParam.getAddReturnRate()); |
|
|
|
argument.setAddReturnFixed(argumentParam.getAddReturnFixed()); |
|
|
|
argument.setAddMaxReturn(argumentParam.getAddMaxReturn()); |
|
|
|
return argument; |
|
|
|
} |
|
|
|
|
|
|
|
return null; |
|
|
|
private void removeOldRebateDataById(Long rebateId) { |
|
|
|
QueryWrapper qw = new QueryWrapper<>(); |
|
|
|
qw.eq("rebate_id", rebateId); |
|
|
|
tzcRebateSubjectService.remove(qw); |
|
|
|
tzcRebateCenterService.remove(qw); |
|
|
|
tzcRebatePeriodService.remove(qw); |
|
|
|
tzcRebateLevelsArgumentService.remove(qw); |
|
|
|
tzcRebateGoodsService.remove(qw); |
|
|
|
tzcRebateLevelsConfigService.remove(qw); |
|
|
|
} |
|
|
|
|
|
|
|
@NotNull |
|
|
@ -205,25 +345,25 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ |
|
|
|
@NotNull |
|
|
|
private List<TzcRebateGoods> buildRebateGoodsList(List<TzcRebateGoodsParam> goodsList) { |
|
|
|
List<TzcRebateGoods> tzcRebateGoodsList = new ArrayList<>(); |
|
|
|
Map<String,List<TzcRebateGoodsParam>> goodsListMap = goodsList.stream() |
|
|
|
.collect(Collectors.groupingBy(TzcRebateGoodsParam::getGoodsType)); |
|
|
|
for (Map.Entry<String, List<TzcRebateGoodsParam>> entry : goodsListMap.entrySet()) { |
|
|
|
String goodsType = entry.getKey(); |
|
|
|
List<TzcRebateGoodsParam> goodsParamList = entry.getValue(); |
|
|
|
List<GoodsTargetInfo> goodsTargetList = goodsApplicationService.getGoodsTargetInfo(goodsType,goodsParamList.stream() |
|
|
|
.map(TzcRebateGoodsParam::getGoodsId).collect(Collectors.toList())); |
|
|
|
for (GoodsTargetInfo targetInfo : goodsTargetList) { |
|
|
|
TzcRebateGoods rebateGoods = CopierUtil.copy(targetInfo,new TzcRebateGoods()); |
|
|
|
for (TzcRebateGoodsParam goodsParam : goodsParamList) { |
|
|
|
if(goodsParam.getGoodsId().equals(targetInfo.getTargetId())){ |
|
|
|
rebateGoods.setTmpUk(goodsParam.getTmpUk()); |
|
|
|
rebateGoods.setRemark(goodsParam.getRemark()); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
tzcRebateGoodsList.add(rebateGoods); |
|
|
|
} |
|
|
|
} |
|
|
|
// Map<String,List<TzcRebateGoodsParam>> goodsListMap = goodsList.stream()
|
|
|
|
// .collect(Collectors.groupingBy(TzcRebateGoodsParam::getGoodsType));
|
|
|
|
// for (Map.Entry<String, List<TzcRebateGoodsParam>> entry : goodsListMap.entrySet()) {
|
|
|
|
// String goodsType = entry.getKey();
|
|
|
|
// List<TzcRebateGoodsParam> goodsParamList = entry.getValue();
|
|
|
|
// List<GoodsTargetInfo> goodsTargetList = goodsApplicationService.getGoodsTargetInfo(goodsType,goodsParamList.stream()
|
|
|
|
// .map(TzcRebateGoodsParam::getGoodsId).collect(Collectors.toList()));
|
|
|
|
// for (GoodsTargetInfo targetInfo : goodsTargetList) {
|
|
|
|
// TzcRebateGoods rebateGoods = CopierUtil.copy(targetInfo,new TzcRebateGoods());
|
|
|
|
// for (TzcRebateGoodsParam goodsParam : goodsParamList) {
|
|
|
|
// if(goodsParam.getGoodsId().equals(targetInfo.getTargetId())){
|
|
|
|
// rebateGoods.setTmpUk(goodsParam.getTmpUk());
|
|
|
|
// rebateGoods.setRemark(goodsParam.getRemark());
|
|
|
|
// break;
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// tzcRebateGoodsList.add(rebateGoods);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
return tzcRebateGoodsList; |
|
|
|
} |
|
|
|
|
|
|
|