From 6575cf0503d09dccde56e342c9c85e91be685b9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=B1=B3?= <470431449@qq.com> Date: Sun, 17 Dec 2023 18:21:01 +0800 Subject: [PATCH] =?UTF-8?q?1.ebom-=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nflg/product/bomnew/api/user/EbomApi.java | 13 +- .../mapper/master/BomNewEbomParentMapper.java | 2 +- .../bomnew/pojo/vo/BomNewEbomParentVO.java | 4 + .../service/BomNewEbomParentService.java | 45 ++++--- .../nflg/product/bomnew/util/CTreeNode.java | 16 +++ .../nflg/product/bomnew/util/CTreeUtils.java | 125 ++++++++++++++++++ .../mapper/master/BomNewEbomParentMapper.xml | 15 ++- 7 files changed, 189 insertions(+), 31 deletions(-) create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/CTreeNode.java create mode 100644 nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/CTreeUtils.java diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomApi.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomApi.java index afa37fcc..3189bde5 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomApi.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/api/user/EbomApi.java @@ -64,7 +64,7 @@ public class EbomApi extends BaseApi { @PostMapping("workDetailsListByPage") @ApiOperation("Ebom-工作明细列表") - public ResultVO>> workDetailsListByPage(@RequestBody BomNewEbomParentQuery query) { + public ResultVO> workDetailsListByPage(@RequestBody BomNewEbomParentQuery query) { return ResultVO.success(bomNewEbomParentService.workDetailsListByPage(query)); } @@ -104,6 +104,17 @@ public class EbomApi extends BaseApi { return ResultVO.success(true); + } + + @PostMapping("convertToPBom") + @ApiOperation("转PBom") + public ResultVO convertToPBom(@RequestBody VirtualPackageParamDto paramDto) { + VUtils.isTure(CollUtil.isEmpty(paramDto.getVirtualPackageValue())).throwMessage("请选择要生成的虚拟包"); + bomNewEbomParentService.generateVirtualPackage(paramDto); + VUtils.isTure(true).throwMessage("请选择30开头的或200401类型的物料"); + return ResultVO.success(true); + + } @PostMapping("exportBom") diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomParentMapper.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomParentMapper.java index 8e70d701..30c514a4 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomParentMapper.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/mapper/master/BomNewEbomParentMapper.java @@ -53,5 +53,5 @@ public interface BomNewEbomParentMapper extends BaseMapper getParentForMaterialNoSeach(@Param("materialNoList") List materialNoList); - List getChildForMaterialNoSeach(@Param("materialNoList") List materialNoList); + List getChildForMaterialNoSeach(@Param("materialNoList") List materialNoList,@Param("materialNo") String materialNo); } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomParentVO.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomParentVO.java index f76a1c01..f1de2def 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomParentVO.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/pojo/vo/BomNewEbomParentVO.java @@ -8,6 +8,8 @@ import lombok.experimental.Accessors; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; /** * t_bom_new_ebom_parent @@ -271,5 +273,7 @@ public class BomNewEbomParentVO extends BaseMaterialVO implements Serializable { @ApiModelProperty(value = "修改时间") private LocalDateTime modifyTime; + private List childNodes = Collections.emptyList(); + private static final long serialVersionUID = 1L; } diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java index 2f50cef1..4786b29c 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/service/BomNewEbomParentService.java @@ -78,9 +78,9 @@ public class BomNewEbomParentService extends ServiceImpl> workDetailsListByPage(BomNewEbomParentQuery query) { + public Page workDetailsListByPage(BomNewEbomParentQuery query) { - Page> returnResult = new Page<>(); + PagereturnResult = new Page<>(); //物料编码搜索或图号搜索 if(StrUtil.isNotBlank(query.getMaterialNo()) || StrUtil.isNotBlank(query.getDrawingNo())) { String materialNo=query.getMaterialNo(); @@ -94,24 +94,24 @@ public class BomNewEbomParentService extends ServiceImpl parentMaterialByMaterialNo = getParentMaterialByMaterialNo(materialNo, !userRoleService.technician()); if(CollUtil.isNotEmpty(parentMaterialByMaterialNo)) { List parents = this.getBaseMapper().getParentForMaterialNoSeach(parentMaterialByMaterialNo); - List childs = this.getBaseMapper().getChildForMaterialNoSeach(parentMaterialByMaterialNo); + List childs = this.getBaseMapper().getChildForMaterialNoSeach(parentMaterialByMaterialNo, materialNo); returnResult = handSeachToTree(parents, childs); } } }else { Page result = this.getBaseMapper().getEBomListPage(new Page<>(query.getPage(), query.getPageSize()), query, userRoleService.getUserJob(), SessionUtil.getUserCode()); - - materialMainService.intiMaterialInfo(result.getRecords()); - Page> resutlData = new Page<>(); - BeanUtil.copyProperties(result, resutlData); - resutlData.setRecords(handNodeToTree(result.getRecords())); - returnResult= resutlData; + returnResult=result; +// materialMainService.intiMaterialInfo(result.getRecords()); +// Page> resutlData = new Page<>(); +// BeanUtil.copyProperties(result, resutlData); +// //resutlData.setRecords(handNodeToTree(result.getRecords())); +// returnResult= resutlData; } return returnResult; } - private Page> handSeachToTree(List parents, List childs){ - Page> resutlData = new Page<>(); + private Page handSeachToTree(List parents, List childs){ + Page resutlData = new Page<>(); Set parentSet = parents.stream().map(u -> u.getMaterialNo()).collect(Collectors.toSet()); Set childSet = childs.stream().map(u -> u.getMaterialNo()).collect(Collectors.toSet()); Set difference = Sets.difference(parentSet, childSet); @@ -123,23 +123,24 @@ public class BomNewEbomParentService extends ServiceImpl all=new ArrayList<>(); all.addAll(parents); all.addAll(childs); - List> result=new ArrayList<>(); + List result=new ArrayList<>(); for (BomNewEbomParentVO vo : resultParents) { - result.addAll( TreeUtils.toTree(vo.getRowId(), all, BomNewEbomParentVO::getParentRowId, BomNewEbomParentVO::getBomRowId)); + vo.setParentRowId(0L); + result.addAll( CTreeUtils.toTree(0L, all, BomNewEbomParentVO::getParentRowId, BomNewEbomParentVO::getBomRowId)); } resutlData.setRecords(result); return resutlData; } - private List> handNodeToTree(List list){ - List> result=new ArrayList<>(); - for (BomNewEbomParentVO vo : list) { - TreeNode treeData= new TreeNode<>(); - treeData.setData(vo); - result.add(treeData); - } - return result; - } +// private List handNodeToTree(List list){ +// List> result=new ArrayList<>(); +// for (BomNewEbomParentVO vo : list) { +// TreeNode treeData= new TreeNode<>(); +// treeData.setData(vo); +// result.add(treeData); +// } +// return result; +// } /** diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/CTreeNode.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/CTreeNode.java new file mode 100644 index 00000000..3f141b98 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/CTreeNode.java @@ -0,0 +1,16 @@ +package com.nflg.product.bomnew.util; + +import lombok.Data; +import org.apache.poi.ss.formula.functions.T; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; + + +public class CTreeNode { + + + + private List childNodes = Collections.emptyList(); +} diff --git a/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/CTreeUtils.java b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/CTreeUtils.java new file mode 100644 index 00000000..0be28161 --- /dev/null +++ b/nflg_project_dev/nflg-bom-new/src/main/java/com/nflg/product/bomnew/util/CTreeUtils.java @@ -0,0 +1,125 @@ +package com.nflg.product.bomnew.util; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import com.nflg.product.bomnew.pojo.vo.BomNewEbomParentVO; + +import javax.validation.constraints.NotNull; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** +* +* @author 大米 +* @date 2023/11/18 16:19 +*/ +public class CTreeUtils { + + + /** + * + * + * @param dataList 数据 + * @param keyFun id + * @param parentKeyFun 父级id + * @param rootKey 顶层的 id 值 ,比如部门树的顶层id是0 + */ + public static List toTree(K rootKey, + Collection dataList, + @NotNull Function parentKeyFun, + @NotNull Function keyFun) { + return toFilterTree(rootKey, dataList, parentKeyFun, keyFun, null); + } + + /** + * + * + * @param rootKey 顶层的 id 值 ,比如部门树的顶层id是0 + * @param dataList 数据列 + * @param parentKeyFun 取父级id的方法引用 + * @param keyFun 取子级id的方法引用 + * @param filterNoDataFun 存在这种场景,选人的时候,某个子部门以及父部门下没有下挂任何人员,那么这两个部门直接隐藏,避免对用户造成干扰, + * 这个参数表示部门实体类,人员字段的方法引用 + */ + public static List toFilterTree(K rootKey, + Collection dataList, + @NotNull Function parentKeyFun, + @NotNull Function keyFun, + Function filterNoDataFun) { + if (CollUtil.isEmpty(dataList)) { + return Collections.emptyList(); + } + + // 根据父节点,对列表进行分组 + Map> groupParentKeyMap = dataList.stream().filter(t -> parentKeyFun.apply(t) != null).collect(Collectors.groupingBy(parentKeyFun)); + List rootNodes; + if (rootKey == null) { + rootNodes = dataList.stream().filter(t -> parentKeyFun.apply(t) == null).collect(Collectors.toList()); + } else { + rootNodes = groupParentKeyMap.getOrDefault(rootKey, Collections.emptyList()); + } + + return handlerChildTree(rootNodes, groupParentKeyMap, keyFun, filterNoDataFun); + } + + /** + * 列表转树 + */ + private static List handlerChildTree(Collection rootNodes, Map> groupParentKeyMap, + Function keyFun, Function filterNoDataFun) { + if (CollUtil.isEmpty(rootNodes)) { + return Collections.emptyList(); + } + List nodes = new ArrayList<>(); + for (T t : rootNodes) { + List childNodesData = groupParentKeyMap.getOrDefault(keyFun.apply(t), Collections.emptyList()); + BomNewEbomParentVO node =new BomNewEbomParentVO(); + BeanUtil.copyProperties(t,node); + + List treeNodes = handlerChildTree(childNodesData, groupParentKeyMap, keyFun, filterNoDataFun); + if (filterNoDataFun != null && CollUtil.isEmpty(treeNodes)) { + if (skipNoDataNode(filterNoDataFun, t)) { + continue; + } + } + nodes.add(node); + node.setChildNodes(treeNodes); + } + return nodes; + } + + /** + * 判断是否为空数据,如果没有数据则隐藏 + */ + @SuppressWarnings("rawtypes") + private static boolean skipNoDataNode(Function filterNoDataFun, T t) { + D filterData = filterNoDataFun.apply(t); + if (filterData == null) { + return true; + } + if (filterData instanceof Collection) { + Collection filterDataList = (Collection) filterData; + return CollUtil.isEmpty(filterDataList); + } + return false; + } + + /** + * 树转list + */ + public static List toList(List> treeNodeList) { + List resultList = new ArrayList<>(); + for (TreeNode treeNode : treeNodeList) { + if (treeNode == null || treeNode.getData() == null) { + continue; + } + resultList.add(treeNode.getData()); + if (CollUtil.isNotEmpty(treeNode.getChildNodes())) { + resultList.addAll(toList(treeNode.getChildNodes())); + } + } + return resultList; + } +} + diff --git a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomParentMapper.xml b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomParentMapper.xml index 4ca707d6..e660aeff 100644 --- a/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomParentMapper.xml +++ b/nflg_project_dev/nflg-bom-new/src/main/resources/mapper/master/BomNewEbomParentMapper.xml @@ -105,15 +105,16 @@