Explorar el Código

优化bom结构树查询接口

wangqiong hace 2 años
padre
commit
e13e7c0bf7

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

8
 import com.zzsmart.qomo.kn.cost.manage.util.BomTreeBuilder;
8
 import com.zzsmart.qomo.kn.cost.manage.util.BomTreeBuilder;
9
 import com.zzsmart.qomo.kn.cost.manage.vo.BomTreeInfoVO;
9
 import com.zzsmart.qomo.kn.cost.manage.vo.BomTreeInfoVO;
10
 import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
10
 import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
11
+import org.springframework.beans.BeanUtils;
11
 import org.springframework.beans.factory.annotation.Autowired;
12
 import org.springframework.beans.factory.annotation.Autowired;
12
 import org.springframework.stereotype.Service;
13
 import org.springframework.stereotype.Service;
13
 
14
 
14
-import java.util.Arrays;
15
-import java.util.List;
15
+import java.util.*;
16
+import java.util.stream.Collectors;
16
 
17
 
17
 @Service
18
 @Service
18
 public class BomTreeServiceImpl implements BomTreeService {
19
 public class BomTreeServiceImpl implements BomTreeService {
38
             wrapper.like("c2.version_number", version_number);
39
             wrapper.like("c2.version_number", version_number);
39
         }
40
         }
40
         List<CostStandardDetailVO> costStandardDetailVOS = costStandardDetailMapper.queryListResult(wrapper);
41
         List<CostStandardDetailVO> costStandardDetailVOS = costStandardDetailMapper.queryListResult(wrapper);
41
-        List<BomTreeInfoVO> bomTreeInfoVOS = BomTreeBuilder.buildBomTree(costStandardDetailVOS);
42
+        //查询所有满足条件的父节点
43
+        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);
50
+            }
51
+            List<CostStandardDetail> costStandardDetails = costStandardDetailMapper.selectList(wrapper1);
52
+            costStandardDetailVOS=new ArrayList<>();
53
+            for (int i=0;i<costStandardDetails.size();i++){
54
+                CostStandardDetail costStandardDetail = costStandardDetails.get(i);
55
+                CostStandardDetailVO vo=new CostStandardDetailVO();
56
+                BeanUtils.copyProperties(costStandardDetail,vo);
57
+                costStandardDetailVOS.add(vo);
58
+            }
59
+        }
60
+        List<BomTreeInfoVO> bomTreeInfoVOS = BomTreeBuilder.buildBomTree(costStandardDetailVOS, parentDataMap);
42
         return bomTreeInfoVOS;
61
         return bomTreeInfoVOS;
43
     }
62
     }
44
 }
63
 }

+ 5
- 3
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/util/BomTreeBuilder.java Ver fichero

11
 import java.util.stream.Collectors;
11
 import java.util.stream.Collectors;
12
 
12
 
13
 public class BomTreeBuilder {
13
 public class BomTreeBuilder {
14
-    public static List<BomTreeInfoVO> buildBomTree(List<CostStandardDetailVO> sourceData) {
14
+    public static List<BomTreeInfoVO> buildBomTree(List<CostStandardDetailVO> sourceData, Map<String, CostStandardDetailVO> parentDataMap) {
15
         List<BomTreeInfoVO> result = new ArrayList<>();
15
         List<BomTreeInfoVO> result = new ArrayList<>();
16
-        if (sourceData == null || (sourceData != null && sourceData.size() < 1)) {
16
+        if ((sourceData == null || (sourceData != null && sourceData.size() < 1))&& (parentDataMap == null || (parentDataMap != null && parentDataMap.size() < 1))) {
17
             return result;
17
             return result;
18
         }
18
         }
19
         //1.把BOM信息分成按照物料号分组
19
         //1.把BOM信息分成按照物料号分组
20
         Map<String, CostStandardDetailVO> materialMap = sourceData.stream().filter(s -> s.getMaterialNumber() != null).collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
20
         Map<String, CostStandardDetailVO> materialMap = sourceData.stream().filter(s -> s.getMaterialNumber() != null).collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
21
         //查找最顶端的父类节点
21
         //查找最顶端的父类节点
22
-        Map<String, CostStandardDetailVO> parentDataMap = sourceData.stream().filter(s -> s.getParentMaterialNumber() == null).collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
22
+        if (parentDataMap == null || (parentDataMap != null && parentDataMap.size() < 1)) {
23
+            parentDataMap = sourceData.stream().filter(s -> s.getParentMaterialNumber() == null).collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
24
+        }
23
         //查找有父节点的子节点
25
         //查找有父节点的子节点
24
         Map<String, List<CostStandardDetailVO>> childDataMap = sourceData.stream().filter(s -> s.getParentMaterialNumber() != null).collect(Collectors.groupingBy(CostStandardDetailVO::getParentMaterialNumber));
26
         Map<String, List<CostStandardDetailVO>> childDataMap = sourceData.stream().filter(s -> s.getParentMaterialNumber() != null).collect(Collectors.groupingBy(CostStandardDetailVO::getParentMaterialNumber));
25
         //查找有父节点的子节点
27
         //查找有父节点的子节点