|
|
@ -65,102 +65,44 @@ public class TbsActivityController2 { |
|
|
|
|
|
|
|
private ErpDispatchSumPmsVo buildVrpDispatchSumPms(Long activityId) { |
|
|
|
TbsActivity activity = tbsActivityService.getById(activityId); |
|
|
|
ErpDispatchSumPmsQuery query = new ErpDispatchSumPmsQuery(); |
|
|
|
query.setSupplierCode(activity.getSupplierCode()); |
|
|
|
query.setStartDate(activity.getActStartDate()); |
|
|
|
query.setEndDate(activity.getActEndDate()); |
|
|
|
List<TbsActivityGoods> activityGoodsList = tbsActivityGoodsService.list( |
|
|
|
new LambdaQueryWrapper<TbsActivityGoods>() |
|
|
|
.eq(TbsActivityGoods::getActivityId, activityId)); |
|
|
|
Map<String,List<TbsActivityGoods>> actGoodsMap = activityGoodsList.stream() |
|
|
|
.collect(Collectors.groupingBy(TbsActivityGoods::getTargetType)); |
|
|
|
boolean hasGoods = false; |
|
|
|
List<TbsActivityGoods> brandGoodsList = actGoodsMap.get("brand"); |
|
|
|
if(brandGoodsList!=null){ |
|
|
|
List<Long> ids = brandGoodsList.stream() |
|
|
|
.map(TbsActivityGoods::getTargetId).collect(Collectors.toList()); |
|
|
|
query.setBrandIds(ids); |
|
|
|
hasGoods = true; |
|
|
|
} |
|
|
|
List<TbsActivityGoods> seriesGoodsList = actGoodsMap.get("series"); |
|
|
|
if(seriesGoodsList!=null){ |
|
|
|
List<Long> ids = seriesGoodsList.stream() |
|
|
|
.map(TbsActivityGoods::getTargetId).collect(Collectors.toList()); |
|
|
|
query.setSeriesIds(ids); |
|
|
|
hasGoods = true; |
|
|
|
} |
|
|
|
List<TbsActivityGoods> categoryGoodsList = actGoodsMap.get("category"); |
|
|
|
if(categoryGoodsList!=null){ |
|
|
|
List<Long> ids = categoryGoodsList.stream() |
|
|
|
.map(TbsActivityGoods::getTargetId).collect(Collectors.toList()); |
|
|
|
query.setCategoryIds(ids); |
|
|
|
hasGoods = true; |
|
|
|
} |
|
|
|
List<TbsActivityGoods> spuGoodsList = actGoodsMap.get("spu"); |
|
|
|
if(spuGoodsList!=null){ |
|
|
|
List<Long> ids = spuGoodsList.stream() |
|
|
|
.map(TbsActivityGoods::getTargetId).collect(Collectors.toList()); |
|
|
|
query.setSpuIds(ids); |
|
|
|
hasGoods = true; |
|
|
|
} |
|
|
|
List<TbsActivityGoods> skuGoodsList = actGoodsMap.get("sku"); |
|
|
|
if(skuGoodsList!=null){ |
|
|
|
List<Long> ids = skuGoodsList.stream() |
|
|
|
.map(TbsActivityGoods::getTargetId).collect(Collectors.toList()); |
|
|
|
query.setSkuIds(ids); |
|
|
|
hasGoods = true; |
|
|
|
} |
|
|
|
ErpDispatchSumPmsVo sumPmsVo = new ErpDispatchSumPmsVo(); |
|
|
|
sumPmsVo.setSupplierCode(query.getSupplierCode()); |
|
|
|
sumPmsVo.setStartDate(query.getStartDate()); |
|
|
|
sumPmsVo.setEndDate(query.getEndDate()); |
|
|
|
sumPmsVo.setCategoryIds(query.getCategoryIds()); |
|
|
|
sumPmsVo.setSpuIds(query.getSpuIds()); |
|
|
|
sumPmsVo.setSkuIds(query.getSkuIds()); |
|
|
|
|
|
|
|
BigDecimal amt = BigDecimal.ZERO; |
|
|
|
if (hasGoods){ |
|
|
|
amt = erpDispatchDataMapper.queryCusAmtByPms(query); |
|
|
|
if (amt==null){ |
|
|
|
amt = BigDecimal.ZERO; |
|
|
|
ErpDispatchSumPmsVo erpDispatchSumPmsVo = tbsActivityService.getDispatchSumByActivity(activity); |
|
|
|
|
|
|
|
BigDecimal amt = erpDispatchSumPmsVo.getTotalAmount(); |
|
|
|
List<TbsActivitySubject> activitySubjects = tbsActivitySubjectService.list(new LambdaQueryWrapper<TbsActivitySubject>() |
|
|
|
.eq(TbsActivitySubject::getActivityId,activityId)); |
|
|
|
|
|
|
|
List<SubjectDispatchSumVo> dispatchSumVoList = new ArrayList<>(); |
|
|
|
// 开始平摊逻辑
|
|
|
|
int size = activitySubjects.size(); |
|
|
|
if (size > 0) { |
|
|
|
BigDecimal totalAmount = BigDecimal.ZERO; |
|
|
|
for (TbsActivitySubject subject : activitySubjects) { |
|
|
|
totalAmount = totalAmount.add(subject.getAmount()); |
|
|
|
} |
|
|
|
List<TbsActivitySubject> activitySubjects = tbsActivitySubjectService.list(new LambdaQueryWrapper<TbsActivitySubject>() |
|
|
|
.eq(TbsActivitySubject::getActivityId,activityId)); |
|
|
|
|
|
|
|
List<SubjectDispatchSumVo> dispatchSumVoList = new ArrayList<>(); |
|
|
|
// 开始平摊逻辑
|
|
|
|
int size = activitySubjects.size(); |
|
|
|
if (size > 0) { |
|
|
|
BigDecimal totalAmount = BigDecimal.ZERO; |
|
|
|
for (TbsActivitySubject subject : activitySubjects) { |
|
|
|
totalAmount = totalAmount.add(subject.getAmount()); |
|
|
|
} |
|
|
|
BigDecimal remainingAmt = amt; |
|
|
|
for (int i = 0; i < size; i++) { |
|
|
|
TbsActivitySubject subject = activitySubjects.get(i); |
|
|
|
BigDecimal allocatedAmt; |
|
|
|
|
|
|
|
if (i == size - 1) { |
|
|
|
// 最后一项使用剩余金额
|
|
|
|
allocatedAmt = remainingAmt; |
|
|
|
} else { |
|
|
|
// 按比例分配
|
|
|
|
allocatedAmt = amt.multiply(subject.getAmount()).divide(totalAmount, 2, RoundingMode.HALF_UP); |
|
|
|
remainingAmt = remainingAmt.subtract(allocatedAmt); |
|
|
|
} |
|
|
|
|
|
|
|
SubjectDispatchSumVo subjectDispatchSumVo = new SubjectDispatchSumVo(); |
|
|
|
subjectDispatchSumVo.setSubjectId(subject.getSubjectId()); |
|
|
|
subjectDispatchSumVo.setSubjectCode(subject.getSubjectCode()); |
|
|
|
subjectDispatchSumVo.setSubjectName(subject.getSubjectName()); |
|
|
|
subjectDispatchSumVo.setSubjectAmount(allocatedAmt); |
|
|
|
dispatchSumVoList.add(subjectDispatchSumVo); |
|
|
|
BigDecimal remainingAmt = amt; |
|
|
|
for (int i = 0; i < size; i++) { |
|
|
|
TbsActivitySubject subject = activitySubjects.get(i); |
|
|
|
BigDecimal allocatedAmt; |
|
|
|
|
|
|
|
if (i == size - 1) { |
|
|
|
// 最后一项使用剩余金额
|
|
|
|
allocatedAmt = remainingAmt; |
|
|
|
} else { |
|
|
|
// 按比例分配
|
|
|
|
allocatedAmt = amt.multiply(subject.getAmount()).divide(totalAmount, 2, RoundingMode.HALF_UP); |
|
|
|
remainingAmt = remainingAmt.subtract(allocatedAmt); |
|
|
|
} |
|
|
|
|
|
|
|
SubjectDispatchSumVo subjectDispatchSumVo = new SubjectDispatchSumVo(); |
|
|
|
subjectDispatchSumVo.setSubjectId(subject.getSubjectId()); |
|
|
|
subjectDispatchSumVo.setSubjectCode(subject.getSubjectCode()); |
|
|
|
subjectDispatchSumVo.setSubjectName(subject.getSubjectName()); |
|
|
|
subjectDispatchSumVo.setSubjectAmount(allocatedAmt); |
|
|
|
dispatchSumVoList.add(subjectDispatchSumVo); |
|
|
|
} |
|
|
|
sumPmsVo.setSubjectDispatchAmountList(dispatchSumVoList); |
|
|
|
} |
|
|
|
sumPmsVo.setTotalAmount(amt); |
|
|
|
return sumPmsVo; |
|
|
|
erpDispatchSumPmsVo.setSubjectDispatchAmountList(dispatchSumVoList); |
|
|
|
return erpDispatchSumPmsVo; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|