From 9442a3b69dc1e747d874aa33577c848eed3019e8 Mon Sep 17 00:00:00 2001
From: wangqiong <1322446236@qq.com>
Date: Thu, 20 Jun 2024 11:03:41 +0800
Subject: [PATCH 1/4] =?UTF-8?q?=E6=A0=87=E5=87=86=E6=88=90=E6=9C=AC?=
=?UTF-8?q?=E5=8D=95=E8=A1=8C=E6=9F=A5=E8=AF=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../CostStandardDetailController.java | 42 ++++++++++++++++++-
.../mapper/CostStandardDetailMapper.java | 8 ++++
.../mapper/xml/CostStandardDetailMapper.xml | 15 ++++---
.../service/CostStandardDetailService.java | 11 +++++
.../impl/CostStandardDetailServiceImpl.java | 35 ++++++++++++++++
.../impl/CostStandardVersionServiceImpl.java | 4 +-
.../cost/manage/vo/CostStandardDetailVO.java | 32 ++++++++++++++
7 files changed, 138 insertions(+), 9 deletions(-)
create mode 100644 qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/CostStandardDetailVO.java
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/controller/CostStandardDetailController.java b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/controller/CostStandardDetailController.java
index dd2a1e4..af3393b 100644
--- a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/controller/CostStandardDetailController.java
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/controller/CostStandardDetailController.java
@@ -1,10 +1,25 @@
package com.zzsmart.qomo.kn.cost.manage.controller;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zzsmart.qomo.kn.cost.manage.service.CostStandardDetailService;
+import com.zzsmart.qomo.kn.cost.manage.service.ICostStandardService;
+import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
+import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
+import javax.servlet.http.HttpServletRequest;
+
/**
*
* 标准成本明细表 前端控制器
@@ -13,8 +28,33 @@ import org.springframework.web.bind.annotation.RestController;
* @author cost_purchase_price
* @since 2024-06-19
*/
+@Api(tags="标准成本单行查询")
@RestController
-@RequestMapping("/cost-standard-detail")
+@RequestMapping("//costStandardDetail")
+@Slf4j
public class CostStandardDetailController {
+ @Autowired
+ private CostStandardDetailService costStandardDetailService;
+ /**
+ * 分页列表查询
+ *
+ * @param costStandard
+ * @param pageNo
+ * @param pageSize
+ * @param req
+ * @return
+ */
+ //@AutoLog(value = "cost_standard-分页列表查询")
+ @ApiOperation(value="cost_standard_detail-分页列表查询", notes="cost_standard_detail-分页列表查询")
+ @GetMapping(value = "/list")
+ public Result> queryPageList(CostStandardDetailVO costStandard,
+ @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+ @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+ HttpServletRequest req) {
+
+ Page page = new Page(pageNo, pageSize);
+ IPage pageList = costStandardDetailService.pageList(page, costStandard);
+ return Result.OK(pageList);
+ }
}
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/CostStandardDetailMapper.java b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/CostStandardDetailMapper.java
index 76f2a2b..ec9a168 100644
--- a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/CostStandardDetailMapper.java
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/CostStandardDetailMapper.java
@@ -1,8 +1,15 @@
package com.zzsmart.qomo.kn.cost.manage.mapper;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
+import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardVO;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
/**
*
@@ -14,5 +21,6 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface CostStandardDetailMapper extends BaseMapper {
+ IPage pageList(@Param("page") Page page , @Param(Constants.WRAPPER) Wrapper wrapper);
}
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/xml/CostStandardDetailMapper.xml b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/xml/CostStandardDetailMapper.xml
index 17dd931..95faa0f 100644
--- a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/xml/CostStandardDetailMapper.xml
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/xml/CostStandardDetailMapper.xml
@@ -3,10 +3,11 @@
-
+
+
@@ -33,10 +34,14 @@
+
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/CostStandardDetailService.java b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/CostStandardDetailService.java
index 30a429c..e2ca314 100644
--- a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/CostStandardDetailService.java
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/CostStandardDetailService.java
@@ -1,7 +1,11 @@
package com.zzsmart.qomo.kn.cost.manage.service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
+import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardVO;
/**
*
@@ -12,5 +16,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
* @since 2024-06-19
*/
public interface CostStandardDetailService extends IService {
+ /**
+ * 分页查询
+ * @param page
+ * @param
+ * @return
+ */
+ IPage pageList(Page page, CostStandardDetailVO costStandard);
}
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/CostStandardDetailServiceImpl.java b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/CostStandardDetailServiceImpl.java
index 4309d4d..f1e3403 100644
--- a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/CostStandardDetailServiceImpl.java
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/CostStandardDetailServiceImpl.java
@@ -1,9 +1,16 @@
package com.zzsmart.qomo.kn.cost.manage.service.impl;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
import com.zzsmart.qomo.kn.cost.manage.mapper.CostStandardDetailMapper;
import com.zzsmart.qomo.kn.cost.manage.service.CostStandardDetailService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
+import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardVO;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
@@ -17,4 +24,32 @@ import org.springframework.stereotype.Service;
@Service
public class CostStandardDetailServiceImpl extends ServiceImpl implements CostStandardDetailService {
+ @Autowired
+ CostStandardDetailMapper costStandardDetailMapper;
+ /**
+ * 分页查询
+ *
+ * @param page
+ * @param costStandard
+ * @return
+ */
+ @Override
+ public IPage pageList(Page page, CostStandardDetailVO costStandard) {
+ // 查询条件组装
+ QueryWrapper queryWrapper = new QueryWrapper();
+
+ if(costStandard != null){
+
+ if(StrUtil.isNotEmpty(costStandard.getMaterialNumber()) ){
+ // 物料号
+ queryWrapper.like("c1.material_number",costStandard.getMaterialNumber());
+ }
+ if(StrUtil.isNotEmpty(costStandard.getVersionNumber()) ){
+ // 版本号
+ queryWrapper.like("c2.version_number",costStandard.getVersionNumber());
+ }
+
+ }
+ return (IPage) costStandardDetailMapper.pageList(page,queryWrapper);
+ }
}
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/CostStandardVersionServiceImpl.java b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/CostStandardVersionServiceImpl.java
index 4b95836..db76eaa 100644
--- a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/CostStandardVersionServiceImpl.java
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/CostStandardVersionServiceImpl.java
@@ -49,8 +49,6 @@ import java.util.Map;
public class CostStandardVersionServiceImpl extends ServiceImpl implements ICostStandardVersionService {
@Autowired
private CostStandardMapper costStandardMapper;
- @Autowired
- private ICostStandardVersionService costStandardVersionService;
private static final Logger log = LoggerFactory.getLogger(CostStandardVersionServiceImpl.class);
@Transactional(rollbackFor = Exception.class)
@@ -171,7 +169,7 @@ public class CostStandardVersionServiceImpl extends ServiceImpl
+ * 标准成本明细表
+ *
+ *
+ * @author cost_purchase_price
+ * @since 2024-06-19
+ */
+@Data
+public class CostStandardDetailVO extends CostStandardDetail implements Serializable {
+ /**
+ * 版本号
+ */
+ private String versionNumber;
+}
From 495f535596646bec9a8c542322ab5abe4073503b Mon Sep 17 00:00:00 2001
From: wangqiong <1322446236@qq.com>
Date: Thu, 20 Jun 2024 16:25:02 +0800
Subject: [PATCH 2/4] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A0=87=E5=87=86?=
=?UTF-8?q?=E6=88=90=E6=9C=AC=E5=8D=95=E8=A1=8C=E6=9F=A5=E8=AF=A2=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../manage/entity/CostStandardDetail.java | 82 +++++--------------
.../mapper/CostStandardDetailMapper.java | 5 +-
.../mapper/xml/CostStandardDetailMapper.xml | 2 +
.../cost/manage/vo/CostStandardDetailVO.java | 14 +---
.../qomo/kn/cost/manage/ApplicationTests.java | 12 +--
5 files changed, 33 insertions(+), 82 deletions(-)
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/entity/CostStandardDetail.java b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/entity/CostStandardDetail.java
index fae984d..11a8ad0 100644
--- a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/entity/CostStandardDetail.java
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/entity/CostStandardDetail.java
@@ -7,6 +7,9 @@ import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
@@ -16,11 +19,10 @@ import lombok.experimental.Accessors;
* 标准成本明细表
*
*
- * @author cost_purchase_price
- * @since 2024-06-19
+ * @author
+ * @since 2024-06-20
*/
-@Getter
-@Setter
+@Data
@Accessors(chain = true)
@TableName("cost_standard_detail")
public class CostStandardDetail implements Serializable {
@@ -34,11 +36,18 @@ public class CostStandardDetail implements Serializable {
private String id;
/**
- * 子物料号,关联kn_new_sap_mara表matnr字段
+ * 物料号,关联kn_new_sap_mara表matnr字段
*/
@TableField("material_number")
+ @ApiModelProperty(value = "物料号,关联kn_new_sap_mara表matnr字段")
private String materialNumber;
+ /**
+ * 父类物料号
+ */
+ @TableField("parent_material_number")
+ private String parentMaterialNumber;
+
/**
* 版本号id
*/
@@ -49,7 +58,7 @@ public class CostStandardDetail implements Serializable {
* 层级
*/
@TableField("level")
- private String level;
+ private Integer level;
/**
* 图号
@@ -195,61 +204,10 @@ public class CostStandardDetail implements Serializable {
@TableField("remark")
private String remark;
-
- public static final String ID = "id";
-
- public static final String MATERIAL_NUMBER = "material_number";
-
- public static final String VERSION_NUMBER_ID = "version_number_id";
-
- public static final String LEVEL = "level";
-
- public static final String FIGURE_NUMBER = "figure_number";
-
- public static final String DOSAGE = "dosage";
-
- public static final String UNIT = "unit";
-
- public static final String SPECIFICATION = "specification";
-
- public static final String BOM_COST = "bom_cost";
-
- public static final String PACKING_COST = "packing_cost";
-
- public static final String AUXILIARY_COST = "auxiliary_cost";
-
- public static final String LABOR_COST = "labor_cost";
-
- public static final String EUIP_DEPRECIATION_COST = "euip_depreciation_cost";
-
- public static final String EQUIP_CONSUME_COST = "equip_consume_cost";
-
- public static final String HYDROELECTRICITY_COST = "hydroelectricity_cost";
-
- public static final String OTHER_COST = "other_cost";
-
- public static final String TRAIL_COST = "trail_cost";
-
- public static final String MANUFACTURE_COST = "manufacture_cost";
-
- public static final String TOTAL_LABOR_COST = "total_labor_cost";
-
- public static final String TOTAL_EQUIP_CONSUME_COST = "total_equip_consume_cost";
-
- public static final String TOTAL_EUIP_DEPRECIATION_COST = "total_euip_depreciation_cost";
-
- public static final String TOTAL_HYDROELECTRICITY_COST = "total_hydroelectricity_cost";
-
- public static final String TOTAL_OTHER_COST = "total_other_cost";
-
- public static final String CREATE_BY = "create_by";
-
- public static final String CREATE_TIME = "create_time";
-
- public static final String UPDATE_BY = "update_by";
-
- public static final String UPDATE_TIME = "update_time";
-
- public static final String REMARK = "remark";
+ /**
+ * 序号
+ */
+ @TableField("sort")
+ private Integer sort;
}
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/CostStandardDetailMapper.java b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/CostStandardDetailMapper.java
index ec9a168..916aead 100644
--- a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/CostStandardDetailMapper.java
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/CostStandardDetailMapper.java
@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
-import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -16,8 +15,8 @@ import org.apache.ibatis.annotations.Param;
* 标准成本明细表 Mapper 接口
*
*
- * @author cost_purchase_price
- * @since 2024-06-19
+ * @author
+ * @since 2024-06-20
*/
@Mapper
public interface CostStandardDetailMapper extends BaseMapper {
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/xml/CostStandardDetailMapper.xml b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/xml/CostStandardDetailMapper.xml
index 95faa0f..3037f7e 100644
--- a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/xml/CostStandardDetailMapper.xml
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/mapper/xml/CostStandardDetailMapper.xml
@@ -6,6 +6,7 @@
+
@@ -33,6 +34,7 @@
+
+
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/BomTreeService.java b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/BomTreeService.java
new file mode 100644
index 0000000..61766c7
--- /dev/null
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/BomTreeService.java
@@ -0,0 +1,14 @@
+package com.zzsmart.qomo.kn.cost.manage.service;
+
+import com.zzsmart.qomo.kn.cost.manage.vo.BomTreeInfoVO;
+
+import java.util.List;
+
+public interface BomTreeService {
+ /**
+ * 根据物料号查询物料树
+ * @param materialNumber
+ * @return
+ */
+ List getBomTreeByMaterialNumber(String materialNumber, String version_number);
+}
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/BomTreeServiceImpl.java b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/BomTreeServiceImpl.java
new file mode 100644
index 0000000..154fc96
--- /dev/null
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/BomTreeServiceImpl.java
@@ -0,0 +1,44 @@
+package com.zzsmart.qomo.kn.cost.manage.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
+import com.zzsmart.qomo.kn.cost.manage.mapper.CostStandardDetailMapper;
+import com.zzsmart.qomo.kn.cost.manage.service.BomTreeService;
+import com.zzsmart.qomo.kn.cost.manage.util.BomTreeBuilder;
+import com.zzsmart.qomo.kn.cost.manage.vo.BomTreeInfoVO;
+import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.List;
+
+@Service
+public class BomTreeServiceImpl implements BomTreeService {
+ @Autowired
+ CostStandardDetailMapper costStandardDetailMapper;
+
+ /**
+ * 根据物料号查询物料树
+ *
+ * @param materialNumber
+ * @return
+ */
+ @Override
+ public List getBomTreeByMaterialNumber(String materialNumber, String version_number) {
+ QueryWrapper wrapper = new QueryWrapper<>();
+ //设置条件
+ if (StrUtil.isNotEmpty(materialNumber)) {
+ // 物料号
+ wrapper.like("c1.material_number", materialNumber);
+ }
+ if (StrUtil.isNotEmpty(version_number)) {
+ // 版本号
+ wrapper.like("c2.version_number", version_number);
+ }
+ List costStandardDetailVOS = costStandardDetailMapper.queryListResult(wrapper);
+ List bomTreeInfoVOS = BomTreeBuilder.buildBomTree(costStandardDetailVOS);
+ return bomTreeInfoVOS;
+ }
+}
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/util/BomTreeBuilder.java b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/util/BomTreeBuilder.java
new file mode 100644
index 0000000..327111f
--- /dev/null
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/util/BomTreeBuilder.java
@@ -0,0 +1,80 @@
+package com.zzsmart.qomo.kn.cost.manage.util;
+
+import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
+import com.zzsmart.qomo.kn.cost.manage.vo.BomTreeInfoVO;
+import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class BomTreeBuilder {
+ public static List buildBomTree(List sourceData) {
+ List result = new ArrayList<>();
+ if (sourceData == null || (sourceData != null && sourceData.size() < 1)) {
+ return result;
+ }
+ //1.把BOM信息分成按照物料号分组
+ Map materialMap = sourceData.stream().filter(s -> s.getMaterialNumber() != null).collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
+ //查找最顶端的父类节点
+ Map parentDataMap = sourceData.stream().filter(s -> s.getParentMaterialNumber() == null).collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
+ //查找有父节点的子节点
+ Map> childDataMap = sourceData.stream().filter(s -> s.getParentMaterialNumber() != null).collect(Collectors.groupingBy(CostStandardDetailVO::getParentMaterialNumber));
+ //查找有父节点的子节点
+// //1.把BOM信息分成按照层级分组
+// Map> levelMap = sourceData.stream().filter(s -> s.getLevel() != null).collect(Collectors.groupingBy(CostStandardDetail::getLevel));
+// //2.对每层进行排序
+// for (Integer level : levelMap.keySet()) {
+// List levelList = levelMap.get(level);
+// List sortedCostDetails = levelList.stream().sorted(Comparator.comparing(CostStandardDetailVO::getSort)).collect(Collectors.toList());
+// levelMap.put(level, sortedCostDetails);
+// }
+// TreeMap> levelTreeMap = new TreeMap<>(levelMap);
+ //3.构建BOM树
+ if (parentDataMap.size() > 0) {
+ for (CostStandardDetailVO parent : parentDataMap.values()) {
+ BomTreeInfoVO parentBomTreeInfoVO = costStandardDetailChangeToBomTreeInfoVO(parent);
+ parentBomTreeInfoVO = loopFindChildrenBuild(parentBomTreeInfoVO, materialMap, childDataMap, result);
+ if (parentBomTreeInfoVO != null) {
+ result.add(parentBomTreeInfoVO);
+ }
+ }
+ }
+ materialMap = null;
+ parentDataMap = null;
+ childDataMap = null;
+ return result;
+ }
+
+ private static BomTreeInfoVO loopFindChildrenBuild(BomTreeInfoVO parentBomTreeInfoVO, Map materialMap, Map> childDataMap, List result) {
+ if (parentBomTreeInfoVO != null) {
+ //4.根据物料号查找子节点
+ List childs = childDataMap.get(parentBomTreeInfoVO.getMaterialNumber());
+ //构造父节点下的bomtree结构数据
+ List children = new ArrayList<>();
+ for (int j = 0; childs != null && childs.size() > 0 && j < childs.size(); j++) {
+ CostStandardDetailVO child = childs.get(j);
+ BomTreeInfoVO childBomTreeInfoVO = costStandardDetailChangeToBomTreeInfoVO(child);
+ childBomTreeInfoVO = loopFindChildrenBuild(childBomTreeInfoVO, materialMap, childDataMap, result);
+ children.add(childBomTreeInfoVO);
+ }
+ //对象的子节点进行排序(升序)
+ children = children.stream().sorted(Comparator.comparing(BomTreeInfoVO::getSort, Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
+ parentBomTreeInfoVO.setChildren(children);
+ }
+ return parentBomTreeInfoVO;
+ }
+
+ /**
+ * 把单行查询的数据转换为BomTreeInfoVO
+ *
+ * @param parent
+ * @return
+ */
+ static BomTreeInfoVO costStandardDetailChangeToBomTreeInfoVO(CostStandardDetail parent) {
+ 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();
+ return bomTreeInfoVO;
+ }
+}
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/BomTreeInfoVO.java b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/BomTreeInfoVO.java
new file mode 100644
index 0000000..85d6165
--- /dev/null
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/BomTreeInfoVO.java
@@ -0,0 +1,105 @@
+package com.zzsmart.qomo.kn.cost.manage.vo;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@Builder
+public class BomTreeInfoVO {
+ /**
+ * 物料号
+ */
+ private String materialNumber;
+ /**
+ * 父类物料号
+ */
+ private String parentMaterialNumber;
+ /**
+ * 物料名称
+ */
+ private String materialName;
+ /**
+ * 数量
+ */
+ private double quantity;
+ /**
+ * 单位
+ */
+ private String unit;
+ /**
+ * 层级
+ */
+ private Integer level;
+ /**
+ * 序号
+ */
+ private Integer sort;
+ /**
+ * 本阶标准成本
+ */
+ private BigDecimal standardCost;
+ /**
+ * 本阶物料成本
+ */
+ private BigDecimal materialCost;
+ /**
+ * 本阶人工成本
+ */
+ private BigDecimal laborCost;
+ /**
+ * 本阶设备成本
+ */
+ private BigDecimal equipCost;
+ /**
+ * 本阶燃动成本
+ */
+ private BigDecimal fuelCost;
+ /**
+ * 本阶辅料成本
+ */
+ private BigDecimal auxiliaryCost;
+ /**
+ * 本阶其他成本
+ */
+ private BigDecimal otherCost;
+ /**
+ * 累计标准成本
+ */
+ private BigDecimal accumulatedStandardCost;
+ /**
+ * 累计物料成本
+ */
+ private BigDecimal accumulatedMaterialCost;
+ /**
+ * 累计人工成本
+ */
+ private BigDecimal accumulatedLaborCost;
+ /**
+ * 累计设备成本
+ */
+ private BigDecimal accumulatedEquipCost;
+ /**
+ * 累计燃动成本
+ */
+ private BigDecimal accumulatedFuelCost;
+
+ /**
+ * 累计辅料成本
+ */
+ private BigDecimal accumulatedAuxiliaryCost;
+ /**
+ * 累计其他成本
+ */
+ private BigDecimal accumulatedOtherCost;
+ /**
+ * 节点父类所有的物料编码
+ */
+ private List parentMaterialNumbers;
+ /**
+ * 子节点
+ */
+ private List children;
+}