|
|
@ -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; |
|
|
|
} |
|
|
|
|
|
|
|
/** |