From d8c0f5c9f80e08b6e6d7091193a73692fd6b6f78 Mon Sep 17 00:00:00 2001 From: caihaohan Date: Fri, 19 Jan 2024 15:55:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=88=86=E9=A1=B5=E9=9B=B6=E9=83=A8?= =?UTF-8?q?=E4=BB=B6=E6=A0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/LawsPartNameController.java | 10 +- .../laws/standard/entity/PartName.java | 6 ++ .../laws/standard/entity/TreePage.java | 20 ++++ .../standard/service/PartNameService.java | 8 +- .../service/impl/PartNameServiceImpl.java | 102 +++++++++--------- 5 files changed, 90 insertions(+), 56 deletions(-) create mode 100644 laws-modules/src/main/java/com/jero/modules/laws/standard/entity/TreePage.java diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsPartNameController.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsPartNameController.java index be9a7b18..545003ae 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsPartNameController.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsPartNameController.java @@ -1,10 +1,12 @@ package com.jero.modules.laws.standard.controller; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.jero.common.api.vo.Result; import com.jero.common.aspect.annotation.AutoLog; import com.jero.modules.laws.enterprise.entity.vo.LawsTreeNodeModel; import com.jero.modules.laws.standard.entity.LawsTreeNode; import com.jero.modules.laws.standard.entity.PartName; +import com.jero.modules.laws.standard.entity.TreePage; import com.jero.modules.laws.standard.service.PartNameService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -34,9 +36,11 @@ public class LawsPartNameController { @AutoLog(value = "企业标准-零部件树") @ApiOperation(value = "企业标准-零部件树", notes = "企业标准-零部件树") @GetMapping("/") - public Result> queryENTreeList( - @RequestParam(required = false, defaultValue = "") @ApiParam("一级节点名称") String nodeName) { - List list = partNameService.queryTreeList(nodeName); + public Result> queryENTreeList( + @RequestParam(required = false, defaultValue = "") @ApiParam("一级节点名称") String nodeName, + @RequestParam(name = "pageNo", defaultValue = "1") @ApiParam("页码") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") @ApiParam("页面大小") Integer pageSize) { + TreePage list = partNameService.queryTreeList(nodeName, pageNo, pageSize); return Result.OK(list); } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/PartName.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/PartName.java index 6c610fac..19b95f7f 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/PartName.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/PartName.java @@ -86,6 +86,12 @@ public class PartName implements Serializable { @ApiModelProperty(value = "父级零件id") private String parentId; + /** + * 一级节点 + */ + @ApiModelProperty(value = "一级节点") + private String firstNode; + /** * 子零部件 */ diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/TreePage.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/TreePage.java new file mode 100644 index 00000000..5663812b --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/TreePage.java @@ -0,0 +1,20 @@ +package com.jero.modules.laws.standard.entity; + +import lombok.Data; + +import java.util.List; + +/** + * @author: Mzaxd + * @Date: 2024/1/19 15:24 + */ +@Data +public class TreePage { + + private List records; + private long total; + private long size; + private long current; + + +} diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/PartNameService.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/PartNameService.java index 6cf1ff63..fc929ac3 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/PartNameService.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/PartNameService.java @@ -1,9 +1,10 @@ package com.jero.modules.laws.standard.service; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.jero.modules.laws.enterprise.entity.vo.LawsTreeNodeModel; -import com.jero.modules.laws.standard.entity.LawsTreeNode; import com.jero.modules.laws.standard.entity.PartName; import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.laws.standard.entity.TreePage; import java.util.List; @@ -16,8 +17,11 @@ public interface PartNameService extends IService { /** * 查询零部件树 + * * @param nodeName + * @param pageNo + * @param pageSize * @return */ - List queryTreeList(String nodeName); + TreePage queryTreeList(String nodeName, Integer pageNo, Integer pageSize); } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/PartNameServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/PartNameServiceImpl.java index fbdef5f9..35514fff 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/PartNameServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/PartNameServiceImpl.java @@ -1,81 +1,81 @@ package com.jero.modules.laws.standard.service.impl; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.jero.common.constant.CommonConstant; +import com.jero.common.constant.enums.YesOrNoEnum; import com.jero.common.exception.JeroBootException; -import com.jero.modules.laws.enterprise.EnterpriseConstants; -import com.jero.modules.laws.enterprise.entity.vo.LawsTreeNodeModel; -import com.jero.modules.laws.enterprise.util.FindsTreeNodeChildrenUtil; -import com.jero.modules.laws.standard.entity.LawsTreeNode; import com.jero.modules.laws.standard.entity.PartName; +import com.jero.modules.laws.standard.entity.TreePage; import com.jero.modules.laws.standard.service.PartNameService; import com.jero.modules.laws.standard.mapper.PartNameMapper; -import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; -import java.util.Set; +import java.util.Map; +import java.util.function.Function; import java.util.stream.Collectors; + /** -* @author ThinkBook -* @description 针对表【laws_part_name】的数据库操作Service实现 -* @createDate 2024-01-19 10:37:39 -*/ + * @author ThinkBook + * @description 针对表【laws_part_name】的数据库操作Service实现 + * @createDate 2024-01-19 10:37:39 + */ @Service @Transactional(rollbackFor = JeroBootException.class) public class PartNameServiceImpl extends ServiceImpl - implements PartNameService{ + implements PartNameService { + + @Resource + private PartNameMapper partNameMapper; @Override - public List queryTreeList(String nodeName) { - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(PartName::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); - List allNodesPartName = this.list(query); + public TreePage queryTreeList(String nodeName, Integer pageNo, Integer pageSize) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(PartName::getDelFlag, YesOrNoEnum.NO.getValue()) + .like(StrUtil.isNotBlank(nodeName), PartName::getName, nodeName); + List allNodes = partNameMapper.selectList(queryWrapper); - // 将PartName转换为LawsTreeNode - List allNodes = this.convertPartNameToLawsTreeNode(allNodesPartName); + // 将所有节点转换为映射,以便快速查找 + Map nodeMap = allNodes.stream() + .collect(Collectors.toMap(PartName::getId, Function.identity())); - Set nodesSet = new HashSet<>(); + // 构建树形结构 + List topLevelNodes = new ArrayList<>(); + allNodes.forEach(node -> { + if (node.getParentId() == null) { + topLevelNodes.add(node); + } else { + PartName parentNode = nodeMap.get(node.getParentId()); + if (parentNode != null) { + if (parentNode.getChildPartNameList() == null) { + parentNode.setChildPartNameList(new ArrayList<>()); + } + parentNode.getChildPartNameList().add(node); + } + } + }); - List matchedNodes = allNodes.stream() - .filter(node -> node.getNodeName().contains(nodeName)) - .collect(Collectors.toList()); + // 实现分页逻辑 + int start = (pageNo - 1) * pageSize; + int end = Math.min(start + pageSize, topLevelNodes.size()); + List pageData = topLevelNodes.subList(start, end); - for (LawsTreeNode matchedNode : matchedNodes) { - nodesSet.addAll(LawsTreeNodeServiceImpl.findPathToRoot(allNodes, matchedNode)); - // 需求调整 只带上级不带下级 -// nodesSet.addAll(findAllChildren(allNodes, matchedNode)); - } - // 如果没有任何匹配或者只匹配到了跟节点,则只返回根节点 - List lawsTreeNodes = new ArrayList<>(); - if (nodesSet.size() <= 1) { - LawsTreeNode parentNode = allNodes.stream().filter(node -> node.getParentCode() == null).collect(Collectors.toList()).get(0); - lawsTreeNodes.add(parentNode); - } else { - lawsTreeNodes = new ArrayList<>(nodesSet); - } - // 调用wrapTreeDataToTreeList方法生成树状数据 - return FindsTreeNodeChildrenUtil.wrapTreeDataToTreeList(lawsTreeNodes); + // 封装分页信息 + TreePage result = new TreePage<>(); + result.setRecords(pageData); + result.setTotal(topLevelNodes.size()); + result.setSize(pageSize); + result.setCurrent(pageNo); + return result; } - private List convertPartNameToLawsTreeNode(List allNodesPartName) { - List allNodes = new ArrayList<>(); - for (PartName partName : allNodesPartName) { - LawsTreeNode lawsTreeNode = new LawsTreeNode(); - lawsTreeNode.setId(partName.getId()); - lawsTreeNode.setNodeCode(partName.getCode()); - lawsTreeNode.setNodeName(partName.getName()); - lawsTreeNode.setParentId(partName.getParentId()); - lawsTreeNode.setDelFlag(partName.getDelFlag()); - allNodes.add(lawsTreeNode); - } - return allNodes; - } }