Sfoglia il codice sorgente

优化标准成本计算功能

wangqiong 1 anno fa
parent
commit
339cf044a8

+ 0
- 37
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/CostStandardDetailMapper.java Vedi File

@@ -1,37 +0,0 @@
1
-package com.zzsmart.qomo.kn.cost.manage.mapper;
2
-
3
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
4
-import com.baomidou.mybatisplus.core.metadata.IPage;
5
-import com.baomidou.mybatisplus.core.toolkit.Constants;
6
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
7
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
8
-import org.apache.ibatis.annotations.Mapper;
9
-import org.apache.ibatis.annotations.Param;
10
-
11
-import java.util.List;
12
-
13
-/**
14
- * <p>
15
- * 标准成本明细表 Mapper 接口
16
- * </p>
17
- *
18
- * @author  
19
- * @since 2024-06-20
20
- */
21
-@Mapper
22
-public interface CostStandardDetailMapper extends BaseMapper<CostStandardDetail> {
23
-    /**
24
-     * 分页查询
25
-     * @param page
26
-     * @param wrapper
27
-     * @return
28
-     */
29
-    IPage<CostStandardDetailVO> pageList(@Param("page") Page<CostStandardDetailVO> page , @Param(Constants.WRAPPER) Wrapper<CostStandardDetailVO> wrapper);
30
-    /**
31
-     * 查询列表
32
-     * @param wrapper
33
-     * @return
34
-     */
35
-    List<CostStandardDetailVO> queryListResult(@Param(Constants.WRAPPER) Wrapper<CostStandardDetailVO> wrapper);
36
-
37
-}

+ 0
- 59
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/xml/CostStandardDetailMapper.xml Vedi File

@@ -1,59 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3
-<mapper namespace="com.zzsmart.qomo.kn.cost.manage.mapper.CostStandardDetailMapper">
4
-
5
-    <!-- 通用查询映射结果 -->
6
-    <resultMap id="CostStandardDetailVOResultMap" type="com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO">
7
-        <id column="id" property="id" />
8
-        <result column="material_number" property="materialNumber" />
9
-        <result column="material_name" property="materialName" />
10
-        <result column="parent_material_number" property="parentMaterialNumber" />
11
-        <result column="version_number_id" property="versionNumberId" />
12
-        <result column="version_number" property="versionNumber" />
13
-        <result column="level" property="level" />
14
-        <result column="figure_number" property="figureNumber" />
15
-        <result column="dosage" property="dosage" />
16
-        <result column="unit" property="unit" />
17
-        <result column="specification" property="specification" />
18
-        <result column="bom_cost" property="bomCost" />
19
-        <result column="packing_cost" property="packingCost" />
20
-        <result column="auxiliary_cost" property="auxiliaryCost" />
21
-        <result column="labor_cost" property="laborCost" />
22
-        <result column="euip_depreciation_cost" property="euipDepreciationCost" />
23
-        <result column="equip_consume_cost" property="equipConsumeCost" />
24
-        <result column="hydroelectricity_cost" property="hydroelectricityCost" />
25
-        <result column="other_cost" property="otherCost" />
26
-        <result column="trail_cost" property="trailCost" />
27
-        <result column="manufacture_cost" property="manufactureCost" />
28
-        <result column="total_labor_cost" property="totalLaborCost" />
29
-        <result column="total_equip_consume_cost" property="totalEquipConsumeCost" />
30
-        <result column="total_euip_depreciation_cost" property="totalEuipDepreciationCost" />
31
-        <result column="total_hydroelectricity_cost" property="totalHydroelectricityCost" />
32
-        <result column="total_other_cost" property="totalOtherCost" />
33
-        <result column="create_by" property="createBy" />
34
-        <result column="create_time" property="createTime" />
35
-        <result column="update_by" property="updateBy" />
36
-        <result column="update_time" property="updateTime" />
37
-        <result column="remark" property="remark" />
38
-        <result column="sort" property="sort" />
39
-    </resultMap>
40
-    <select id="pageList" resultMap="CostStandardDetailVOResultMap">
41
-        select c1.*, c2.version_number, c2.version_status, c2.stage,c2.version_year
42
-        from
43
-            app_scene_cost_standard_detail  c1
44
-                left join app_scene_cost_standard_version  c2 on c1.version_number_id = c2.id
45
-            ${ew.customSqlSegment}
46
-        ORDER BY c1.create_time desc
47
-
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
-            app_scene_cost_standard_detail  c1
53
-                left join app_scene_cost_standard_version  c2 on c1.version_number_id = c2.id
54
-            ${ew.customSqlSegment}
55
-        ORDER BY c1.create_time desc
56
-
57
-    </select>
58
-
59
-</mapper>

+ 9
- 14
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/plugin/StandardCostService.java Vedi File

@@ -490,7 +490,7 @@ public class StandardCostService {
490 490
             List<AppSceneCostResultValue> appSceneCostResultValues = materialNoMap.get(key);
491 491
             //按照费用类别进行分组
492 492
             Map<String, List<AppSceneCostResultValue>> costTypeMap = appSceneCostResultValues.stream().filter(s -> s.getCostType() != null).collect(Collectors.groupingBy(AppSceneCostResultValue::getCostType));
493
-            //本阶标准成本
493
+            //本阶标准成本
494 494
             BigDecimal currentCost = new BigDecimal("0.0");
495 495
             //1.本阶物料成本
496 496
             BigDecimal materialCost = new BigDecimal("0.0");
@@ -606,7 +606,7 @@ public class StandardCostService {
606 606
         }
607 607
         //3.计算出所有的单个物料的累计标准成本
608 608
         List<AppSceneCostResultValue> standardCostList = standardCostService.iAppSceneCostResultValueService.getResultValueByTopMaterialNo(topMaterialCode, taskType, flowInstanceId);
609
-        //TODO 优化累计成本的计算
609
+        //【累计成本】的计算
610 610
         totalCountCost(standardCostList, topMaterialCode, taskType, taskCode, flowInstanceId);
611 611
     }
612 612
 
@@ -631,6 +631,7 @@ public class StandardCostService {
631 631
             //循环计算出当前节点的累计成本
632 632
             String costDetail = oldAppSceneCostResultValue.getCostDetail();
633 633
             //查询当前节点各个类型的成本
634
+            BigDecimal totalMaterialCost = new BigDecimal(0);
634 635
             BigDecimal totalLabourCost = new BigDecimal(0);
635 636
             BigDecimal totalEquipmentCost = new BigDecimal(0);
636 637
             BigDecimal totalSupplyMaterialCost = new BigDecimal(0);
@@ -638,15 +639,8 @@ public class StandardCostService {
638 639
             BigDecimal totalLogisticsCost = new BigDecimal(0);
639 640
             BigDecimal totalOtherCost = new BigDecimal(0);
640 641
             JSONObject costDetailJson = JSON.parseObject(costDetail);
641
-            if (costDetailJson != null) {
642
-                totalLabourCost = costDetailJson.getBigDecimal(FeeTypeEnum.LaborCost.getCode());
643
-                totalEquipmentCost = costDetailJson.getBigDecimal(FeeTypeEnum.EquipmentFee.getCode());
644
-                totalSupplyMaterialCost = costDetailJson.getBigDecimal(FeeTypeEnum.SupplyMaterialFee.getCode());
645
-                totalDriveCost = costDetailJson.getBigDecimal(FeeTypeEnum.DriverFee.getCode());
646
-                totalLogisticsCost = costDetailJson.getBigDecimal(FeeTypeEnum.LogisticsFee.getCode());
647
-                totalOtherCost = costDetailJson.getBigDecimal(FeeTypeEnum.OtherFee.getCode());
648
-            }
649
-            TotalResultValue hourOrRateResultValue = loopCount(oldAppSceneCostResultValue, parentMaterialNoMap, totalLabourCost, totalEquipmentCost, totalSupplyMaterialCost, totalDriveCost, totalLogisticsCost, totalOtherCost, totalCost);
642
+            TotalResultValue hourOrRateResultValue = loopCount(oldAppSceneCostResultValue, parentMaterialNoMap, totalMaterialCost, totalLabourCost, totalEquipmentCost, totalSupplyMaterialCost, totalDriveCost, totalLogisticsCost, totalOtherCost, totalCost);
643
+            costDetailJson.put(TotalCostEnum.TotalMaterialCost.getCode(), hourOrRateResultValue.getTotalMaterialCost());
650 644
             costDetailJson.put(TotalCostEnum.TotalLaborCost.getCode(), hourOrRateResultValue.getTotalLabourCost());
651 645
             costDetailJson.put(TotalCostEnum.TotalEquipmentFee.getCode(), hourOrRateResultValue.getTotalEquipmentCost());
652 646
             costDetailJson.put(TotalCostEnum.TotalSupplyMaterialFee.getCode(), hourOrRateResultValue.getTotalSupplyMaterialCost());
@@ -677,7 +671,7 @@ public class StandardCostService {
677 671
      * @param appSceneCostResultValue
678 672
      * @param parentMaterialNoMap
679 673
      */
680
-    private static TotalResultValue loopCount(AppSceneCostResultValue appSceneCostResultValue, Map<String, List<AppSceneCostResultValue>> parentMaterialNoMap, BigDecimal totalLabourCost, BigDecimal totalEquipmentCost, BigDecimal totalSupplyMaterialCost, BigDecimal totalDriveCost, BigDecimal totalLogisticsCost, BigDecimal totalOtherCost, BigDecimal totalCost) {
674
+    private static TotalResultValue loopCount(AppSceneCostResultValue appSceneCostResultValue, Map<String, List<AppSceneCostResultValue>> parentMaterialNoMap, BigDecimal totalMaterialCost, BigDecimal totalLabourCost, BigDecimal totalEquipmentCost, BigDecimal totalSupplyMaterialCost, BigDecimal totalDriveCost, BigDecimal totalLogisticsCost, BigDecimal totalOtherCost, BigDecimal totalCost) {
681 675
         String marterialNo = appSceneCostResultValue.getMarterialNo();
682 676
         if (parentMaterialNoMap.containsKey(marterialNo)) {
683 677
             //获取当前节点的子节点并遍历
@@ -693,6 +687,7 @@ public class StandardCostService {
693 687
                 if (appSceneCostResultValue1.getCostDetail() != null) {
694 688
                     JSONObject costDetailJson = JSON.parseObject(appSceneCostResultValue1.getCostDetail());
695 689
                     if (costDetailJson != null) {
690
+                        totalMaterialCost = totalMaterialCost.add(costDetailJson.getBigDecimal(FeeTypeEnum.MaterialCost.getCode()));
696 691
                         totalLabourCost = totalLabourCost.add(costDetailJson.getBigDecimal(FeeTypeEnum.LaborCost.getCode()));
697 692
                         totalEquipmentCost = totalEquipmentCost.add(costDetailJson.getBigDecimal(FeeTypeEnum.EquipmentFee.getCode()));
698 693
                         totalSupplyMaterialCost = totalSupplyMaterialCost.add(costDetailJson.getBigDecimal(FeeTypeEnum.SupplyMaterialFee.getCode()));
@@ -704,11 +699,11 @@ public class StandardCostService {
704 699
                 //判断当前子节点是否还有子节点
705 700
                 if (parentMaterialNoMap.containsKey(appSceneCostResultValue1.getMarterialNo())) {
706 701
                     //如果还有子节点则继续递归
707
-                    loopCount(appSceneCostResultValue1, parentMaterialNoMap, totalLabourCost, totalEquipmentCost, totalSupplyMaterialCost, totalDriveCost, totalLogisticsCost, totalOtherCost, totalCost);
702
+                    loopCount(appSceneCostResultValue1, parentMaterialNoMap, totalMaterialCost, totalLabourCost, totalEquipmentCost, totalSupplyMaterialCost, totalDriveCost, totalLogisticsCost, totalOtherCost, totalCost);
708 703
                 }
709 704
             }
710 705
         }
711
-        TotalResultValue hourOrRateResultValue = TotalResultValue.builder().totalLabourCost(totalLabourCost).totalEquipmentCost(totalEquipmentCost).totalSupplyMaterialCost(totalSupplyMaterialCost).totalDriveCost(totalDriveCost).totalLogisticsCost(totalLogisticsCost).totalOtherCost(totalOtherCost).totalCost(totalCost).build();
706
+        TotalResultValue hourOrRateResultValue = TotalResultValue.builder().totalMaterialCost(totalMaterialCost).totalLabourCost(totalLabourCost).totalEquipmentCost(totalEquipmentCost).totalSupplyMaterialCost(totalSupplyMaterialCost).totalDriveCost(totalDriveCost).totalLogisticsCost(totalLogisticsCost).totalOtherCost(totalOtherCost).totalCost(totalCost).build();
712 707
         appSceneCostResultValue.setTotalValue(totalCost.toString());
713 708
         return hourOrRateResultValue;
714 709
     }

+ 28
- 25
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/BomTreeServiceImpl.java Vedi File

@@ -2,7 +2,8 @@ package com.zzsmart.qomo.kn.cost.manage.service.impl;
2 2
 
3 3
 import cn.hutool.core.util.StrUtil;
4 4
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5
-import com.zzsmart.qomo.kn.cost.manage.mapper.CostStandardDetailMapper;
5
+import com.zzsmart.qomo.kn.cost.manage.entity.AppSceneCostStandardDetail;
6
+import com.zzsmart.qomo.kn.cost.manage.mapper.AppSceneCostStandardDetailMapper;
6 7
 import com.zzsmart.qomo.kn.cost.manage.service.BomTreeService;
7 8
 import com.zzsmart.qomo.kn.cost.manage.util.BomTreeBuilder;
8 9
 import com.zzsmart.qomo.kn.cost.manage.vo.BomTreeInfoVO;
@@ -21,7 +22,7 @@ import java.util.stream.Collectors;
21 22
 @Transactional
22 23
 public class BomTreeServiceImpl implements BomTreeService {
23 24
     @Autowired
24
-    CostStandardDetailMapper costStandardDetailMapper;
25
+    AppSceneCostStandardDetailMapper costStandardDetailMapper;
25 26
 
26 27
     /**
27 28
      * 根据物料号查询物料树
@@ -31,35 +32,35 @@ public class BomTreeServiceImpl implements BomTreeService {
31 32
      */
32 33
     @Override
33 34
     public List<BomTreeInfoVO> getBomTreeByMaterialNumber(String materialNumber, String version_number) {
34
-        QueryWrapper<CostStandardDetailVO> wrapper = new QueryWrapper<>();
35
+        QueryWrapper<AppSceneCostStandardDetail> wrapper = new QueryWrapper<>();
35 36
         //设置条件
36 37
         if (StrUtil.isNotEmpty(materialNumber)) {
37 38
             // 物料号
38
-            wrapper.like("c1.material_number", materialNumber);
39
+            wrapper.like("material_number", materialNumber);
39 40
         }
40 41
         if (StrUtil.isNotEmpty(version_number)) {
41 42
             // 版本号
42
-            wrapper.like("c2.version_number", version_number);
43
+            wrapper.like("version_number", version_number);
43 44
         }
44 45
         //查询所有满足条件的父节点
45
-        List<CostStandardDetailVO> parentNodeList = costStandardDetailMapper.queryListResult(wrapper);
46
+        List<AppSceneCostStandardDetail> parentNodeList = costStandardDetailMapper.selectList(wrapper);
46 47
         //所有子类节点
47
-        List<CostStandardDetailVO> childrenNodeList = new ArrayList<>();
48
-        Map<String, CostStandardDetailVO> parentDataMap = new TreeMap<>();
48
+        List<AppSceneCostStandardDetail> childrenNodeList = new ArrayList<>();
49
+        Map<String, AppSceneCostStandardDetail> parentDataMap = new TreeMap<>();
49 50
         if (parentNodeList.size() > 0) {
50 51
             //父类结果只有1个
51 52
             if (parentNodeList.size() == 1) {
52
-                parentDataMap = parentNodeList.stream().collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
53
+                parentDataMap = parentNodeList.stream().collect(Collectors.toMap(AppSceneCostStandardDetail::getMaterialNumber, vo -> vo));
53 54
             } else {
54 55
                 //父类结果有多个(找出最上级节点)
55
-                Map<Integer, List<CostStandardDetailVO>> levelGroupMap = parentNodeList.stream().collect(Collectors.groupingBy(CostStandardDetailVO::getLevel));
56
-                TreeMap<Integer, List<CostStandardDetailVO>> levelTreeMap = new TreeMap<>(levelGroupMap);
57
-                parentDataMap = levelTreeMap.firstEntry().getValue().stream().collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
56
+                Map<Integer, List<AppSceneCostStandardDetail>> levelGroupMap = parentNodeList.stream().collect(Collectors.groupingBy(AppSceneCostStandardDetail::getLevel));
57
+                TreeMap<Integer, List<AppSceneCostStandardDetail>> levelTreeMap = new TreeMap<>(levelGroupMap);
58
+                parentDataMap = levelTreeMap.firstEntry().getValue().stream().collect(Collectors.toMap(AppSceneCostStandardDetail::getMaterialNumber, vo -> vo));
58 59
             }
59 60
             //查询所有父节点下的子节点(即第二层叶子节点)
60
-            List<CostStandardDetail> costStandardDetails = new ArrayList<>();
61
+            List<AppSceneCostStandardDetail> costStandardDetails = new ArrayList<>();
61 62
             if (parentDataMap.size() > 0) {
62
-                QueryWrapper<CostStandardDetail> wrapper1 = new QueryWrapper<>();
63
+                QueryWrapper<AppSceneCostStandardDetail> wrapper1 = new QueryWrapper<>();
63 64
                 int num = 0;
64 65
                 for (String materialNumber1 : parentDataMap.keySet()) {
65 66
                     num = num + 1;
@@ -72,26 +73,28 @@ public class BomTreeServiceImpl implements BomTreeService {
72 73
                 costStandardDetails = costStandardDetailMapper.selectList(wrapper1);
73 74
             }
74 75
             //第三层叶子节点
75
-            List<CostStandardDetail> threeNodes = new ArrayList<>();
76
+            List<AppSceneCostStandardDetail> threeNodes = new ArrayList<>();
76 77
             if (costStandardDetails != null && costStandardDetails.size() > 0) {
77
-                List<String> materialNoList = costStandardDetails.stream().map(CostStandardDetail::getMaterialNumber).collect(Collectors.toList());
78
-                QueryWrapper<CostStandardDetail> wrapper2 = new QueryWrapper<>();
78
+                List<String> materialNoList = costStandardDetails.stream().map(AppSceneCostStandardDetail::getMaterialNumber).collect(Collectors.toList());
79
+                QueryWrapper<AppSceneCostStandardDetail> wrapper2 = new QueryWrapper<>();
79 80
                 wrapper2.in("parent_material_number", materialNoList);
80 81
                 threeNodes = costStandardDetailMapper.selectList(wrapper2);
81 82
             }
82 83
             //把第二层叶子节点转化为bomtreeinfoVO对象集合
83 84
             for (int i = 0; i < costStandardDetails.size(); i++) {
84
-                CostStandardDetail costStandardDetail = costStandardDetails.get(i);
85
-                CostStandardDetailVO vo = new CostStandardDetailVO();
86
-                BeanUtils.copyProperties(costStandardDetail, vo);
87
-                childrenNodeList.add(vo);
85
+                AppSceneCostStandardDetail costStandardDetail = costStandardDetails.get(i);
86
+//                AppSceneCostStandardDetail vo = new AppSceneCostStandardDetail();
87
+//                BeanUtils.copyProperties(costStandardDetail, vo);
88
+//                childrenNodeList.add(vo);
89
+                childrenNodeList.add(costStandardDetail);
88 90
             }
89 91
             //把第三层叶子节点转化为bomtreeinfoVO对象集合
90 92
             for (int i = 0; i < threeNodes.size(); i++) {
91
-                CostStandardDetail costStandardDetail = threeNodes.get(i);
92
-                CostStandardDetailVO vo = new CostStandardDetailVO();
93
-                BeanUtils.copyProperties(costStandardDetail, vo);
94
-                childrenNodeList.add(vo);
93
+                AppSceneCostStandardDetail costStandardDetail = threeNodes.get(i);
94
+//                CostStandardDetailVO vo = new CostStandardDetailVO();
95
+//                BeanUtils.copyProperties(costStandardDetail, vo);
96
+//                childrenNodeList.add(vo);
97
+                childrenNodeList.add(costStandardDetail);
95 98
             }
96 99
         }
97 100
         List<BomTreeInfoVO> bomTreeInfoVOS = BomTreeBuilder.buildBomTree(childrenNodeList, parentDataMap);

+ 15
- 14
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/util/BomTreeBuilder.java Vedi File

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

+ 2
- 1
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/util/EasyExcelUtil.java Vedi File

@@ -5,6 +5,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
5 5
 import com.alibaba.excel.write.metadata.style.WriteCellStyle;
6 6
 import com.alibaba.excel.write.metadata.style.WriteFont;
7 7
 import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
8
+import com.zzsmart.qomo.kn.cost.manage.entity.AppSceneCostStandardDetail;
8 9
 import org.apache.poi.ss.usermodel.*;
9 10
 
10 11
 import javax.servlet.http.HttpServletResponse;
@@ -124,7 +125,7 @@ public class EasyExcelUtil {
124 125
      * @return
125 126
      */
126 127
     public static Set<String> getIncludeFields(Class<?> clazz) {
127
-        Field[] excelPropertyAnnotatedFields = getExcelPropertyAnnotatedFields(CostStandardDetail.class);
128
+        Field[] excelPropertyAnnotatedFields = getExcelPropertyAnnotatedFields(AppSceneCostStandardDetail.class);
128 129
         Set<String> includeColumnFiledNames = new HashSet<String>();
129 130
         for (int i = 0; i < excelPropertyAnnotatedFields.length; i++) {
130 131
             includeColumnFiledNames.add(excelPropertyAnnotatedFields[i].getName());

+ 4
- 0
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/TotalResultValue.java Vedi File

@@ -19,6 +19,10 @@ import java.math.BigDecimal;
19 19
  * @Version: 1.0
20 20
  */
21 21
 public class TotalResultValue {
22
+    /**
23
+     * 总物料成本
24
+     */
25
+    private BigDecimal totalMaterialCost;
22 26
     /**
23 27
      * 总人工成本
24 28
      */