|
|
@ -1,10 +1,15 @@ |
|
|
|
package com.qs.serve.modules.tbs.controller; |
|
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
import com.qs.serve.common.annotation.SysLog; |
|
|
|
import com.qs.serve.common.utils.CopierUtil; |
|
|
|
import com.qs.serve.framework.base.model.dto.CommonIdsParam; |
|
|
|
import com.qs.serve.framework.base.model.R; |
|
|
|
import com.qs.serve.common.enums.BizType; |
|
|
|
import com.qs.serve.common.enums.SystemModule; |
|
|
|
import com.qs.serve.modules.erp.entity.so.ErpDispatchSumPmsQuery; |
|
|
|
import com.qs.serve.modules.erp.entity.vo.ErpDispatchSumPmsVo; |
|
|
|
import com.qs.serve.modules.erp.mapper.ErpDispatchDataMapper; |
|
|
|
import com.qs.serve.modules.tbs.entity.*; |
|
|
|
import com.qs.serve.modules.tbs.service.*; |
|
|
|
import com.qs.serve.modules.vtb.service.VtbFundFlowService; |
|
|
@ -12,7 +17,10 @@ import lombok.AllArgsConstructor; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.springframework.web.bind.annotation.*; |
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.math.RoundingMode; |
|
|
|
import java.util.*; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
/** |
|
|
|
* 预算 费用活动 |
|
|
@ -30,6 +38,117 @@ public class TbsActivityController2 { |
|
|
|
private final VtbFundFlowService vtbFundFlowService; |
|
|
|
private final TbsActivityService tbsActivityService; |
|
|
|
private final TbsCostApplyPart1Service tbsCostApplyPart1Service; |
|
|
|
private final TbsActivityApplicationService tbsActivityApplicationService; |
|
|
|
private final TbsActivityGoodsService tbsActivityGoodsService; |
|
|
|
private final TbsActivitySubjectService tbsActivitySubjectService; |
|
|
|
private final ErpDispatchDataMapper erpDispatchDataMapper; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 获取活动对应的发货金额,并分割到科目维度 |
|
|
|
* @param ids |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
@GetMapping("/dispatchSplitList/{ids}") |
|
|
|
public R<?> getDispatchSplitList(@PathVariable String ids){ |
|
|
|
String [] idArr = ids.split(","); |
|
|
|
List<ErpDispatchSumPmsVo> result = new ArrayList<>(); |
|
|
|
for (String s : idArr) { |
|
|
|
ErpDispatchSumPmsVo vo = this.buildVrpDispatchSumPms(Long.parseLong(s)); |
|
|
|
result.add(vo); |
|
|
|
} |
|
|
|
return R.ok(result); |
|
|
|
} |
|
|
|
|
|
|
|
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 = CopierUtil.copy(query,new ErpDispatchSumPmsVo()); |
|
|
|
BigDecimal amt = BigDecimal.ZERO; |
|
|
|
if (hasGoods){ |
|
|
|
amt = erpDispatchDataMapper.queryCusAmtByPms(query); |
|
|
|
List<TbsActivitySubject> activitySubjects = tbsActivitySubjectService.list(new LambdaQueryWrapper<TbsActivitySubject>() |
|
|
|
.eq(TbsActivitySubject::getActivityId,activityId)); |
|
|
|
|
|
|
|
List<ErpDispatchSumPmsVo.SubjectDispatchSumVo> dispatchSumVoList = new ArrayList<>(); |
|
|
|
sumPmsVo.setSubjectDispatchAmountList(dispatchSumVoList); |
|
|
|
// 开始平摊逻辑
|
|
|
|
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); |
|
|
|
} |
|
|
|
|
|
|
|
ErpDispatchSumPmsVo.SubjectDispatchSumVo subjectDispatchSumVo = new ErpDispatchSumPmsVo.SubjectDispatchSumVo(); |
|
|
|
subjectDispatchSumVo.setSubjectId(subject.getSubjectId()); |
|
|
|
subjectDispatchSumVo.setSubjectCode(subject.getSubjectCode()); |
|
|
|
subjectDispatchSumVo.setSubjectName(subject.getSubjectName()); |
|
|
|
subjectDispatchSumVo.setSubjectAmount(allocatedAmt); |
|
|
|
dispatchSumVoList.add(subjectDispatchSumVo); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
sumPmsVo.setTotalAmount(amt); |
|
|
|
return sumPmsVo; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 批量查询活动详情 |
|
|
|