diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/bir/entity/so/BirMonthCusCenterSo.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/bir/entity/so/BirMonthCusCenterSo.java index 7e2c0c5..3d309f8 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/bir/entity/so/BirMonthCusCenterSo.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/bir/entity/so/BirMonthCusCenterSo.java @@ -2,6 +2,7 @@ package com.qs.serve.modules.bir.entity.so; import lombok.Data; import java.util.List; +import java.util.Set; /** * @author YenHex diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/bir/service/impl/BirCenterRateServiceImpl.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/bir/service/impl/BirCenterRateServiceImpl.java index a9d32ba..cbd595f 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/bir/service/impl/BirCenterRateServiceImpl.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/bir/service/impl/BirCenterRateServiceImpl.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.bir.service.impl; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qs.serve.common.enums.BudgetLogOptFlag; import com.qs.serve.common.enums.MonthValues; @@ -389,13 +390,14 @@ public class BirCenterRateServiceImpl implements BirCenterRateService { int[] currQ = MonthValues.getQArr(curMonth); //更变客户维度为总公司维度 - List supplierCode4Group = new ArrayList<>(); + Set supplierCode4Group = new HashSet<>(); supplierCode4Group.add(supplierCode); LambdaQueryWrapper supplierLqw = new LambdaQueryWrapper<>(); supplierLqw.eq(BmsSupplier::getCode,supplierCode); BmsSupplier supplier = supplierMapper.selectOne(supplierLqw); if(supplier.getComRegionCode()!=null){ LambdaQueryWrapper supplierLqw4Group = new LambdaQueryWrapper<>(); + supplierLqw4Group.select(BmsSupplier::getCode); supplierLqw4Group.eq(BmsSupplier::getComRegionCode,supplier.getComRegionCode()); List supplierList = supplierMapper.selectList(supplierLqw4Group); for (BmsSupplier bmsSupplier : supplierList) { @@ -403,19 +405,23 @@ public class BirCenterRateServiceImpl implements BirCenterRateService { } } + //年目标费率(已做拆分处理) + CusTargetRateDTO targetRateDTO = this.buildCusCenterTargetData(supplierCode4Group); + + BirMonthCusCenterSo queryCusCenterRate = new BirMonthCusCenterSo(); - queryCusCenterRate.setSupplierCodeList(supplierCode4Group); queryCusCenterRate.setCenterType(centerType); queryCusCenterRate.setCenterId(centerId); queryCusCenterRate.setStartYearMonth(startMonth); queryCusCenterRate.setEndYearMonth(endMonth); - //年目标费率 - CusTargetRateDTO targetRateDTO = this.buildCusCenterTargetData(supplierCode4Group); - List centerGoodsMonthVoList = birActivityCenterGoodsMapper.listMonthCusCenterVo(queryCusCenterRate); + + // (已做拆分处理) + List centerGoodsMonthVoList = getBirActivityCenterGoodsMonthVos(supplierCode4Group, queryCusCenterRate); + BigDecimal totalCostQty = BigDecimal.ZERO; BigDecimal totalDispatchQty = BigDecimal.ZERO; - List dispatchSumVos = dispatchDataMapper.querySumCost(startMonth,endMonth,supplierCode4Group); + List dispatchSumVos = dispatchDataMapper.querySumCost(startMonth,endMonth,new ArrayList<>(supplierCode4Group)); for (int monthNumber : currQ) { String tmp = monthNumber>9?monthNumber+"":"0"+monthNumber; int currYearMonth = Integer.parseInt(curYear+tmp); @@ -460,22 +466,61 @@ public class BirCenterRateServiceImpl implements BirCenterRateService { costCenter.setYtdCusCenterTargetExpenseRate(targetRateDTO.getCusTargetRate()); } + /** + * 获取客户维度月度目标数据(按客户编码分组再合计) + * @param supplierCode4Group + * @param queryCusCenterRate + * @return + */ + private List getBirActivityCenterGoodsMonthVos(Set supplierCode4Group, BirMonthCusCenterSo queryCusCenterRate) { + List allList = new ArrayList<>(); + for (List cusCodes : CollUtil.split(supplierCode4Group, 800)) { + queryCusCenterRate.setSupplierCodeList(cusCodes); + allList.addAll(birActivityCenterGoodsMapper.listMonthCusCenterVo(queryCusCenterRate)); + } + Map> map = allList.stream().collect(Collectors.groupingBy(BirActivityCenterGoodsMonthVo::getKeyNum)); + List rs = new ArrayList<>(); + for (Integer integer : map.keySet()) { + List list = map.get(integer); + BigDecimal costAmt = BigDecimal.ZERO; + BigDecimal releaseAmt = BigDecimal.ZERO; + BigDecimal usedAmt = BigDecimal.ZERO; + for (BirActivityCenterGoodsMonthVo item : list) { + costAmt = costAmt.add(item.getTotalCostAmt()); + releaseAmt = releaseAmt.add(item.getTotalReleaseAmt()); + usedAmt = usedAmt.add(item.getTotalUsedAmt()); + } + BirActivityCenterGoodsMonthVo rsItem = new BirActivityCenterGoodsMonthVo(); + rsItem.setKeyNum(integer); + rsItem.setTotalCostAmt(costAmt); + rsItem.setTotalReleaseAmt(releaseAmt); + rsItem.setTotalUsedAmt(usedAmt); + rs.add(rsItem); + } + return rs; + } + /** * 计算客户目标费率 * @param supplierCodes * @return */ - public CusTargetRateDTO buildCusCenterTargetData(List supplierCodes){ + public CusTargetRateDTO buildCusCenterTargetData(Set supplierCodes){ String cusTargetRateQty=null; String cusTargetRate=null; LocalDate nowTime = LocalDate.now(); int curYear = nowTime.getYear(); int curMonth = nowTime.getMonthValue(); int[] currQ = MonthValues.getQArr(curMonth); - List supplierTargetList = bmsSupplierTargetMapper.selectList( - new LambdaQueryWrapper() - .in(BmsSupplierTarget::getSupplierCode, supplierCodes) - ); + List supplierTargetList = new ArrayList<>(); + for (List strings : CollUtil.split(supplierCodes, 1000)) { + List supplierTargetListBySplit = bmsSupplierTargetMapper.selectList( + new LambdaQueryWrapper() + .in(BmsSupplierTarget::getSupplierCode, strings) + ); + supplierTargetList.addAll(supplierTargetListBySplit); + } + List scheduleItemIds = supplierTargetList.stream().map(BmsSupplierTarget::getScheduleItemId).collect(Collectors.toList()); List scheduleIds = supplierTargetList.stream().map(BmsSupplierTarget::getScheduleId).collect(Collectors.toList()); Map scheduleItems = new HashMap<>();