From 43ddc86057417d0a05353032ea067082a0b5f7a2 Mon Sep 17 00:00:00 2001 From: jing's Date: Tue, 20 Feb 2024 17:33:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=95=E5=B1=82bom=E4=B8=8B=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../product/bomnew/api/user/BomReportApi.java | 27 ++ .../pojo/query/ChildBomReportQuery.java | 22 ++ .../bomnew/pojo/query/ReverseReportQuery.java | 2 + .../bomnew/service/ForwardReportService.java | 60 ++- .../domain/EBom/EBomForwardReport.java | 341 +++++++++++------- 5 files changed, 310 insertions(+), 142 deletions(-) create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/ChildBomReportQuery.java diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/BomReportApi.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/BomReportApi.java index 9f1467f7..6def7ea6 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/BomReportApi.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/BomReportApi.java @@ -4,6 +4,7 @@ package com.nflg.product.bomnew.api.user; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.nflg.product.base.core.api.BaseApi; import com.nflg.product.bomnew.constant.ReportConstant; +import com.nflg.product.bomnew.pojo.query.ChildBomReportQuery; import com.nflg.product.bomnew.pojo.query.ReverseReportQuery; import com.nflg.product.bomnew.pojo.vo.*; import com.nflg.product.bomnew.service.ForwardReportService; @@ -92,6 +93,32 @@ public class BomReportApi extends BaseApi { return ResultVO.success(forwardReportService.factoryBomType(query)); } + + @PostMapping("forwardChildReport") + @ApiOperation("bom-子级bom信息") + public ResultVO< List> forwardChildReport(@RequestBody ChildBomReportQuery query) { + + if (Objects.isNull(query.getBomType())) { + return ResultVO.error(STATE.ParamErr, "请选择BOM类型"); + } else { + if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.ORIGINALBOM.getValue()) != 0 + || query.getBomType().compareTo(ReportConstant.BomTypeEnum.EBOM.getValue()) != 0 + || query.getBomType().compareTo(ReportConstant.BomTypeEnum.PBOM.getValue()) != 0 + || query.getBomType().compareTo(ReportConstant.BomTypeEnum.MBOM.getValue()) != 0) { + return ResultVO.error(STATE.ParamErr, "错误的BOM类型"); + } + + } + if (Objects.isNull(query.getBomRowId())) { + return ResultVO.error(STATE.ParamErr, "bomRowId不能空"); + } + + + + return ResultVO.success(forwardReportService.chilidBom(query)); + } + + @PostMapping("forwardVersion") @ApiOperation("bom-物料版本及描述") public ResultVO forwardVersion(@RequestBody ReverseReportQuery query) { diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/ChildBomReportQuery.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/ChildBomReportQuery.java new file mode 100644 index 00000000..0abf3521 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/ChildBomReportQuery.java @@ -0,0 +1,22 @@ +package com.nflg.product.bomnew.pojo.query; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * bom + */ +@Data +public class ChildBomReportQuery { + + @ApiModelProperty("BOM 类型 0-原始BOM 1-EBom 2-PBom 3-MBom") + @NotNull(message = "BOM类型不能为空") + private Integer bomType; + + @ApiModelProperty("子级Bom") + private Long bomRowId; + +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/ReverseReportQuery.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/ReverseReportQuery.java index ee908719..98afe87e 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/ReverseReportQuery.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/query/ReverseReportQuery.java @@ -44,4 +44,6 @@ public class ReverseReportQuery { @ApiModelProperty("数据显示方式 0-树形状 1-列表") private Integer dataType; + + } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/ForwardReportService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/ForwardReportService.java index c3f86929..a2adaa39 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/ForwardReportService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/ForwardReportService.java @@ -1,8 +1,15 @@ package com.nflg.product.bomnew.service; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.lang.TypeReference; +import cn.hutool.extra.spring.SpringUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.nflg.product.bomnew.constant.ReportConstant; +import com.nflg.product.bomnew.pojo.entity.BomNewEbomChildFormalEntity; +import com.nflg.product.bomnew.pojo.query.ChildBomReportQuery; import com.nflg.product.bomnew.pojo.query.ReverseReportQuery; +import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentFormalVO; import com.nflg.product.bomnew.pojo.vo.ForwardReportVO; import com.nflg.product.bomnew.pojo.vo.ReportBomVO; import com.nflg.product.bomnew.pojo.vo.ReportBomVersionVO; @@ -10,6 +17,7 @@ import com.nflg.product.bomnew.service.domain.EBom.EBomForwardReport; import com.nflg.product.bomnew.util.VUtils; import org.springframework.stereotype.Service; +import java.lang.reflect.Type; import java.util.List; @Service @@ -20,7 +28,7 @@ public class ForwardReportService { //原始BOM if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.ORIGINALBOM.getValue()) == 0) { - return null; + return null; } //EBOM @@ -32,11 +40,11 @@ public class ForwardReportService { //PBOM if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.PBOM.getValue()) == 0) { - return null; + return null; } //MBOM if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.MBOM.getValue()) == 0) { - return null; + return null; } VUtils.isTure(true).throwMessage("错误的BOM类型"); @@ -45,6 +53,36 @@ public class ForwardReportService { } + + public List chilidBom(ChildBomReportQuery query) { + //原始BOM + if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.ORIGINALBOM.getValue()) == 0) { + + + } + + //EBOM + if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.EBOM.getValue()) == 0) { + + return chilidEBomList(query); + + + } + + //PBOM + if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.PBOM.getValue()) == 0) { + + } + //MBOM + if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.MBOM.getValue()) == 0) { + + } + + VUtils.isTure(true).throwMessage("错误的BOM类型"); + return null; + } + + public ReportBomVO factoryBomType(ReverseReportQuery query) { //原始BOM if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.ORIGINALBOM.getValue()) == 0) { @@ -69,6 +107,20 @@ public class ForwardReportService { return null; } + + List chilidEBomList(ChildBomReportQuery query) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(BomNewEbomChildFormalEntity::getParentRowId, query.getBomRowId()); + List list = SpringUtil.getBean(BomNewEbomChildFormalService.class).list(queryWrapper); + + + List childBomLit = Convert.convert( + new TypeReference>() { + + }, list); + return childBomLit; + } + ReportBomVO queryOriginalBom(ReverseReportQuery query) { return null; } @@ -86,4 +138,6 @@ public class ForwardReportService { ReportBomVO queryMBom(ReverseReportQuery query) { return null; } + + } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomForwardReport.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomForwardReport.java index 4a6c97cc..b57e6deb 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomForwardReport.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/domain/EBom/EBomForwardReport.java @@ -30,226 +30,289 @@ import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinTask; import java.util.stream.Collectors; +/** + * ebom报表统计 + */ public class EBomForwardReport { ReverseReportQuery query; - public EBomForwardReport(ReverseReportQuery query){ - this.query=query; + + public EBomForwardReport(ReverseReportQuery query) { + this.query = query; } +public EBomForwardReport(){ - QueryWrapper buildQuery(){ - QueryWrapper queryWrapper=new QueryWrapper<>(); - queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getMaterialNo,query.getMaterialNo()); - if(StrUtil.isNotBlank(query.getDrawingNo())){ - queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getDrawingNo,query.getDrawingNo()); +} + QueryWrapper buildQuery() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getMaterialNo, query.getMaterialNo()); + if (StrUtil.isNotBlank(query.getDrawingNo())) { + queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getDrawingNo, query.getDrawingNo()); } - if(query.getVersionStrategy().compareTo(ReportConstant.VersionStrategyEnum.NEW.getValue()) ==0){ - // queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getLastVersionIs,1); + if (query.getVersionStrategy().compareTo(ReportConstant.VersionStrategyEnum.NEW.getValue()) == 0) { - queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getCurrentVersion,getMaxVersion()); + queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getCurrentVersion, getMaxVersion()); - }else { - queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getCurrentVersion,query.getBomVersion()); + } else { + queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getCurrentVersion, query.getBomVersion()); } - if(StrUtil.isNotBlank(query.getStartDate()) && StrUtil.isNotBlank(query.getEndDate()) ){ + if (StrUtil.isNotBlank(query.getStartDate()) && StrUtil.isNotBlank(query.getEndDate())) { queryWrapper.lambda().between(BomNewEbomParentFormalEntity::getConvertToEbomTime, query.getStartDate(), query.getEndDate()); } - - return queryWrapper; + return queryWrapper; } - - BomNewEbomParentFormalEntity getParent(){ - QueryWrapper queryWrapper=buildQuery(); - - List list= SpringUtil.getBean(BomNewEbomParentFormalService.class).list(queryWrapper); - - if(CollectionUtil.isEmpty(list)){ - throw new NflgBusinessException(STATE.BusinessError,StrUtil.format("未查到物料编码为{}的数据信息", query.getMaterialNo() )); + BomNewEbomParentFormalEntity getParent() { + QueryWrapper queryWrapper = buildQuery(); + List list = SpringUtil.getBean(BomNewEbomParentFormalService.class).list(queryWrapper); + if (CollectionUtil.isEmpty(list)) { + throw new NflgBusinessException(STATE.BusinessError, StrUtil.format("未查到物料编码为{}的数据信息", query.getMaterialNo())); } - - BomNewEbomParentFormalEntity parentFormal=list.get(0); + BomNewEbomParentFormalEntity parentFormal = list.get(0); parentFormal.setLevelNum(null); parentFormal.setOrderNumber(null); return parentFormal; } - public String getMaxVersion(){ - ReportBomVersionVO reportBomVersionVO= bomVersion(); - if(reportBomVersionVO.getVList().size()==1){ + + /** + * 最大的版本号 + * @return + */ + public String getMaxVersion() { + ReportBomVersionVO reportBomVersionVO = bomVersion(); + if (reportBomVersionVO.getVList().size() == 1) { return reportBomVersionVO.getVList().get(0).getVersion(); } - String maxVersion=reportBomVersionVO.getVList().get(0).getVersion(); - for(int index=1;index0){ - maxVersion=version; + String maxVersion = reportBomVersionVO.getVList().get(0).getVersion(); + for (int index = 1; index < reportBomVersionVO.getVList().size(); index++) { + String version = reportBomVersionVO.getVList().get(index).getVersion(); + if (VersionUtil.compare(version, maxVersion) > 0) { + maxVersion = version; } } - return maxVersion; + return maxVersion; } - ReportBomVO singleReport(){ + /** + * 单层 + * + * @return + */ + ReportBomVO singleReport() { - BomNewEbomParentFormalEntity parentFormal= getParent(); - ReportBomVO reportBomVO=new ReportBomVO(); + BomNewEbomParentFormalEntity parentFormal = getParent(); + ReportBomVO reportBomVO = new ReportBomVO(); - ForwardReportVO forwardReportVO= Convert.convert(ForwardReportVO.class, parentFormal); - forwardReportVO.setCreatedTime(parentFormal.getConvertToEbomTime()); - reportBomVO.setParent(forwardReportVO); - QueryWrapper queryWrapper=new QueryWrapper<>(); - queryWrapper.lambda().eq(BomNewEbomChildFormalEntity::getParentRowId,parentFormal.getRowId()); - List list= SpringUtil.getBean(BomNewEbomChildFormalService.class).list(queryWrapper); - if(CollectionUtil.isEmpty(list)){ - reportBomVO.setChildNodes(new ArrayList<>()); - }else{ - List nodeList= Convert.convert(new TypeReference>() { - }, list); - for (ForwardReportVO vo: - nodeList ) { - vo.setCreatedTime(reportBomVO.getParent().getCreatedTime()); - // vo.setOrderNumber(""); - } - reportBomVO.setChildNodes(nodeList); - } + ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal); + forwardReportVO.setCreatedTime(parentFormal.getConvertToEbomTime()); + reportBomVO.setParent(forwardReportVO); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(BomNewEbomChildFormalEntity::getParentRowId, parentFormal.getRowId()); + + List list = SpringUtil.getBean(BomNewEbomChildFormalService.class).list(queryWrapper); + if (CollectionUtil.isEmpty(list)) { + reportBomVO.setChildNodes(new ArrayList<>()); + } else { + List nodeList = Convert.convert(new TypeReference>() { + }, list); + for (ForwardReportVO vo : + nodeList) { + vo.setCreatedTime(reportBomVO.getParent().getCreatedTime()); + // vo.setOrderNumber(""); + } + reportBomVO.setChildNodes(nodeList); + } reportBomVO.setBomType(query.getBomType()); - reportBomVO.setQueryType(query.getQueryType()); - return reportBomVO; - } + reportBomVO.setQueryType(query.getQueryType()); + return reportBomVO; + } - - - - public ReportBomVersionVO bomVersion(){ - QueryWrapper queryWrapper=new QueryWrapper<>(); - queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getMaterialNo,query.getMaterialNo()); - if(StrUtil.isNotBlank(query.getDrawingNo())){ - queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getDrawingNo,query.getDrawingNo()); - } - queryWrapper.lambda().orderByAsc(BomNewEbomParentFormalEntity::getCurrentVersion); + /** + * 版本 + * + * @return + */ + public ReportBomVersionVO bomVersion() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getMaterialNo, query.getMaterialNo()); + if (StrUtil.isNotBlank(query.getDrawingNo())) { + queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getDrawingNo, query.getDrawingNo()); + } + queryWrapper.lambda().orderByAsc(BomNewEbomParentFormalEntity::getCurrentVersion); // if(StrUtil.isNotBlank(query.getStartDate()) && StrUtil.isNotBlank(query.getEndDate()) ){ // queryWrapper.lambda().between(BomNewEbomParentFormalEntity::getConvertToEbomTime, query.getStartDate(), query.getEndDate()); // } - List list= SpringUtil.getBean(BomNewEbomParentFormalService.class).list(queryWrapper); - if(CollectionUtil.isEmpty(list)){ - throw new NflgBusinessException(STATE.BusinessError,StrUtil.format("未查到物料编码{}版本信息", query.getMaterialNo() )); - } - BomNewEbomParentFormalEntity item0=list.get(0); - ReportBomVersionVO reportBomVersionVO=new ReportBomVersionVO(); - reportBomVersionVO.setMaterialDesc(item0.getMaterialDesc()); - reportBomVersionVO.setVList(new ArrayList<>()); - for (BomNewEbomParentFormalEntity entity: - list ) { - ReportBomVersionVO.QueryBomVersionVO versionVO=new ReportBomVersionVO.QueryBomVersionVO(); - versionVO.setVersion(entity.getCurrentVersion()); - reportBomVersionVO.getVList().add(versionVO); - } - return reportBomVersionVO; - } + List list = SpringUtil.getBean(BomNewEbomParentFormalService.class).list(queryWrapper); + if (CollectionUtil.isEmpty(list)) { + throw new NflgBusinessException(STATE.BusinessError, StrUtil.format("未查到物料编码{}版本信息", query.getMaterialNo())); + } + BomNewEbomParentFormalEntity item0 = list.get(0); + ReportBomVersionVO reportBomVersionVO = new ReportBomVersionVO(); + reportBomVersionVO.setMaterialDesc(item0.getMaterialDesc()); + reportBomVersionVO.setVList(new ArrayList<>()); + for (BomNewEbomParentFormalEntity entity : + list) { + ReportBomVersionVO.QueryBomVersionVO versionVO = new ReportBomVersionVO.QueryBomVersionVO(); + versionVO.setVersion(entity.getCurrentVersion()); + reportBomVersionVO.getVList().add(versionVO); + } + return reportBomVersionVO; + } - ReportBomVO multiReport(){ - BomNewEbomParentFormalEntity parentFormal= getParent(); - ReportBomVO reportBomVO=new ReportBomVO(); + + /** + * bomid下所有数据 + * + * @return + */ + List bomDetailList(Long bomRowId) { + List childList = SpringUtil.getBean(BomNewEbomParentFormalService.class).getBaseMapper().getParentChild(bomRowId); + EBomFormalTreeTask task = new EBomFormalTreeTask(childList); + ForkJoinPool pool = new ForkJoinPool(); + ForkJoinTask> submit = pool.submit(task); + + List bomList = submit.join(); + return bomList; + } + + + /** + * 多层 + * + * @return + */ + ReportBomVO multiReport() { + BomNewEbomParentFormalEntity parentFormal = getParent(); + ReportBomVO reportBomVO = new ReportBomVO(); reportBomVO.setBomType(query.getBomType()); reportBomVO.setQueryType(query.getQueryType()); - ForwardReportVO forwardReportVO= Convert.convert(ForwardReportVO.class, parentFormal); + ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal); forwardReportVO.setCreatedTime(parentFormal.getConvertToEbomTime()); reportBomVO.setParent(forwardReportVO); - List childList=SpringUtil.getBean(BomNewEbomParentFormalService.class).getBaseMapper().getParentChild(parentFormal.getRowId()); - EBomFormalTreeTask task=new EBomFormalTreeTask(childList); - ForkJoinPool pool = new ForkJoinPool(); - ForkJoinTask> submit = pool.submit(task); + List bomList = bomDetailList(parentFormal.getRowId()); - List bomList= submit.join(); + List convertBomList = Convert.convert(new TypeReference>() { + }, bomList); - List convertBomList=Convert.convert(new TypeReference>() { - },bomList); - // System.out.println(JSON.toJSONString(bomList)); - sumLevel(convertBomList); - //分组数据 - List rootList= listToTree(convertBomList, parentFormal.getRowId()); + //转化为树结构 + List rootList = listToTree(convertBomList, parentFormal.getRowId()); - sumLevel(rootList); - // System.out.println(JSON.toJSONString(rootList)); reportBomVO.setChildNodes(rootList); return reportBomVO; } + /** + * 汇总 + * 1. 查询所有不含子级的物料信息,并对数据进行汇总。 + * + * @return + */ + ReportBomVO sumReport() { + BomNewEbomParentFormalEntity parentFormal = getParent(); + ReportBomVO reportBomVO = new ReportBomVO(); + reportBomVO.setBomType(query.getBomType()); + reportBomVO.setQueryType(query.getQueryType()); + ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal); + forwardReportVO.setCreatedTime(parentFormal.getConvertToEbomTime()); + reportBomVO.setParent(forwardReportVO); + List bomList = bomDetailList(parentFormal.getRowId()); + List convertBomList = Convert.convert(new TypeReference>() { + }, bomList); + sumLevel(convertBomList); - void sumLevel(List bomList){ - - Map> listMap=bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getLevelNum)); - Map> bomParentMap=bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getParentRowId)); - listMap.forEach((key,value)-> { - - value.forEach(parent->{ - - List dataList=bomParentMap.get(parent.getBomRowId()); - if(CollectionUtil.isNotEmpty(dataList)){ - for (ForwardReportVO data: - dataList) { - data.setNum(parent.getNum().multiply(data.getNum())); + //无子级的数据 + List leafList = convertBomList.stream().filter(item -> (item.getBomRowId() == null || item.getBomRowId().longValue() ==0)).collect(Collectors.toList()); + //相同物料合并统计 + Map> materialNoListMap = leafList.stream().collect(Collectors.groupingBy(ForwardReportVO::getMaterialNo)); + List sumList = new ArrayList<>(); + materialNoListMap.forEach((key, valueList) -> { + if (CollectionUtil.isNotEmpty(valueList)) { + ForwardReportVO item0 = valueList.get(0); + //相同物料合并数量 + if (valueList.size() > 1) { + for (int index = 1; index < valueList.size(); index++) { + item0.setNum(item0.getNum().add(valueList.get(index).getNum())); } + } + sumList.add(item0); + } + }); + reportBomVO.setChildNodes(sumList); + return reportBomVO; + } + + /** + * 各层汇总 + *1.按层分组 和 parent分组 + * 2.下层数量=下层数量*上层数量 + * @param bomList + */ + void sumLevel(List bomList) { + //分层统计,避免使用遍历树统计 + Map> listMap = bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getLevelNum)); + Map> bomParentMap = bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getParentRowId)); + listMap.forEach((key, value) -> { + value.forEach(parent -> { + List dataList = bomParentMap.get(parent.getBomRowId()); + if (CollectionUtil.isNotEmpty(dataList)) { + for (ForwardReportVO data : + dataList) { + data.setNum(parent.getNum().multiply(data.getNum())); + } } }); - - }); + }); } - - List listToTree( List bomList,Long parentRowId){ - - Map> listMap=bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getParentRowId)); - - bomList.forEach(item -> { - item.setChildNodes(listMap.get(item.getBomRowId())); - }); - - List rootList= bomList.stream().filter(item ->Objects.equals(parentRowId,item.getParentRowId())).collect(Collectors.toList()); - - return rootList; - } + List listToTree(List bomList, Long parentRowId) { + Map> listMap = bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getParentRowId)); + bomList.forEach(item -> { + item.setChildNodes(listMap.get(item.getBomRowId())); + }); + List rootList = bomList.stream().filter(item -> Objects.equals(parentRowId, item.getParentRowId())).collect(Collectors.toList()); + return rootList; + } - - - public ReportBomVO genReport(){ + public ReportBomVO genReport() { //单层 - if (query.getQueryType().compareTo(ReportConstant.QueryTypeEnum.SINGLE.getValue()) == 0){ - return singleReport(); + if (query.getQueryType().compareTo(ReportConstant.QueryTypeEnum.SINGLE.getValue()) == 0) { + return singleReport(); } //多层 - if ( query.getQueryType().compareTo(ReportConstant.QueryTypeEnum.MULTI.getValue()) == 0){ - - return multiReport(); + if (query.getQueryType().compareTo(ReportConstant.QueryTypeEnum.MULTI.getValue()) == 0) { + return multiReport(); } - if ( query.getQueryType().compareTo(ReportConstant.QueryTypeEnum.SUM.getValue()) == 0) { - + //汇总 + if (query.getQueryType().compareTo(ReportConstant.QueryTypeEnum.SUM.getValue()) == 0) { + return sumReport(); } + return null; }