优化结构树查询接口

This commit is contained in:
wangqiong
2024-06-25 11:17:19 +08:00
parent 62a8797e5f
commit 48fe97b97a
2 changed files with 50 additions and 30 deletions
@@ -11,11 +11,16 @@ import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*; import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
@Transactional
public class BomTreeServiceImpl implements BomTreeService { public class BomTreeServiceImpl implements BomTreeService {
@Autowired @Autowired
CostStandardDetailMapper costStandardDetailMapper; CostStandardDetailMapper costStandardDetailMapper;
@@ -38,43 +43,60 @@ public class BomTreeServiceImpl implements BomTreeService {
// 版本号 // 版本号
wrapper.like("c2.version_number", version_number); wrapper.like("c2.version_number", version_number);
} }
List<CostStandardDetailVO> costStandardDetailVOS = costStandardDetailMapper.queryListResult(wrapper);
//查询所有满足条件的父节点 //查询所有满足条件的父节点
List<CostStandardDetailVO> parentNodeList = costStandardDetailMapper.queryListResult(wrapper);
//所有子类节点
List<CostStandardDetailVO> childrenNodeList = new ArrayList<>();
Map<String, CostStandardDetailVO> parentDataMap = new TreeMap<>(); Map<String, CostStandardDetailVO> parentDataMap = new TreeMap<>();
if ((StrUtil.isNotEmpty(materialNumber) || StrUtil.isNotEmpty(version_number)) && costStandardDetailVOS.size() > 0) { if (parentNodeList.size() > 0) {
parentDataMap = costStandardDetailVOS.stream().collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo)); //父类结果只有1个
//查询所有父节点下的子节点 if (parentNodeList.size() == 1) {
QueryWrapper<CostStandardDetail> wrapper1 = new QueryWrapper<>(); parentDataMap = parentNodeList.stream().collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
for (String materialNumber1 : parentDataMap.keySet()) { } else {
wrapper1.like("parent_material_number", materialNumber1); //父类结果有多个(找出最上级节点)
Map<Integer, List<CostStandardDetailVO>> levelGroupMap = parentNodeList.stream().collect(Collectors.groupingBy(CostStandardDetailVO::getLevel));
TreeMap<Integer, List<CostStandardDetailVO>> levelTreeMap = new TreeMap<>(levelGroupMap);
parentDataMap = levelTreeMap.firstEntry().getValue().stream().collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
}
//查询所有父节点下的子节点(即第二层叶子节点)
List<CostStandardDetail> costStandardDetails = new ArrayList<>();
if (parentDataMap.size() > 0) {
QueryWrapper<CostStandardDetail> wrapper1 = new QueryWrapper<>();
int num = 0;
for (String materialNumber1 : parentDataMap.keySet()) {
num = num + 1;
if (num > 1) {
wrapper1.or().eq("parent_material_number", materialNumber1);
} else {
wrapper1.eq("parent_material_number", materialNumber1);
}
}
costStandardDetails = costStandardDetailMapper.selectList(wrapper1);
} }
List<CostStandardDetail> costStandardDetails = costStandardDetailMapper.selectList(wrapper1);
//第三层叶子节点 //第三层叶子节点
List<CostStandardDetail> threeNodes=new ArrayList<>(); List<CostStandardDetail> threeNodes = new ArrayList<>();
if(costStandardDetails!=null&&costStandardDetails.size()>0){ if (costStandardDetails != null && costStandardDetails.size() > 0) {
List<String> materialNoList = costStandardDetails.stream().map(CostStandardDetail::getMaterialNumber).collect(Collectors.toList()); List<String> materialNoList = costStandardDetails.stream().map(CostStandardDetail::getMaterialNumber).collect(Collectors.toList());
QueryWrapper<CostStandardDetail> wrapper2 = new QueryWrapper<>(); QueryWrapper<CostStandardDetail> wrapper2 = new QueryWrapper<>();
wrapper2.in("parent_material_number", materialNoList); wrapper2.in("parent_material_number", materialNoList);
threeNodes = costStandardDetailMapper.selectList(wrapper2);
threeNodes = costStandardDetailMapper.selectList(wrapper2); }
}
//把第二层叶子节点转化为bomtreeinfoVO对象集合 //把第二层叶子节点转化为bomtreeinfoVO对象集合
costStandardDetailVOS=new ArrayList<>(); for (int i = 0; i < costStandardDetails.size(); i++) {
for (int i=0;i<costStandardDetails.size();i++){
CostStandardDetail costStandardDetail = costStandardDetails.get(i); CostStandardDetail costStandardDetail = costStandardDetails.get(i);
CostStandardDetailVO vo=new CostStandardDetailVO(); CostStandardDetailVO vo = new CostStandardDetailVO();
BeanUtils.copyProperties(costStandardDetail,vo); BeanUtils.copyProperties(costStandardDetail, vo);
costStandardDetailVOS.add(vo); childrenNodeList.add(vo);
} }
//把第三层叶子节点转化为bomtreeinfoVO对象集合 //把第三层叶子节点转化为bomtreeinfoVO对象集合
for (int i=0;i<threeNodes.size();i++){ for (int i = 0; i < threeNodes.size(); i++) {
CostStandardDetail costStandardDetail = threeNodes.get(i); CostStandardDetail costStandardDetail = threeNodes.get(i);
CostStandardDetailVO vo=new CostStandardDetailVO(); CostStandardDetailVO vo = new CostStandardDetailVO();
BeanUtils.copyProperties(costStandardDetail,vo); BeanUtils.copyProperties(costStandardDetail, vo);
costStandardDetailVOS.add(vo); childrenNodeList.add(vo);
} }
} }
List<BomTreeInfoVO> bomTreeInfoVOS = BomTreeBuilder.buildBomTree(costStandardDetailVOS, parentDataMap); List<BomTreeInfoVO> bomTreeInfoVOS = BomTreeBuilder.buildBomTree(childrenNodeList, parentDataMap);
return bomTreeInfoVOS; return bomTreeInfoVOS;
} }
} }
@@ -2,17 +2,15 @@ package com.zzsmart.qomo.kn.cost.manage.vo;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.List; import java.util.List;
@Data @Data
@Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@ApiModel(value="bom结构树", description="bom结构树") @ApiModel(value = "bom结构树", description = "bom结构树")
public class CostStandardDetailSearch extends CostStandardDetailVO { public class CostStandardDetailSearch extends CostStandardDetailVO {
/** /**
* 选择行的id * 选择行的id