diff --git a/src/main/java/com/qs/serve/modules/bir/controller/BirRoiRateController.java b/src/main/java/com/qs/serve/modules/bir/controller/BirRoiRateController.java index 3dc2e049..5d91f922 100644 --- a/src/main/java/com/qs/serve/modules/bir/controller/BirRoiRateController.java +++ b/src/main/java/com/qs/serve/modules/bir/controller/BirRoiRateController.java @@ -155,6 +155,18 @@ public class BirRoiRateController { return R.ok(birCenterRateService.findCostCenterDataByCostApplyId(costApplyId,policyId)); } + /** + * 获取成本中心费率(版本v2) + * @param costApplyId + * @param policyId + * @return + */ + @RepeatSubmit + @GetMapping("/centerRateByCostApplyIdv2") + public R> centerRateByCostApplyIdv2(Long costApplyId,Long policyId){ + return R.ok(birCenterRateService.selectCostApplyRateVoList(costApplyId,policyId)); + } + /** * 发货单时间 * @return diff --git a/src/main/java/com/qs/serve/modules/bir/entity/vo/BirCostApplyRateVo.java b/src/main/java/com/qs/serve/modules/bir/entity/vo/BirCostApplyRateVo.java new file mode 100644 index 00000000..52244415 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bir/entity/vo/BirCostApplyRateVo.java @@ -0,0 +1,63 @@ +package com.qs.serve.modules.bir.entity.vo; + +import com.qs.serve.modules.tbs.entity.TbsActivityCenter; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author YenHex + * @since 2023/12/29 + */ +@Data +public class BirCostApplyRateVo { + + public BirCostApplyRateVo(String scheduleType,TbsActivityCenter activityCenter){ + this.scheduleType = scheduleType; + this.centerId = activityCenter.getCenterId(); + this.centerCode = activityCenter.getCenterCode(); + this.centerName = activityCenter.getCenterName(); + this.centerType = activityCenter.getCenterType(); + } + + private String centerId; + + private String centerType; + + private String centerCode; + + private String centerName; + + /** + * 年季月,year,quarter,month + */ + private String scheduleType; + + /** 目标金额(待定) */ + private BigDecimal targetAmount; + + /** 预算金额(待定) */ + private BigDecimal budgetAmt; + + /** 预算费用率(待定) */ + private BigDecimal budgetRate; + + /** 客户发货 */ + private BigDecimal cusDisAmt; + + /** 客户费用(客户占用该成本中心的费用金额) */ + private BigDecimal cusCostAmt; + + /** 客户费用率(客户费用/客户发货) */ + private BigDecimal cusRate; + + /** 整体发货(该成本中心所有客户的发货金额) */ + private BigDecimal centerDisAmt; + + /** 整体费用(所有客户占用该成本中心的费用金额) */ + private BigDecimal centerCostAmt; + + /** 整体费用率(整体费用/整体发货) */ + private BigDecimal centerRate; + +} diff --git a/src/main/java/com/qs/serve/modules/bir/service/BirCenterRateService.java b/src/main/java/com/qs/serve/modules/bir/service/BirCenterRateService.java index bba8ce36..cb7e6c31 100644 --- a/src/main/java/com/qs/serve/modules/bir/service/BirCenterRateService.java +++ b/src/main/java/com/qs/serve/modules/bir/service/BirCenterRateService.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.bir.service; +import com.qs.serve.modules.bir.entity.vo.BirCostApplyRateVo; import com.qs.serve.modules.tbs.entity.dto.TbsCostSubItem; import java.util.List; @@ -19,4 +20,13 @@ public interface BirCenterRateService { TbsCostSubItem.CostCenterTranStr buildCostCenter(String centerType, String centerId, String centerName,String supplierCode); List findCostCenterDataByCostApplyId(Long costApplyId,Long policyId); + + /** + * 新的费用率统计 + * @param costApplyId + * @param policyId + * @return + */ + List selectCostApplyRateVoList(Long costApplyId,Long policyId); + } diff --git a/src/main/java/com/qs/serve/modules/bir/service/impl/BirCenterRateServiceImpl.java b/src/main/java/com/qs/serve/modules/bir/service/impl/BirCenterRateServiceImpl.java index 7b835cf0..ea209c35 100644 --- a/src/main/java/com/qs/serve/modules/bir/service/impl/BirCenterRateServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bir/service/impl/BirCenterRateServiceImpl.java @@ -14,6 +14,7 @@ import com.qs.serve.modules.bir.entity.dto.BirRoiCostDTO; import com.qs.serve.modules.bir.entity.so.BirCostRoiSo; import com.qs.serve.modules.bir.entity.so.BirMonthCusCenterSo; import com.qs.serve.modules.bir.entity.vo.BirActivityCenterGoodsMonthVo; +import com.qs.serve.modules.bir.entity.vo.BirCostApplyRateVo; import com.qs.serve.modules.bir.entity.vo.BirRoiCostItemVo; import com.qs.serve.modules.bir.entity.vo.YtdQtdToOAVo; import com.qs.serve.modules.bir.mapper.BirActivityCenterGoodsMapper; @@ -113,6 +114,95 @@ public class BirCenterRateServiceImpl implements BirCenterRateService { return centerDataList; } + @Override + public List selectCostApplyRateVoList(Long costApplyId, Long policyId) { + + TbsCostApply costApply = tbsCostApplyMapper.selectById(costApplyId); + final String supplierId = costApply.getSupplierId()+""; + + LambdaQueryWrapper acLqw = new LambdaQueryWrapper<>(); + acLqw.eq(TbsActivityCenter::getCostApplyId,costApplyId); + List activityCenterList = tbsActivityCenterMapper.selectList(acLqw); + + LocalDate nowDate = LocalDate.now(); + int year = nowDate.getYear(); + int month = nowDate.getMonthValue(); + month = month>1?month:1; + //年 + int yearStartNum = year*100 + 1; + int yearEndNum = year*100 + month; + //当月 + int currMonthNum = yearEndNum; + //当季度 + List numbers = QuarterUtil.getQuarterNumbers(year,month); + int quarterStartNum = numbers.get(0); + int quarterEndNum = numbers.get(2); + + List resultList = new ArrayList<>(); + + List yearList = this.buildCostApplyRateList( + "year",yearStartNum, yearEndNum, + supplierId, activityCenterList); + + List seasonList = this.buildCostApplyRateList( + "quarter",quarterStartNum, quarterEndNum, + supplierId, activityCenterList); + + List monthList = this.buildCostApplyRateList( + "month",currMonthNum, currMonthNum, + supplierId, activityCenterList); + + resultList.addAll(yearList); + resultList.addAll(seasonList); + resultList.addAll(monthList); + return resultList; + } + + private List buildCostApplyRateList(String scheduleType,int startMonthNum, int endMonthNum, String supplierId, List activityCenterList) { + List costApplyRateVoList = new ArrayList<>(); + for (TbsActivityCenter center : activityCenterList) { + BirCostApplyRateVo costApplyRateVo = new BirCostApplyRateVo(scheduleType,center); + //周期内使用金额合计,成本中心 + LambdaQueryWrapper birCenterLwq = new LambdaQueryWrapper<>(); + birCenterLwq.eq(BirActivityCenterGoods::getCenterId,center.getCenterId()); + birCenterLwq.eq(BirActivityCenterGoods::getCenterType,center.getCenterType()); + birCenterLwq.ge(BirActivityCenterGoods::getKeyNum, startMonthNum); + birCenterLwq.le(BirActivityCenterGoods::getKeyNum, endMonthNum); + List birCenterCost = birActivityCenterGoodsMapper.selectList(birCenterLwq); + BigDecimal centerUsedCost = birCenterCost.stream().map(BirActivityCenterGoods::getSplitUsedAmount).reduce(BigDecimal.ZERO,BigDecimal::add); + //周期内使用金额合计,客户 + LambdaQueryWrapper birSupplierLwq = new LambdaQueryWrapper<>(); + birSupplierLwq.eq(BirActivityCenterGoods::getSupplierId, supplierId); + birSupplierLwq.ge(BirActivityCenterGoods::getKeyNum, startMonthNum); + birSupplierLwq.le(BirActivityCenterGoods::getKeyNum, endMonthNum); + List birSupplierCost = birActivityCenterGoodsMapper.selectList(birSupplierLwq); + BigDecimal supplierUsedCost = birSupplierCost.stream().map(BirActivityCenterGoods::getSplitUsedAmount).reduce(BigDecimal.ZERO,BigDecimal::add); + + //客户维度发货金额 + List dispatchSumSupplierVos = dispatchDataMapper.querySumCost(startMonthNum, endMonthNum,Arrays.asList(supplierId)); + BigDecimal dispatchSumSupplierAmt = dispatchSumSupplierVos.stream().map(ErpDispatchSumVo::getDispatchSumCost).reduce(BigDecimal.ZERO,BigDecimal::add); + + //成本中心维度发货金额 + List supplierCodeList = birRoiRateService.getSupplierCodesByCenter( + new BirRoiCostDTO(),center.getCenterType(), Arrays.asList(center.getCenterId())); + List dispatchSumCenterVos = dispatchDataMapper.querySumCost(startMonthNum, endMonthNum,supplierCodeList); + BigDecimal dispatchSumCenterAmt = dispatchSumCenterVos.stream().map(ErpDispatchSumVo::getDispatchSumCost).reduce(BigDecimal.ZERO,BigDecimal::add); + + costApplyRateVo.setCusCostAmt(supplierUsedCost); + costApplyRateVo.setCusDisAmt(dispatchSumSupplierAmt); + costApplyRateVo.setCenterCostAmt(centerUsedCost); + costApplyRateVo.setCenterDisAmt(dispatchSumCenterAmt); + if(dispatchSumSupplierAmt.compareTo(BigDecimal.ZERO)!=0){ + costApplyRateVo.setCusRate(supplierUsedCost.divide(dispatchSumSupplierAmt,2,RoundingMode.DOWN)); + } + if(dispatchSumCenterAmt.compareTo(BigDecimal.ZERO)!=0){ + costApplyRateVo.setCenterRate(centerUsedCost.divide(dispatchSumCenterAmt,2,RoundingMode.DOWN)); + } + costApplyRateVoList.add(costApplyRateVo); + } + return costApplyRateVoList; + } + @Override public TbsCostSubItem.CostCenterTranStr buildCostCenter(String centerType, String centerId, String centerName, String supplierCode) { diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityTemplate.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityTemplate.java index 46530282..33c0d499 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityTemplate.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityTemplate.java @@ -82,6 +82,12 @@ public class TbsActivityTemplate implements Serializable { @Length(max = 255,message = "备注长度不能超过255字") private String remark; + /** + * 选择类型 + * 1、只能选择客户,2、只能选择供应商,3、可以选择客户和供应商 + */ + private Integer selectType; + /** 开始时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java index 5d1f6e4b..bf638c40 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java @@ -212,6 +212,8 @@ public class TbsCostApply implements Serializable { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") private LocalDateTime changeActionTime; + private Integer selectType; + /** * 编辑金额标识 * 审批通过时恢复0 diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityTemplateBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityTemplateBo.java index 24bb9b63..8309c9ae 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityTemplateBo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityTemplateBo.java @@ -85,5 +85,10 @@ public class TbsActivityTemplateBo implements Serializable { private String preRemark; + /** + * 选择类型 + * 1、只能选择客户,2、只能选择供应商,3、可以选择客户和供应商 + */ + private Integer selectType; } diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsCostApplyBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsCostApplyBo.java index edf75e69..96f0d1f9 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsCostApplyBo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsCostApplyBo.java @@ -48,5 +48,7 @@ public class TbsCostApplyBo implements Serializable { private Integer costThemeEditFlag; + private Integer selectType; + }