Browse Source

feat: 获取活动对应的发货金额,并分割到科目维度

master
Yen 2 months ago
parent
commit
3d94b2a7dc
  1. 10
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/entity/so/ErpDispatchSumPmsQuery.java
  2. 16
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/entity/vo/ErpDispatchSumPmsVo.java
  3. 2
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/mapper/ErpDispatchDataMapper.java
  4. 119
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController2.java
  5. 2
      cms-modules/cms-system/src/main/resources/mapper/erp/ErpDispatchDataMapper.xml

10
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<String> brandIds;
List<Long> brandIds;
List<String> seriesIds;
List<Long> seriesIds;
List<String> categoryIds;
List<Long> categoryIds;
List<String> spuIds;
List<Long> spuIds;
List<String> skuIds;
List<Long> skuIds;
}

16
cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/entity/vo/ErpDispatchSumPmsVo.java

@ -30,4 +30,20 @@ public class ErpDispatchSumPmsVo {
List<String> skuIds;
/**
* 按科目分割后的金额
*/
private List<SubjectDispatchSumVo> subjectDispatchAmountList;
@Data
public static class SubjectDispatchSumVo {
BigDecimal subjectRate;
Long subjectId;
String subjectCode;
String subjectName;
BigDecimal subjectAmount;
}
}

2
cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/mapper/ErpDispatchDataMapper.java

@ -78,7 +78,7 @@ public interface ErpDispatchDataMapper extends BaseMapper<ErpDispatchData> {
* @return
*/
@InterceptorIgnore(tenantLine = "1")
List<ErpDispatchSumPmsVo> queryCusAmtByPms(@Param("query") ErpDispatchSumPmsQuery query);
BigDecimal queryCusAmtByPms(@Param("query") ErpDispatchSumPmsQuery query);
}

119
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<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;
}
/**
* 批量查询活动详情

2
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>
<select id="queryCusAmtByPms" resultType="com.qs.serve.modules.erp.entity.vo.ErpDispatchSumPmsVo">
<select id="queryCusAmtByPms" resultType="java.math.BigDecimal">
SELECT
SUM(d.sum_money) as totalAmount
FROM

Loading…
Cancel
Save