From f7085e3d82120f320bb440e4671867ea83196183 Mon Sep 17 00:00:00 2001 From: "15989082884@163.com" <15989082884@163.com> Date: Mon, 24 Jul 2023 12:04:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=81=E8=A3=85=E6=88=90=E6=9C=AC=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=E8=B4=B9=E7=94=A8=E7=8E=87=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bir/service/BirCenterRateService.java | 8 + .../impl/BirCenterRateServiceImpl.java | 164 +++++++ .../service/impl/TbsCostApplyServiceImpl.java | 444 +++++++++--------- src/main/java/com/qs/serve/task/BirTask.java | 10 +- 4 files changed, 404 insertions(+), 222 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/bir/service/BirCenterRateService.java create mode 100644 src/main/java/com/qs/serve/modules/bir/service/impl/BirCenterRateServiceImpl.java 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 new file mode 100644 index 00000000..70bdb8c9 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bir/service/BirCenterRateService.java @@ -0,0 +1,8 @@ +package com.qs.serve.modules.bir.service; + +import com.qs.serve.modules.tbs.entity.dto.TbsCostSubItem; + +public interface BirCenterRateService { + public TbsCostSubItem.CostCenterTranStr buildCostCenter(String centerType, String centerId, String centerName); + +} 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 new file mode 100644 index 00000000..d14b9674 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bir/service/impl/BirCenterRateServiceImpl.java @@ -0,0 +1,164 @@ +package com.qs.serve.modules.bir.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qs.serve.common.util.CopierUtil; +import com.qs.serve.common.util.SpringUtils; +import com.qs.serve.modules.bir.entity.BirActivityCenterGoods; +import com.qs.serve.modules.bir.entity.BirRoiRate; +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.vo.BirRoiCostItemVo; +import com.qs.serve.modules.bir.entity.vo.YtdQtdToOAVo; +import com.qs.serve.modules.bir.mapper.BirRoiRateMapper; +import com.qs.serve.modules.bir.service.BirActivityCenterGoodsService; +import com.qs.serve.modules.bir.service.BirCenterRateService; +import com.qs.serve.modules.bir.service.BirRoiRateService; +import com.qs.serve.modules.bms.entity.BmsCenterRegion; +import com.qs.serve.modules.bms.entity.BmsSupplier; +import com.qs.serve.modules.bms.mapper.BmsCenterRegionMapper; +import com.qs.serve.modules.bms.mapper.BmsSupplierMapper; +import com.qs.serve.modules.erp.entity.dto.ErpDispatchSumVo; +import com.qs.serve.modules.erp.mapper.ErpDispatchDataMapper; +import com.qs.serve.modules.tbs.common.util.QuarterUtil; +import com.qs.serve.modules.tbs.entity.TbsBudget; +import com.qs.serve.modules.tbs.entity.TbsCostApply; +import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; +import com.qs.serve.modules.tbs.entity.dto.TbsCostSubItem; +import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper; +import com.qs.serve.modules.tbs.mapper.TbsScheduleItemBudgetMapper; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.Month; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 服务实现类 + * @author YenHex + * @since 2023-06-05 + */ +@Slf4j +@Service +@AllArgsConstructor +public class BirCenterRateServiceImpl implements BirCenterRateService { + + private TbsScheduleItemBudgetMapper tbsScheduleItemBudgetMapper; + private TbsBudgetMapper tbsBudgetMapper; + private BirRoiRateService birRoiRateService; + private final ErpDispatchDataMapper dispatchDataMapper; + private BirActivityCenterGoodsService birActivityCenterGoodsService; + + + + public TbsCostSubItem.CostCenterTranStr buildCostCenter(String centerType,String centerId,String centerName){ + + int year = LocalDate.now().getYear(); + int month = LocalDate.now().getMonthValue(); + month = month>1?month:1; + int startMonthNum = year*100 + 1; + int endMonthNum = year*100 + month; + BirRoiCostDTO costDTO = new BirRoiCostDTO(); + costDTO.setStartMonthNum(startMonthNum); + costDTO.setEndMonthNum(endMonthNum); + + + String centerKey = centerType + "-" + centerId; + TbsCostSubItem.CostCenterTranStr costCenter = new TbsCostSubItem.CostCenterTranStr(centerName,centerType+"-"+centerId); + /* --------------- 全年目标费用率YTD 目标预计发货,目标预算 --------------------------- */ + //通过成本中心TYPE和ID取预算 + LambdaQueryWrapper budgetLambdaQueryWrapper = new LambdaQueryWrapper<>(); + budgetLambdaQueryWrapper.eq(TbsBudget::getCenterId,centerId); + budgetLambdaQueryWrapper.eq(TbsBudget::getCenterType,centerType); + List tbsBudgetList = tbsBudgetMapper.selectList(budgetLambdaQueryWrapper); + //通过预算ID取预算的发货和金额 + LambdaQueryWrapper scheduleItemBudgetLambdaQueryWrapper = new LambdaQueryWrapper<>(); + scheduleItemBudgetLambdaQueryWrapper.in(TbsScheduleItemBudget::getBudgetId,tbsBudgetList.stream().map(a->a.getId()).collect(Collectors.toList())); + List scheduleItemBudgetList = tbsScheduleItemBudgetMapper.selectList(scheduleItemBudgetLambdaQueryWrapper); + //合计目标发货和金定额 + BigDecimal targetBudgetAmout = scheduleItemBudgetList.stream().map(a->a.getBudgetAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); + BigDecimal targetDispatchAmout = scheduleItemBudgetList.stream().map(a->a.getPreDispatchAmount()==null?BigDecimal.ZERO:a.getPreDispatchAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); + costCenter.setTargetSales(targetDispatchAmout.toString()); + costCenter.setAreaBudget(targetBudgetAmout.toString()); + BigDecimal targetExpenseRate = BigDecimal.ZERO; + if(targetDispatchAmout.compareTo(BigDecimal.ZERO)!=0) { + targetExpenseRate = targetBudgetAmout.divide(targetDispatchAmout, 2, BigDecimal.ROUND_HALF_DOWN); + costCenter.setTargetExpenseRate(targetExpenseRate.toString()); + costCenter.setYtdTargetExpenseRate(targetExpenseRate.toString()); + } +// costCenter.setTargetExpenseRate(targetExpenseRate); + costCenter.setYtdTargetBudget(targetBudgetAmout.toString()); + costCenter.setYtdTargetSales(targetDispatchAmout.toString()); +// costCenter.setYtdTargetExpenseRate(targetExpenseRate); + +// costCenter.setQtdTargetBudget(BigDecimal.ZERO); +// costCenter.setQtdTargetSales(BigDecimal.ZERO); +// costCenter.setQtdTargetExpenseRate(BigDecimal.ZERO); +// costCenter.setMtdTargetBudget(BigDecimal.ZERO); +// costCenter.setMtdTargetSales(BigDecimal.ZERO); +// costCenter.setMtdTargetExpenseRate(BigDecimal.ZERO); + /* ------------------------------------------------------------------------- */ + //实际发贷数 + List supplierCodeList = birRoiRateService.getSupplierCodesByCenter(costDTO,centerType, Arrays.asList(centerId)); + List dispatchSumVos = dispatchDataMapper.querySumCost(startMonthNum,endMonthNum,supplierCodeList); + + //获取BIR表的数据,用于计算实际费用率 + LambdaQueryWrapper birLwq = new LambdaQueryWrapper<>(); + birLwq.eq(BirActivityCenterGoods::getCenterId,centerId); + birLwq.eq(BirActivityCenterGoods::getCenterType,centerType); + birLwq.ge(BirActivityCenterGoods::getKeyNum,startMonthNum); + birLwq.le(BirActivityCenterGoods::getKeyNum,endMonthNum); + List birCenterCost = birActivityCenterGoodsService.list(birLwq); + + /* --------------- 实际费用率YTD --------------------------------------------- */ + BigDecimal ytdRealDipatch = dispatchSumVos.stream().map(a->a.getDispatchSumCost()).reduce(BigDecimal.ZERO,BigDecimal::add); + BigDecimal ytdRealCost = birCenterCost.stream().map(a->a.getSplitUsedAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); + costCenter.setYtdRealCost(ytdRealCost.toString()); + costCenter.setYtdRealSales(ytdRealDipatch.toString()); + BigDecimal ytdRealExpenseRate = BigDecimal.ZERO; + if(ytdRealDipatch.compareTo(BigDecimal.ZERO)!=0) { + ytdRealExpenseRate = ytdRealCost.divide(ytdRealDipatch, 2, BigDecimal.ROUND_HALF_DOWN); + costCenter.setYtdRealExpenseRate(ytdRealExpenseRate.toString()); + } +// costCenter.setYtdRealExpenseRate(ytdRealExpenseRate); + /* ------------------------------------------------------------------------- */ + + /* --------------- 实际费用率QTD --------------------------------------------- */ + List yearQuarter = QuarterUtil.getQuarterNumbers(year, month); + BigDecimal qtdRealDipatch = dispatchSumVos.stream().filter(a->yearQuarter.contains(a.getYearMonth())).map(a->a.getDispatchSumCost()).reduce(BigDecimal.ZERO,BigDecimal::add); + BigDecimal qtdRealCost = birCenterCost.stream().filter(a->yearQuarter.contains(a.getKeyNum())).map(a->a.getSplitUsedAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); + costCenter.setQtdRealCost(qtdRealCost.toString()); + costCenter.setQtdRealSales(qtdRealDipatch.toString()); + BigDecimal qtdRealExpenseRate = BigDecimal.ZERO; + if(qtdRealDipatch.compareTo(BigDecimal.ZERO)!=0) { + qtdRealExpenseRate = qtdRealCost.divide(qtdRealDipatch, 2, BigDecimal.ROUND_HALF_DOWN); + costCenter.setQtdRealExpenseRate(qtdRealExpenseRate.toString()); + } +// costCenter.setQtdRealExpenseRate(qtdRealExpenseRate); + /* ------------------------------------------------------------------------- */ + + /* --------------- 实际费用率MTD --------------------------------------------- */ + Integer yearMonth = year*100 + month; + BigDecimal mtdRealDipatch = dispatchSumVos.stream().filter(a->yearMonth.equals(a.getYearMonth())).map(a->a.getDispatchSumCost()).reduce(BigDecimal.ZERO,BigDecimal::add); + BigDecimal mtdRealCost = birCenterCost.stream().filter(a->yearMonth.equals(a.getKeyNum())).map(a->a.getSplitUsedAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); + costCenter.setMtdRealCost(mtdRealCost.toString()); + costCenter.setMtdRealSales(mtdRealDipatch.toString()); + BigDecimal mtdRealExpenseRate = BigDecimal.ZERO; + if(mtdRealDipatch.compareTo(BigDecimal.ZERO)!=0) { + mtdRealExpenseRate = mtdRealCost.divide(mtdRealDipatch, 2, BigDecimal.ROUND_HALF_DOWN); + costCenter.setMtdRealExpenseRate(mtdRealExpenseRate.toString()); + } + return costCenter; + } + +} + diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java index 2b11e086..ca1ce96c 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java @@ -15,6 +15,7 @@ import com.qs.serve.modules.bir.entity.BirActivityCenterGoods; import com.qs.serve.modules.bir.entity.dto.BirRoiCostDTO; import com.qs.serve.modules.bir.entity.vo.YtdQtdToOAVo; import com.qs.serve.modules.bir.service.BirActivityCenterGoodsService; +import com.qs.serve.modules.bir.service.BirCenterRateService; import com.qs.serve.modules.bir.service.BirRoiRateService; import com.qs.serve.modules.bms.entity.BmsRegion; import com.qs.serve.modules.bms.entity.BmsRegion2; @@ -92,6 +93,7 @@ public class TbsCostApplyServiceImpl extends ServiceImpl1?month:1; - int startMonthNum = year*100 + 1; - int endMonthNum = year*100 + month; - BirRoiRateService roiRateService = SpringUtils.getBean(BirRoiRateService.class); - BirRoiCostDTO costDTO = new BirRoiCostDTO(); - costDTO.setStartMonthNum(startMonthNum); - costDTO.setEndMonthNum(endMonthNum); +// int year = LocalDate.now().getYear(); +// int month = LocalDate.now().getMonthValue(); +// month = month>1?month:1; +// int startMonthNum = year*100 + 1; +// int endMonthNum = year*100 + month; +// BirRoiRateService roiRateService = SpringUtils.getBean(BirRoiRateService.class); +// BirRoiCostDTO costDTO = new BirRoiCostDTO(); +// costDTO.setStartMonthNum(startMonthNum); +// costDTO.setEndMonthNum(endMonthNum); //获取BIR表的数据,用于计算实际费用率 - LambdaQueryWrapper birLwq = new LambdaQueryWrapper<>(); - birLwq.in(BirActivityCenterGoods::getCenterId,tbsActivityCenters.stream().map(a->a.getCenterId()).collect(Collectors.toList())); - birLwq.ge(BirActivityCenterGoods::getKeyNum,startMonthNum); - birLwq.le(BirActivityCenterGoods::getKeyNum,endMonthNum); - List birActivityCenterGoodsList = birActivityCenterGoodsService.list(birLwq); - Map> birCenterCostMap = birActivityCenterGoodsList.stream().collect(Collectors.groupingBy(a->a.getCenterType() + "-"+a.getCenterId())); +// LambdaQueryWrapper birLwq = new LambdaQueryWrapper<>(); +// birLwq.in(BirActivityCenterGoods::getCenterId,tbsActivityCenters.stream().map(a->a.getCenterId()).collect(Collectors.toList())); +// birLwq.ge(BirActivityCenterGoods::getKeyNum,startMonthNum); +// birLwq.le(BirActivityCenterGoods::getKeyNum,endMonthNum); +// List birActivityCenterGoodsList = birActivityCenterGoodsService.list(birLwq); +// Map> birCenterCostMap = birActivityCenterGoodsList.stream().collect(Collectors.groupingBy(a->a.getCenterType() + "-"+a.getCenterId())); //成本中心去重 Map> centerMapList = tbsActivityCenters.stream().collect(Collectors.groupingBy(a->a.getCenterType()+"-"+a.getCenterId())); List centerList = centerMapList.values().stream().map(a->a.get(0)).collect(Collectors.toList()); for(TbsActivityCenter center : centerList){ - String centerType = center.getCenterType(); - String centerId = center.getCenterId(); - String centerKey = centerType + "-" + centerId; - TbsCostSubItem.CostCenterTranStr costCenter = new TbsCostSubItem.CostCenterTranStr(center.getCenterName(),centerType+"-"+centerId); - /* --------------- 全年目标费用率YTD 目标预计发货,目标预算 --------------------------- */ - //通过成本中心TYPE和ID取预算 - LambdaQueryWrapper budgetLambdaQueryWrapper = new LambdaQueryWrapper<>(); - budgetLambdaQueryWrapper.eq(TbsBudget::getCenterId,centerId); - budgetLambdaQueryWrapper.eq(TbsBudget::getCenterType,centerType); - List tbsBudgetList = tbsBudgetMapper.selectList(budgetLambdaQueryWrapper); - //通过预算ID取预算的发货和金额 - LambdaQueryWrapper scheduleItemBudgetLambdaQueryWrapper = new LambdaQueryWrapper<>(); - scheduleItemBudgetLambdaQueryWrapper.in(TbsScheduleItemBudget::getBudgetId,tbsBudgetList.stream().map(a->a.getId()).collect(Collectors.toList())); - List scheduleItemBudgetList = tbsScheduleItemBudgetMapper.selectList(scheduleItemBudgetLambdaQueryWrapper); - //合计目标发货和金定额 - BigDecimal targetBudgetAmout = scheduleItemBudgetList.stream().map(a->a.getBudgetAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); - BigDecimal targetDispatchAmout = scheduleItemBudgetList.stream().map(a->a.getPreDispatchAmount()==null?BigDecimal.ZERO:a.getPreDispatchAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); - costCenter.setTargetSales(targetDispatchAmout.toString()); - costCenter.setAreaBudget(targetBudgetAmout.toString()); - BigDecimal targetExpenseRate = BigDecimal.ZERO; - if(targetDispatchAmout.compareTo(BigDecimal.ZERO)!=0) { - targetExpenseRate = targetBudgetAmout.divide(targetDispatchAmout, 2, BigDecimal.ROUND_HALF_DOWN); - costCenter.setTargetExpenseRate(targetExpenseRate.toString()); - costCenter.setYtdTargetExpenseRate(targetExpenseRate.toString()); - } -// costCenter.setTargetExpenseRate(targetExpenseRate); - costCenter.setYtdTargetBudget(targetBudgetAmout.toString()); - costCenter.setYtdTargetSales(targetDispatchAmout.toString()); -// costCenter.setYtdTargetExpenseRate(targetExpenseRate); - -// costCenter.setQtdTargetBudget(BigDecimal.ZERO); -// costCenter.setQtdTargetSales(BigDecimal.ZERO); -// costCenter.setQtdTargetExpenseRate(BigDecimal.ZERO); -// costCenter.setMtdTargetBudget(BigDecimal.ZERO); -// costCenter.setMtdTargetSales(BigDecimal.ZERO); -// costCenter.setMtdTargetExpenseRate(BigDecimal.ZERO); - /* ------------------------------------------------------------------------- */ - //实际发贷数 - List supplierCodeList = roiRateService.getSupplierCodesByCenter(costDTO,centerType,Arrays.asList(centerId)); - List dispatchSumVos = dispatchDataMapper.querySumCost(startMonthNum,endMonthNum,supplierCodeList); - List birCenterCost = birCenterCostMap.containsKey(centerKey)?birCenterCostMap.get(centerKey):new ArrayList<>(); - - /* --------------- 实际费用率YTD --------------------------------------------- */ - BigDecimal ytdRealDipatch = dispatchSumVos.stream().map(a->a.getDispatchSumCost()).reduce(BigDecimal.ZERO,BigDecimal::add); - BigDecimal ytdRealCost = birCenterCost.stream().map(a->a.getSplitUsedAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); - costCenter.setYtdRealCost(ytdRealCost.toString()); - costCenter.setYtdRealSales(ytdRealDipatch.toString()); - BigDecimal ytdRealExpenseRate = BigDecimal.ZERO; - if(ytdRealDipatch.compareTo(BigDecimal.ZERO)!=0) { - ytdRealExpenseRate = ytdRealCost.divide(ytdRealDipatch, 2, BigDecimal.ROUND_HALF_DOWN); - costCenter.setYtdRealExpenseRate(ytdRealExpenseRate.toString()); - } -// costCenter.setYtdRealExpenseRate(ytdRealExpenseRate); - /* ------------------------------------------------------------------------- */ - - /* --------------- 实际费用率QTD --------------------------------------------- */ - List yearQuarter = QuarterUtil.getQuarterNumbers(year, month); - BigDecimal qtdRealDipatch = dispatchSumVos.stream().filter(a->yearQuarter.contains(a.getYearMonth())).map(a->a.getDispatchSumCost()).reduce(BigDecimal.ZERO,BigDecimal::add); - BigDecimal qtdRealCost = birCenterCost.stream().filter(a->yearQuarter.contains(a.getKeyNum())).map(a->a.getSplitUsedAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); - costCenter.setQtdRealCost(qtdRealCost.toString()); - costCenter.setQtdRealSales(qtdRealDipatch.toString()); - BigDecimal qtdRealExpenseRate = BigDecimal.ZERO; - if(qtdRealDipatch.compareTo(BigDecimal.ZERO)!=0) { - qtdRealExpenseRate = qtdRealCost.divide(qtdRealDipatch, 2, BigDecimal.ROUND_HALF_DOWN); - costCenter.setQtdRealExpenseRate(qtdRealExpenseRate.toString()); - } -// costCenter.setQtdRealExpenseRate(qtdRealExpenseRate); - /* ------------------------------------------------------------------------- */ - - /* --------------- 实际费用率MTD --------------------------------------------- */ - Integer yearMonth = year*100 + month; - BigDecimal mtdRealDipatch = dispatchSumVos.stream().filter(a->yearMonth.equals(a.getYearMonth())).map(a->a.getDispatchSumCost()).reduce(BigDecimal.ZERO,BigDecimal::add); - BigDecimal mtdRealCost = birCenterCost.stream().filter(a->yearMonth.equals(a.getKeyNum())).map(a->a.getSplitUsedAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); - costCenter.setMtdRealCost(mtdRealCost.toString()); - costCenter.setMtdRealSales(mtdRealDipatch.toString()); - BigDecimal mtdRealExpenseRate = BigDecimal.ZERO; - if(mtdRealDipatch.compareTo(BigDecimal.ZERO)!=0) { - mtdRealExpenseRate = mtdRealCost.divide(mtdRealDipatch, 2, BigDecimal.ROUND_HALF_DOWN); - costCenter.setMtdRealExpenseRate(mtdRealExpenseRate.toString()); - } -// costCenter.setMtdRealExpenseRate(mtdRealExpenseRate); - /* ------------------------------------------------------------------------- */ - - + TbsCostSubItem.CostCenterTranStr costCenter = centerRateService.buildCostCenter(center.getCenterType(),center.getCenterId(),center.getCenterName()); subList.add(costCenter); +// String centerType = center.getCenterType(); +// String centerId = center.getCenterId(); +// String centerKey = centerType + "-" + centerId; +// TbsCostSubItem.CostCenterTranStr costCenter = new TbsCostSubItem.CostCenterTranStr(center.getCenterName(),centerType+"-"+centerId); +// /* --------------- 全年目标费用率YTD 目标预计发货,目标预算 --------------------------- */ +// //通过成本中心TYPE和ID取预算 +// LambdaQueryWrapper budgetLambdaQueryWrapper = new LambdaQueryWrapper<>(); +// budgetLambdaQueryWrapper.eq(TbsBudget::getCenterId,centerId); +// budgetLambdaQueryWrapper.eq(TbsBudget::getCenterType,centerType); +// List tbsBudgetList = tbsBudgetMapper.selectList(budgetLambdaQueryWrapper); +// //通过预算ID取预算的发货和金额 +// LambdaQueryWrapper scheduleItemBudgetLambdaQueryWrapper = new LambdaQueryWrapper<>(); +// scheduleItemBudgetLambdaQueryWrapper.in(TbsScheduleItemBudget::getBudgetId,tbsBudgetList.stream().map(a->a.getId()).collect(Collectors.toList())); +// List scheduleItemBudgetList = tbsScheduleItemBudgetMapper.selectList(scheduleItemBudgetLambdaQueryWrapper); +// //合计目标发货和金定额 +// BigDecimal targetBudgetAmout = scheduleItemBudgetList.stream().map(a->a.getBudgetAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); +// BigDecimal targetDispatchAmout = scheduleItemBudgetList.stream().map(a->a.getPreDispatchAmount()==null?BigDecimal.ZERO:a.getPreDispatchAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); +// costCenter.setTargetSales(targetDispatchAmout.toString()); +// costCenter.setAreaBudget(targetBudgetAmout.toString()); +// BigDecimal targetExpenseRate = BigDecimal.ZERO; +// if(targetDispatchAmout.compareTo(BigDecimal.ZERO)!=0) { +// targetExpenseRate = targetBudgetAmout.divide(targetDispatchAmout, 2, BigDecimal.ROUND_HALF_DOWN); +// costCenter.setTargetExpenseRate(targetExpenseRate.toString()); +// costCenter.setYtdTargetExpenseRate(targetExpenseRate.toString()); +// } +//// costCenter.setTargetExpenseRate(targetExpenseRate); +// costCenter.setYtdTargetBudget(targetBudgetAmout.toString()); +// costCenter.setYtdTargetSales(targetDispatchAmout.toString()); +//// costCenter.setYtdTargetExpenseRate(targetExpenseRate); +// +//// costCenter.setQtdTargetBudget(BigDecimal.ZERO); +//// costCenter.setQtdTargetSales(BigDecimal.ZERO); +//// costCenter.setQtdTargetExpenseRate(BigDecimal.ZERO); +//// costCenter.setMtdTargetBudget(BigDecimal.ZERO); +//// costCenter.setMtdTargetSales(BigDecimal.ZERO); +//// costCenter.setMtdTargetExpenseRate(BigDecimal.ZERO); +// /* ------------------------------------------------------------------------- */ +// //实际发贷数 +// List supplierCodeList = roiRateService.getSupplierCodesByCenter(costDTO,centerType,Arrays.asList(centerId)); +// List dispatchSumVos = dispatchDataMapper.querySumCost(startMonthNum,endMonthNum,supplierCodeList); +// List birCenterCost = birCenterCostMap.containsKey(centerKey)?birCenterCostMap.get(centerKey):new ArrayList<>(); +// +// /* --------------- 实际费用率YTD --------------------------------------------- */ +// BigDecimal ytdRealDipatch = dispatchSumVos.stream().map(a->a.getDispatchSumCost()).reduce(BigDecimal.ZERO,BigDecimal::add); +// BigDecimal ytdRealCost = birCenterCost.stream().map(a->a.getSplitUsedAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); +// costCenter.setYtdRealCost(ytdRealCost.toString()); +// costCenter.setYtdRealSales(ytdRealDipatch.toString()); +// BigDecimal ytdRealExpenseRate = BigDecimal.ZERO; +// if(ytdRealDipatch.compareTo(BigDecimal.ZERO)!=0) { +// ytdRealExpenseRate = ytdRealCost.divide(ytdRealDipatch, 2, BigDecimal.ROUND_HALF_DOWN); +// costCenter.setYtdRealExpenseRate(ytdRealExpenseRate.toString()); +// } +//// costCenter.setYtdRealExpenseRate(ytdRealExpenseRate); +// /* ------------------------------------------------------------------------- */ +// +// /* --------------- 实际费用率QTD --------------------------------------------- */ +// List yearQuarter = QuarterUtil.getQuarterNumbers(year, month); +// BigDecimal qtdRealDipatch = dispatchSumVos.stream().filter(a->yearQuarter.contains(a.getYearMonth())).map(a->a.getDispatchSumCost()).reduce(BigDecimal.ZERO,BigDecimal::add); +// BigDecimal qtdRealCost = birCenterCost.stream().filter(a->yearQuarter.contains(a.getKeyNum())).map(a->a.getSplitUsedAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); +// costCenter.setQtdRealCost(qtdRealCost.toString()); +// costCenter.setQtdRealSales(qtdRealDipatch.toString()); +// BigDecimal qtdRealExpenseRate = BigDecimal.ZERO; +// if(qtdRealDipatch.compareTo(BigDecimal.ZERO)!=0) { +// qtdRealExpenseRate = qtdRealCost.divide(qtdRealDipatch, 2, BigDecimal.ROUND_HALF_DOWN); +// costCenter.setQtdRealExpenseRate(qtdRealExpenseRate.toString()); +// } +//// costCenter.setQtdRealExpenseRate(qtdRealExpenseRate); +// /* ------------------------------------------------------------------------- */ +// +// /* --------------- 实际费用率MTD --------------------------------------------- */ +// Integer yearMonth = year*100 + month; +// BigDecimal mtdRealDipatch = dispatchSumVos.stream().filter(a->yearMonth.equals(a.getYearMonth())).map(a->a.getDispatchSumCost()).reduce(BigDecimal.ZERO,BigDecimal::add); +// BigDecimal mtdRealCost = birCenterCost.stream().filter(a->yearMonth.equals(a.getKeyNum())).map(a->a.getSplitUsedAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); +// costCenter.setMtdRealCost(mtdRealCost.toString()); +// costCenter.setMtdRealSales(mtdRealDipatch.toString()); +// BigDecimal mtdRealExpenseRate = BigDecimal.ZERO; +// if(mtdRealDipatch.compareTo(BigDecimal.ZERO)!=0) { +// mtdRealExpenseRate = mtdRealCost.divide(mtdRealDipatch, 2, BigDecimal.ROUND_HALF_DOWN); +// costCenter.setMtdRealExpenseRate(mtdRealExpenseRate.toString()); +// } +//// costCenter.setMtdRealExpenseRate(mtdRealExpenseRate); +// /* ------------------------------------------------------------------------- */ + + +// subList.add(costCenter); } } - /** - * 创建成本中心维度对象(弃) - * @param result - * @param tbsScheduleItemBudgets - * @param year - * @param month - * @param supplierCodeMapWithCenterType - * @param birGroupByCenter - * @param activityCenter - * @param centerKey - * @return - */ - @NotNull - private TbsCostSubItem.CostCenter buildCostCenterParam(TbsBudgetCostResult result, List tbsScheduleItemBudgets, - int year, int month, Map> supplierCodeMapWithCenterType, - Map> birGroupByCenter, - TbsActivityCenter activityCenter, String centerKey) { - TbsCostSubItem.CostCenter costCenter = new TbsCostSubItem.CostCenter(activityCenter.getCenterName(), - activityCenter.getCenterType()+"_"+ activityCenter.getCenterId()); - //设置目标销量、目标预算 - for (TbsBudget budget : result.getBudgetList()) { - boolean eqType = activityCenter.getCenterType().equals(budget.getCenterType()); - boolean eqCost = activityCenter.getCenterId().equals(budget.getCenterId()); - if (eqType && eqCost) { - BigDecimal totalBudgetAmount = BigDecimal.ZERO; - BigDecimal totalPreDispatchAmount = BigDecimal.ZERO; - //从命中的预算周期中取出目标发货 和 目标预算 进行合计 - for (TbsScheduleItemBudget itemBudget : tbsScheduleItemBudgets) { - if (itemBudget.getBudgetId().equals(budget.getId())) { - if (itemBudget.getBudgetAmount() != null) { - totalBudgetAmount = totalBudgetAmount.add(itemBudget.getBudgetAmount()); - } - if (itemBudget.getPreDispatchAmount() != null) { - totalPreDispatchAmount = totalBudgetAmount.add(itemBudget.getPreDispatchAmount()); - } - } - } - costCenter.setAreaBudget(totalBudgetAmount); - costCenter.setTargetSales(totalPreDispatchAmount); - if (totalPreDispatchAmount.compareTo(BigDecimal.ZERO) != 0) { - costCenter.setTargetExpenseRate(totalBudgetAmount.divide(totalPreDispatchAmount,2, BigDecimal.ROUND_DOWN)); - } - //暂保持目标相关数据一致 - costCenter.setYtdTargetSales(costCenter.getTargetSales().setScale(2,BigDecimal.ROUND_DOWN)); - costCenter.setYtdTargetBudget(costCenter.getAreaBudget().setScale(2, RoundingMode.DOWN)); - costCenter.setYtdTargetExpenseRate(costCenter.getTargetExpenseRate().setScale(2, RoundingMode.DOWN)); -// costCenter.setQtdTargetSales(costCenter.getTargetSales()); -// costCenter.setQtdTargetBudget(costCenter.getAreaBudget()); -// costCenter.setQtdTargetExpenseRate(costCenter.getTargetExpenseRate()); -// costCenter.setMtdTargetSales(); -// costCenter.setMtdTargetBudget(); -// costCenter.setMtdTargetExpenseRate(); - break; - - } - } - //发货金额 - List erpDispatchSumVoList = supplierCodeMapWithCenterType.get(centerKey); - - //所有相关费率记录 - List centerGoods = birGroupByCenter.get(centerKey); - if(CollectionUtil.isNotEmpty(centerGoods)){ - //年费率 - TbsCenterGoodBirDTO bir4Year = this.getTbsCenterGoodBirDTO(centerGoods,erpDispatchSumVoList); - costCenter.setYtdRealSales(bir4Year.getRealSales()); - costCenter.setYtdRealCost(bir4Year.getRealCost()); - costCenter.setYtdRealExpenseRate(bir4Year.getRealExpenseRate()); - - //季度 - List yearMonthList =QuarterUtil.getQuarterNumbers(year, month); - List centerGoodsQuarter = centerGoods.stream() - .filter(a-> yearMonthList.contains(a.getKeyNum())) - .collect(Collectors.toList()); - TbsCenterGoodBirDTO bir4Quarter = this.getTbsCenterGoodBirDTO(centerGoodsQuarter,erpDispatchSumVoList); - costCenter.setQtdRealSales(bir4Quarter.getRealSales()); - costCenter.setQtdRealCost(bir4Quarter.getRealCost()); - costCenter.setQtdRealExpenseRate(bir4Quarter.getRealExpenseRate()); - - //月份 - String mStr = month >9? month +"":"0"+ month; - Integer currYearMonth = Integer.parseInt(year +mStr); - List centerGoodsM = centerGoods.stream() - .filter(a-> currYearMonth.equals(a.getKeyNum())) - .collect(Collectors.toList()); - TbsCenterGoodBirDTO bir4Month = this.getTbsCenterGoodBirDTO(centerGoodsM,erpDispatchSumVoList); - costCenter.setMtdRealSales(bir4Month.getRealSales()); - costCenter.setMtdRealCost(bir4Month.getRealCost()); - costCenter.setMtdRealExpenseRate(bir4Month.getRealExpenseRate()); - } - return costCenter; - } - - /** - * 创建 成本中心 DTO(弃) - * @param centerGoods - * @param erpDispatchSumVoList - * @return - */ - @NotNull - private TbsCenterGoodBirDTO getTbsCenterGoodBirDTO(List centerGoods,List erpDispatchSumVoList) { - BigDecimal totalRealDispatch = BigDecimal.ZERO; - BigDecimal totalRealCost; - BigDecimal totalRealCheck = BigDecimal.ZERO; - BigDecimal totalRealRelease = BigDecimal.ZERO; - for (BirActivityCenterGoods centerGood : centerGoods) { - totalRealCheck = totalRealCheck.add(centerGood.getSplitUsedAmount()); - totalRealRelease = totalRealRelease.add(centerGood.getSplitReleaseAmount()); - for (ErpDispatchSumVo dispatchSumVo : erpDispatchSumVoList) { - if(centerGood.getKeyNum().equals(dispatchSumVo.getYearMonth())){ - totalRealDispatch = totalRealDispatch.add(dispatchSumVo.getDispatchSumCost()); - } - } - } - totalRealCost = totalRealCheck.add(totalRealRelease); - TbsCenterGoodBirDTO birDTO = new TbsCenterGoodBirDTO(); - birDTO.setRealCost(totalRealCost); - birDTO.setRealCheck(totalRealCheck); - birDTO.setRealRelease(totalRealRelease); - birDTO.initRealExpenseRate(); - return birDTO; - } +// /** +// * 创建成本中心维度对象(弃) +// * @param result +// * @param tbsScheduleItemBudgets +// * @param year +// * @param month +// * @param supplierCodeMapWithCenterType +// * @param birGroupByCenter +// * @param activityCenter +// * @param centerKey +// * @return +// */ +// @NotNull +// private TbsCostSubItem.CostCenter buildCostCenterParam(TbsBudgetCostResult result, List tbsScheduleItemBudgets, +// int year, int month, Map> supplierCodeMapWithCenterType, +// Map> birGroupByCenter, +// TbsActivityCenter activityCenter, String centerKey) { +// TbsCostSubItem.CostCenter costCenter = new TbsCostSubItem.CostCenter(activityCenter.getCenterName(), +// activityCenter.getCenterType()+"_"+ activityCenter.getCenterId()); +// //设置目标销量、目标预算 +// for (TbsBudget budget : result.getBudgetList()) { +// boolean eqType = activityCenter.getCenterType().equals(budget.getCenterType()); +// boolean eqCost = activityCenter.getCenterId().equals(budget.getCenterId()); +// if (eqType && eqCost) { +// BigDecimal totalBudgetAmount = BigDecimal.ZERO; +// BigDecimal totalPreDispatchAmount = BigDecimal.ZERO; +// //从命中的预算周期中取出目标发货 和 目标预算 进行合计 +// for (TbsScheduleItemBudget itemBudget : tbsScheduleItemBudgets) { +// if (itemBudget.getBudgetId().equals(budget.getId())) { +// if (itemBudget.getBudgetAmount() != null) { +// totalBudgetAmount = totalBudgetAmount.add(itemBudget.getBudgetAmount()); +// } +// if (itemBudget.getPreDispatchAmount() != null) { +// totalPreDispatchAmount = totalBudgetAmount.add(itemBudget.getPreDispatchAmount()); +// } +// } +// } +// costCenter.setAreaBudget(totalBudgetAmount); +// costCenter.setTargetSales(totalPreDispatchAmount); +// if (totalPreDispatchAmount.compareTo(BigDecimal.ZERO) != 0) { +// costCenter.setTargetExpenseRate(totalBudgetAmount.divide(totalPreDispatchAmount,2, BigDecimal.ROUND_DOWN)); +// } +// //暂保持目标相关数据一致 +// costCenter.setYtdTargetSales(costCenter.getTargetSales().setScale(2,BigDecimal.ROUND_DOWN)); +// costCenter.setYtdTargetBudget(costCenter.getAreaBudget().setScale(2, RoundingMode.DOWN)); +// costCenter.setYtdTargetExpenseRate(costCenter.getTargetExpenseRate().setScale(2, RoundingMode.DOWN)); +//// costCenter.setQtdTargetSales(costCenter.getTargetSales()); +//// costCenter.setQtdTargetBudget(costCenter.getAreaBudget()); +//// costCenter.setQtdTargetExpenseRate(costCenter.getTargetExpenseRate()); +//// costCenter.setMtdTargetSales(); +//// costCenter.setMtdTargetBudget(); +//// costCenter.setMtdTargetExpenseRate(); +// break; +// +// } +// } +// //发货金额 +// List erpDispatchSumVoList = supplierCodeMapWithCenterType.get(centerKey); +// +// //所有相关费率记录 +// List centerGoods = birGroupByCenter.get(centerKey); +// if(CollectionUtil.isNotEmpty(centerGoods)){ +// //年费率 +// TbsCenterGoodBirDTO bir4Year = this.getTbsCenterGoodBirDTO(centerGoods,erpDispatchSumVoList); +// costCenter.setYtdRealSales(bir4Year.getRealSales()); +// costCenter.setYtdRealCost(bir4Year.getRealCost()); +// costCenter.setYtdRealExpenseRate(bir4Year.getRealExpenseRate()); +// +// //季度 +// List yearMonthList =QuarterUtil.getQuarterNumbers(year, month); +// List centerGoodsQuarter = centerGoods.stream() +// .filter(a-> yearMonthList.contains(a.getKeyNum())) +// .collect(Collectors.toList()); +// TbsCenterGoodBirDTO bir4Quarter = this.getTbsCenterGoodBirDTO(centerGoodsQuarter,erpDispatchSumVoList); +// costCenter.setQtdRealSales(bir4Quarter.getRealSales()); +// costCenter.setQtdRealCost(bir4Quarter.getRealCost()); +// costCenter.setQtdRealExpenseRate(bir4Quarter.getRealExpenseRate()); +// +// //月份 +// String mStr = month >9? month +"":"0"+ month; +// Integer currYearMonth = Integer.parseInt(year +mStr); +// List centerGoodsM = centerGoods.stream() +// .filter(a-> currYearMonth.equals(a.getKeyNum())) +// .collect(Collectors.toList()); +// TbsCenterGoodBirDTO bir4Month = this.getTbsCenterGoodBirDTO(centerGoodsM,erpDispatchSumVoList); +// costCenter.setMtdRealSales(bir4Month.getRealSales()); +// costCenter.setMtdRealCost(bir4Month.getRealCost()); +// costCenter.setMtdRealExpenseRate(bir4Month.getRealExpenseRate()); +// } +// return costCenter; +// } + +// /** +// * 创建 成本中心 DTO(弃) +// * @param centerGoods +// * @param erpDispatchSumVoList +// * @return +// */ +// @NotNull +// private TbsCenterGoodBirDTO getTbsCenterGoodBirDTO(List centerGoods,List erpDispatchSumVoList) { +// BigDecimal totalRealDispatch = BigDecimal.ZERO; +// BigDecimal totalRealCost; +// BigDecimal totalRealCheck = BigDecimal.ZERO; +// BigDecimal totalRealRelease = BigDecimal.ZERO; +// for (BirActivityCenterGoods centerGood : centerGoods) { +// totalRealCheck = totalRealCheck.add(centerGood.getSplitUsedAmount()); +// totalRealRelease = totalRealRelease.add(centerGood.getSplitReleaseAmount()); +// for (ErpDispatchSumVo dispatchSumVo : erpDispatchSumVoList) { +// if(centerGood.getKeyNum().equals(dispatchSumVo.getYearMonth())){ +// totalRealDispatch = totalRealDispatch.add(dispatchSumVo.getDispatchSumCost()); +// } +// } +// } +// totalRealCost = totalRealCheck.add(totalRealRelease); +// TbsCenterGoodBirDTO birDTO = new TbsCenterGoodBirDTO(); +// birDTO.setRealCost(totalRealCost); +// birDTO.setRealCheck(totalRealCheck); +// birDTO.setRealRelease(totalRealRelease); +// birDTO.initRealExpenseRate(); +// return birDTO; +// } /** diff --git a/src/main/java/com/qs/serve/task/BirTask.java b/src/main/java/com/qs/serve/task/BirTask.java index d7476119..b6a7691a 100644 --- a/src/main/java/com/qs/serve/task/BirTask.java +++ b/src/main/java/com/qs/serve/task/BirTask.java @@ -1,5 +1,6 @@ package com.qs.serve.task; +import com.qs.serve.modules.bir.service.BirActivityCenterGoodsService; import com.qs.serve.task.controller.TaskActivityController; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -7,6 +8,8 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.time.LocalDate; + /** * @author YenHex * @since 2023/7/14 @@ -17,11 +20,14 @@ import org.springframework.stereotype.Component; @ConditionalOnProperty(value = "project.task", havingValue = "true") public class BirTask { - TaskActivityController activityController; + private final BirActivityCenterGoodsService birActivityCenterGoodsService; @Scheduled(cron="0 0 1 * * ?") public void buildTempTable(){ - activityController.taskBir(null); + int year = LocalDate.now().getYear(); + for (int i = 1;i < 13; i++) { + birActivityCenterGoodsService.buildReport(year,i); + } } }