From 48fe97b97a376515d7c55b420c03f9d9230a04da Mon Sep 17 00:00:00 2001 From: wangqiong <1322446236@qq.com> Date: Tue, 25 Jun 2024 11:17:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=93=E6=9E=84=E6=A0=91?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/BomTreeServiceImpl.java | 76 ++++++++++++------- .../manage/vo/CostStandardDetailSearch.java | 4 +- 2 files changed, 50 insertions(+), 30 deletions(-) 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 index cfabdeb..cb3daf1 100644 --- 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 @@ -11,11 +11,16 @@ import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; import java.util.stream.Collectors; @Service +@Transactional public class BomTreeServiceImpl implements BomTreeService { @Autowired CostStandardDetailMapper costStandardDetailMapper; @@ -38,43 +43,60 @@ public class BomTreeServiceImpl implements BomTreeService { // 版本号 wrapper.like("c2.version_number", version_number); } - List costStandardDetailVOS = costStandardDetailMapper.queryListResult(wrapper); //查询所有满足条件的父节点 + List parentNodeList = costStandardDetailMapper.queryListResult(wrapper); + //所有子类节点 + List childrenNodeList = new ArrayList<>(); Map parentDataMap = new TreeMap<>(); - if ((StrUtil.isNotEmpty(materialNumber) || StrUtil.isNotEmpty(version_number)) && costStandardDetailVOS.size() > 0) { - parentDataMap = costStandardDetailVOS.stream().collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo)); - //查询所有父节点下的子节点 - QueryWrapper wrapper1 = new QueryWrapper<>(); - for (String materialNumber1 : parentDataMap.keySet()) { - wrapper1.like("parent_material_number", materialNumber1); + if (parentNodeList.size() > 0) { + //父类结果只有1个 + if (parentNodeList.size() == 1) { + parentDataMap = parentNodeList.stream().collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo)); + } else { + //父类结果有多个(找出最上级节点) + Map> levelGroupMap = parentNodeList.stream().collect(Collectors.groupingBy(CostStandardDetailVO::getLevel)); + TreeMap> levelTreeMap = new TreeMap<>(levelGroupMap); + parentDataMap = levelTreeMap.firstEntry().getValue().stream().collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo)); + } + //查询所有父节点下的子节点(即第二层叶子节点) + List costStandardDetails = new ArrayList<>(); + if (parentDataMap.size() > 0) { + QueryWrapper wrapper1 = new QueryWrapper<>(); + int num = 0; + for (String materialNumber1 : parentDataMap.keySet()) { + num = num + 1; + if (num > 1) { + wrapper1.or().eq("parent_material_number", materialNumber1); + } else { + wrapper1.eq("parent_material_number", materialNumber1); + } + } + costStandardDetails = costStandardDetailMapper.selectList(wrapper1); } - List costStandardDetails = costStandardDetailMapper.selectList(wrapper1); //第三层叶子节点 - List threeNodes=new ArrayList<>(); - if(costStandardDetails!=null&&costStandardDetails.size()>0){ - List materialNoList = costStandardDetails.stream().map(CostStandardDetail::getMaterialNumber).collect(Collectors.toList()); - QueryWrapper wrapper2 = new QueryWrapper<>(); - wrapper2.in("parent_material_number", materialNoList); - - threeNodes = costStandardDetailMapper.selectList(wrapper2); - } + List threeNodes = new ArrayList<>(); + if (costStandardDetails != null && costStandardDetails.size() > 0) { + List materialNoList = costStandardDetails.stream().map(CostStandardDetail::getMaterialNumber).collect(Collectors.toList()); + QueryWrapper wrapper2 = new QueryWrapper<>(); + wrapper2.in("parent_material_number", materialNoList); + threeNodes = costStandardDetailMapper.selectList(wrapper2); + } //把第二层叶子节点转化为bomtreeinfoVO对象集合 - costStandardDetailVOS=new ArrayList<>(); - for (int i=0;i bomTreeInfoVOS = BomTreeBuilder.buildBomTree(costStandardDetailVOS, parentDataMap); + List bomTreeInfoVOS = BomTreeBuilder.buildBomTree(childrenNodeList, parentDataMap); return bomTreeInfoVOS; } } diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/CostStandardDetailSearch.java b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/CostStandardDetailSearch.java index 01c8565..30e7812 100644 --- a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/CostStandardDetailSearch.java +++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/CostStandardDetailSearch.java @@ -2,17 +2,15 @@ package com.zzsmart.qomo.kn.cost.manage.vo; import io.swagger.annotations.ApiModel; import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; @Data -@Builder @NoArgsConstructor @AllArgsConstructor -@ApiModel(value="bom结构树", description="bom结构树") +@ApiModel(value = "bom结构树", description = "bom结构树") public class CostStandardDetailSearch extends CostStandardDetailVO { /** * 选择行的id