单层bom下级

This commit is contained in:
jing's 2024-02-20 17:33:58 +08:00
parent 17bcd18396
commit 43ddc86057
5 changed files with 310 additions and 142 deletions

View File

@ -4,6 +4,7 @@ package com.nflg.product.bomnew.api.user;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nflg.product.base.core.api.BaseApi; import com.nflg.product.base.core.api.BaseApi;
import com.nflg.product.bomnew.constant.ReportConstant; 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.query.ReverseReportQuery;
import com.nflg.product.bomnew.pojo.vo.*; import com.nflg.product.bomnew.pojo.vo.*;
import com.nflg.product.bomnew.service.ForwardReportService; import com.nflg.product.bomnew.service.ForwardReportService;
@ -92,6 +93,32 @@ public class BomReportApi extends BaseApi {
return ResultVO.success(forwardReportService.factoryBomType(query)); return ResultVO.success(forwardReportService.factoryBomType(query));
} }
@PostMapping("forwardChildReport")
@ApiOperation("bom-子级bom信息")
public ResultVO< List<ForwardReportVO>> 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") @PostMapping("forwardVersion")
@ApiOperation("bom-物料版本及描述") @ApiOperation("bom-物料版本及描述")
public ResultVO<ReportBomVersionVO> forwardVersion(@RequestBody ReverseReportQuery query) { public ResultVO<ReportBomVersionVO> forwardVersion(@RequestBody ReverseReportQuery query) {

View File

@ -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;
}

View File

@ -44,4 +44,6 @@ public class ReverseReportQuery {
@ApiModelProperty("数据显示方式 0-树形状 1-列表") @ApiModelProperty("数据显示方式 0-树形状 1-列表")
private Integer dataType; private Integer dataType;
} }

View File

@ -1,8 +1,15 @@
package com.nflg.product.bomnew.service; package com.nflg.product.bomnew.service;
import cn.hutool.core.collection.CollUtil; 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.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.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.ForwardReportVO;
import com.nflg.product.bomnew.pojo.vo.ReportBomVO; import com.nflg.product.bomnew.pojo.vo.ReportBomVO;
import com.nflg.product.bomnew.pojo.vo.ReportBomVersionVO; 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 com.nflg.product.bomnew.util.VUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.lang.reflect.Type;
import java.util.List; import java.util.List;
@Service @Service
@ -20,7 +28,7 @@ public class ForwardReportService {
//原始BOM //原始BOM
if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.ORIGINALBOM.getValue()) == 0) { if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.ORIGINALBOM.getValue()) == 0) {
return null; return null;
} }
//EBOM //EBOM
@ -32,11 +40,11 @@ public class ForwardReportService {
//PBOM //PBOM
if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.PBOM.getValue()) == 0) { if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.PBOM.getValue()) == 0) {
return null; return null;
} }
//MBOM //MBOM
if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.MBOM.getValue()) == 0) { if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.MBOM.getValue()) == 0) {
return null; return null;
} }
VUtils.isTure(true).throwMessage("错误的BOM类型"); VUtils.isTure(true).throwMessage("错误的BOM类型");
@ -45,6 +53,36 @@ public class ForwardReportService {
} }
public List<ForwardReportVO> 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) { public ReportBomVO factoryBomType(ReverseReportQuery query) {
//原始BOM //原始BOM
if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.ORIGINALBOM.getValue()) == 0) { if (query.getBomType().compareTo(ReportConstant.BomTypeEnum.ORIGINALBOM.getValue()) == 0) {
@ -69,6 +107,20 @@ public class ForwardReportService {
return null; return null;
} }
List<ForwardReportVO> chilidEBomList(ChildBomReportQuery query) {
QueryWrapper<BomNewEbomChildFormalEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(BomNewEbomChildFormalEntity::getParentRowId, query.getBomRowId());
List<BomNewEbomChildFormalEntity> list = SpringUtil.getBean(BomNewEbomChildFormalService.class).list(queryWrapper);
List<ForwardReportVO> childBomLit = Convert.convert(
new TypeReference<List<ForwardReportVO>>() {
}, list);
return childBomLit;
}
ReportBomVO queryOriginalBom(ReverseReportQuery query) { ReportBomVO queryOriginalBom(ReverseReportQuery query) {
return null; return null;
} }
@ -86,4 +138,6 @@ public class ForwardReportService {
ReportBomVO queryMBom(ReverseReportQuery query) { ReportBomVO queryMBom(ReverseReportQuery query) {
return null; return null;
} }
} }

View File

@ -30,226 +30,289 @@ import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask; import java.util.concurrent.ForkJoinTask;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/**
* ebom报表统计
*/
public class EBomForwardReport { public class EBomForwardReport {
ReverseReportQuery query; ReverseReportQuery query;
public EBomForwardReport(ReverseReportQuery query){
this.query=query; public EBomForwardReport(ReverseReportQuery query) {
this.query = query;
} }
public EBomForwardReport(){
QueryWrapper<BomNewEbomParentFormalEntity> buildQuery(){ }
QueryWrapper<BomNewEbomParentFormalEntity> queryWrapper=new QueryWrapper<>(); QueryWrapper<BomNewEbomParentFormalEntity> buildQuery() {
queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getMaterialNo,query.getMaterialNo()); QueryWrapper<BomNewEbomParentFormalEntity> queryWrapper = new QueryWrapper<>();
if(StrUtil.isNotBlank(query.getDrawingNo())){ queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getMaterialNo, query.getMaterialNo());
queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getDrawingNo,query.getDrawingNo()); if (StrUtil.isNotBlank(query.getDrawingNo())) {
queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getDrawingNo, query.getDrawingNo());
} }
if(query.getVersionStrategy().compareTo(ReportConstant.VersionStrategyEnum.NEW.getValue()) ==0){ if (query.getVersionStrategy().compareTo(ReportConstant.VersionStrategyEnum.NEW.getValue()) == 0) {
// queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getLastVersionIs,1);
queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getCurrentVersion,getMaxVersion()); queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getCurrentVersion, getMaxVersion());
}else { } else {
queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getCurrentVersion,query.getBomVersion()); 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()); queryWrapper.lambda().between(BomNewEbomParentFormalEntity::getConvertToEbomTime, query.getStartDate(), query.getEndDate());
} }
return queryWrapper;
return queryWrapper;
} }
BomNewEbomParentFormalEntity getParent() {
BomNewEbomParentFormalEntity getParent(){ QueryWrapper<BomNewEbomParentFormalEntity> queryWrapper = buildQuery();
QueryWrapper<BomNewEbomParentFormalEntity> queryWrapper=buildQuery(); List<BomNewEbomParentFormalEntity> list = SpringUtil.getBean(BomNewEbomParentFormalService.class).list(queryWrapper);
if (CollectionUtil.isEmpty(list)) {
List<BomNewEbomParentFormalEntity> list= SpringUtil.getBean(BomNewEbomParentFormalService.class).list(queryWrapper); throw new NflgBusinessException(STATE.BusinessError, StrUtil.format("未查到物料编码为{}的数据信息", query.getMaterialNo()));
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.setLevelNum(null);
parentFormal.setOrderNumber(null); parentFormal.setOrderNumber(null);
return parentFormal; 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(); return reportBomVersionVO.getVList().get(0).getVersion();
} }
String maxVersion=reportBomVersionVO.getVList().get(0).getVersion(); String maxVersion = reportBomVersionVO.getVList().get(0).getVersion();
for(int index=1;index<reportBomVersionVO.getVList().size();index++){ for (int index = 1; index < reportBomVersionVO.getVList().size(); index++) {
String version=reportBomVersionVO.getVList().get(index).getVersion(); String version = reportBomVersionVO.getVList().get(index).getVersion();
if(VersionUtil.compare(version,maxVersion)>0){ if (VersionUtil.compare(version, maxVersion) > 0) {
maxVersion=version; maxVersion = version;
} }
} }
return maxVersion; return maxVersion;
} }
ReportBomVO singleReport(){ /**
* 单层
*
* @return
*/
ReportBomVO singleReport() {
BomNewEbomParentFormalEntity parentFormal= getParent(); BomNewEbomParentFormalEntity parentFormal = getParent();
ReportBomVO reportBomVO=new ReportBomVO(); ReportBomVO reportBomVO = new ReportBomVO();
ForwardReportVO forwardReportVO= Convert.convert(ForwardReportVO.class, parentFormal); ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal);
forwardReportVO.setCreatedTime(parentFormal.getConvertToEbomTime()); forwardReportVO.setCreatedTime(parentFormal.getConvertToEbomTime());
reportBomVO.setParent(forwardReportVO); reportBomVO.setParent(forwardReportVO);
QueryWrapper<BomNewEbomChildFormalEntity > queryWrapper=new QueryWrapper<>(); QueryWrapper<BomNewEbomChildFormalEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(BomNewEbomChildFormalEntity::getParentRowId,parentFormal.getRowId()); queryWrapper.lambda().eq(BomNewEbomChildFormalEntity::getParentRowId, parentFormal.getRowId());
List<BomNewEbomChildFormalEntity > list= SpringUtil.getBean(BomNewEbomChildFormalService.class).list(queryWrapper);
if(CollectionUtil.isEmpty(list)){ List<BomNewEbomChildFormalEntity> list = SpringUtil.getBean(BomNewEbomChildFormalService.class).list(queryWrapper);
reportBomVO.setChildNodes(new ArrayList<>()); if (CollectionUtil.isEmpty(list)) {
}else{ reportBomVO.setChildNodes(new ArrayList<>());
List<ForwardReportVO> nodeList= Convert.convert(new TypeReference<List<ForwardReportVO>>() { } else {
}, list); List<ForwardReportVO> nodeList = Convert.convert(new TypeReference<List<ForwardReportVO>>() {
for (ForwardReportVO vo: }, list);
nodeList ) { for (ForwardReportVO vo :
vo.setCreatedTime(reportBomVO.getParent().getCreatedTime()); nodeList) {
// vo.setOrderNumber(""); vo.setCreatedTime(reportBomVO.getParent().getCreatedTime());
} // vo.setOrderNumber("");
reportBomVO.setChildNodes(nodeList); }
} reportBomVO.setChildNodes(nodeList);
}
reportBomVO.setBomType(query.getBomType()); reportBomVO.setBomType(query.getBomType());
reportBomVO.setQueryType(query.getQueryType()); reportBomVO.setQueryType(query.getQueryType());
return reportBomVO; return reportBomVO;
} }
/**
* 版本
*
public ReportBomVersionVO bomVersion(){ * @return
QueryWrapper<BomNewEbomParentFormalEntity> queryWrapper=new QueryWrapper<>(); */
queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getMaterialNo,query.getMaterialNo()); public ReportBomVersionVO bomVersion() {
if(StrUtil.isNotBlank(query.getDrawingNo())){ QueryWrapper<BomNewEbomParentFormalEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getDrawingNo,query.getDrawingNo()); queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getMaterialNo, query.getMaterialNo());
} if (StrUtil.isNotBlank(query.getDrawingNo())) {
queryWrapper.lambda().orderByAsc(BomNewEbomParentFormalEntity::getCurrentVersion); queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getDrawingNo, query.getDrawingNo());
}
queryWrapper.lambda().orderByAsc(BomNewEbomParentFormalEntity::getCurrentVersion);
// 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()); // queryWrapper.lambda().between(BomNewEbomParentFormalEntity::getConvertToEbomTime, query.getStartDate(), query.getEndDate());
// } // }
List<BomNewEbomParentFormalEntity> list= SpringUtil.getBean(BomNewEbomParentFormalService.class).list(queryWrapper); List<BomNewEbomParentFormalEntity> list = SpringUtil.getBean(BomNewEbomParentFormalService.class).list(queryWrapper);
if(CollectionUtil.isEmpty(list)){ if (CollectionUtil.isEmpty(list)) {
throw new NflgBusinessException(STATE.BusinessError,StrUtil.format("未查到物料编码{}版本信息", query.getMaterialNo() )); throw new NflgBusinessException(STATE.BusinessError, StrUtil.format("未查到物料编码{}版本信息", query.getMaterialNo()));
} }
BomNewEbomParentFormalEntity item0=list.get(0); BomNewEbomParentFormalEntity item0 = list.get(0);
ReportBomVersionVO reportBomVersionVO=new ReportBomVersionVO(); ReportBomVersionVO reportBomVersionVO = new ReportBomVersionVO();
reportBomVersionVO.setMaterialDesc(item0.getMaterialDesc()); reportBomVersionVO.setMaterialDesc(item0.getMaterialDesc());
reportBomVersionVO.setVList(new ArrayList<>()); reportBomVersionVO.setVList(new ArrayList<>());
for (BomNewEbomParentFormalEntity entity: for (BomNewEbomParentFormalEntity entity :
list ) { list) {
ReportBomVersionVO.QueryBomVersionVO versionVO=new ReportBomVersionVO.QueryBomVersionVO(); ReportBomVersionVO.QueryBomVersionVO versionVO = new ReportBomVersionVO.QueryBomVersionVO();
versionVO.setVersion(entity.getCurrentVersion()); versionVO.setVersion(entity.getCurrentVersion());
reportBomVersionVO.getVList().add(versionVO); reportBomVersionVO.getVList().add(versionVO);
} }
return reportBomVersionVO; return reportBomVersionVO;
} }
ReportBomVO multiReport(){
BomNewEbomParentFormalEntity parentFormal= getParent(); /**
ReportBomVO reportBomVO=new ReportBomVO(); * bomid下所有数据
*
* @return
*/
List<BomNewEbomParentFormalVO> bomDetailList(Long bomRowId) {
List<BomNewEbomParentFormalVO> childList = SpringUtil.getBean(BomNewEbomParentFormalService.class).getBaseMapper().getParentChild(bomRowId);
EBomFormalTreeTask task = new EBomFormalTreeTask(childList);
ForkJoinPool pool = new ForkJoinPool();
ForkJoinTask<List<BomNewEbomParentFormalVO>> submit = pool.submit(task);
List<BomNewEbomParentFormalVO> bomList = submit.join();
return bomList;
}
/**
* 多层
*
* @return
*/
ReportBomVO multiReport() {
BomNewEbomParentFormalEntity parentFormal = getParent();
ReportBomVO reportBomVO = new ReportBomVO();
reportBomVO.setBomType(query.getBomType()); reportBomVO.setBomType(query.getBomType());
reportBomVO.setQueryType(query.getQueryType()); reportBomVO.setQueryType(query.getQueryType());
ForwardReportVO forwardReportVO= Convert.convert(ForwardReportVO.class, parentFormal); ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal);
forwardReportVO.setCreatedTime(parentFormal.getConvertToEbomTime()); forwardReportVO.setCreatedTime(parentFormal.getConvertToEbomTime());
reportBomVO.setParent(forwardReportVO); reportBomVO.setParent(forwardReportVO);
List<BomNewEbomParentFormalVO> childList=SpringUtil.getBean(BomNewEbomParentFormalService.class).getBaseMapper().getParentChild(parentFormal.getRowId()); List<BomNewEbomParentFormalVO> bomList = bomDetailList(parentFormal.getRowId());
EBomFormalTreeTask task=new EBomFormalTreeTask(childList);
ForkJoinPool pool = new ForkJoinPool();
ForkJoinTask<List<BomNewEbomParentFormalVO>> submit = pool.submit(task);
List<BomNewEbomParentFormalVO> bomList= submit.join(); List<ForwardReportVO> convertBomList = Convert.convert(new TypeReference<List<ForwardReportVO>>() {
}, bomList);
List<ForwardReportVO> convertBomList=Convert.convert(new TypeReference<List<ForwardReportVO>>() {
},bomList);
// System.out.println(JSON.toJSONString(bomList));
sumLevel(convertBomList); sumLevel(convertBomList);
//分组数据 //转化为树结构
List<ForwardReportVO> rootList= listToTree(convertBomList, parentFormal.getRowId()); List<ForwardReportVO> rootList = listToTree(convertBomList, parentFormal.getRowId());
sumLevel(rootList);
// System.out.println(JSON.toJSONString(rootList));
reportBomVO.setChildNodes(rootList); reportBomVO.setChildNodes(rootList);
return reportBomVO; 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<BomNewEbomParentFormalVO> bomList = bomDetailList(parentFormal.getRowId());
List<ForwardReportVO> convertBomList = Convert.convert(new TypeReference<List<ForwardReportVO>>() {
}, bomList);
sumLevel(convertBomList);
void sumLevel(List<ForwardReportVO> bomList){ //无子级的数据
List<ForwardReportVO> leafList = convertBomList.stream().filter(item -> (item.getBomRowId() == null || item.getBomRowId().longValue() ==0)).collect(Collectors.toList());
Map<Integer, List<ForwardReportVO>> listMap=bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getLevelNum)); //相同物料合并统计
Map<Long, List<ForwardReportVO>> bomParentMap=bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getParentRowId)); Map<String, List<ForwardReportVO>> materialNoListMap = leafList.stream().collect(Collectors.groupingBy(ForwardReportVO::getMaterialNo));
listMap.forEach((key,value)-> { List<ForwardReportVO> sumList = new ArrayList<>();
materialNoListMap.forEach((key, valueList) -> {
value.forEach(parent->{ if (CollectionUtil.isNotEmpty(valueList)) {
ForwardReportVO item0 = valueList.get(0);
List<ForwardReportVO> dataList=bomParentMap.get(parent.getBomRowId()); //相同物料合并数量
if(CollectionUtil.isNotEmpty(dataList)){ if (valueList.size() > 1) {
for (ForwardReportVO data: for (int index = 1; index < valueList.size(); index++) {
dataList) { item0.setNum(item0.getNum().add(valueList.get(index).getNum()));
data.setNum(parent.getNum().multiply(data.getNum()));
} }
}
sumList.add(item0);
}
});
reportBomVO.setChildNodes(sumList);
return reportBomVO;
}
/**
* 各层汇总
*1.按层分组 parent分组
* 2.下层数量=下层数量*上层数量
* @param bomList
*/
void sumLevel(List<ForwardReportVO> bomList) {
//分层统计避免使用遍历树统计
Map<Integer, List<ForwardReportVO>> listMap = bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getLevelNum));
Map<Long, List<ForwardReportVO>> bomParentMap = bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getParentRowId));
listMap.forEach((key, value) -> {
value.forEach(parent -> {
List<ForwardReportVO> dataList = bomParentMap.get(parent.getBomRowId());
if (CollectionUtil.isNotEmpty(dataList)) {
for (ForwardReportVO data :
dataList) {
data.setNum(parent.getNum().multiply(data.getNum()));
}
} }
}); });
});
});
} }
List<ForwardReportVO> listToTree(List<ForwardReportVO> bomList, Long parentRowId) {
List<ForwardReportVO> listToTree( List<ForwardReportVO> bomList,Long parentRowId){ Map<Long, List<ForwardReportVO>> listMap = bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getParentRowId));
bomList.forEach(item -> {
Map<Long, List<ForwardReportVO>> listMap=bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getParentRowId)); item.setChildNodes(listMap.get(item.getBomRowId()));
});
bomList.forEach(item -> { List<ForwardReportVO> rootList = bomList.stream().filter(item -> Objects.equals(parentRowId, item.getParentRowId())).collect(Collectors.toList());
item.setChildNodes(listMap.get(item.getBomRowId())); return rootList;
}); }
List<ForwardReportVO> 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){ if (query.getQueryType().compareTo(ReportConstant.QueryTypeEnum.SINGLE.getValue()) == 0) {
return singleReport(); return singleReport();
} }
//多层 //多层
if ( query.getQueryType().compareTo(ReportConstant.QueryTypeEnum.MULTI.getValue()) == 0){ if (query.getQueryType().compareTo(ReportConstant.QueryTypeEnum.MULTI.getValue()) == 0) {
return multiReport();
return multiReport();
} }
if ( query.getQueryType().compareTo(ReportConstant.QueryTypeEnum.SUM.getValue()) == 0) { //汇总
if (query.getQueryType().compareTo(ReportConstant.QueryTypeEnum.SUM.getValue()) == 0) {
return sumReport();
} }
return null; return null;
} }