Bladeren bron

结构树查询接口

wangqiong 2 jaren geleden
bovenliggende
commit
da69b887b0

+ 31
- 0
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/controller/BomTreeController.java Bestand weergeven

@@ -0,0 +1,31 @@
1
+package com.zzsmart.qomo.kn.cost.manage.controller;
2
+
3
+import com.zzsmart.qomo.kn.cost.manage.service.BomTreeService;
4
+import com.zzsmart.qomo.kn.cost.manage.vo.BomTreeInfoVO;
5
+import io.swagger.annotations.Api;
6
+import io.swagger.annotations.ApiOperation;
7
+import lombok.extern.slf4j.Slf4j;
8
+import org.jeecg.common.api.vo.Result;
9
+import org.springframework.beans.factory.annotation.Autowired;
10
+import org.springframework.web.bind.annotation.GetMapping;
11
+import org.springframework.web.bind.annotation.RequestMapping;
12
+import org.springframework.web.bind.annotation.RequestParam;
13
+import org.springframework.web.bind.annotation.RestController;
14
+
15
+import java.util.List;
16
+
17
+@Api(tags = "结构树查询")
18
+@RestController
19
+@RequestMapping("//bomTree")
20
+@Slf4j
21
+public class BomTreeController {
22
+    @Autowired
23
+    BomTreeService bomTreeService;
24
+
25
+    @ApiOperation(value = "结构树查询", notes = "结构树查询")
26
+    @GetMapping(value = "/queryBomTree")
27
+    public Result queryBomTree(@RequestParam(name = "materialNumber", required = false) String materialNumber, @RequestParam(name = "versionNumber", required = false) String versionNumber) {
28
+        List<BomTreeInfoVO> bomTreeInfoVOS = bomTreeService.getBomTreeByMaterialNumber(materialNumber, versionNumber);
29
+        return Result.OK(bomTreeInfoVOS);
30
+    }
31
+}

+ 14
- 0
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/CostStandardDetailMapper.java Bestand weergeven

@@ -10,6 +10,8 @@ import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
10 10
 import org.apache.ibatis.annotations.Mapper;
11 11
 import org.apache.ibatis.annotations.Param;
12 12
 
13
+import java.util.List;
14
+
13 15
 /**
14 16
  * <p>
15 17
  * 标准成本明细表 Mapper 接口
@@ -20,6 +22,18 @@ import org.apache.ibatis.annotations.Param;
20 22
  */
21 23
 @Mapper
22 24
 public interface CostStandardDetailMapper extends BaseMapper<CostStandardDetail> {
25
+    /**
26
+     * 分页查询
27
+     * @param page
28
+     * @param wrapper
29
+     * @return
30
+     */
23 31
     IPage<CostStandardDetailVO> pageList(@Param("page") Page<CostStandardDetailVO> page , @Param(Constants.WRAPPER) Wrapper<CostStandardDetailVO> wrapper);
32
+    /**
33
+     * 查询列表
34
+     * @param wrapper
35
+     * @return
36
+     */
37
+    List<CostStandardDetailVO> queryListResult(@Param(Constants.WRAPPER) Wrapper<CostStandardDetailVO> wrapper);
24 38
 
25 39
 }

+ 9
- 0
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/xml/CostStandardDetailMapper.xml Bestand weergeven

@@ -46,5 +46,14 @@
46 46
         ORDER BY c1.create_time desc
47 47
 
48 48
     </select>
49
+    <select id="queryListResult" resultMap="CostStandardDetailVOResultMap">
50
+        select c1.*, c2.version_number, c2.version_status, c2.stage,c2.version_year
51
+        from
52
+            cost_standard_detail  c1
53
+                left join cost_standard_version  c2 on c1.version_number_id = c2.id
54
+            ${ew.customSqlSegment}
55
+        ORDER BY c1.create_time desc
56
+
57
+    </select>
49 58
 
50 59
 </mapper>

+ 14
- 0
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/BomTreeService.java Bestand weergeven

@@ -0,0 +1,14 @@
1
+package com.zzsmart.qomo.kn.cost.manage.service;
2
+
3
+import com.zzsmart.qomo.kn.cost.manage.vo.BomTreeInfoVO;
4
+
5
+import java.util.List;
6
+
7
+public interface BomTreeService {
8
+    /**
9
+     * 根据物料号查询物料树
10
+     * @param materialNumber
11
+     * @return
12
+     */
13
+    List<BomTreeInfoVO> getBomTreeByMaterialNumber(String materialNumber, String version_number);
14
+}

+ 44
- 0
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/BomTreeServiceImpl.java Bestand weergeven

@@ -0,0 +1,44 @@
1
+package com.zzsmart.qomo.kn.cost.manage.service.impl;
2
+
3
+import cn.hutool.core.util.StrUtil;
4
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5
+import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
6
+import com.zzsmart.qomo.kn.cost.manage.mapper.CostStandardDetailMapper;
7
+import com.zzsmart.qomo.kn.cost.manage.service.BomTreeService;
8
+import com.zzsmart.qomo.kn.cost.manage.util.BomTreeBuilder;
9
+import com.zzsmart.qomo.kn.cost.manage.vo.BomTreeInfoVO;
10
+import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
11
+import org.springframework.beans.factory.annotation.Autowired;
12
+import org.springframework.stereotype.Service;
13
+
14
+import java.util.Arrays;
15
+import java.util.List;
16
+
17
+@Service
18
+public class BomTreeServiceImpl implements BomTreeService {
19
+    @Autowired
20
+    CostStandardDetailMapper costStandardDetailMapper;
21
+
22
+    /**
23
+     * 根据物料号查询物料树
24
+     *
25
+     * @param materialNumber
26
+     * @return
27
+     */
28
+    @Override
29
+    public List<BomTreeInfoVO> getBomTreeByMaterialNumber(String materialNumber, String version_number) {
30
+        QueryWrapper<CostStandardDetailVO> wrapper = new QueryWrapper<>();
31
+        //设置条件
32
+        if (StrUtil.isNotEmpty(materialNumber)) {
33
+            // 物料号
34
+            wrapper.like("c1.material_number", materialNumber);
35
+        }
36
+        if (StrUtil.isNotEmpty(version_number)) {
37
+            // 版本号
38
+            wrapper.like("c2.version_number", version_number);
39
+        }
40
+        List<CostStandardDetailVO> costStandardDetailVOS = costStandardDetailMapper.queryListResult(wrapper);
41
+        List<BomTreeInfoVO> bomTreeInfoVOS = BomTreeBuilder.buildBomTree(costStandardDetailVOS);
42
+        return bomTreeInfoVOS;
43
+    }
44
+}

+ 80
- 0
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/util/BomTreeBuilder.java Bestand weergeven

@@ -0,0 +1,80 @@
1
+package com.zzsmart.qomo.kn.cost.manage.util;
2
+
3
+import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
4
+import com.zzsmart.qomo.kn.cost.manage.vo.BomTreeInfoVO;
5
+import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
6
+
7
+import java.util.ArrayList;
8
+import java.util.Comparator;
9
+import java.util.List;
10
+import java.util.Map;
11
+import java.util.stream.Collectors;
12
+
13
+public class BomTreeBuilder {
14
+    public static List<BomTreeInfoVO> buildBomTree(List<CostStandardDetailVO> sourceData) {
15
+        List<BomTreeInfoVO> result = new ArrayList<>();
16
+        if (sourceData == null || (sourceData != null && sourceData.size() < 1)) {
17
+            return result;
18
+        }
19
+        //1.把BOM信息分成按照物料号分组
20
+        Map<String, CostStandardDetailVO> materialMap = sourceData.stream().filter(s -> s.getMaterialNumber() != null).collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
21
+        //查找最顶端的父类节点
22
+        Map<String, CostStandardDetailVO> parentDataMap = sourceData.stream().filter(s -> s.getParentMaterialNumber() == null).collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
23
+        //查找有父节点的子节点
24
+        Map<String, List<CostStandardDetailVO>> childDataMap = sourceData.stream().filter(s -> s.getParentMaterialNumber() != null).collect(Collectors.groupingBy(CostStandardDetailVO::getParentMaterialNumber));
25
+        //查找有父节点的子节点
26
+//        //1.把BOM信息分成按照层级分组
27
+//        Map<Integer, List<CostStandardDetailVO>> levelMap = sourceData.stream().filter(s -> s.getLevel() != null).collect(Collectors.groupingBy(CostStandardDetail::getLevel));
28
+//        //2.对每层进行排序
29
+//        for (Integer level : levelMap.keySet()) {
30
+//            List<CostStandardDetailVO> levelList = levelMap.get(level);
31
+//            List<CostStandardDetailVO> sortedCostDetails = levelList.stream().sorted(Comparator.comparing(CostStandardDetailVO::getSort)).collect(Collectors.toList());
32
+//            levelMap.put(level, sortedCostDetails);
33
+//        }
34
+//        TreeMap<Integer, List<CostStandardDetailVO>> levelTreeMap = new TreeMap<>(levelMap);
35
+        //3.构建BOM树
36
+        if (parentDataMap.size() > 0) {
37
+            for (CostStandardDetailVO parent : parentDataMap.values()) {
38
+                BomTreeInfoVO parentBomTreeInfoVO = costStandardDetailChangeToBomTreeInfoVO(parent);
39
+                parentBomTreeInfoVO = loopFindChildrenBuild(parentBomTreeInfoVO, materialMap, childDataMap, result);
40
+                if (parentBomTreeInfoVO != null) {
41
+                    result.add(parentBomTreeInfoVO);
42
+                }
43
+            }
44
+        }
45
+        materialMap = null;
46
+        parentDataMap = null;
47
+        childDataMap = null;
48
+        return result;
49
+    }
50
+
51
+    private static BomTreeInfoVO loopFindChildrenBuild(BomTreeInfoVO parentBomTreeInfoVO, Map<String, CostStandardDetailVO> materialMap, Map<String, List<CostStandardDetailVO>> childDataMap, List<BomTreeInfoVO> result) {
52
+        if (parentBomTreeInfoVO != null) {
53
+            //4.根据物料号查找子节点
54
+            List<CostStandardDetailVO> childs = childDataMap.get(parentBomTreeInfoVO.getMaterialNumber());
55
+            //构造父节点下的bomtree结构数据
56
+            List<BomTreeInfoVO> children = new ArrayList<>();
57
+            for (int j = 0; childs != null && childs.size() > 0 && j < childs.size(); j++) {
58
+                CostStandardDetailVO child = childs.get(j);
59
+                BomTreeInfoVO childBomTreeInfoVO = costStandardDetailChangeToBomTreeInfoVO(child);
60
+                childBomTreeInfoVO = loopFindChildrenBuild(childBomTreeInfoVO, materialMap, childDataMap, result);
61
+                children.add(childBomTreeInfoVO);
62
+            }
63
+            //对象的子节点进行排序(升序)
64
+            children = children.stream().sorted(Comparator.comparing(BomTreeInfoVO::getSort, Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
65
+            parentBomTreeInfoVO.setChildren(children);
66
+        }
67
+        return parentBomTreeInfoVO;
68
+    }
69
+
70
+    /**
71
+     * 把单行查询的数据转换为BomTreeInfoVO
72
+     *
73
+     * @param parent
74
+     * @return
75
+     */
76
+    static BomTreeInfoVO costStandardDetailChangeToBomTreeInfoVO(CostStandardDetail parent) {
77
+        BomTreeInfoVO bomTreeInfoVO = BomTreeInfoVO.builder().materialNumber(parent.getMaterialNumber()).materialName(parent.getMaterialName()).level(parent.getLevel()).parentMaterialNumber(parent.getParentMaterialNumber()).quantity(parent.getDosage()).unit(parent.getUnit()).auxiliaryCost(parent.getAuxiliaryCost()).equipCost(parent.getEquipConsumeCost()).otherCost(parent.getOtherCost()).laborCost(parent.getLaborCost()).accumulatedEquipCost(parent.getTotalEquipConsumeCost()).accumulatedOtherCost(parent.getTotalOtherCost()).accumulatedLaborCost(parent.getTotalLaborCost()).accumulatedMaterialCost(parent.getAuxiliaryCost()).accumulatedFuelCost(parent.getTotalEuipDepreciationCost()).sort(parent.getSort()).build();
78
+        return bomTreeInfoVO;
79
+    }
80
+}

+ 105
- 0
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/BomTreeInfoVO.java Bestand weergeven

@@ -0,0 +1,105 @@
1
+package com.zzsmart.qomo.kn.cost.manage.vo;
2
+
3
+import lombok.Builder;
4
+import lombok.Data;
5
+
6
+import java.math.BigDecimal;
7
+import java.util.List;
8
+
9
+@Data
10
+@Builder
11
+public class BomTreeInfoVO {
12
+    /**
13
+     * 物料号
14
+     */
15
+    private String materialNumber;
16
+    /**
17
+     * 父类物料号
18
+     */
19
+    private String parentMaterialNumber;
20
+    /**
21
+     * 物料名称
22
+     */
23
+    private String materialName;
24
+    /**
25
+     * 数量
26
+     */
27
+    private double quantity;
28
+    /**
29
+     * 单位
30
+     */
31
+    private String unit;
32
+    /**
33
+     * 层级
34
+     */
35
+    private Integer level;
36
+    /**
37
+     * 序号
38
+     */
39
+    private Integer sort;
40
+    /**
41
+     * 本阶标准成本
42
+     */
43
+    private BigDecimal standardCost;
44
+    /**
45
+     * 本阶物料成本
46
+     */
47
+    private BigDecimal materialCost;
48
+    /**
49
+     * 本阶人工成本
50
+     */
51
+    private BigDecimal laborCost;
52
+    /**
53
+     * 本阶设备成本
54
+     */
55
+    private BigDecimal equipCost;
56
+    /**
57
+     * 本阶燃动成本
58
+     */
59
+    private BigDecimal fuelCost;
60
+    /**
61
+     * 本阶辅料成本
62
+     */
63
+    private  BigDecimal auxiliaryCost;
64
+    /**
65
+     * 本阶其他成本
66
+     */
67
+    private BigDecimal otherCost;
68
+    /**
69
+     * 累计标准成本
70
+     */
71
+    private BigDecimal accumulatedStandardCost;
72
+    /**
73
+     * 累计物料成本
74
+     */
75
+    private BigDecimal accumulatedMaterialCost;
76
+    /**
77
+     * 累计人工成本
78
+     */
79
+    private BigDecimal accumulatedLaborCost;
80
+    /**
81
+     * 累计设备成本
82
+     */
83
+    private BigDecimal accumulatedEquipCost;
84
+    /**
85
+     * 累计燃动成本
86
+     */
87
+    private BigDecimal accumulatedFuelCost;
88
+
89
+    /**
90
+     * 累计辅料成本
91
+     */
92
+    private BigDecimal accumulatedAuxiliaryCost;
93
+    /**
94
+     * 累计其他成本
95
+     */
96
+    private BigDecimal accumulatedOtherCost;
97
+    /**
98
+     * 节点父类所有的物料编码
99
+     */
100
+    private List<String> parentMaterialNumbers;
101
+    /**
102
+     * 子节点
103
+     */
104
+    private List<BomTreeInfoVO> children;
105
+}