diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/entity/so/ErpDispatchSumPmsQuery.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/entity/so/ErpDispatchSumPmsQuery.java index 7779ab2..b321a62 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/entity/so/ErpDispatchSumPmsQuery.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/entity/so/ErpDispatchSumPmsQuery.java @@ -23,14 +23,14 @@ public class ErpDispatchSumPmsQuery { @NotNull LocalDate endDate; - List brandIds; + List brandIds; - List seriesIds; + List seriesIds; - List categoryIds; + List categoryIds; - List spuIds; + List spuIds; - List skuIds; + List skuIds; } diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/entity/vo/ErpDispatchSumPmsVo.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/entity/vo/ErpDispatchSumPmsVo.java index 2cfd829..9dd2c99 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/entity/vo/ErpDispatchSumPmsVo.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/entity/vo/ErpDispatchSumPmsVo.java @@ -30,4 +30,20 @@ public class ErpDispatchSumPmsVo { List skuIds; + /** + * 按科目分割后的金额 + */ + private List subjectDispatchAmountList; + + @Data + public static class SubjectDispatchSumVo { + + BigDecimal subjectRate; + Long subjectId; + String subjectCode; + String subjectName; + BigDecimal subjectAmount; + + } + } diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/mapper/ErpDispatchDataMapper.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/mapper/ErpDispatchDataMapper.java index 9951e2e..42735ec 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/mapper/ErpDispatchDataMapper.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/mapper/ErpDispatchDataMapper.java @@ -78,7 +78,7 @@ public interface ErpDispatchDataMapper extends BaseMapper { * @return */ @InterceptorIgnore(tenantLine = "1") - List queryCusAmtByPms(@Param("query") ErpDispatchSumPmsQuery query); + BigDecimal queryCusAmtByPms(@Param("query") ErpDispatchSumPmsQuery query); } diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController2.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController2.java index 9861919..7b0a5ef 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController2.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController2.java @@ -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 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 activityGoodsList = tbsActivityGoodsService.list( + new LambdaQueryWrapper() + .eq(TbsActivityGoods::getActivityId, activityId)); + Map> actGoodsMap = activityGoodsList.stream() + .collect(Collectors.groupingBy(TbsActivityGoods::getTargetType)); + boolean hasGoods = false; + List brandGoodsList = actGoodsMap.get("brand"); + if(brandGoodsList!=null){ + List ids = brandGoodsList.stream() + .map(TbsActivityGoods::getTargetId).collect(Collectors.toList()); + query.setBrandIds(ids); + hasGoods = true; + } + List seriesGoodsList = actGoodsMap.get("series"); + if(seriesGoodsList!=null){ + List ids = seriesGoodsList.stream() + .map(TbsActivityGoods::getTargetId).collect(Collectors.toList()); + query.setSeriesIds(ids); + hasGoods = true; + } + List categoryGoodsList = actGoodsMap.get("category"); + if(categoryGoodsList!=null){ + List ids = categoryGoodsList.stream() + .map(TbsActivityGoods::getTargetId).collect(Collectors.toList()); + query.setCategoryIds(ids); + hasGoods = true; + } + List spuGoodsList = actGoodsMap.get("spu"); + if(spuGoodsList!=null){ + List ids = spuGoodsList.stream() + .map(TbsActivityGoods::getTargetId).collect(Collectors.toList()); + query.setSpuIds(ids); + hasGoods = true; + } + List skuGoodsList = actGoodsMap.get("sku"); + if(skuGoodsList!=null){ + List 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 activitySubjects = tbsActivitySubjectService.list(new LambdaQueryWrapper() + .eq(TbsActivitySubject::getActivityId,activityId)); + + List 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; + } /** * 批量查询活动详情 diff --git a/cms-modules/cms-system/src/main/resources/mapper/erp/ErpDispatchDataMapper.xml b/cms-modules/cms-system/src/main/resources/mapper/erp/ErpDispatchDataMapper.xml index f635f78..502d9a9 100644 --- a/cms-modules/cms-system/src/main/resources/mapper/erp/ErpDispatchDataMapper.xml +++ b/cms-modules/cms-system/src/main/resources/mapper/erp/ErpDispatchDataMapper.xml @@ -123,7 +123,7 @@ GROUP BY DATE_FORMAT(date,'%Y%m'),cus_code - SELECT SUM(d.sum_money) as totalAmount FROM