Bläddra i källkod

优化标准成本计算功能

wangqiong 1 år sedan
förälder
incheckning
339cf044a8

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

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 Visa fil

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 Visa fil

490
             List<AppSceneCostResultValue> appSceneCostResultValues = materialNoMap.get(key);
490
             List<AppSceneCostResultValue> appSceneCostResultValues = materialNoMap.get(key);
491
             //按照费用类别进行分组
491
             //按照费用类别进行分组
492
             Map<String, List<AppSceneCostResultValue>> costTypeMap = appSceneCostResultValues.stream().filter(s -> s.getCostType() != null).collect(Collectors.groupingBy(AppSceneCostResultValue::getCostType));
492
             Map<String, List<AppSceneCostResultValue>> costTypeMap = appSceneCostResultValues.stream().filter(s -> s.getCostType() != null).collect(Collectors.groupingBy(AppSceneCostResultValue::getCostType));
493
-            //本阶标准成本
493
+            //本阶标准成本
494
             BigDecimal currentCost = new BigDecimal("0.0");
494
             BigDecimal currentCost = new BigDecimal("0.0");
495
             //1.本阶物料成本
495
             //1.本阶物料成本
496
             BigDecimal materialCost = new BigDecimal("0.0");
496
             BigDecimal materialCost = new BigDecimal("0.0");
606
         }
606
         }
607
         //3.计算出所有的单个物料的累计标准成本
607
         //3.计算出所有的单个物料的累计标准成本
608
         List<AppSceneCostResultValue> standardCostList = standardCostService.iAppSceneCostResultValueService.getResultValueByTopMaterialNo(topMaterialCode, taskType, flowInstanceId);
608
         List<AppSceneCostResultValue> standardCostList = standardCostService.iAppSceneCostResultValueService.getResultValueByTopMaterialNo(topMaterialCode, taskType, flowInstanceId);
609
-        //TODO 优化累计成本的计算
609
+        //【累计成本】的计算
610
         totalCountCost(standardCostList, topMaterialCode, taskType, taskCode, flowInstanceId);
610
         totalCountCost(standardCostList, topMaterialCode, taskType, taskCode, flowInstanceId);
611
     }
611
     }
612
 
612
 
631
             //循环计算出当前节点的累计成本
631
             //循环计算出当前节点的累计成本
632
             String costDetail = oldAppSceneCostResultValue.getCostDetail();
632
             String costDetail = oldAppSceneCostResultValue.getCostDetail();
633
             //查询当前节点各个类型的成本
633
             //查询当前节点各个类型的成本
634
+            BigDecimal totalMaterialCost = new BigDecimal(0);
634
             BigDecimal totalLabourCost = new BigDecimal(0);
635
             BigDecimal totalLabourCost = new BigDecimal(0);
635
             BigDecimal totalEquipmentCost = new BigDecimal(0);
636
             BigDecimal totalEquipmentCost = new BigDecimal(0);
636
             BigDecimal totalSupplyMaterialCost = new BigDecimal(0);
637
             BigDecimal totalSupplyMaterialCost = new BigDecimal(0);
638
             BigDecimal totalLogisticsCost = new BigDecimal(0);
639
             BigDecimal totalLogisticsCost = new BigDecimal(0);
639
             BigDecimal totalOtherCost = new BigDecimal(0);
640
             BigDecimal totalOtherCost = new BigDecimal(0);
640
             JSONObject costDetailJson = JSON.parseObject(costDetail);
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
             costDetailJson.put(TotalCostEnum.TotalLaborCost.getCode(), hourOrRateResultValue.getTotalLabourCost());
644
             costDetailJson.put(TotalCostEnum.TotalLaborCost.getCode(), hourOrRateResultValue.getTotalLabourCost());
651
             costDetailJson.put(TotalCostEnum.TotalEquipmentFee.getCode(), hourOrRateResultValue.getTotalEquipmentCost());
645
             costDetailJson.put(TotalCostEnum.TotalEquipmentFee.getCode(), hourOrRateResultValue.getTotalEquipmentCost());
652
             costDetailJson.put(TotalCostEnum.TotalSupplyMaterialFee.getCode(), hourOrRateResultValue.getTotalSupplyMaterialCost());
646
             costDetailJson.put(TotalCostEnum.TotalSupplyMaterialFee.getCode(), hourOrRateResultValue.getTotalSupplyMaterialCost());
677
      * @param appSceneCostResultValue
671
      * @param appSceneCostResultValue
678
      * @param parentMaterialNoMap
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
         String marterialNo = appSceneCostResultValue.getMarterialNo();
675
         String marterialNo = appSceneCostResultValue.getMarterialNo();
682
         if (parentMaterialNoMap.containsKey(marterialNo)) {
676
         if (parentMaterialNoMap.containsKey(marterialNo)) {
683
             //获取当前节点的子节点并遍历
677
             //获取当前节点的子节点并遍历
693
                 if (appSceneCostResultValue1.getCostDetail() != null) {
687
                 if (appSceneCostResultValue1.getCostDetail() != null) {
694
                     JSONObject costDetailJson = JSON.parseObject(appSceneCostResultValue1.getCostDetail());
688
                     JSONObject costDetailJson = JSON.parseObject(appSceneCostResultValue1.getCostDetail());
695
                     if (costDetailJson != null) {
689
                     if (costDetailJson != null) {
690
+                        totalMaterialCost = totalMaterialCost.add(costDetailJson.getBigDecimal(FeeTypeEnum.MaterialCost.getCode()));
696
                         totalLabourCost = totalLabourCost.add(costDetailJson.getBigDecimal(FeeTypeEnum.LaborCost.getCode()));
691
                         totalLabourCost = totalLabourCost.add(costDetailJson.getBigDecimal(FeeTypeEnum.LaborCost.getCode()));
697
                         totalEquipmentCost = totalEquipmentCost.add(costDetailJson.getBigDecimal(FeeTypeEnum.EquipmentFee.getCode()));
692
                         totalEquipmentCost = totalEquipmentCost.add(costDetailJson.getBigDecimal(FeeTypeEnum.EquipmentFee.getCode()));
698
                         totalSupplyMaterialCost = totalSupplyMaterialCost.add(costDetailJson.getBigDecimal(FeeTypeEnum.SupplyMaterialFee.getCode()));
693
                         totalSupplyMaterialCost = totalSupplyMaterialCost.add(costDetailJson.getBigDecimal(FeeTypeEnum.SupplyMaterialFee.getCode()));
704
                 //判断当前子节点是否还有子节点
699
                 //判断当前子节点是否还有子节点
705
                 if (parentMaterialNoMap.containsKey(appSceneCostResultValue1.getMarterialNo())) {
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
         appSceneCostResultValue.setTotalValue(totalCost.toString());
707
         appSceneCostResultValue.setTotalValue(totalCost.toString());
713
         return hourOrRateResultValue;
708
         return hourOrRateResultValue;
714
     }
709
     }

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

2
 
2
 
3
 import cn.hutool.core.util.StrUtil;
3
 import cn.hutool.core.util.StrUtil;
4
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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
 import com.zzsmart.qomo.kn.cost.manage.service.BomTreeService;
7
 import com.zzsmart.qomo.kn.cost.manage.service.BomTreeService;
7
 import com.zzsmart.qomo.kn.cost.manage.util.BomTreeBuilder;
8
 import com.zzsmart.qomo.kn.cost.manage.util.BomTreeBuilder;
8
 import com.zzsmart.qomo.kn.cost.manage.vo.BomTreeInfoVO;
9
 import com.zzsmart.qomo.kn.cost.manage.vo.BomTreeInfoVO;
21
 @Transactional
22
 @Transactional
22
 public class BomTreeServiceImpl implements BomTreeService {
23
 public class BomTreeServiceImpl implements BomTreeService {
23
     @Autowired
24
     @Autowired
24
-    CostStandardDetailMapper costStandardDetailMapper;
25
+    AppSceneCostStandardDetailMapper costStandardDetailMapper;
25
 
26
 
26
     /**
27
     /**
27
      * 根据物料号查询物料树
28
      * 根据物料号查询物料树
31
      */
32
      */
32
     @Override
33
     @Override
33
     public List<BomTreeInfoVO> getBomTreeByMaterialNumber(String materialNumber, String version_number) {
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
         if (StrUtil.isNotEmpty(materialNumber)) {
37
         if (StrUtil.isNotEmpty(materialNumber)) {
37
             // 物料号
38
             // 物料号
38
-            wrapper.like("c1.material_number", materialNumber);
39
+            wrapper.like("material_number", materialNumber);
39
         }
40
         }
40
         if (StrUtil.isNotEmpty(version_number)) {
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
         if (parentNodeList.size() > 0) {
50
         if (parentNodeList.size() > 0) {
50
             //父类结果只有1个
51
             //父类结果只有1个
51
             if (parentNodeList.size() == 1) {
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
             } else {
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
             if (parentDataMap.size() > 0) {
62
             if (parentDataMap.size() > 0) {
62
-                QueryWrapper<CostStandardDetail> wrapper1 = new QueryWrapper<>();
63
+                QueryWrapper<AppSceneCostStandardDetail> wrapper1 = new QueryWrapper<>();
63
                 int num = 0;
64
                 int num = 0;
64
                 for (String materialNumber1 : parentDataMap.keySet()) {
65
                 for (String materialNumber1 : parentDataMap.keySet()) {
65
                     num = num + 1;
66
                     num = num + 1;
72
                 costStandardDetails = costStandardDetailMapper.selectList(wrapper1);
73
                 costStandardDetails = costStandardDetailMapper.selectList(wrapper1);
73
             }
74
             }
74
             //第三层叶子节点
75
             //第三层叶子节点
75
-            List<CostStandardDetail> threeNodes = new ArrayList<>();
76
+            List<AppSceneCostStandardDetail> threeNodes = new ArrayList<>();
76
             if (costStandardDetails != null && costStandardDetails.size() > 0) {
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
                 wrapper2.in("parent_material_number", materialNoList);
80
                 wrapper2.in("parent_material_number", materialNoList);
80
                 threeNodes = costStandardDetailMapper.selectList(wrapper2);
81
                 threeNodes = costStandardDetailMapper.selectList(wrapper2);
81
             }
82
             }
82
             //把第二层叶子节点转化为bomtreeinfoVO对象集合
83
             //把第二层叶子节点转化为bomtreeinfoVO对象集合
83
             for (int i = 0; i < costStandardDetails.size(); i++) {
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
             //把第三层叶子节点转化为bomtreeinfoVO对象集合
91
             //把第三层叶子节点转化为bomtreeinfoVO对象集合
90
             for (int i = 0; i < threeNodes.size(); i++) {
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
         List<BomTreeInfoVO> bomTreeInfoVOS = BomTreeBuilder.buildBomTree(childrenNodeList, parentDataMap);
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 Visa fil

1
 package com.zzsmart.qomo.kn.cost.manage.util;
1
 package com.zzsmart.qomo.kn.cost.manage.util;
2
 
2
 
3
+import com.zzsmart.qomo.kn.cost.manage.entity.AppSceneCostStandardDetail;
3
 import com.zzsmart.qomo.kn.cost.manage.vo.BomTreeInfoVO;
4
 import com.zzsmart.qomo.kn.cost.manage.vo.BomTreeInfoVO;
4
 
5
 
5
 import java.util.ArrayList;
6
 import java.util.ArrayList;
9
 import java.util.stream.Collectors;
10
 import java.util.stream.Collectors;
10
 
11
 
11
 public class BomTreeBuilder {
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
         List<BomTreeInfoVO> result = new ArrayList<>();
14
         List<BomTreeInfoVO> result = new ArrayList<>();
14
         if ((sourceData == null || (sourceData != null && sourceData.size() < 1)) && (parentDataMap == null || (parentDataMap != null && parentDataMap.size() < 1))) {
15
         if ((sourceData == null || (sourceData != null && sourceData.size() < 1)) && (parentDataMap == null || (parentDataMap != null && parentDataMap.size() < 1))) {
15
             return result;
16
             return result;
16
         }
17
         }
17
         //1.把BOM信息分成按照物料号分组
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
         if (parentDataMap == null || (parentDataMap != null && parentDataMap.size() < 1)) {
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
 //        //1.把BOM信息分成按照层级分组
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
 //        //2.对每层进行排序
29
 //        //2.对每层进行排序
29
 //        for (Integer level : levelMap.keySet()) {
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
 //            levelMap.put(level, sortedCostDetails);
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
         //3.构建BOM树
36
         //3.构建BOM树
36
         if (parentDataMap.size() > 0) {
37
         if (parentDataMap.size() > 0) {
37
-            for (CostStandardDetailVO parent : parentDataMap.values()) {
38
+            for (AppSceneCostStandardDetail parent : parentDataMap.values()) {
38
                 BomTreeInfoVO parentBomTreeInfoVO = costStandardDetailChangeToBomTreeInfoVO(parent);
39
                 BomTreeInfoVO parentBomTreeInfoVO = costStandardDetailChangeToBomTreeInfoVO(parent);
39
                 parentBomTreeInfoVO = loopFindChildrenBuild(parentBomTreeInfoVO, materialMap, childDataMap, result);
40
                 parentBomTreeInfoVO = loopFindChildrenBuild(parentBomTreeInfoVO, materialMap, childDataMap, result);
40
                 if (parentBomTreeInfoVO != null) {
41
                 if (parentBomTreeInfoVO != null) {
48
         return result;
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
         if (parentBomTreeInfoVO != null) {
53
         if (parentBomTreeInfoVO != null) {
53
             //4.根据物料号查找子节点
54
             //4.根据物料号查找子节点
54
-            List<CostStandardDetailVO> childs = childDataMap.get(parentBomTreeInfoVO.getMaterialNumber());
55
+            List<AppSceneCostStandardDetail> childs = childDataMap.get(parentBomTreeInfoVO.getMaterialNumber());
55
             if (childs != null && childs.size() > 0) {
56
             if (childs != null && childs.size() > 0) {
56
                 parentBomTreeInfoVO.setHasChildren(true);
57
                 parentBomTreeInfoVO.setHasChildren(true);
57
             } else {
58
             } else {
60
             //构造父节点下的bomtree结构数据
61
             //构造父节点下的bomtree结构数据
61
             List<BomTreeInfoVO> children = new ArrayList<>();
62
             List<BomTreeInfoVO> children = new ArrayList<>();
62
             for (int j = 0; childs != null && childs.size() > 0 && j < childs.size(); j++) {
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
                 BomTreeInfoVO childBomTreeInfoVO = costStandardDetailChangeToBomTreeInfoVO(child);
65
                 BomTreeInfoVO childBomTreeInfoVO = costStandardDetailChangeToBomTreeInfoVO(child);
65
                 childBomTreeInfoVO = loopFindChildrenBuild(childBomTreeInfoVO, materialMap, childDataMap, result);
66
                 childBomTreeInfoVO = loopFindChildrenBuild(childBomTreeInfoVO, materialMap, childDataMap, result);
66
                 children.add(childBomTreeInfoVO);
67
                 children.add(childBomTreeInfoVO);
78
      * @param parent
79
      * @param parent
79
      * @return
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
         return bomTreeInfoVO;
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 Visa fil

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

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

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