优化结构树查询接口
This commit is contained in:
+49
-27
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-3
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user