转换结构 tree 和list
This commit is contained in:
parent
7f8363978d
commit
214c515136
|
|
@ -18,4 +18,8 @@ public class ReportBomVO {
|
|||
private Integer bomType;
|
||||
@ApiModelProperty("查询方式 0-单层 1-多层 2-汇总")
|
||||
private Integer queryType;
|
||||
|
||||
|
||||
@ApiModelProperty("查询方式 0-树 1-列表")
|
||||
private Integer dataType;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,161 @@
|
|||
package com.nflg.product.bomnew.service.domain;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.nflg.product.bomnew.constant.ReportConstant;
|
||||
import com.nflg.product.bomnew.pojo.query.ReverseReportQuery;
|
||||
import com.nflg.product.bomnew.pojo.vo.ForwardReportVO;
|
||||
import com.nflg.product.bomnew.pojo.vo.ReportBomVO;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public abstract class BaseForwardReport {
|
||||
|
||||
protected ReverseReportQuery query;
|
||||
|
||||
public BaseForwardReport(ReverseReportQuery query) {
|
||||
this.query = query;
|
||||
}
|
||||
|
||||
/**
|
||||
* 各层汇总
|
||||
* 1.按层分组 和 parent分组
|
||||
* 2.下层数量=下层数量*上层数量
|
||||
*
|
||||
* @param bomList
|
||||
*/
|
||||
protected 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()));
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取叶子节点 合并相同物料
|
||||
*
|
||||
* @param convertBomList
|
||||
* @return
|
||||
*/
|
||||
protected List<ForwardReportVO> leafMergeMaterialNo(List<ForwardReportVO> convertBomList) {
|
||||
//无子级的数据
|
||||
List<ForwardReportVO> leafList = convertBomList.stream().filter(item -> (item.getBomRowId() == null || item.getBomRowId().longValue() == 0)).collect(Collectors.toList());
|
||||
//相同物料合并统计
|
||||
Map<String, List<ForwardReportVO>> materialNoListMap = leafList.stream().collect(Collectors.groupingBy(ForwardReportVO::getMaterialNo));
|
||||
List<ForwardReportVO> 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);
|
||||
}
|
||||
});
|
||||
return sumList;
|
||||
|
||||
}
|
||||
|
||||
|
||||
protected List<ForwardReportVO> showDataStyle(List<ForwardReportVO> bomList, Long parentRowId) {
|
||||
Integer dataStyle = ReportConstant.DataTypeEnum.LIST.getValue();
|
||||
if (Objects.nonNull(query.getDataType())) {
|
||||
dataStyle = query.getDataType();
|
||||
}
|
||||
query.setDataType(dataStyle);
|
||||
List<ForwardReportVO> rootList = null;
|
||||
if (dataStyle.compareTo(ReportConstant.DataTypeEnum.LIST.getValue()) == 0) {
|
||||
//列表
|
||||
rootList = listToList(bomList, parentRowId);
|
||||
} else if (dataStyle.compareTo(ReportConstant.DataTypeEnum.TREE.getValue()) == 0) {
|
||||
//转化为树结构
|
||||
rootList = listToTree(bomList, parentRowId);
|
||||
}
|
||||
|
||||
return rootList;
|
||||
}
|
||||
|
||||
|
||||
List<ForwardReportVO> listToTree(List<ForwardReportVO> bomList, Long parentRowId) {
|
||||
Map<Long, List<ForwardReportVO>> listMap = bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getParentRowId));
|
||||
bomList.forEach(item -> {
|
||||
item.setChildNodes(listMap.get(item.getBomRowId()));
|
||||
});
|
||||
List<ForwardReportVO> rootList = bomList.stream().filter(item -> Objects.equals(parentRowId, item.getParentRowId())).collect(Collectors.toList());
|
||||
return rootList;
|
||||
}
|
||||
|
||||
|
||||
protected List<ForwardReportVO> listToList(List<ForwardReportVO> bomList, Long parentRowId) {
|
||||
|
||||
Map<Long, List<ForwardReportVO>> listMap = bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getParentRowId));
|
||||
List<ForwardReportVO> parentChildList = bomList.stream().filter(item -> Objects.equals(parentRowId, item.getParentRowId())).collect(Collectors.toList());
|
||||
//无bom
|
||||
List<ForwardReportVO> rootList = parentChildList.stream().filter(item -> item.getBomRowId() == null || item.getBomRowId().longValue() == 0).collect(Collectors.toList());
|
||||
//有bom
|
||||
List<ForwardReportVO> moreBomList = parentChildList.stream().filter(item -> item.getBomRowId() != null || item.getBomRowId().longValue() > 0).collect(Collectors.toList());
|
||||
//采用前序遍历 前->左->右 输出
|
||||
Deque<ForwardReportVO> majorStack = new ArrayDeque();
|
||||
|
||||
|
||||
if (CollectionUtil.isNotEmpty(moreBomList)) {
|
||||
AtomicInteger noCode = new AtomicInteger();
|
||||
//noCode.set(1);
|
||||
for (ForwardReportVO item : moreBomList) {
|
||||
|
||||
majorStack.push(item);
|
||||
|
||||
while (!majorStack.isEmpty()) {
|
||||
|
||||
ForwardReportVO pop = majorStack.poll();
|
||||
if (pop != null) {
|
||||
pop.setOrderNumber(noCode.incrementAndGet() + "");
|
||||
rootList.add(pop);
|
||||
List<ForwardReportVO> childNode = listMap.get(pop.getBomRowId());
|
||||
if (CollectionUtil.isNotEmpty(childNode)) {
|
||||
for (int size = childNode.size() - 1, index = 0; size >= index; size--) {
|
||||
majorStack.push(childNode.get(size));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return rootList;
|
||||
|
||||
}
|
||||
|
||||
protected ReportBomVO buildReportBomVo(ForwardReportVO parent,List<ForwardReportVO> childNode,Integer dataType){
|
||||
ReportBomVO reportBomVO = new ReportBomVO();
|
||||
reportBomVO.setBomType(query.getBomType());
|
||||
reportBomVO.setQueryType(query.getQueryType());
|
||||
reportBomVO.setDataType(dataType);
|
||||
reportBomVO.setParent(parent);
|
||||
reportBomVO.setChildNodes(childNode);
|
||||
return reportBomVO;
|
||||
}
|
||||
|
||||
protected ReportBomVO buildReportBomVo(ForwardReportVO parent,List<ForwardReportVO> childNode){
|
||||
|
||||
return buildReportBomVo(parent,childNode,ReportConstant.DataTypeEnum.LIST.getValue());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -17,33 +17,30 @@ import com.nflg.product.bomnew.pojo.query.ReverseReportQuery;
|
|||
import com.nflg.product.bomnew.pojo.vo.*;
|
||||
import com.nflg.product.bomnew.service.BomNewEbomChildFormalService;
|
||||
import com.nflg.product.bomnew.service.BomNewEbomParentFormalService;
|
||||
import com.nflg.product.bomnew.service.domain.BaseForwardReport;
|
||||
import com.nflg.product.bomnew.util.ListCommonUtil;
|
||||
import com.nflg.product.bomnew.util.VersionUtil;
|
||||
import nflg.product.common.constant.STATE;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ForkJoinPool;
|
||||
import java.util.concurrent.ForkJoinTask;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* ebom报表统计
|
||||
*/
|
||||
public class EBomForwardReport {
|
||||
public class EBomForwardReport extends BaseForwardReport {
|
||||
|
||||
ReverseReportQuery query;
|
||||
|
||||
public EBomForwardReport(ReverseReportQuery query) {
|
||||
this.query = query;
|
||||
|
||||
super(query);
|
||||
}
|
||||
|
||||
public EBomForwardReport(){
|
||||
|
||||
}
|
||||
QueryWrapper<BomNewEbomParentFormalEntity> buildQuery() {
|
||||
QueryWrapper<BomNewEbomParentFormalEntity> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getMaterialNo, query.getMaterialNo());
|
||||
|
|
@ -51,9 +48,7 @@ public EBomForwardReport(){
|
|||
queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getDrawingNo, query.getDrawingNo());
|
||||
}
|
||||
if (query.getVersionStrategy().compareTo(ReportConstant.VersionStrategyEnum.NEW.getValue()) == 0) {
|
||||
|
||||
queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getCurrentVersion, getMaxVersion());
|
||||
|
||||
} else {
|
||||
queryWrapper.lambda().eq(BomNewEbomParentFormalEntity::getCurrentVersion, query.getBomVersion());
|
||||
}
|
||||
|
|
@ -79,6 +74,7 @@ public EBomForwardReport(){
|
|||
|
||||
/**
|
||||
* 最大的版本号
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getMaxVersion() {
|
||||
|
|
@ -105,34 +101,30 @@ public EBomForwardReport(){
|
|||
ReportBomVO singleReport() {
|
||||
|
||||
BomNewEbomParentFormalEntity parentFormal = getParent();
|
||||
ReportBomVO reportBomVO = new ReportBomVO();
|
||||
|
||||
ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal);
|
||||
forwardReportVO.setCreatedTime(parentFormal.getConvertToEbomTime());
|
||||
reportBomVO.setParent(forwardReportVO);
|
||||
|
||||
// QueryWrapper<BomNewEbomChildFormalEntity> queryWrapper = new QueryWrapper<>();
|
||||
// queryWrapper.lambda().eq(BomNewEbomChildFormalEntity::getParentRowId, parentFormal.getRowId());
|
||||
//
|
||||
// List<BomNewEbomChildFormalEntity> list = SpringUtil.getBean(BomNewEbomChildFormalService.class).list(queryWrapper);
|
||||
//
|
||||
List<BomNewEbomParentFormalVO> list = SpringUtil.getBean(BomNewEbomParentFormalService.class).getBaseMapper().getParentChild(parentFormal.getRowId());
|
||||
List<ForwardReportVO> nodeList=null;
|
||||
|
||||
if (CollectionUtil.isNotEmpty(list)) {
|
||||
|
||||
if (CollectionUtil.isEmpty(list)) {
|
||||
reportBomVO.setChildNodes(new ArrayList<>());
|
||||
} else {
|
||||
List<ForwardReportVO> nodeList = Convert.convert(new TypeReference<List<ForwardReportVO>>() {
|
||||
nodeList = Convert.convert(new TypeReference<List<ForwardReportVO>>() {
|
||||
}, list);
|
||||
for (ForwardReportVO vo :
|
||||
nodeList) {
|
||||
vo.setCreatedTime(reportBomVO.getParent().getCreatedTime());
|
||||
vo.setCreatedTime(forwardReportVO.getCreatedTime());
|
||||
// vo.setOrderNumber("");
|
||||
}
|
||||
reportBomVO.setChildNodes(nodeList);
|
||||
|
||||
}
|
||||
reportBomVO.setBomType(query.getBomType());
|
||||
reportBomVO.setQueryType(query.getQueryType());
|
||||
return reportBomVO;
|
||||
|
||||
return buildReportBomVo(forwardReportVO,nodeList);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -194,31 +186,26 @@ public EBomForwardReport(){
|
|||
*/
|
||||
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.setCreatedTime(parentFormal.getConvertToEbomTime());
|
||||
reportBomVO.setParent(forwardReportVO);
|
||||
|
||||
|
||||
List<BomNewEbomParentFormalVO> bomList = bomDetailList(parentFormal.getRowId());
|
||||
|
||||
List<ForwardReportVO> convertBomList = Convert.convert(new TypeReference<List<ForwardReportVO>>() {
|
||||
}, bomList);
|
||||
|
||||
|
||||
sumLevel(convertBomList);
|
||||
List<ForwardReportVO> rootList;
|
||||
//转化为树结构
|
||||
List<ForwardReportVO> rootList = listToTree(convertBomList, parentFormal.getRowId());
|
||||
rootList = showDataStyle(convertBomList, parentFormal.getRowId());
|
||||
|
||||
reportBomVO.setChildNodes(rootList);
|
||||
return reportBomVO;
|
||||
return buildReportBomVo(forwardReportVO,rootList,query.getDataType());
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 汇总
|
||||
* 1. 查询所有不含子级的物料信息,并对数据进行汇总。
|
||||
|
|
@ -228,13 +215,11 @@ public EBomForwardReport(){
|
|||
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);
|
||||
|
|
@ -242,63 +227,11 @@ public EBomForwardReport(){
|
|||
sumLevel(convertBomList);
|
||||
|
||||
//无子级的数据
|
||||
List<ForwardReportVO> leafList = convertBomList.stream().filter(item -> (item.getBomRowId() == null || item.getBomRowId().longValue() ==0)).collect(Collectors.toList());
|
||||
//相同物料合并统计
|
||||
Map<String, List<ForwardReportVO>> materialNoListMap = leafList.stream().collect(Collectors.groupingBy(ForwardReportVO::getMaterialNo));
|
||||
List<ForwardReportVO> 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);
|
||||
}
|
||||
});
|
||||
List<ForwardReportVO> sumList =leafMergeMaterialNo(convertBomList);
|
||||
|
||||
reportBomVO.setChildNodes(sumList);
|
||||
return reportBomVO;
|
||||
return buildReportBomVo(forwardReportVO,sumList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 各层汇总
|
||||
*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) {
|
||||
Map<Long, List<ForwardReportVO>> listMap = bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getParentRowId));
|
||||
bomList.forEach(item -> {
|
||||
item.setChildNodes(listMap.get(item.getBomRowId()));
|
||||
});
|
||||
List<ForwardReportVO> rootList = bomList.stream().filter(item -> Objects.equals(parentRowId, item.getParentRowId())).collect(Collectors.toList());
|
||||
return rootList;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ import com.nflg.product.bomnew.service.BomNewEbomChildFormalService;
|
|||
import com.nflg.product.bomnew.service.BomNewEbomParentFormalService;
|
||||
import com.nflg.product.bomnew.service.BomNewPbomChildFormalService;
|
||||
import com.nflg.product.bomnew.service.BomNewPbomParentFormalService;
|
||||
import com.nflg.product.bomnew.service.domain.BaseForwardReport;
|
||||
import com.nflg.product.bomnew.service.domain.EBom.EBomFormalTreeTask;
|
||||
import com.nflg.product.bomnew.util.VersionUtil;
|
||||
import nflg.product.common.constant.STATE;
|
||||
|
|
@ -33,12 +34,12 @@ import java.util.stream.Collectors;
|
|||
/**
|
||||
* pbom报表统计
|
||||
*/
|
||||
public class PBomForwardReport {
|
||||
public class PBomForwardReport extends BaseForwardReport {
|
||||
|
||||
|
||||
ReverseReportQuery query;
|
||||
|
||||
public PBomForwardReport(ReverseReportQuery query) {
|
||||
this.query = query;
|
||||
super(query);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -55,15 +56,11 @@ public class PBomForwardReport {
|
|||
}
|
||||
|
||||
if (query.getVersionStrategy().compareTo(ReportConstant.VersionStrategyEnum.NEW.getValue()) == 0) {
|
||||
|
||||
queryWrapper.lambda().eq(BomNewPbomParentFormalEntity::getCurrentVersion, getMaxVersion());
|
||||
|
||||
} else {
|
||||
queryWrapper.lambda().eq(BomNewPbomParentFormalEntity::getCurrentVersion, query.getBomVersion());
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (StrUtil.isNotBlank(query.getStartDate()) && StrUtil.isNotBlank(query.getEndDate())) {
|
||||
queryWrapper.lambda().between(BomNewPbomParentFormalEntity::getReleaseTime, query.getStartDate(), query.getEndDate());
|
||||
}
|
||||
|
|
@ -111,33 +108,31 @@ public class PBomForwardReport {
|
|||
ReportBomVO singleReport() {
|
||||
|
||||
BomNewPbomParentFormalEntity parentFormal = getParent();
|
||||
ReportBomVO reportBomVO = new ReportBomVO();
|
||||
|
||||
|
||||
ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal);
|
||||
forwardReportVO.setCreatedTime(parentFormal.getReleaseTime());
|
||||
reportBomVO.setParent(forwardReportVO);
|
||||
|
||||
|
||||
// QueryWrapper<BomNewPbomChildFormalEntity> queryWrapper = new QueryWrapper<>();
|
||||
// queryWrapper.lambda().eq(BomNewPbomChildFormalEntity::getParentRowId, parentFormal.getRowId());
|
||||
// List<BomNewPbomChildFormalEntity> list = SpringUtil.getBean(BomNewPbomChildFormalService.class).list(queryWrapper);
|
||||
|
||||
List<BomNewPbomParentFormalVO> list = SpringUtil.getBean(BomNewPbomParentFormalService.class).getBaseMapper().getParentChild(parentFormal.getRowId());
|
||||
List<ForwardReportVO> nodeList=null;
|
||||
if (CollectionUtil.isNotEmpty(list)) {
|
||||
|
||||
if (CollectionUtil.isEmpty(list)) {
|
||||
reportBomVO.setChildNodes(new ArrayList<>());
|
||||
} else {
|
||||
List<ForwardReportVO> nodeList = Convert.convert(new TypeReference<List<ForwardReportVO>>() {
|
||||
nodeList = Convert.convert(new TypeReference<List<ForwardReportVO>>() {
|
||||
}, list);
|
||||
for (ForwardReportVO vo :
|
||||
nodeList) {
|
||||
vo.setCreatedTime(reportBomVO.getParent().getCreatedTime());
|
||||
vo.setCreatedTime(forwardReportVO.getCreatedTime());
|
||||
|
||||
}
|
||||
reportBomVO.setChildNodes(nodeList);
|
||||
|
||||
}
|
||||
reportBomVO.setBomType(query.getBomType());
|
||||
reportBomVO.setQueryType(query.getQueryType());
|
||||
return reportBomVO;
|
||||
|
||||
return buildReportBomVo(forwardReportVO,nodeList);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -204,13 +199,11 @@ public class PBomForwardReport {
|
|||
*/
|
||||
ReportBomVO multiReport() {
|
||||
BomNewPbomParentFormalEntity parentFormal = getParent();
|
||||
ReportBomVO reportBomVO = new ReportBomVO();
|
||||
reportBomVO.setBomType(query.getBomType());
|
||||
reportBomVO.setQueryType(query.getQueryType());
|
||||
|
||||
|
||||
ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal);
|
||||
forwardReportVO.setCreatedTime(parentFormal.getReleaseTime());
|
||||
reportBomVO.setParent(forwardReportVO);
|
||||
|
||||
|
||||
|
||||
List<BomNewPbomParentFormalVO> bomList = bomDetailList(parentFormal.getRowId());
|
||||
|
|
@ -221,11 +214,8 @@ public class PBomForwardReport {
|
|||
|
||||
sumLevel(convertBomList);
|
||||
//转化为树结构
|
||||
List<ForwardReportVO> rootList = listToTree(convertBomList, parentFormal.getRowId());
|
||||
|
||||
reportBomVO.setChildNodes(rootList);
|
||||
return reportBomVO;
|
||||
|
||||
List<ForwardReportVO> rootList = showDataStyle(convertBomList, parentFormal.getRowId());
|
||||
return buildReportBomVo(forwardReportVO,rootList,query.getDataType());
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -236,80 +226,23 @@ public class PBomForwardReport {
|
|||
* @return
|
||||
*/
|
||||
ReportBomVO sumReport() {
|
||||
|
||||
BomNewPbomParentFormalEntity parentFormal = getParent();
|
||||
ReportBomVO reportBomVO = new ReportBomVO();
|
||||
reportBomVO.setBomType(query.getBomType());
|
||||
reportBomVO.setQueryType(query.getQueryType());
|
||||
|
||||
|
||||
ForwardReportVO forwardReportVO = Convert.convert(ForwardReportVO.class, parentFormal);
|
||||
forwardReportVO.setCreatedTime(parentFormal.getReleaseTime());
|
||||
reportBomVO.setParent(forwardReportVO);
|
||||
|
||||
List<BomNewPbomParentFormalVO> bomList = bomDetailList(parentFormal.getRowId());
|
||||
List<ForwardReportVO> convertBomList = Convert.convert(new TypeReference<List<ForwardReportVO>>() {
|
||||
}, bomList);
|
||||
|
||||
sumLevel(convertBomList);
|
||||
List<ForwardReportVO> sumList =leafMergeMaterialNo(convertBomList);
|
||||
|
||||
//无子级的数据
|
||||
List<ForwardReportVO> leafList = convertBomList.stream().filter(item -> (item.getBomRowId() == null || item.getBomRowId().longValue() ==0)).collect(Collectors.toList());
|
||||
//相同物料合并统计
|
||||
Map<String, List<ForwardReportVO>> materialNoListMap = leafList.stream().collect(Collectors.groupingBy(ForwardReportVO::getMaterialNo));
|
||||
List<ForwardReportVO> 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;
|
||||
return buildReportBomVo(forwardReportVO,sumList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 各层汇总
|
||||
*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) {
|
||||
Map<Long, List<ForwardReportVO>> listMap = bomList.stream().collect(Collectors.groupingBy(ForwardReportVO::getParentRowId));
|
||||
bomList.forEach(item -> {
|
||||
item.setChildNodes(listMap.get(item.getBomRowId()));
|
||||
});
|
||||
List<ForwardReportVO> rootList = bomList.stream().filter(item -> Objects.equals(parentRowId, item.getParentRowId())).collect(Collectors.toList());
|
||||
return rootList;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -326,9 +259,7 @@ public class PBomForwardReport {
|
|||
if (query.getQueryType().compareTo(ReportConstant.QueryTypeEnum.SUM.getValue()) == 0) {
|
||||
return sumReport();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue