Explorar el Código

优化结构树查询接口

wangqiong hace 2 años
padre
commit
48fe97b97a

+ 49
- 27
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/BomTreeServiceImpl.java Ver fichero

@@ -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
 }

+ 1
- 3
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/CostStandardDetailSearch.java Ver fichero

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