Explorar el Código

解决部门菜单查询问题

caixiaofeng hace 10 meses
padre
commit
5834e82cdf

+ 35 - 0
flow-app/src/main/resources/mapper/system/DeptDao.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.flow.dao.DeptDao">
+
+    <resultMap id="BaseResultMap" type="com.flow.entity.Dept">
+        <id property="id" column="id" jdbcType="INTEGER"/>
+        <result property="pid" column="pid" jdbcType="INTEGER"/>
+        <result property="name" column="name" jdbcType="VARCHAR"/>
+        <result property="sort" column="sort" jdbcType="INTEGER"/>
+        <result property="leader" column="leader" jdbcType="VARCHAR"/>
+        <result property="createdBy" column="created_by" jdbcType="VARCHAR"/>
+        <result property="updatedBy" column="updated_by" jdbcType="VARCHAR"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <select id="getList" resultMap="BaseResultMap">
+        with recursive cte as (
+            select * from sys_dept
+            <where>
+                <if test="deptQuery.pid != null and deptQuery.pid != ''">
+                    and pid = #{deptQuery.pid}
+                </if>
+                <if test="deptQuery.name != null and deptQuery.name != ''">
+                    and name like concat('%',#{deptQuery.name},'%')
+                </if>
+            </where>
+            UNION
+            select sm.* from sys_dept sm, cte where sm.id = cte.pid
+        )
+        select * from cte order by sort asc
+    </select>
+
+
+</mapper>

+ 45 - 0
flow-app/src/main/resources/mapper/system/MenuDao.xml

@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.flow.dao.MenuDao">
+
+    <resultMap id="BaseResultMap" type="com.flow.entity.Menu">
+        <id property="id" column="id" jdbcType="INTEGER"/>
+        <result property="pid" column="pid" jdbcType="INTEGER"/>
+        <result property="type" column="type" jdbcType="VARCHAR"/>
+        <result property="name" column="name" jdbcType="VARCHAR"/>
+        <result property="sort" column="sort" jdbcType="INTEGER"/>
+        <result property="path" column="path" jdbcType="VARCHAR"/>
+        <result property="component" column="component" jdbcType="VARCHAR"/>
+        <result property="redirect" column="redirect" jdbcType="VARCHAR"/>
+        <result property="title" column="title" jdbcType="VARCHAR"/>
+        <result property="icon" column="icon" jdbcType="VARCHAR"/>
+        <result property="cache" column="keep_alive" jdbcType="BOOLEAN"/>
+        <result property="hidden" column="hidden" jdbcType="BOOLEAN"/>
+        <result property="affix" column="affix" jdbcType="BOOLEAN"/>
+        <result property="activeMenu" column="active_menu" jdbcType="VARCHAR"/>
+        <result property="permission" column="permission" jdbcType="VARCHAR"/>
+        <result property="createdBy" column="created_by" jdbcType="VARCHAR"/>
+        <result property="updatedBy" column="updated_by" jdbcType="VARCHAR"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <select id="getTree" resultMap="BaseResultMap">
+        with recursive cte as (
+            select * from sys_menu
+            <where>
+                <if test="menuQuery.pid != null and menuQuery.pid != ''">
+                    and pid = #{menuQuery.pid}
+                </if>
+                <if test="menuQuery.title != null and menuQuery.title != ''">
+                    and title like concat('%',#{menuQuery.title},'%')
+                </if>
+            </where>
+            UNION
+            select sm.* from sys_menu sm, cte where sm.id = cte.pid
+        )
+        select * from cte order by sort asc
+    </select>
+
+
+</mapper>

+ 3 - 0
flow-system/flow-system-biz/src/main/java/com/flow/dao/DeptDao.java

@@ -4,6 +4,7 @@ package com.flow.dao;
 import com.flow.common.mybatis.dao.BaseDao;
 import com.flow.entity.Dept;
 import com.flow.entity.User;
+import com.flow.model.DeptQuery;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
@@ -11,6 +12,8 @@ import java.util.List;
 
 public interface DeptDao extends BaseDao<Dept> {
 
+    List<Dept> getList(@Param("deptQuery") DeptQuery deptQuery);
+
     @Select("select * from sys_user where username  = (select leader from sys_dept where id =#{id})")
     User getLeader(@Param("id") String id);
 

+ 5 - 0
flow-system/flow-system-biz/src/main/java/com/flow/dao/MenuDao.java

@@ -3,7 +3,12 @@ package com.flow.dao;
 
 import com.flow.common.mybatis.dao.BaseDao;
 import com.flow.entity.Menu;
+import com.flow.model.MenuQuery;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 public interface MenuDao extends BaseDao<Menu> {
 
+    List<Menu> getTree(@Param("menuQuery") MenuQuery menuQuery);
 }

+ 1 - 4
flow-system/flow-system-biz/src/main/java/com/flow/service/impl/DeptServiceImpl.java

@@ -30,10 +30,7 @@ public class DeptServiceImpl extends BaseServiceImpl<DeptDao, Dept> implements D
 
     @Override
     public List<Dept> getList(DeptQuery deptQuery) {
-        Dept dept = deptMapper.toEntity(deptQuery);
-        return deptDao.lambdaQueryChain()
-                .setEntity(dept)
-                .list();
+        return deptDao.getList(deptQuery);
     }
 
     @Override

+ 1 - 4
flow-system/flow-system-biz/src/main/java/com/flow/service/impl/MenuServiceImpl.java

@@ -26,10 +26,7 @@ public class MenuServiceImpl extends BaseServiceImpl<MenuDao, Menu> implements M
 
     @Override
     public List<Menu> getTree(MenuQuery menuQuery) {
-        Menu menu = menuMapper.toEntity(menuQuery);
-        List<Menu> list = menuDao.lambdaQueryChain()
-                .setEntity(menu)
-                .list();
+        List<Menu> list = menuDao.getTree(menuQuery);
         //构建菜单树
         return list.stream()
                 .filter(m -> m.getPid() == 0)

+ 2 - 1
flow-system/flow-system-entity/src/main/java/com/flow/model/MenuQuery.java

@@ -7,5 +7,6 @@ import lombok.EqualsAndHashCode;
 @EqualsAndHashCode(callSuper = true)
 @Data
 public class MenuQuery extends Query {
-    private String name;
+    private String pid;
+    private String title;
 }