From 72ff1773b4ad149519c719ce32ba41e36ef29ce0 Mon Sep 17 00:00:00 2001 From: "15989082884@163.com" <15989082884@163.com> Date: Mon, 17 Jul 2023 18:14:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=B0=E5=B8=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bir/controller/BirRoiRateController.java | 31 ++- .../bir/entity/vo/BirAccountReportVo.java | 2 + .../bir/entity/vo/BirCenterCostRateItem.java | 14 + .../BirActivityCenterGoodsServiceImpl.java | 4 +- .../impl/BirReportAccountBookServiceImpl.java | 263 +++++++++++------- .../goods/entity/dto/TbsCenterDto.java | 4 + .../bir/BirActivityCenterGoodsMapper.xml | 1 + 7 files changed, 207 insertions(+), 112 deletions(-) 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 e822ee84..e2e7ab27 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 @@ -8,16 +8,16 @@ import com.qs.serve.common.model.dto.PageVo; import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.enums.BizType; import com.qs.serve.common.model.enums.SystemModule; +import com.qs.serve.common.util.Assert; import com.qs.serve.common.util.AuthContextUtils; +import com.qs.serve.common.util.StringUtils; import com.qs.serve.modules.bir.entity.BirBaseActivity; import com.qs.serve.modules.bir.entity.so.BirCostRoiSo; -import com.qs.serve.modules.bir.entity.vo.BirCenterCostRateItem; -import com.qs.serve.modules.bir.entity.vo.BirCenterCostRateMain; -import com.qs.serve.modules.bir.entity.vo.BirRoiCostItemVo; -import com.qs.serve.modules.bir.entity.vo.BirRoiVo; +import com.qs.serve.modules.bir.entity.vo.*; import com.qs.serve.modules.bir.service.BirActivityCenterGoodsService; import com.qs.serve.modules.bir.service.BirBaseActivityService; import com.qs.serve.modules.bir.service.BirReportAccountBookService; +import com.qs.serve.modules.tbs.common.TbsCenterType; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; @@ -95,9 +95,32 @@ public class BirRoiRateController { */ @GetMapping("/standingBook") public R standingBookByCall(String type,String year){ + if(!StringUtils.hasText(year) || !StringUtils.hasText(type)){ + Assert.throwEx("参数不能为空!"); + } return R.ok(birReportAccountBookService.getReportAccountBookData(type,year)); } + /** + * 台账 + * @return + */ + @GetMapping("/standingBookExport") + public R standingBookExport(String year){ + if(!StringUtils.hasText(year)){ + Assert.throwEx("参数不能为空!"); + } + List vos = new ArrayList<>(); + BirAccountReportVo center = birReportAccountBookService.getReportAccountBookData(TbsCenterType.center.name(),year); + BirAccountReportVo customer = birReportAccountBookService.getReportAccountBookData(TbsCenterType.customer.name(),year); + BirAccountReportVo saleRegion = birReportAccountBookService.getReportAccountBookData(TbsCenterType.saleRegion.name(),year); + BirAccountReportVo bizRegion = birReportAccountBookService.getReportAccountBookData(TbsCenterType.bizRegion.name(),year); + vos.add(center); + vos.add(customer); + vos.add(saleRegion); + vos.add(bizRegion); + return R.ok(vos); + } /** * 获取费率 diff --git a/src/main/java/com/qs/serve/modules/bir/entity/vo/BirAccountReportVo.java b/src/main/java/com/qs/serve/modules/bir/entity/vo/BirAccountReportVo.java index d624002d..47a09980 100644 --- a/src/main/java/com/qs/serve/modules/bir/entity/vo/BirAccountReportVo.java +++ b/src/main/java/com/qs/serve/modules/bir/entity/vo/BirAccountReportVo.java @@ -18,4 +18,6 @@ public class BirAccountReportVo { private BudgetPlanVo budgetPlanVo; private List> itemList; + + private String type; } diff --git a/src/main/java/com/qs/serve/modules/bir/entity/vo/BirCenterCostRateItem.java b/src/main/java/com/qs/serve/modules/bir/entity/vo/BirCenterCostRateItem.java index 3ea534a6..47558ed3 100644 --- a/src/main/java/com/qs/serve/modules/bir/entity/vo/BirCenterCostRateItem.java +++ b/src/main/java/com/qs/serve/modules/bir/entity/vo/BirCenterCostRateItem.java @@ -3,6 +3,8 @@ package com.qs.serve.modules.bir.entity.vo; import lombok.Data; import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; import java.util.Map; /** @@ -96,4 +98,16 @@ public class BirCenterCostRateItem { this.targetRoiRate = map.get(headerPrefix+"目标费用率")==null?BigDecimal.ZERO:((BigDecimal) map.get(headerPrefix+"目标费用率")).multiply(BigDecimal.valueOf(100L)); } + + public BirCenterCostRateItem(List itemData){ + this.budgetAmt = itemData.stream().map(a->a.getBudgetAmt()).reduce(BigDecimal.ZERO,BigDecimal::add); + this.usedBudgetAmt = itemData.stream().map(a->a.getUsedBudgetAmt()).reduce(BigDecimal.ZERO,BigDecimal::add); + this.unUsedBudgetAmt = itemData.stream().map(a->a.getUnUsedBudgetAmt()).reduce(BigDecimal.ZERO,BigDecimal::add); + this.targetDispatchAmt = itemData.stream().map(a->a.getTargetDispatchAmt()).reduce(BigDecimal.ZERO,BigDecimal::add); + this.realDispatchAmt = itemData.stream().map(a->a.getRealDispatchAmt()).reduce(BigDecimal.ZERO,BigDecimal::add); + this.realRoiRate = this.realDispatchAmt.compareTo(BigDecimal.ZERO)==0? + BigDecimal.ZERO:this.usedBudgetAmt.divide(this.realDispatchAmt,4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100L)); + this.targetRoiRate = this.targetDispatchAmt.compareTo(BigDecimal.ZERO)==0? + BigDecimal.ZERO:this.budgetAmt.divide(this.targetDispatchAmt,4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100L)); + } } diff --git a/src/main/java/com/qs/serve/modules/bir/service/impl/BirActivityCenterGoodsServiceImpl.java b/src/main/java/com/qs/serve/modules/bir/service/impl/BirActivityCenterGoodsServiceImpl.java index 5cfe6b5f..ddb9f247 100644 --- a/src/main/java/com/qs/serve/modules/bir/service/impl/BirActivityCenterGoodsServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bir/service/impl/BirActivityCenterGoodsServiceImpl.java @@ -83,7 +83,7 @@ public class BirActivityCenterGoodsServiceImpl extends ServiceImpl> collectMap = activityCenterGoodsAllList.stream() .collect(Collectors.groupingBy(TbsActivityCenterGoods::getActivityId)); - //TODO查询费用释放 + // TODO查询费用释放 VtbFundFlow flow = new VtbFundFlow(); flow.setFundType(VtbFundFlowType.Release); flow.setSelectActivityIds(new ArrayList<>(collectMap.keySet())); @@ -304,7 +304,7 @@ public class BirActivityCenterGoodsServiceImpl extends ServiceImpl> itemDataList = new ArrayList<>(); + vo.setType(type); List headerList = tbsScheduleItemMapper.getItemNames(year); - if(headerList.size()==0){ - return vo; + List> itemDataList = buildCostData(type,year,headerList); + + if(itemDataList.size()>0) { + List forSumItemData = itemDataList.stream().flatMap(List::stream).collect(Collectors.toList()); + BirCenterCostRateMain allMainItem = buildSumData(forSumItemData); + allMainItem.getCenter2().setCenterName("合计"); + + if (type.equals(TbsCenterType.saleRegion.name()) || type.equals(TbsCenterType.bizRegion.name())) { + itemDataList.forEach(item -> { + BirCenterCostRateMain mainItem = buildSumData(item); + item.add(mainItem); + }); + } + + itemDataList.add(Arrays.asList(allMainItem)); } - if(type.equals(TbsCenterType.saleRegion.name())){ - List bmsRegionList = bmsRegionService.list(); - Map bmsRegionMap = bmsRegionList.stream().collect(Collectors.toMap(BmsRegion::getId, Function.identity())); + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(TbsBudgetPlan::getBudgetYear,year); + TbsBudgetPlan tbsBudgetPlan = tbsBudgetPlanService.getOne(lqw); - List> itemList = birReportAccountBookMapper.reportAccountBookRegion(year); + BudgetPlanVo budgetPlanVo = new BudgetPlanVo(); + CopierUtil.copy(tbsBudgetPlan,budgetPlanVo); - Map> mainList = itemList.stream().map(i->{ - BirCenterCostRateMain main = new BirCenterCostRateMain(); - BmsRegion center2 = bmsRegionMap.get(i.get("center_id")); - if(center2==null){ - return main; - }else{ - main.setCenter2(new TbsCenterDto(center2)); - } + BigDecimal plannedAmount = tbsBudgetLogMapper.countPlannedBudgetAmount(); + budgetPlanVo.setPlannedAmount(plannedAmount); - BmsRegion center1 = bmsRegionMap.get(center2.getPid()); - if(center1==null){ - main.setCenter1(new TbsCenterDto(center2)); - }else{ - main.setCenter1(new TbsCenterDto(center1)); - } + BigDecimal usedAmount = tbsBudgetLogMapper.countUsedBudgetAmount(); + budgetPlanVo.setUsedAmout(usedAmount); - List seasonList = headerList.stream().map(a-> new BirCenterCostRateItem(i,"【"+a+"】")).collect(Collectors.toList()); - main.setSeasonList(seasonList); - main.setYearInfo(new BirCenterCostRateItem(i,"【全年】")); + BigDecimal realSaleAmount = erpDispatchDataMapper.querySumCostAmt(Integer.parseInt(year+"01"),Integer.parseInt(year+"12"),null); + budgetPlanVo.setRealSaleAmount(realSaleAmount); - return main; - }).filter(a->a.getCenter2()!=null).collect(Collectors.groupingBy(a->a.getCenter1().getId())); + vo.setHeaderList(headerList); + vo.setItemList(itemDataList); + vo.setBudgetPlanVo(budgetPlanVo); + return vo; + } - itemDataList.addAll(mainList.values()); - }else if(type.equals(TbsCenterType.bizRegion.name())){ - List bmsRegionList = bmsRegion2Service.list(); - Map bmsRegionMap = bmsRegionList.stream().collect(Collectors.toMap(BmsRegion2::getId, Function.identity())); + private BirCenterCostRateMain buildSumData(List item){ + BirCenterCostRateMain mainItem = new BirCenterCostRateMain(); + + //年度合计 + List yearInfos = item.stream().map(a->a.getYearInfo()).collect(Collectors.toList()); + BirCenterCostRateItem sumYearInfo = new BirCenterCostRateItem(yearInfos); + mainItem.setYearInfo(sumYearInfo); + + List sumSeasonInfoList = new ArrayList<>(); + //周期合计 + for(int i=0;i seasonInfos = item.stream().map(a->a.getSeasonList().get(finalI)).collect(Collectors.toList()); + BirCenterCostRateItem seasonInfo = new BirCenterCostRateItem(seasonInfos); + sumSeasonInfoList.add(seasonInfo); + } - List> itemList = birReportAccountBookMapper.reportAccountBookBizRegion(year); + mainItem.setSeasonList(sumSeasonInfoList); - Map> mainList = itemList.stream().map(i->{ - BirCenterCostRateMain main = new BirCenterCostRateMain(); + //成本中心设置 + TbsCenterDto sumCenterDto = CopierUtil.copy(item.get(0).getCenter2(),new TbsCenterDto()); + sumCenterDto.setCenterName("合计"+sumCenterDto.getCenterName()); - BmsRegion2 center2 = bmsRegionMap.get(i.get("center_id")); - if(center2==null){ - return main; - }else{ - main.setCenter2(new TbsCenterDto(center2)); - main.setCenter1(new TbsCenterDto(center2)); - } + mainItem.setCenter2(sumCenterDto); + return mainItem; + } - List seasonList = headerList.stream().map(a-> new BirCenterCostRateItem(i,"【"+a+"】")).collect(Collectors.toList()); - main.setSeasonList(seasonList); - main.setYearInfo(new BirCenterCostRateItem(i,"【全年】")); + private List> buildCostData(String type,String year,List headerList){ + List> itemDataList = new ArrayList<>(); + if(headerList.size()>0) { - return main; - }).filter(a->a.getCenter2()!=null).collect(Collectors.groupingBy(a->a.getCenter1().getId())); + if (type.equals(TbsCenterType.saleRegion.name())) { + List bmsRegionList = bmsRegionService.list(); + Map bmsRegionMap = bmsRegionList.stream().collect(Collectors.toMap(BmsRegion::getId, Function.identity())); - itemDataList.addAll(mainList.values()); - }else if(type.equals(TbsCenterType.customer.name())){ + List> itemList = birReportAccountBookMapper.reportAccountBookRegion(year); - List> itemList = birReportAccountBookMapper.reportAccountBookCustomer(year); - List supperIds = itemList.stream().map(i->i.get("center_id").toString()).collect(Collectors.toList()); + Map> mainList = itemList.stream().map(i -> { + BirCenterCostRateMain main = new BirCenterCostRateMain(); - LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); - lqw.in(BmsSupplier::getId,supperIds); - List supplierList = bmsSupplierService.list(lqw); - Map supplierMap = supplierList.stream().collect(Collectors.toMap(BmsSupplier::getId, Function.identity())); + BmsRegion center2 = bmsRegionMap.get(i.get("center_id")); + if (center2 == null) { + return main; + } else { + main.setCenter2(new TbsCenterDto(center2)); + } + BmsRegion center1 = bmsRegionMap.get(center2.getPid()); + if (center1 == null) { + main.setCenter1(new TbsCenterDto(center2)); + } else { + main.setCenter1(new TbsCenterDto(center1)); + } - List mainList = itemList.stream().map(i->{ - BirCenterCostRateMain main = new BirCenterCostRateMain(); + List seasonList = headerList.stream().map(a -> new BirCenterCostRateItem(i, "【" + a + "】")).collect(Collectors.toList()); + main.setSeasonList(seasonList); + main.setYearInfo(new BirCenterCostRateItem(i, "【全年】")); - BmsSupplier supplier = supplierMap.get(i.get("center_id")); - if(supplier==null){ return main; - }else{ - main.setCenter2(new TbsCenterDto(supplier)); - main.setCenter1(new TbsCenterDto(supplier)); - } + }).filter(a -> a.getCenter2() != null).collect(Collectors.groupingBy(a -> a.getCenter1().getId())); + + itemDataList.addAll(mainList.values()); + } else if (type.equals(TbsCenterType.bizRegion.name())) { + List bmsRegionList = bmsRegion2Service.list(); + Map bmsRegionMap = bmsRegionList.stream().collect(Collectors.toMap(BmsRegion2::getId, Function.identity())); - List seasonList = headerList.stream().map(a-> new BirCenterCostRateItem(i,"【"+a+"】")).collect(Collectors.toList()); - main.setSeasonList(seasonList); - main.setYearInfo(new BirCenterCostRateItem(i,"【全年】")); + List> itemList = birReportAccountBookMapper.reportAccountBookBizRegion(year); - return main; - }).filter(a->a.getCenter2()!=null).collect(Collectors.toList()); - itemDataList.add(mainList); + Map> mainList = itemList.stream().map(i -> { + BirCenterCostRateMain main = new BirCenterCostRateMain(); - }else if(type.equals(TbsCenterType.center.name())){ - List> itemList = birReportAccountBookMapper.reportAccountBookCenter(year); - List centerIds = itemList.stream().map(i->i.get("center_id").toString()).collect(Collectors.toList()); + BmsRegion2 center2 = bmsRegionMap.get(i.get("center_id")); + if (center2 == null) { + return main; + } else { + main.setCenter2(new TbsCenterDto(center2)); + main.setCenter1(new TbsCenterDto(center2)); + } - LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); - lqw.in(BmsCostCenter::getId,centerIds); - List bmsCostCenterList = bmsCostCenterService.list(lqw); - Map bmsCostCenterMap = bmsCostCenterList.stream().collect(Collectors.toMap(a->a.getId().toString(), Function.identity())); - List mainList = itemList.stream().map(i->{ - BirCenterCostRateMain main = new BirCenterCostRateMain(); + List seasonList = headerList.stream().map(a -> new BirCenterCostRateItem(i, "【" + a + "】")).collect(Collectors.toList()); + main.setSeasonList(seasonList); + main.setYearInfo(new BirCenterCostRateItem(i, "【全年】")); - BmsCostCenter costCenter = bmsCostCenterMap.get(i.get("center_id")); - if(costCenter==null){ return main; - }else{ - main.setCenter2(new TbsCenterDto(costCenter)); - main.setCenter1(new TbsCenterDto(costCenter)); - } - - List seasonList = headerList.stream().map(a-> new BirCenterCostRateItem(i,"【"+a+"】")).collect(Collectors.toList()); - main.setSeasonList(seasonList); - main.setYearInfo(new BirCenterCostRateItem(i,"【全年】")); - - return main; - }).filter(a->a.getCenter2()!=null).collect(Collectors.toList()); - itemDataList.add(mainList); - } + }).filter(a -> a.getCenter2() != null).collect(Collectors.groupingBy(a -> a.getCenter1().getId())); - LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); - lqw.eq(TbsBudgetPlan::getBudgetYear,year); - TbsBudgetPlan tbsBudgetPlan = tbsBudgetPlanService.getOne(lqw); + itemDataList.addAll(mainList.values()); + } else if (type.equals(TbsCenterType.customer.name())) { - BudgetPlanVo budgetPlanVo = new BudgetPlanVo(); - CopierUtil.copy(tbsBudgetPlan,budgetPlanVo); + List> itemList = birReportAccountBookMapper.reportAccountBookCustomer(year); + List supperIds = itemList.stream().map(i -> i.get("center_id").toString()).collect(Collectors.toList()); + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.in(BmsSupplier::getId, supperIds); + List supplierList = bmsSupplierService.list(lqw); + Map supplierMap = supplierList.stream().collect(Collectors.toMap(BmsSupplier::getId, Function.identity())); - BigDecimal plannedAmount = tbsBudgetLogMapper.countPlannedBudgetAmount(); - budgetPlanVo.setPlannedAmount(plannedAmount); - BigDecimal usedAmount = tbsBudgetLogMapper.countUsedBudgetAmount(); - budgetPlanVo.setUsedAmout(usedAmount); + List mainList = itemList.stream().map(i -> { + BirCenterCostRateMain main = new BirCenterCostRateMain(); - BigDecimal realSaleAmount = erpDispatchDataMapper.querySumCostAmt(Integer.parseInt(year+"01"),Integer.parseInt(year+"12"),null); - budgetPlanVo.setRealSaleAmount(realSaleAmount); + BmsSupplier supplier = supplierMap.get(i.get("center_id")); + if (supplier == null) { + return main; + } else { + main.setCenter2(new TbsCenterDto(supplier)); + main.setCenter1(new TbsCenterDto(supplier)); + } - vo.setHeaderList(headerList); - vo.setItemList(itemDataList); - vo.setBudgetPlanVo(budgetPlanVo); - return vo; + List seasonList = headerList.stream().map(a -> new BirCenterCostRateItem(i, "【" + a + "】")).collect(Collectors.toList()); + main.setSeasonList(seasonList); + main.setYearInfo(new BirCenterCostRateItem(i, "【全年】")); + + return main; + }).filter(a -> a.getCenter2() != null).collect(Collectors.toList()); + itemDataList.add(mainList); + + } else if (type.equals(TbsCenterType.center.name())) { + List> itemList = birReportAccountBookMapper.reportAccountBookCenter(year); + List centerIds = itemList.stream().map(i -> i.get("center_id").toString()).collect(Collectors.toList()); + + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.in(BmsCostCenter::getId, centerIds); + List bmsCostCenterList = bmsCostCenterService.list(lqw); + Map bmsCostCenterMap = bmsCostCenterList.stream().collect(Collectors.toMap(a -> a.getId().toString(), Function.identity())); + + List mainList = itemList.stream().map(i -> { + BirCenterCostRateMain main = new BirCenterCostRateMain(); + + BmsCostCenter costCenter = bmsCostCenterMap.get(i.get("center_id")); + if (costCenter == null) { + return main; + } else { + main.setCenter2(new TbsCenterDto(costCenter)); + main.setCenter1(new TbsCenterDto(costCenter)); + } + + List seasonList = headerList.stream().map(a -> new BirCenterCostRateItem(i, "【" + a + "】")).collect(Collectors.toList()); + main.setSeasonList(seasonList); + main.setYearInfo(new BirCenterCostRateItem(i, "【全年】")); + + return main; + }).filter(a -> a.getCenter2() != null).collect(Collectors.toList()); + itemDataList.add(mainList); + } + return itemDataList; + }else{ + return itemDataList; + } } } diff --git a/src/main/java/com/qs/serve/modules/goods/entity/dto/TbsCenterDto.java b/src/main/java/com/qs/serve/modules/goods/entity/dto/TbsCenterDto.java index 9f2cbb2e..4fae9eb1 100644 --- a/src/main/java/com/qs/serve/modules/goods/entity/dto/TbsCenterDto.java +++ b/src/main/java/com/qs/serve/modules/goods/entity/dto/TbsCenterDto.java @@ -36,6 +36,10 @@ public class TbsCenterDto { @NotNull(message = "费用占比率不能为空") private BigDecimal centerAmount; + public TbsCenterDto(){ + + } + public TbsCenterDto(String id, String centerCode, String centerName, String centerType,LocalDateTime createTime) { this.id = id; this.centerCode = centerCode; diff --git a/src/main/resources/mapper/bir/BirActivityCenterGoodsMapper.xml b/src/main/resources/mapper/bir/BirActivityCenterGoodsMapper.xml index 8765aaf2..890f0fd2 100644 --- a/src/main/resources/mapper/bir/BirActivityCenterGoodsMapper.xml +++ b/src/main/resources/mapper/bir/BirActivityCenterGoodsMapper.xml @@ -110,6 +110,7 @@ bir_activity_center_goods.activity_id is null or bir_activity_center_goods.activity_total_amount != tbs_activity.total_amount or bir_activity_center_goods.activity_total_check_amount != tbs_activity.used_amount + or bir_activity_center_goods.activity_total_release_amount != tbs_activity.release_amount or bir_activity_center_goods.pre_start_date != tbs_activity.pre_start_date or bir_activity_center_goods.pre_end_date != tbs_activity.pre_end_date or bir_activity_center_goods.activity_finished_flag != `tbs_activity`.finished_flag