|
|
@ -1,5 +1,6 @@ |
|
|
|
package com.qs.serve.modules.bir.service.impl; |
|
|
|
|
|
|
|
import cn.hutool.core.util.ArrayUtil; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|
|
|
import com.qs.serve.common.model.dto.HeaderOption; |
|
|
@ -70,151 +71,201 @@ public class BirReportAccountBookServiceImpl implements BirReportAccountBookServ |
|
|
|
|
|
|
|
BirAccountReportVo vo = new BirAccountReportVo(); |
|
|
|
|
|
|
|
List<List<BirCenterCostRateMain>> itemDataList = new ArrayList<>(); |
|
|
|
vo.setType(type); |
|
|
|
|
|
|
|
List<String> headerList = tbsScheduleItemMapper.getItemNames(year); |
|
|
|
|
|
|
|
if(headerList.size()==0){ |
|
|
|
return vo; |
|
|
|
List<List<BirCenterCostRateMain>> itemDataList = buildCostData(type,year,headerList); |
|
|
|
|
|
|
|
if(itemDataList.size()>0) { |
|
|
|
List<BirCenterCostRateMain> 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<BmsRegion> bmsRegionList = bmsRegionService.list(); |
|
|
|
Map<String,BmsRegion> bmsRegionMap = bmsRegionList.stream().collect(Collectors.toMap(BmsRegion::getId, Function.identity())); |
|
|
|
LambdaQueryWrapper<TbsBudgetPlan> lqw = new LambdaQueryWrapper<>(); |
|
|
|
lqw.eq(TbsBudgetPlan::getBudgetYear,year); |
|
|
|
TbsBudgetPlan tbsBudgetPlan = tbsBudgetPlanService.getOne(lqw); |
|
|
|
|
|
|
|
List<Map<String,Object>> itemList = birReportAccountBookMapper.reportAccountBookRegion(year); |
|
|
|
BudgetPlanVo budgetPlanVo = new BudgetPlanVo(); |
|
|
|
CopierUtil.copy(tbsBudgetPlan,budgetPlanVo); |
|
|
|
|
|
|
|
Map<String,List<BirCenterCostRateMain>> 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<BirCenterCostRateItem> 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<BmsRegion2> bmsRegionList = bmsRegion2Service.list(); |
|
|
|
Map<String,BmsRegion2> bmsRegionMap = bmsRegionList.stream().collect(Collectors.toMap(BmsRegion2::getId, Function.identity())); |
|
|
|
private BirCenterCostRateMain buildSumData(List<BirCenterCostRateMain> item){ |
|
|
|
BirCenterCostRateMain mainItem = new BirCenterCostRateMain(); |
|
|
|
|
|
|
|
//年度合计
|
|
|
|
List<BirCenterCostRateItem> yearInfos = item.stream().map(a->a.getYearInfo()).collect(Collectors.toList()); |
|
|
|
BirCenterCostRateItem sumYearInfo = new BirCenterCostRateItem(yearInfos); |
|
|
|
mainItem.setYearInfo(sumYearInfo); |
|
|
|
|
|
|
|
List<BirCenterCostRateItem> sumSeasonInfoList = new ArrayList<>(); |
|
|
|
//周期合计
|
|
|
|
for(int i=0;i<item.get(0).getSeasonList().size();i++) { |
|
|
|
int finalI = i; |
|
|
|
List<BirCenterCostRateItem> seasonInfos = item.stream().map(a->a.getSeasonList().get(finalI)).collect(Collectors.toList()); |
|
|
|
BirCenterCostRateItem seasonInfo = new BirCenterCostRateItem(seasonInfos); |
|
|
|
sumSeasonInfoList.add(seasonInfo); |
|
|
|
} |
|
|
|
|
|
|
|
List<Map<String,Object>> itemList = birReportAccountBookMapper.reportAccountBookBizRegion(year); |
|
|
|
mainItem.setSeasonList(sumSeasonInfoList); |
|
|
|
|
|
|
|
Map<String,List<BirCenterCostRateMain>> 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<BirCenterCostRateItem> seasonList = headerList.stream().map(a-> new BirCenterCostRateItem(i,"【"+a+"】")).collect(Collectors.toList()); |
|
|
|
main.setSeasonList(seasonList); |
|
|
|
main.setYearInfo(new BirCenterCostRateItem(i,"【全年】")); |
|
|
|
private List<List<BirCenterCostRateMain>> buildCostData(String type,String year,List<String> headerList){ |
|
|
|
List<List<BirCenterCostRateMain>> 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<BmsRegion> bmsRegionList = bmsRegionService.list(); |
|
|
|
Map<String, BmsRegion> bmsRegionMap = bmsRegionList.stream().collect(Collectors.toMap(BmsRegion::getId, Function.identity())); |
|
|
|
|
|
|
|
itemDataList.addAll(mainList.values()); |
|
|
|
}else if(type.equals(TbsCenterType.customer.name())){ |
|
|
|
List<Map<String, Object>> itemList = birReportAccountBookMapper.reportAccountBookRegion(year); |
|
|
|
|
|
|
|
List<Map<String,Object>> itemList = birReportAccountBookMapper.reportAccountBookCustomer(year); |
|
|
|
List<String> supperIds = itemList.stream().map(i->i.get("center_id").toString()).collect(Collectors.toList()); |
|
|
|
Map<String, List<BirCenterCostRateMain>> mainList = itemList.stream().map(i -> { |
|
|
|
BirCenterCostRateMain main = new BirCenterCostRateMain(); |
|
|
|
|
|
|
|
LambdaQueryWrapper<BmsSupplier> lqw = new LambdaQueryWrapper<>(); |
|
|
|
lqw.in(BmsSupplier::getId,supperIds); |
|
|
|
List<BmsSupplier> supplierList = bmsSupplierService.list(lqw); |
|
|
|
Map<String,BmsSupplier> 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<BirCenterCostRateMain> mainList = itemList.stream().map(i->{ |
|
|
|
BirCenterCostRateMain main = new BirCenterCostRateMain(); |
|
|
|
List<BirCenterCostRateItem> 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<BmsRegion2> bmsRegionList = bmsRegion2Service.list(); |
|
|
|
Map<String, BmsRegion2> bmsRegionMap = bmsRegionList.stream().collect(Collectors.toMap(BmsRegion2::getId, Function.identity())); |
|
|
|
|
|
|
|
List<BirCenterCostRateItem> seasonList = headerList.stream().map(a-> new BirCenterCostRateItem(i,"【"+a+"】")).collect(Collectors.toList()); |
|
|
|
main.setSeasonList(seasonList); |
|
|
|
main.setYearInfo(new BirCenterCostRateItem(i,"【全年】")); |
|
|
|
List<Map<String, Object>> itemList = birReportAccountBookMapper.reportAccountBookBizRegion(year); |
|
|
|
|
|
|
|
return main; |
|
|
|
}).filter(a->a.getCenter2()!=null).collect(Collectors.toList()); |
|
|
|
itemDataList.add(mainList); |
|
|
|
Map<String, List<BirCenterCostRateMain>> mainList = itemList.stream().map(i -> { |
|
|
|
BirCenterCostRateMain main = new BirCenterCostRateMain(); |
|
|
|
|
|
|
|
}else if(type.equals(TbsCenterType.center.name())){ |
|
|
|
List<Map<String,Object>> itemList = birReportAccountBookMapper.reportAccountBookCenter(year); |
|
|
|
List<String> 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<BmsCostCenter> lqw = new LambdaQueryWrapper<>(); |
|
|
|
lqw.in(BmsCostCenter::getId,centerIds); |
|
|
|
List<BmsCostCenter> bmsCostCenterList = bmsCostCenterService.list(lqw); |
|
|
|
Map<String,BmsCostCenter> bmsCostCenterMap = bmsCostCenterList.stream().collect(Collectors.toMap(a->a.getId().toString(), Function.identity())); |
|
|
|
|
|
|
|
List<BirCenterCostRateMain> mainList = itemList.stream().map(i->{ |
|
|
|
BirCenterCostRateMain main = new BirCenterCostRateMain(); |
|
|
|
List<BirCenterCostRateItem> 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<BirCenterCostRateItem> 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<TbsBudgetPlan> 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<Map<String, Object>> itemList = birReportAccountBookMapper.reportAccountBookCustomer(year); |
|
|
|
List<String> supperIds = itemList.stream().map(i -> i.get("center_id").toString()).collect(Collectors.toList()); |
|
|
|
|
|
|
|
LambdaQueryWrapper<BmsSupplier> lqw = new LambdaQueryWrapper<>(); |
|
|
|
lqw.in(BmsSupplier::getId, supperIds); |
|
|
|
List<BmsSupplier> supplierList = bmsSupplierService.list(lqw); |
|
|
|
Map<String, BmsSupplier> 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<BirCenterCostRateMain> 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<BirCenterCostRateItem> 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<Map<String, Object>> itemList = birReportAccountBookMapper.reportAccountBookCenter(year); |
|
|
|
List<String> centerIds = itemList.stream().map(i -> i.get("center_id").toString()).collect(Collectors.toList()); |
|
|
|
|
|
|
|
LambdaQueryWrapper<BmsCostCenter> lqw = new LambdaQueryWrapper<>(); |
|
|
|
lqw.in(BmsCostCenter::getId, centerIds); |
|
|
|
List<BmsCostCenter> bmsCostCenterList = bmsCostCenterService.list(lqw); |
|
|
|
Map<String, BmsCostCenter> bmsCostCenterMap = bmsCostCenterList.stream().collect(Collectors.toMap(a -> a.getId().toString(), Function.identity())); |
|
|
|
|
|
|
|
List<BirCenterCostRateMain> 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<BirCenterCostRateItem> 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; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|