|
|
@@ -11,11 +11,16 @@ import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
|
|
11
|
11
|
import org.springframework.beans.BeanUtils;
|
|
12
|
12
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
13
|
13
|
import org.springframework.stereotype.Service;
|
|
|
14
|
+import org.springframework.transaction.annotation.Transactional;
|
|
14
|
15
|
|
|
15
|
|
-import java.util.*;
|
|
|
16
|
+import java.util.ArrayList;
|
|
|
17
|
+import java.util.List;
|
|
|
18
|
+import java.util.Map;
|
|
|
19
|
+import java.util.TreeMap;
|
|
16
|
20
|
import java.util.stream.Collectors;
|
|
17
|
21
|
|
|
18
|
22
|
@Service
|
|
|
23
|
+@Transactional
|
|
19
|
24
|
public class BomTreeServiceImpl implements BomTreeService {
|
|
20
|
25
|
@Autowired
|
|
21
|
26
|
CostStandardDetailMapper costStandardDetailMapper;
|
|
|
@@ -38,43 +43,60 @@ public class BomTreeServiceImpl implements BomTreeService {
|
|
38
|
43
|
// 版本号
|
|
39
|
44
|
wrapper.like("c2.version_number", version_number);
|
|
40
|
45
|
}
|
|
41
|
|
- List<CostStandardDetailVO> costStandardDetailVOS = costStandardDetailMapper.queryListResult(wrapper);
|
|
42
|
46
|
//查询所有满足条件的父节点
|
|
|
47
|
+ List<CostStandardDetailVO> parentNodeList = costStandardDetailMapper.queryListResult(wrapper);
|
|
|
48
|
+ //所有子类节点
|
|
|
49
|
+ List<CostStandardDetailVO> childrenNodeList = new ArrayList<>();
|
|
43
|
50
|
Map<String, CostStandardDetailVO> parentDataMap = new TreeMap<>();
|
|
44
|
|
- if ((StrUtil.isNotEmpty(materialNumber) || StrUtil.isNotEmpty(version_number)) && costStandardDetailVOS.size() > 0) {
|
|
45
|
|
- parentDataMap = costStandardDetailVOS.stream().collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
|
|
46
|
|
- //查询所有父节点下的子节点
|
|
47
|
|
- QueryWrapper<CostStandardDetail> wrapper1 = new QueryWrapper<>();
|
|
48
|
|
- for (String materialNumber1 : parentDataMap.keySet()) {
|
|
49
|
|
- wrapper1.like("parent_material_number", materialNumber1);
|
|
|
51
|
+ if (parentNodeList.size() > 0) {
|
|
|
52
|
+ //父类结果只有1个
|
|
|
53
|
+ if (parentNodeList.size() == 1) {
|
|
|
54
|
+ parentDataMap = parentNodeList.stream().collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
|
|
|
55
|
+ } else {
|
|
|
56
|
+ //父类结果有多个(找出最上级节点)
|
|
|
57
|
+ Map<Integer, List<CostStandardDetailVO>> levelGroupMap = parentNodeList.stream().collect(Collectors.groupingBy(CostStandardDetailVO::getLevel));
|
|
|
58
|
+ TreeMap<Integer, List<CostStandardDetailVO>> levelTreeMap = new TreeMap<>(levelGroupMap);
|
|
|
59
|
+ parentDataMap = levelTreeMap.firstEntry().getValue().stream().collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
|
|
|
60
|
+ }
|
|
|
61
|
+ //查询所有父节点下的子节点(即第二层叶子节点)
|
|
|
62
|
+ List<CostStandardDetail> costStandardDetails = new ArrayList<>();
|
|
|
63
|
+ if (parentDataMap.size() > 0) {
|
|
|
64
|
+ QueryWrapper<CostStandardDetail> wrapper1 = new QueryWrapper<>();
|
|
|
65
|
+ int num = 0;
|
|
|
66
|
+ for (String materialNumber1 : parentDataMap.keySet()) {
|
|
|
67
|
+ num = num + 1;
|
|
|
68
|
+ if (num > 1) {
|
|
|
69
|
+ wrapper1.or().eq("parent_material_number", materialNumber1);
|
|
|
70
|
+ } else {
|
|
|
71
|
+ wrapper1.eq("parent_material_number", materialNumber1);
|
|
|
72
|
+ }
|
|
|
73
|
+ }
|
|
|
74
|
+ costStandardDetails = costStandardDetailMapper.selectList(wrapper1);
|
|
50
|
75
|
}
|
|
51
|
|
- List<CostStandardDetail> costStandardDetails = costStandardDetailMapper.selectList(wrapper1);
|
|
52
|
76
|
//第三层叶子节点
|
|
53
|
|
- List<CostStandardDetail> threeNodes=new ArrayList<>();
|
|
54
|
|
- if(costStandardDetails!=null&&costStandardDetails.size()>0){
|
|
55
|
|
- List<String> materialNoList = costStandardDetails.stream().map(CostStandardDetail::getMaterialNumber).collect(Collectors.toList());
|
|
56
|
|
- QueryWrapper<CostStandardDetail> wrapper2 = new QueryWrapper<>();
|
|
57
|
|
- wrapper2.in("parent_material_number", materialNoList);
|
|
58
|
|
-
|
|
59
|
|
- threeNodes = costStandardDetailMapper.selectList(wrapper2);
|
|
60
|
|
- }
|
|
|
77
|
+ List<CostStandardDetail> threeNodes = new ArrayList<>();
|
|
|
78
|
+ if (costStandardDetails != null && costStandardDetails.size() > 0) {
|
|
|
79
|
+ List<String> materialNoList = costStandardDetails.stream().map(CostStandardDetail::getMaterialNumber).collect(Collectors.toList());
|
|
|
80
|
+ QueryWrapper<CostStandardDetail> wrapper2 = new QueryWrapper<>();
|
|
|
81
|
+ wrapper2.in("parent_material_number", materialNoList);
|
|
|
82
|
+ threeNodes = costStandardDetailMapper.selectList(wrapper2);
|
|
|
83
|
+ }
|
|
61
|
84
|
//把第二层叶子节点转化为bomtreeinfoVO对象集合
|
|
62
|
|
- costStandardDetailVOS=new ArrayList<>();
|
|
63
|
|
- for (int i=0;i<costStandardDetails.size();i++){
|
|
|
85
|
+ for (int i = 0; i < costStandardDetails.size(); i++) {
|
|
64
|
86
|
CostStandardDetail costStandardDetail = costStandardDetails.get(i);
|
|
65
|
|
- CostStandardDetailVO vo=new CostStandardDetailVO();
|
|
66
|
|
- BeanUtils.copyProperties(costStandardDetail,vo);
|
|
67
|
|
- costStandardDetailVOS.add(vo);
|
|
|
87
|
+ CostStandardDetailVO vo = new CostStandardDetailVO();
|
|
|
88
|
+ BeanUtils.copyProperties(costStandardDetail, vo);
|
|
|
89
|
+ childrenNodeList.add(vo);
|
|
68
|
90
|
}
|
|
69
|
91
|
//把第三层叶子节点转化为bomtreeinfoVO对象集合
|
|
70
|
|
- for (int i=0;i<threeNodes.size();i++){
|
|
|
92
|
+ for (int i = 0; i < threeNodes.size(); i++) {
|
|
71
|
93
|
CostStandardDetail costStandardDetail = threeNodes.get(i);
|
|
72
|
|
- CostStandardDetailVO vo=new CostStandardDetailVO();
|
|
73
|
|
- BeanUtils.copyProperties(costStandardDetail,vo);
|
|
74
|
|
- costStandardDetailVOS.add(vo);
|
|
|
94
|
+ CostStandardDetailVO vo = new CostStandardDetailVO();
|
|
|
95
|
+ BeanUtils.copyProperties(costStandardDetail, vo);
|
|
|
96
|
+ childrenNodeList.add(vo);
|
|
75
|
97
|
}
|
|
76
|
98
|
}
|
|
77
|
|
- List<BomTreeInfoVO> bomTreeInfoVOS = BomTreeBuilder.buildBomTree(costStandardDetailVOS, parentDataMap);
|
|
|
99
|
+ List<BomTreeInfoVO> bomTreeInfoVOS = BomTreeBuilder.buildBomTree(childrenNodeList, parentDataMap);
|
|
78
|
100
|
return bomTreeInfoVOS;
|
|
79
|
101
|
}
|
|
80
|
102
|
}
|