소스 검색

菜单查询

WXF 3 년 전
부모
커밋
de4f5d4642

+ 1 - 1
api-common/src/main/java/api/common/pojo/vo/system/DictVO.java

@@ -18,7 +18,7 @@ public class DictVO {
     //编码
     private String dictCode;
     //序号
-    private String dictOrder;
+    private int dictOrder;
     //子对象
     private List<DictVO> children;
 }

+ 24 - 0
api-common/src/main/java/api/common/pojo/vo/system/MenuVO.java

@@ -0,0 +1,24 @@
+package api.common.pojo.vo.system;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MenuVO {
+
+    //主键
+    private String id;
+    //菜单名称
+    private String name;
+    //菜单路由
+    private String router;
+    //菜单排序
+    private int sort;
+    //父id
+    private String parentId;
+    //是否可见
+    private String visible;
+
+    private List<MenuVO> children;
+}

+ 38 - 0
api-common/src/main/java/api/common/util/ObjectUtil.java

@@ -6,6 +6,8 @@ import org.springframework.beans.BeanUtils;
 
 import java.security.PublicKey;
 import java.util.*;
+import java.util.function.BiConsumer;
+import java.util.function.Function;
 
 public class ObjectUtil {
 
@@ -108,4 +110,40 @@ public class ObjectUtil {
     public static void voToPo(Object source, Object target){
         BeanUtils.copyProperties(source,target);
     }
+
+    /**
+     * list转tree结构,
+     * @param list List<T>类型数据源
+     * @param rootId tree的根节点id
+     * @param getId <T>类型获取id的方法
+     * @param getPid <T>类型获取父id的方法
+     * @param getChildren <T>类型获取子对象的方法
+     * @param setChildren <T>类型设置子对象的方法
+     * @param <T> 该对象满足父子关系的相关字段:id 和 父id
+     * @param <String> id的数据类型为String
+     * @return 树形结构的List<T>,多根型
+     */
+    public static <T,String> List<T> listToTree(List<T> list, String rootId, Function<T, String> getId , Function<T, String> getPid, Function<T, List<T>> getChildren, BiConsumer<T,List<T>> setChildren) {
+        List<T> treeList = new ArrayList<T>();
+        for (T node : list) {
+            if (rootId.equals(getPid.apply(node))) {
+                treeList.add(findChildren(node, list,getId,getPid,getChildren,setChildren));
+            }
+        }
+        return treeList;
+    }
+
+    /**
+     * list转tree递归调用
+     */
+    private static <T,String> T findChildren(T parent, List<T> list, Function<T, String> getId, Function<T, String> getPid, Function<T, List<T>> getChildren , BiConsumer<T,List<T>> setChildren) {
+        for (T node : list)
+            if (getId.apply(parent).equals(getPid.apply(node))) {
+                if (getChildren.apply(parent) == null || getChildren.apply(parent).size() == 0) {
+                    setChildren.accept(parent, new ArrayList<T>());
+                }
+                getChildren.apply(parent).add(findChildren(node, list, getId, getPid, getChildren,setChildren));
+            }
+        return parent;
+    }
 }

+ 34 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/system/ctrl/MenuCtrl.java

@@ -0,0 +1,34 @@
+package com.css.simulation.resource.system.ctrl;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.vo.system.MenuVO;
+import com.css.simulation.resource.system.service.MenuService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 菜单管理
+ */
+@Controller
+@RequestMapping("/menu")
+public class MenuCtrl {
+
+    @Autowired
+    MenuService menuService;
+
+    /**
+     * 获取当前登录人的菜单列表
+     */
+    @RequestMapping("/getMenus")
+    @ResponseBody
+    public ResponseBodyVO getMenus() {
+        ResponseBodyVO<List<MenuVO>> response = new ResponseBodyVO<List<MenuVO>>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(menuService.getMenus());
+        return response;
+    }
+}

+ 16 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/system/mapper/MenuMapper.java

@@ -0,0 +1,16 @@
+package com.css.simulation.resource.system.mapper;
+
+import api.common.pojo.vo.system.MenuVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface MenuMapper {
+
+    List<MenuVO> getMenus(@Param("userId") String userId);
+
+}

+ 24 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/system/service/MenuService.java

@@ -0,0 +1,24 @@
+package com.css.simulation.resource.system.service;
+
+import api.common.pojo.vo.system.MenuVO;
+import api.common.util.ObjectUtil;
+import com.css.simulation.resource.common.utils.AuthUtil;
+import com.css.simulation.resource.system.mapper.MenuMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class MenuService {
+
+    @Autowired
+    MenuMapper menuMapper;
+
+    public List<MenuVO> getMenus() {
+        String userId = AuthUtil.getCurrentUserId();
+        List<MenuVO> menus = menuMapper.getMenus(userId);
+        List<MenuVO> treeList = ObjectUtil.listToTree(menus, "0", MenuVO::getId, MenuVO::getParentId, MenuVO::getChildren, MenuVO::setChildren);
+        return treeList;
+    }
+}

+ 21 - 0
simulation-resource-server/src/main/resources/mapper/system/MenuMapper.xml

@@ -0,0 +1,21 @@
+<?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.css.simulation.resource.system.mapper.MenuMapper" >
+
+
+    <select id="getMenus" parameterType="java.lang.String" resultType="api.common.pojo.vo.system.MenuVO">
+        select
+            m.id,
+            m.name,
+            m.router,
+            m.sort,
+            m.parent_id,
+            m.visible
+        FROM system_user_role ur
+		INNER JOIN system_role r ON r.id = ur.role_id AND r.visible='1' AND r.is_deleted='0'
+        INNER JOIN system_role_menu rm ON rm.role_id = ur.role_id AND rm.is_deleted='0'
+        INNER JOIN system_menu m ON m.id=rm.menu_id AND m.visible='1' AND m.is_deleted='0'
+        WHERE ur.user_id = #{userId,jdbcType=VARCHAR}
+        ORDER BY m.sort
+    </select>
+</mapper>