suntianwu hace 3 años
padre
commit
635b512107

+ 54 - 0
src/main/java/com/care/bms/controller/MenuController.java

@@ -0,0 +1,54 @@
+package com.care.bms.controller;
+
+
+
+
+import com.care.bms.service.MenuService;
+import com.care.common.util.Result;
+import com.care.common.util.WebPageUtils;
+
+import com.care.common.vo.MenuVO;
+import com.care.common.vo.UserLogindConvertVO;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+
+/**
+ * @author
+ * @version 1.0.0 创建于 2019-12-04
+ **/
+@RestController
+@Slf4j
+public class MenuController {
+
+    @Resource
+    private MenuService menuService;
+
+
+    @ApiOperation(tags = {"菜单管理"}, value = "根据登录用户查询权限菜单全部列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", required = true, name = "token", dataType = "String", value = "token验证信息")
+    })
+    @GetMapping(value = "/menu/queryPrivMenus", produces = "application/json;charset=utf-8")
+    public Result<List<MenuVO>> queryPrivMenus(HttpServletRequest request,
+                                               @RequestHeader(name = "token", required = true) String token) {
+        try {
+            UserLogindConvertVO loginUser = WebPageUtils.getCurrentLoginedUser(request);
+            List<MenuVO> list = this.menuService.queryPrivMenus(loginUser.getId());
+            return Result.success(list);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error( "获取列表失败");
+        }
+    }
+
+}

+ 62 - 0
src/main/java/com/care/bms/service/MenuService.java

@@ -0,0 +1,62 @@
+package com.care.bms.service;
+
+
+import com.care.common.service.CareMenuService;
+
+import com.care.common.vo.MenuVO;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author: lilt
+ * @Date: 2021/7/14
+ * @Desc:
+ */
+@Service
+public class MenuService {
+    @Resource
+    private CareMenuService careMenuService;
+
+
+    public List<MenuVO> queryPrivMenus(Long userId) {
+        List<MenuVO> topMenus = careMenuService.getTopMenus(userId);
+        if (topMenus == null) {
+            return null;
+        }
+        for (int i = 0; i < topMenus.size(); i++) {
+            MenuVO vo = topMenus.get(i);
+            vo.setChildren(careMenuService.findChildMenus(vo.getId()));
+        }
+
+        //递归移除非本用户的权限菜单,并将子菜单为null的置为[]
+        removeNotUserMenu(userId, topMenus);
+
+        return topMenus;
+    }
+
+    /**
+     * 去除递归查询出的菜单中不属于指定用户的菜单信息
+     *
+     * @param userId
+     * @param topMenus
+     */
+    private void removeNotUserMenu(Long userId, List<MenuVO> topMenus) {
+        for (int i = 0; i < topMenus.size(); i++) {
+            MenuVO vo = topMenus.get(i);
+            if (!userId.equals(vo.getUserId())) {
+                topMenus.remove(i);
+                i--;
+                continue;
+            }
+
+            if (vo.getChildren() != null && vo.getChildren().size() > 0) {
+                removeNotUserMenu(userId, vo.getChildren());
+            } else {
+                vo.setChildren(new ArrayList<>());
+            }
+        }
+    }
+}

+ 63 - 0
src/main/java/com/care/common/entity/CareMenu.java

@@ -0,0 +1,63 @@
+package com.care.common.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 菜单权限表(CareMenu)实体类
+ *
+ * @author makejava
+ * @since 2021-12-09 21:18:56
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("care_menu")
+@ApiModel(value = "菜单权限表", description = "")
+public class CareMenu implements Serializable {
+    private static final long serialVersionUID = -84150949376858885L;
+
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Long id;
+
+
+    @ApiModelProperty("名称")
+    @TableField("NAME")
+    private String name;
+
+
+    @ApiModelProperty("路径,默认值")
+    @TableField("URL")
+    private String url;
+
+
+    @ApiModelProperty("父ID")
+    @TableField("PID")
+    private Long pid;
+
+
+    @ApiModelProperty("类型:menu.菜单; element.页面元素")
+    @TableField("TYPE")
+    private String type;
+
+
+    @ApiModelProperty("排序号")
+    @TableField("SORT")
+    private Integer sort;
+
+
+}

+ 65 - 0
src/main/java/com/care/common/entity/CareRole.java

@@ -0,0 +1,65 @@
+package com.care.common.entity;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 角色信息表(CareRole)实体类
+ *
+ * @author makejava
+ * @since 2021-12-09 21:18:57
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("care_role")
+@ApiModel(value = "角色信息表", description = "")
+public class CareRole implements Serializable {
+    private static final long serialVersionUID = -13026601247675005L;
+
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Long id;
+
+
+    @ApiModelProperty("名称")
+    @TableField("NAME")
+    private String name;
+
+
+    @ApiModelProperty("编码")
+    @TableField("CODE")
+    private String code;
+
+
+    @ApiModelProperty("备注")
+    @TableField("REMARK")
+    private String remark;
+
+
+    @ApiModelProperty("createTime")
+    @TableField("CREATE_TIME")
+    private Date createTime;
+
+
+    @ApiModelProperty("modifyTime")
+    @TableField("MODIFY_TIME")
+    private Date modifyTime;
+
+
+}

+ 48 - 0
src/main/java/com/care/common/entity/CareRoleMenuRel.java

@@ -0,0 +1,48 @@
+package com.care.common.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 角色菜单关系表(CareRoleMenuRel)实体类
+ *
+ * @author makejava
+ * @since 2021-12-09 21:18:57
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("care_role_menu_rel")
+@ApiModel(value = "角色菜单关系表", description = "")
+public class CareRoleMenuRel implements Serializable {
+    private static final long serialVersionUID = 744464092767795170L;
+
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Long id;
+
+
+    @ApiModelProperty("角色ID")
+    @TableField("ROLE_ID")
+    private String roleId;
+
+
+    @ApiModelProperty("菜单ID")
+    @TableField("MENU_ID")
+    private String menuId;
+
+
+}

+ 21 - 0
src/main/java/com/care/common/mapper/CareMenuMapper.java

@@ -0,0 +1,21 @@
+package com.care.common.mapper;
+
+import com.care.common.entity.CareMenu;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.care.common.vo.MenuVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+/**
+ * 菜单权限表(CareMenu)表数据库访问层
+ *
+ * @author makejava
+ * @since 2021-12-09 21:18:56
+ */
+public interface CareMenuMapper extends BaseMapper<CareMenu> {
+    List<MenuVO> getTopMenus(@Param("userId") Long userId);
+
+    List<MenuVO> findChildMenus(@Param("pid") Long pid);
+}

+ 15 - 0
src/main/java/com/care/common/mapper/CareRoleMapper.java

@@ -0,0 +1,15 @@
+package com.care.common.mapper;
+
+import com.care.common.entity.CareRole;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * 角色信息表(CareRole)表数据库访问层
+ *
+ * @author makejava
+ * @since 2021-12-09 21:18:57
+ */
+public interface CareRoleMapper extends BaseMapper<CareRole> {
+
+}

+ 15 - 0
src/main/java/com/care/common/mapper/CareRoleMenuRelMapper.java

@@ -0,0 +1,15 @@
+package com.care.common.mapper;
+
+import com.care.common.entity.CareRoleMenuRel;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * 角色菜单关系表(CareRoleMenuRel)表数据库访问层
+ *
+ * @author makejava
+ * @since 2021-12-09 21:18:57
+ */
+public interface CareRoleMenuRelMapper extends BaseMapper<CareRoleMenuRel> {
+
+}

+ 19 - 0
src/main/java/com/care/common/service/CareMenuService.java

@@ -0,0 +1,19 @@
+package com.care.common.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.care.common.entity.CareMenu;
+import com.care.common.vo.MenuVO;
+
+import java.util.List;
+
+/**
+ * 菜单权限表(CareMenu)表服务接口
+ *
+ * @author makejava
+ * @since 2021-12-09 21:18:56
+ */
+public interface CareMenuService extends IService<CareMenu> {
+    List<MenuVO> getTopMenus(Long userId);
+
+    List<MenuVO> findChildMenus( Long pid);
+}

+ 14 - 0
src/main/java/com/care/common/service/CareRoleMenuRelService.java

@@ -0,0 +1,14 @@
+package com.care.common.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.care.common.entity.CareRoleMenuRel;
+
+/**
+ * 角色菜单关系表(CareRoleMenuRel)表服务接口
+ *
+ * @author makejava
+ * @since 2021-12-09 21:18:57
+ */
+public interface CareRoleMenuRelService extends IService<CareRoleMenuRel> {
+
+}

+ 14 - 0
src/main/java/com/care/common/service/CareRoleService.java

@@ -0,0 +1,14 @@
+package com.care.common.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.care.common.entity.CareRole;
+
+/**
+ * 角色信息表(CareRole)表服务接口
+ *
+ * @author makejava
+ * @since 2021-12-09 21:18:57
+ */
+public interface CareRoleService extends IService<CareRole> {
+
+}

+ 29 - 0
src/main/java/com/care/common/service/impl/CareMenuServiceImpl.java

@@ -0,0 +1,29 @@
+package com.care.common.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.care.common.mapper.CareMenuMapper;
+import com.care.common.entity.CareMenu;
+import com.care.common.service.CareMenuService;
+import com.care.common.vo.MenuVO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 菜单权限表(CareMenu)表服务实现类
+ *
+ * @author makejava
+ * @since 2021-12-09 21:18:56
+ */
+@Service
+public class CareMenuServiceImpl extends ServiceImpl<CareMenuMapper, CareMenu> implements CareMenuService {
+    @Override
+    public List<MenuVO> getTopMenus(Long userId){
+        return this.baseMapper.getTopMenus(userId);
+    }
+
+    @Override
+    public List<MenuVO> findChildMenus(Long pid){
+        return this.baseMapper.findChildMenus(pid);
+    }
+}

+ 18 - 0
src/main/java/com/care/common/service/impl/CareRoleMenuRelServiceImpl.java

@@ -0,0 +1,18 @@
+package com.care.common.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.care.common.mapper.CareRoleMenuRelMapper;
+import com.care.common.entity.CareRoleMenuRel;
+import com.care.common.service.CareRoleMenuRelService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 角色菜单关系表(CareRoleMenuRel)表服务实现类
+ *
+ * @author makejava
+ * @since 2021-12-09 21:18:57
+ */
+@Service
+public class CareRoleMenuRelServiceImpl extends ServiceImpl<CareRoleMenuRelMapper, CareRoleMenuRel> implements CareRoleMenuRelService {
+
+}

+ 18 - 0
src/main/java/com/care/common/service/impl/CareRoleServiceImpl.java

@@ -0,0 +1,18 @@
+package com.care.common.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.care.common.mapper.CareRoleMapper;
+import com.care.common.entity.CareRole;
+import com.care.common.service.CareRoleService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 角色信息表(CareRole)表服务实现类
+ *
+ * @author makejava
+ * @since 2021-12-09 21:18:57
+ */
+@Service
+public class CareRoleServiceImpl extends ServiceImpl<CareRoleMapper, CareRole> implements CareRoleService {
+
+}

+ 58 - 0
src/main/java/com/care/common/vo/MenuVO.java

@@ -0,0 +1,58 @@
+package com.care.common.vo;
+
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 菜单权限表(CareMenu)实体类
+ *
+ * @author makejava
+ * @since 2021-12-09 21:18:56
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "菜单权限表", description = "")
+public class MenuVO implements Serializable {
+    private static final long serialVersionUID = -84150949376858885L;
+
+    private Long id;
+
+
+    @ApiModelProperty("名称")
+    private String name;
+
+
+    @ApiModelProperty("路径,默认值")
+    private String url;
+
+
+    @ApiModelProperty("父ID")
+    private Long pid;
+
+
+    @ApiModelProperty("类型:menu.菜单; element.页面元素")
+    private String type;
+
+
+    @ApiModelProperty("排序号")
+    private Integer sort;
+
+
+    @ApiModelProperty(dataType = "String", name = "userId", value = "用户ID")
+    private String userId;
+
+    @ApiModelProperty(dataType = "String",name = "children",value = "子菜单集合")
+    private List<MenuVO> children = new ArrayList<>();
+
+}

+ 35 - 0
src/main/resources/mybatis/CareMenuMapper.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.care.common.mapper.CareMenuMapper">
+
+    <resultMap type="com.care.common.vo.MenuVO" id="menuList">
+        <id property="id" column="id" />
+        <result property="name" column="name" />
+        <result property="url" column="url" />
+        <result property="type" column="type" />
+        <result property="pid" column="pid" />
+        <result property="userId" column="userId" />
+        <collection property="children"
+                    ofType="com.care.common.vo.MenuVO"
+                    select="findChildMenus"
+                    column="id" />
+    </resultMap>
+
+    <select id="findChildMenus" resultMap="menuList">
+        SELECT  m.id,m.name,m.url,m.type,m.pid,u.id userId
+        FROM care_menu m
+        left join care_role_menu_rel rm on rm.menu_id=m.id
+        left join care_role r on r.id=rm.role_id
+        left join care_sys_user u on u.role=r.code
+        WHERE pid=#{pid}
+        order by m.sort
+    </select>
+
+    <select id="getTopMenus" resultType="com.care.common.vo.MenuVO">
+        SELECT  m.id,m.name,m.url,m.type,m.pid,u.id userId from care_menu m
+        left join  care_role_menu_rel rm on rm.menu_id=m.id
+        left join care_role r on r.id=rm.role_id
+        left join care_sys_user u on u.role=r.code
+        WHERE u.id=#{userId} and m.pid ='-1' order by m.sort
+    </select>
+</mapper>

+ 6 - 0
src/main/resources/mybatis/CareRoleMapper.xml

@@ -0,0 +1,6 @@
+<?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.care.common.mapper.CareRoleMapper">
+
+
+</mapper>

+ 6 - 0
src/main/resources/mybatis/CareRoleMenuRelMapper.xml

@@ -0,0 +1,6 @@
+<?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.care.common.mapper.CareRoleMenuRelMapper">
+
+
+</mapper>