Bladeren bron

1、部门列表树型结构构建

machaoyi 1 jaar geleden
bovenliggende
commit
006652752e

+ 19 - 10
.idea/workspace.xml

@@ -4,14 +4,13 @@
     <option name="autoReloadType" value="SELECTIVE" />
   </component>
   <component name="ChangeListManager">
-    <list default="true" id="1dc46973-e6f5-473b-a131-bf2bbc2dca15" name="更改" comment="1、修改登录接口的userName字段&#10;2、long类型的id使用string字符串传递给前端&#10;3、优化用户相关接口&#10;4、新增用户详情表&#10;5、新增mybatis-plus-join">
-      <change afterPath="$PROJECT_DIR$/application/src/main/java/com/ctsi/SysMenu/controller/SysMenuController.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/application/src/main/java/com/ctsi/SysMenu/entity/SysMenu.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/application/src/main/java/com/ctsi/SysMenu/mapper/SysMenuMapper.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/application/src/main/java/com/ctsi/SysMenu/mapper/SysMenuMapper.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/application/src/main/java/com/ctsi/SysMenu/service/SysMenuService.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/application/src/main/java/com/ctsi/SysMenu/service/impl/SysMenuServiceImpl.java" afterDir="false" />
+    <list default="true" id="1dc46973-e6f5-473b-a131-bf2bbc2dca15" name="更改" comment="1、菜单接口、部门接口">
+      <change afterPath="$PROJECT_DIR$/application/src/main/java/com/ctsi/SysOrg/entity/SysOrgSearchPO.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/application/src/main/java/com/ctsi/SysOrg/controller/SysOrgController.java" beforeDir="false" afterPath="$PROJECT_DIR$/application/src/main/java/com/ctsi/SysOrg/controller/SysOrgController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/application/src/main/java/com/ctsi/SysOrg/mapper/SysOrgMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/application/src/main/java/com/ctsi/SysOrg/mapper/SysOrgMapper.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/application/src/main/java/com/ctsi/SysOrg/service/SysOrgService.java" beforeDir="false" afterPath="$PROJECT_DIR$/application/src/main/java/com/ctsi/SysOrg/service/SysOrgService.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/application/src/main/java/com/ctsi/SysOrg/service/impl/SysOrgServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/application/src/main/java/com/ctsi/SysOrg/service/impl/SysOrgServiceImpl.java" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -89,6 +88,7 @@
       <recent name="C:\Users\setin\IdeaProjects\GeneralFrame\application\src\main\java\com\ctsi" />
     </key>
     <key name="CopyClassDialog.RECENTS_KEY">
+      <recent name="com.ctsi.SysOrg.entity" />
       <recent name="com.ctsi.user.entity" />
       <recent name="com.ctsi.utils" />
     </key>
@@ -117,7 +117,7 @@
       <option name="number" value="Default" />
       <option name="presentableId" value="Default" />
       <updated>1704693898384</updated>
-      <workItem from="1704693899463" duration="51860000" />
+      <workItem from="1704693899463" duration="55166000" />
     </task>
     <task id="LOCAL-00001" summary="基础框架配置">
       <option name="closed" value="true" />
@@ -143,7 +143,15 @@
       <option name="project" value="LOCAL" />
       <updated>1704866904070</updated>
     </task>
-    <option name="localTasksCounter" value="4" />
+    <task id="LOCAL-00004" summary="1、菜单接口、部门接口">
+      <option name="closed" value="true" />
+      <created>1704868851272</created>
+      <option name="number" value="00004" />
+      <option name="presentableId" value="LOCAL-00004" />
+      <option name="project" value="LOCAL" />
+      <updated>1704868851272</updated>
+    </task>
+    <option name="localTasksCounter" value="5" />
     <servers />
   </component>
   <component name="TypeScriptGeneratedFilesManager">
@@ -154,6 +162,7 @@
     <MESSAGE value="基础框架配置" />
     <MESSAGE value="1、post请求用body体&#10;2、通用返回体" />
     <MESSAGE value="1、修改登录接口的userName字段&#10;2、long类型的id使用string字符串传递给前端&#10;3、优化用户相关接口&#10;4、新增用户详情表&#10;5、新增mybatis-plus-join" />
-    <option name="LAST_COMMIT_MESSAGE" value="1、修改登录接口的userName字段&#10;2、long类型的id使用string字符串传递给前端&#10;3、优化用户相关接口&#10;4、新增用户详情表&#10;5、新增mybatis-plus-join" />
+    <MESSAGE value="1、菜单接口、部门接口" />
+    <option name="LAST_COMMIT_MESSAGE" value="1、菜单接口、部门接口" />
   </component>
 </project>

+ 2 - 1
application/src/main/java/com/ctsi/SysOrg/controller/SysOrgController.java

@@ -1,6 +1,7 @@
 package com.ctsi.SysOrg.controller;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ctsi.SysOrg.entity.SysOrgSearchPO;
 import com.ctsi.entity.FramePage;
 import com.ctsi.utils.ApiResult;
 import io.swagger.annotations.Api;
@@ -51,7 +52,7 @@ public class SysOrgController{
      */
     @ApiOperation("分页查询")
     @GetMapping
-    public ApiResult<Page<SysOrg>> paginQuery(SysOrg sysOrg, FramePage framePage){
+    public ApiResult<Page<SysOrgSearchPO>> paginQuery(SysOrg sysOrg, FramePage framePage){
         try {
             return ApiResult.success(sysOrgService.paginQuery(sysOrg, framePage.getPageNum(), framePage.getPageSize()));
         } catch (Exception e) {

+ 90 - 0
application/src/main/java/com/ctsi/SysOrg/entity/SysOrgSearchPO.java

@@ -0,0 +1,90 @@
+package com.ctsi.SysOrg.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ctsi.utils.LongtoStringSerialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+* 部门信息表;
+* @author : machaoyi
+* @date : 2024-1-10
+*/
+@ApiModel(value = "部门信息表查询PO",description = "")
+@TableName("sys_org")
+public class SysOrgSearchPO implements Serializable,Cloneable{
+   /** 主键id */
+   @ApiModelProperty(value = "主键id",notes = "")
+   @TableId
+   @JsonSerialize(using = LongtoStringSerialize.class)
+   private Long id ;
+   /** 部门名称 */
+   @ApiModelProperty(value = "部门名称",notes = "")
+   private String orgName ;
+   /** 描述 */
+   @ApiModelProperty(value = "描述",notes = "")
+   private String description ;
+   /** 父级 */
+   @ApiModelProperty(value = "父级",notes = "")
+   private Long parentId ;
+   @ApiModelProperty(value = "子部门",notes = "")
+   private List<SysOrgSearchPO> children;
+   /** 排序 */
+    @ApiModelProperty(value = "排序",notes = "")
+    private Integer orderBy ;
+
+   /** 主键id */
+   public Long getId(){
+       return this.id;
+   }
+   /** 主键id */
+   public void setId(Long id){
+       this.id=id;
+   }
+   /** 部门名称 */
+   public String getOrgName(){
+       return this.orgName;
+   }
+   /** 部门名称 */
+   public void setOrgName(String orgName){
+       this.orgName=orgName;
+   }
+   /** 描述 */
+   public String getDescription(){
+       return this.description;
+   }
+   /** 描述 */
+   public void setDescription(String description){
+       this.description=description;
+   }
+   /** 父级 */
+   public Long getParentId(){
+       return this.parentId;
+   }
+   /** 父级 */
+   public void setParentId(Long parentId){
+       this.parentId=parentId;
+   }
+
+   public List<SysOrgSearchPO> getChildren() {
+      return children;
+   }
+
+   public void setChildren(List<SysOrgSearchPO> children) {
+      this.children = children;
+   }
+
+   public Integer getOrderBy() {
+      return orderBy;
+   }
+
+   public void setOrderBy(Integer orderBy) {
+      this.orderBy = orderBy;
+   }
+}

+ 2 - 1
application/src/main/java/com/ctsi/SysOrg/mapper/SysOrgMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.github.yulichang.base.MPJBaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import com.ctsi.SysOrg.entity.SysOrg;
@@ -14,7 +15,7 @@ import com.ctsi.SysOrg.entity.SysOrg;
  * @date : 2024-1-10
  */
 @Mapper
-public interface SysOrgMapper  extends BaseMapper<SysOrg>{
+public interface SysOrgMapper  extends MPJBaseMapper<SysOrg> {
     /** 
      * 分页查询指定行数据
      *

+ 3 - 2
application/src/main/java/com/ctsi/SysOrg/service/SysOrgService.java

@@ -2,8 +2,9 @@ package com.ctsi.SysOrg.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ctsi.SysOrg.entity.SysOrg;
+import com.ctsi.SysOrg.entity.SysOrgSearchPO;
 
- /**
+/**
  * 部门信息表;(sys_org)表服务接口
  * @author : machaoyi
  * @date : 2024-1-10
@@ -26,7 +27,7 @@ public interface SysOrgService{
      * @param size  每页大小
      * @return
      */
-    Page<SysOrg> paginQuery(SysOrg sysOrg, long current, long size);
+    Page<SysOrgSearchPO> paginQuery(SysOrg sysOrg, long current, long size);
     /** 
      * 新增数据
      *

+ 59 - 5
application/src/main/java/com/ctsi/SysOrg/service/impl/SysOrgServiceImpl.java

@@ -1,6 +1,10 @@
 package com.ctsi.SysOrg.service.impl;
 
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.annotation.OrderBy;
+import com.ctsi.SysOrg.entity.SysOrgSearchPO;
+import com.github.yulichang.query.MPJQueryWrapper;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -10,7 +14,10 @@ import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWra
 import com.ctsi.SysOrg.entity.SysOrg;
 import com.ctsi.SysOrg.mapper.SysOrgMapper;
 import com.ctsi.SysOrg.service.SysOrgService;
- /**
+
+import java.util.*;
+
+/**
  * 部门信息表;(sys_org)表服务实现类
  * @author : machaoyi
  * @date : 2024-1-10
@@ -38,18 +45,21 @@ public class SysOrgServiceImpl implements SysOrgService{
      * @param size  每页大小
      * @return
      */
-    public Page<SysOrg> paginQuery(SysOrg sysOrg, long current, long size){
+    public Page<SysOrgSearchPO> paginQuery(SysOrg sysOrg, long current, long size){
         //1. 构建动态查询条件
-        LambdaQueryWrapper<SysOrg> queryWrapper = new LambdaQueryWrapper<>();
+        MPJLambdaWrapper<SysOrg> queryWrapper = new MPJLambdaWrapper<>();
         if(StrUtil.isNotBlank(sysOrg.getOrgName())){
             queryWrapper.eq(SysOrg::getOrgName, sysOrg.getOrgName());
         }
         if(StrUtil.isNotBlank(sysOrg.getDescription())){
             queryWrapper.eq(SysOrg::getDescription, sysOrg.getDescription());
         }
+        queryWrapper.selectAll(SysOrg.class);
+        queryWrapper.orderByAsc("ORDER_BY");
         //2. 执行分页查询
-        Page<SysOrg> pagin = new Page<>(current , size , true);
-        IPage<SysOrg> selectResult = sysOrgMapper.selectPage(pagin , queryWrapper);
+        Page<SysOrgSearchPO> pagin = new Page<>(current , size , true);
+        IPage<SysOrgSearchPO> selectResult = sysOrgMapper.selectJoinPage(pagin , SysOrgSearchPO.class, queryWrapper);
+        selectResult.setRecords(buildTree(selectResult.getRecords()));
         pagin.setPages(selectResult.getPages());
         pagin.setTotal(selectResult.getTotal());
         pagin.setRecords(selectResult.getRecords());
@@ -104,4 +114,48 @@ public class SysOrgServiceImpl implements SysOrgService{
         int total = sysOrgMapper.deleteById(id);
         return total > 0;
     }
+
+
+     public static List<SysOrgSearchPO> buildTree(List<SysOrgSearchPO> nodeList) {
+         Map<Long, SysOrgSearchPO> nodeMap = new LinkedHashMap<>();
+
+         // 将节点放入 Map 中,方便通过 id 查找
+         for (SysOrgSearchPO node : nodeList) {
+             nodeMap.put(node.getId(), node);
+         }
+
+         List<SysOrgSearchPO> tree = new ArrayList<>();
+
+         // 逐个节点构建树
+         for (SysOrgSearchPO node : nodeList) {
+             if (node.getParentId() == 0) {
+                 // 根节点
+                 tree.add(buildTreeRecursively(node, nodeMap, node.getId()));
+             }
+         }
+
+         return tree;
+     }
+
+     private static SysOrgSearchPO buildTreeRecursively(SysOrgSearchPO parentNode, Map<Long, SysOrgSearchPO> nodeMap, Long parentId) {
+         List<SysOrgSearchPO> children = new ArrayList<>();
+
+         // 查找当前节点的子节点
+         nodeMap.forEach((id, node) -> {
+             if (Objects.equals(node.getParentId(), parentId)) {
+                 children.add(buildTreeRecursively(node, nodeMap, node.getId()));
+             }
+         });
+//         for (SysOrgSearchPO node : nodeMap.values()) {
+//             if (Objects.equals(node.getParentId(), parentId)) {
+//                 // 递归构建子节点
+//                 children.add(buildTreeRecursively(node, nodeMap, node.getId()));
+//             }
+//         }
+
+         // 将子节点设置到父节点
+         parentNode.setChildren(children);
+
+         return parentNode;
+     }
 }