Pārlūkot izejas kodu

优化结构树查询接口

wangqiong 2 gadus atpakaļ
vecāks
revīzija
48fe97b97a

+ 49
- 27
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/BomTreeServiceImpl.java Parādīt failu

11
 import org.springframework.beans.BeanUtils;
11
 import org.springframework.beans.BeanUtils;
12
 import org.springframework.beans.factory.annotation.Autowired;
12
 import org.springframework.beans.factory.annotation.Autowired;
13
 import org.springframework.stereotype.Service;
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
 import java.util.stream.Collectors;
20
 import java.util.stream.Collectors;
17
 
21
 
18
 @Service
22
 @Service
23
+@Transactional
19
 public class BomTreeServiceImpl implements BomTreeService {
24
 public class BomTreeServiceImpl implements BomTreeService {
20
     @Autowired
25
     @Autowired
21
     CostStandardDetailMapper costStandardDetailMapper;
26
     CostStandardDetailMapper costStandardDetailMapper;
38
             // 版本号
43
             // 版本号
39
             wrapper.like("c2.version_number", version_number);
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
         Map<String, CostStandardDetailVO> parentDataMap = new TreeMap<>();
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
             //把第二层叶子节点转化为bomtreeinfoVO对象集合
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
                 CostStandardDetail costStandardDetail = costStandardDetails.get(i);
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
             //把第三层叶子节点转化为bomtreeinfoVO对象集合
91
             //把第三层叶子节点转化为bomtreeinfoVO对象集合
70
-            for (int i=0;i<threeNodes.size();i++){
92
+            for (int i = 0; i < threeNodes.size(); i++) {
71
                 CostStandardDetail costStandardDetail = threeNodes.get(i);
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
         return bomTreeInfoVOS;
100
         return bomTreeInfoVOS;
79
     }
101
     }
80
 }
102
 }

+ 1
- 3
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/CostStandardDetailSearch.java Parādīt failu

2
 
2
 
3
 import io.swagger.annotations.ApiModel;
3
 import io.swagger.annotations.ApiModel;
4
 import lombok.AllArgsConstructor;
4
 import lombok.AllArgsConstructor;
5
-import lombok.Builder;
6
 import lombok.Data;
5
 import lombok.Data;
7
 import lombok.NoArgsConstructor;
6
 import lombok.NoArgsConstructor;
8
 
7
 
9
 import java.util.List;
8
 import java.util.List;
10
 
9
 
11
 @Data
10
 @Data
12
-@Builder
13
 @NoArgsConstructor
11
 @NoArgsConstructor
14
 @AllArgsConstructor
12
 @AllArgsConstructor
15
-@ApiModel(value="bom结构树", description="bom结构树")
13
+@ApiModel(value = "bom结构树", description = "bom结构树")
16
 public class CostStandardDetailSearch extends CostStandardDetailVO {
14
 public class CostStandardDetailSearch extends CostStandardDetailVO {
17
     /**
15
     /**
18
      * 选择行的id
16
      * 选择行的id