From e23b549197d623b00907e0cc6ae973a299091434 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Thu, 22 Feb 2018 21:46:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8F=9C=E5=8D=95=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- new_intall_20180222.sql | 275 ++++++++++++++ src/main/java/com/ruoyi/RuoYiApplication.java | 2 - .../core/controller/BaseController.java | 2 +- .../project/system/menu/dao/IMenuDao.java | 22 ++ .../project/system/menu/dao/MenuDao.java | 38 ++ .../project/system/menu/domain/Menu.java | 202 +++++++++++ .../system/menu/service/IMenuService.java | 22 ++ .../system/menu/service/MenuService.java | 36 ++ .../user/controller/IndexController.java | 27 +- .../user/controller/LoginController.java | 2 - .../project/system/user/domain/User.java | 36 +- .../java/com/ruoyi/project/util/TreeUtil.java | 185 ++++++++++ src/main/resources/application-druid.yml | 3 +- src/main/resources/application.yml | 68 ++-- src/main/resources/mybatis/mybatis-config.xml | 12 +- .../mybatis/system/SystemMenuMapper.xml | 32 ++ .../{UserMapper.xml => SystemUserMapper.xml} | 0 src/main/resources/templates/index.html | 334 +++++++++--------- 18 files changed, 1057 insertions(+), 241 deletions(-) create mode 100644 new_intall_20180222.sql create mode 100644 src/main/java/com/ruoyi/project/system/menu/dao/IMenuDao.java create mode 100644 src/main/java/com/ruoyi/project/system/menu/dao/MenuDao.java create mode 100644 src/main/java/com/ruoyi/project/system/menu/domain/Menu.java create mode 100644 src/main/java/com/ruoyi/project/system/menu/service/IMenuService.java create mode 100644 src/main/java/com/ruoyi/project/system/menu/service/MenuService.java create mode 100644 src/main/java/com/ruoyi/project/util/TreeUtil.java create mode 100644 src/main/resources/mybatis/system/SystemMenuMapper.xml rename src/main/resources/mybatis/system/{UserMapper.xml => SystemUserMapper.xml} (100%) diff --git a/new_intall_20180222.sql b/new_intall_20180222.sql new file mode 100644 index 000000000..7bf3aa7bf --- /dev/null +++ b/new_intall_20180222.sql @@ -0,0 +1,275 @@ +-- ---------------------------- +-- 1、创建部门表 +-- ---------------------------- +drop table if exists sys_dept; +create table sys_dept ( + dept_id int(11) not null auto_increment comment '部门ID', + parent_id int(11) default 0 comment '父部门ID', + dept_name varchar(30) default '' comment '部门名称', + order_num int(4) default null comment '显示顺序', + status int(1) default 0 comment '部门状态:0正常,1停用', + primary key (dept_id) +) engine=innodb auto_increment=100 default charset=utf8; + +-- ---------------------------- +-- 初始化-部门表数据 +-- ---------------------------- +insert into sys_dept values('1', '0', '研发部', '1', '0'); +insert into sys_dept values('2', '0', '测试部', '2', '0'); +insert into sys_dept values('3', '0', '市场部', '3', '0'); + +insert into sys_dept values('4', '1', '研发一部', '1', '0'); +insert into sys_dept values('5', '1', '研发二部', '2', '0'); +insert into sys_dept values('6', '1', '研发三部', '3', '0'); +insert into sys_dept values('7', '2', '测试一部', '1', '0'); +insert into sys_dept values('8', '2', '测试二部', '2', '0'); +insert into sys_dept values('9', '3', '市场一部', '1', '0'); +insert into sys_dept values('10', '3', '市场二部', '2', '0'); + + +-- ---------------------------- +-- 2、创建用户信息表 +-- ---------------------------- +drop table if exists sys_user; +create table sys_user ( + user_id int(11) not null auto_increment comment '用户ID', + dept_id int(20) default null comment '部门ID', + login_name varchar(30) not null comment '登录名', + user_name varchar(30) default '' comment '用户名称', + email varchar(100) default '' comment '用户邮箱', + phonenumber varchar(20) default '' comment '手机号码', + password varchar(100) not null comment '密码', + salt varchar(100) default '' comment '盐加密', + status int(1) default 0 comment '帐号状态:0正常,1锁定,2黑名单,3禁止', + refuse_des varchar(500) default '' comment '拒绝登录描述', + create_time varchar(30) default null comment '创建时间', + primary key (user_id) +) engine=innodb auto_increment=100 default charset=utf8; + +-- ---------------------------- +-- 初始化-用户信息表数据 +-- ---------------------------- +insert into sys_user values('1', '1', 'admin', '阳宗专', 'yzz_ivy@163.com', '1517911213', '172eee54aa664e9dd0536b063796e54e', '', 0, '维护中', '2018-01-01'); +insert into sys_user values('2', '1', 'eptok', '银盛通信', 'ys@eptok.com', '15220051213', '172eee54aa664e9dd0536b063796e54e', '', 3, '黑名单', '2018-01-01'); + + + +-- ---------------------------- +-- 3、创建角色信息表 +-- ---------------------------- +drop table if exists sys_role; +create table sys_role ( + role_id int(10) not null auto_increment comment '角色ID', + role_name varchar(30) not null comment '角色名', + status int(1) default 0 comment '角色状态:0正常,1禁用', + create_time varchar(30) default null comment '创建时间', + update_time varchar(30) default null comment '更新时间', + update_by varchar(30) default null comment '更新者', + remark varchar(500) default '' comment '备注', + primary key (role_id) +) engine=innodb auto_increment=100 default charset=utf8; + +-- ---------------------------- +-- 初始化-角色信息表数据 +-- ---------------------------- +insert into sys_role values('1', '管理员', 0, '2018-01-01', '', 'system', '管理员'); +insert into sys_role values('2', '普通角色', 0, '2018-01-01', '', 'system', '普通角色'); + + + +-- ---------------------------- +-- 4、创建菜单权限表 +-- ---------------------------- +drop table if exists sys_menu; +create table sys_menu ( + menu_id int(11) not null auto_increment comment '菜单ID', + menu_name varchar(50) not null comment '菜单名称', + parent_id int(11) default 0 comment '父菜单ID', + order_num int(4) default null comment '显示顺序', + url varchar(200) default '' comment '菜单URL', + menu_type char(1) default '' comment '类型:M目录,C菜单,F按钮', + visible int(1) default 0 comment '菜单状态:0显示,1隐藏', + perms varchar(100) default '' comment '权限字符串', + icon varchar(100) default '' comment '菜单图标', + create_time varchar(30) default null comment '创建时间', + update_time varchar(30) default null comment '更新时间', + update_by varchar(30) default null comment '更新者', + remark varchar(500) default '' comment '备注', + primary key (menu_id) +) engine=innodb auto_increment=1000 default charset=utf8; + +-- ---------------------------- +-- 初始化-菜单信息表数据 +-- ---------------------------- +-- 一级菜单 +insert into sys_menu values('1', '系统管理', '0', '1', '#', 'M', '0', 'system', 'fa fa-gear', '2018-01-01', '', 'system', '系统管理目录'); +insert into sys_menu values('2', '系统监控', '0', '2', '#', 'M', '0', 'monitor', 'fa fa-video-camera', '2018-01-01', '', 'system', '系统监控目录'); +-- 二级菜单 +insert into sys_menu values('3', '用户管理', '1', '1', '/system/userView.action', 'C', '0', 'system:user', '#', '2018-01-01', '', 'system', '用户管理菜单'); +insert into sys_menu values('4', '角色管理', '1', '2', '/system/roleView.action', 'C', '0', 'system:role', '#', '2018-01-01', '', 'system', '角色管理菜单'); +insert into sys_menu values('5', '菜单管理', '1', '3', '/system/menuView.action', 'C', '0', 'system:menu', '#', '2018-01-01', '', 'system', '菜单管理菜单'); +insert into sys_menu values('6', '操作日志', '1', '4', '/system/operlogView.action', 'C', '0', 'system:operlog', '#', '2018-01-01', '', 'system', '操作日志菜单'); +insert into sys_menu values('7', '登录日志', '1', '5', '/system/userlogView.action', 'C', '0', 'system:userlog', '#', '2018-01-01', '', 'system', '登录日志菜单'); +insert into sys_menu values('8', '数据监控', '2', '1', '/monitor/druid/index.html', 'C', '0', 'monitor:druid', '#', '2018-01-01', '', 'system', '数据监控菜单'); +--- 三级用户按钮 +insert into sys_menu values('9', '用户新增', '3', '1', '/system/user/add.action', 'F', '0', 'sys:user:add', '#', '2018-01-01', '', 'system', '用户管理新增按钮'); +insert into sys_menu values('10', '用户修改', '3', '2', '/system/user/update.action', 'F', '0', 'sys:user:update', '#', '2018-01-01', '', 'system', '用户管理修改按钮'); +insert into sys_menu values('11', '用户删除', '3', '3', '/system/user/delete.action', 'F', '0', 'sys:user:delete', '#', '2018-01-01', '', 'system', '用户管理删除按钮'); +insert into sys_menu values('12', '用户查询', '3', '4', '/system/user/select.action', 'F', '0', 'sys:user:select', '#', '2018-01-01', '', 'system', '用户管理查询按钮'); +insert into sys_menu values('13', '密码修改', '3', '5', '/system/user/pwdUpdate.action', 'F', '0', 'sys:user:pwdUpdate', '#', '2018-01-01', '', 'system', '用户密码修改按钮'); +--- 三级角色按钮 +insert into sys_menu values('14', '角色新增', '4', '1', '/system/role/add.action', 'F', '0', 'sys:role:add', '#', '2018-01-01', '', 'system', '角色管理新增按钮'); +insert into sys_menu values('15', '角色修改', '4', '2', '/system/role/update.action', 'F', '0', 'sys:role:update', '#', '2018-01-01', '', 'system', '角色管理修改按钮'); +insert into sys_menu values('16', '角色删除', '4', '3', '/system/role/delete.action', 'F', '0', 'sys:role:delete', '#', '2018-01-01', '', 'system', '角色管理删除按钮'); +insert into sys_menu values('17', '角色查询', '4', '4', '/system/role/select.action', 'F', '0', 'sys:role:select', '#', '2018-01-01', '', 'system', '角色管理查询按钮'); +insert into sys_menu values('18', '角色授权', '4', '5', '/system/role/auth.action', 'F', '0', 'sys:role:auth', '#', '2018-01-01', '', 'system', '角色管理授权按钮'); +--- 三级菜单按钮 +insert into sys_menu values('19', '菜单新增', '5', '1', '/system/role/add.action', 'F', '0', 'sys:menu:add', '#', '2018-01-01', '', 'system', '菜单管理新增按钮'); +insert into sys_menu values('20', '菜单修改', '5', '2', '/system/role/update.action', 'F', '0', 'sys:menu:update', '#', '2018-01-01', '', 'system', '菜单管理修改按钮'); +insert into sys_menu values('21', '菜单删除', '5', '3', '/system/role/delete.action', 'F', '0', 'sys:menu:delete', '#', '2018-01-01', '', 'system', '菜单管理删除按钮'); +insert into sys_menu values('22', '菜单查询', '5', '4', '/system/role/select.action', 'F', '0', 'sys:menu:select', '#', '2018-01-01', '', 'system', '菜单管理查询按钮'); +--- 三级日志按钮 +insert into sys_menu values('23', '操作日志查询', '4', '5', '/system/operlog/auth.action', 'F', '0', 'sys:operlog:select', '#', '2018-01-01', '', 'system', '操作日志查询按钮'); +insert into sys_menu values('24', '登录日志查询', '4', '5', '/system/userlog/auth.action', 'F', '0', 'sys:userlog:select', '#', '2018-01-01', '', 'system', '登录日志查询按钮'); + + +-- ---------------------------- +-- 5、创建用户和角色关联表 用户N-1角色 +-- ---------------------------- +drop table if exists sys_user_role; +create table sys_user_role ( + user_id int(11) not null comment '用户ID', + role_id int(11) not null comment '角色ID', + primary key(user_id, role_id) +) engine=innodb default charset=utf8; + +-- ---------------------------- +-- 初始化-用户和角色关联表数据 +-- ---------------------------- +insert into sys_user_role values ('1', '1'); +insert into sys_user_role values ('2', '2'); + + + +-- ---------------------------- +-- 6、创建角色和菜单关联表 角色1-N菜单 +-- ---------------------------- +drop table if exists sys_role_menu; +create table sys_role_menu ( + role_id int(11) not null comment '角色ID', + menu_id int(11) not null comment '菜单ID', + primary key(role_id, menu_id) +) engine=innodb default charset=utf8; + +-- ---------------------------- +-- 初始化-角色和菜单关联表数据 +-- ---------------------------- +insert into sys_role_menu values ('1', '1'); +insert into sys_role_menu values ('1', '2'); +insert into sys_role_menu values ('1', '3'); +insert into sys_role_menu values ('1', '4'); +insert into sys_role_menu values ('1', '5'); +insert into sys_role_menu values ('1', '6'); +insert into sys_role_menu values ('1', '7'); +insert into sys_role_menu values ('1', '8'); + + +-- ---------------------------- +-- 7、创建操作日志管理表 +-- ---------------------------- +drop table if exists oper_log; +create table oper_log ( + operid int(11) not null auto_increment comment '日志主键', + opername varchar(50) default '' comment '操作员名称', + opertime varchar(30) default null comment '操作时间', + opertype varchar(50) default '' comment '操作类型', + opertparam varchar(255) default '' comment '操作参数', + opertip varchar(30) default '' comment '执行地址', + operturl varchar(255) default '' comment '请求URL', + status varchar(3) default '' comment '状态0正常 1错误', + message varchar(255) default '' comment '错误消息', + primary key (operid) +) engine=innodb auto_increment=100 default charset=utf8; + +insert into oper_log values(1, 'admin', '2018-01-01', '系统管理-启用/停用-用户', 'delete.do?id=1', '127.0.0.1', 'system/changeUserStatus.action', '0', ''); + +-- ---------------------------- +-- 8、创建数据字典表 +-- ---------------------------- +drop table if exists sys_code; +create table sys_code ( + codekey varchar(50) not null comment '标识', + codeid varchar(50) not null comment '键', + codevalue varchar(50) not null comment '值', + codedesc varchar(50) default '' comment '描述', + codestyle varchar(255) default '' comment '样式', + codeorder varchar(2) default '' comment '排序', + primary key (codeid, codekey) +) engine=innodb default charset=utf8; + +-- ---------------------------- +-- 初始化用户状态选项列表 +-- ---------------------------- +insert into sys_code values('system-user-status', '0', '正常', '', '', '1'); +insert into sys_code values('system-user-status', '1', '锁定', '', '', '2'); +insert into sys_code values('system-user-status', '2', '黑名单', '', '', '3'); +insert into sys_code values('system-user-status', '3', '禁止', '', '', '4'); + +-- ---------------------------- +-- 初始化菜单选项列表 +-- ---------------------------- +insert into sys_code values('system-menu-status', '0', '显示', '', '', '1'); +insert into sys_code values('system-menu-status', '1', '隐藏', '', '', '2'); + +-- ---------------------------- +-- 初始化登录日志状态选项列表 +-- ---------------------------- +insert into sys_code values('system-operlog-status', '0', '成功', '', '', '1'); +insert into sys_code values('system-operlog-status', '1', '失败', '', '', '2'); + + + +-- ---------------------------- +-- 9、系统访问日志情况信息 +-- ---------------------------- +drop table if exists sys_logininfor; +create table sys_logininfor ( + info_id int(11) not null auto_increment comment '在线登录ID', + opername varchar(50) default '' comment '用户账号', + status int(1) default 0 comment '登录状态 0成功 1失败', + ipaddr varchar(50) default '' comment '登录IP地址', + browser varchar(50) default '' comment '浏览器类型', + os varchar(50) default '' comment '操作系统', + msg varchar(255) default '' comment '提示消息', + logondate varchar(30) default null comment '访问时间', + primary key (info_id) +) engine=innodb auto_increment=100 default charset=utf8; + +insert into sys_logininfor values(1, 'admin', 0 , '127.0.0.1', 'Chrome 45', 'Windows 7', '登录成功' ,'2018-01-01'); + +-- 用户部门表 +SELECT * FROM sys_dept; + +-- 用户信息表 +SELECT * FROM sys_user; + +-- 角色信息表 +SELECT * FROM sys_role; + +-- 菜单信息表 +SELECT * FROM sys_menu; + +-- 创建用户和角色关联表 用户N-1角色 +SELECT * FROM sys_user_role; + +-- 创建角色和菜单关联表 角色1-N菜单 +SELECT * FROM sys_role_menu; + +-- 创建操作日志管理表 +SELECT * FROM oper_log; + +-- 创建数据字典表 +SELECT * FROM sys_code; + +-- 系统访问日志情况信息 +SELECT * FROM sys_logininfor; diff --git a/src/main/java/com/ruoyi/RuoYiApplication.java b/src/main/java/com/ruoyi/RuoYiApplication.java index 86799f7ec..4897b6523 100644 --- a/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/src/main/java/com/ruoyi/RuoYiApplication.java @@ -12,8 +12,6 @@ public class RuoYiApplication public static void main(String[] args) { - // http://localhost/system/user/getUserlist.action - // http://localhost/system/user/login SpringApplication.run(RuoYiApplication.class, args); } diff --git a/src/main/java/com/ruoyi/framework/core/controller/BaseController.java b/src/main/java/com/ruoyi/framework/core/controller/BaseController.java index b6634f58d..c3a095ac3 100644 --- a/src/main/java/com/ruoyi/framework/core/controller/BaseController.java +++ b/src/main/java/com/ruoyi/framework/core/controller/BaseController.java @@ -15,7 +15,7 @@ public class BaseController return ShiroUtils.getUser(); } - public Integer getUserId() + public Long getUserId() { return getUser().getUserId(); } diff --git a/src/main/java/com/ruoyi/project/system/menu/dao/IMenuDao.java b/src/main/java/com/ruoyi/project/system/menu/dao/IMenuDao.java new file mode 100644 index 000000000..2dbf9edac --- /dev/null +++ b/src/main/java/com/ruoyi/project/system/menu/dao/IMenuDao.java @@ -0,0 +1,22 @@ +package com.ruoyi.project.system.menu.dao; + +import java.util.List; +import com.ruoyi.project.system.menu.domain.Menu; + +/** + * 角色表 数据层 + * + * @author yangzz + */ +public interface IMenuDao +{ + + /** + * 根据用户ID查询权限表 + * + * @param userId 用户ID + * @return 菜单列表 + */ + public List findMenusByUserId(Long userId); + +} diff --git a/src/main/java/com/ruoyi/project/system/menu/dao/MenuDao.java b/src/main/java/com/ruoyi/project/system/menu/dao/MenuDao.java new file mode 100644 index 000000000..0deb9c902 --- /dev/null +++ b/src/main/java/com/ruoyi/project/system/menu/dao/MenuDao.java @@ -0,0 +1,38 @@ +package com.ruoyi.project.system.menu.dao; + +import java.util.List; +import org.springframework.stereotype.Repository; +import com.ruoyi.framework.core.dao.DynamicObjectBaseDao; +import com.ruoyi.project.system.menu.domain.Menu; + +/** + * 用户 数据层处理 + * + * @author yangzz + */ +@Repository("menuDao") +public class MenuDao extends DynamicObjectBaseDao implements IMenuDao +{ + + /** + * 根据用户ID查询权限表 + * + * @param userId 用户ID + * @return 菜单列表 + */ + @SuppressWarnings("unchecked") + public List findMenusByUserId(Long userId) + { + List permsList = null; + try + { + permsList = (List) this.findForList("SystemMenuMapper.findMenusByUserId", userId); + } + catch (Exception e) + { + e.printStackTrace(); + } + return permsList; + } + +} diff --git a/src/main/java/com/ruoyi/project/system/menu/domain/Menu.java b/src/main/java/com/ruoyi/project/system/menu/domain/Menu.java new file mode 100644 index 000000000..fdd7da743 --- /dev/null +++ b/src/main/java/com/ruoyi/project/system/menu/domain/Menu.java @@ -0,0 +1,202 @@ +package com.ruoyi.project.system.menu.domain; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * 角色对象 sys_menu + * + * @author yangzz + */ +public class Menu implements Serializable +{ + private static final long serialVersionUID = 1L; + // 菜单ID + private Integer menuId; + // 菜单名称 + private String menuName; + // 父菜单ID + private Integer parentId; + // 显示顺序 + private String orderNum; + // 菜单URL + private String url; + // 类型:0目录,1菜单,2按钮 + private String menuType; + // 菜单状态:0显示,1隐藏 + private String visible; + // 权限字符串 + private String perms; + // 菜单图标 + private String icon; + // 创建时间 + private String createTime; + // 更新时间 + private String updateTime; + // 更新者 + private String updateBy; + // 备注 + private String remark; + // 子菜单 + private List children = new ArrayList(); + + public Integer getMenuId() + { + return menuId; + } + + public void setMenuId(Integer menuId) + { + this.menuId = menuId; + } + + public String getMenuName() + { + return menuName; + } + + public void setMenuName(String menuName) + { + this.menuName = menuName; + } + + public Integer getParentId() + { + return parentId; + } + + public void setParentId(Integer parentId) + { + this.parentId = parentId; + } + + public String getOrderNum() + { + return orderNum; + } + + public void setOrderNum(String orderNum) + { + this.orderNum = orderNum; + } + + public String getUrl() + { + return url; + } + + public void setUrl(String url) + { + this.url = url; + } + + public String getMenuType() + { + return menuType; + } + + public void setMenuType(String menuType) + { + this.menuType = menuType; + } + + public String getVisible() + { + return visible; + } + + public void setVisible(String visible) + { + this.visible = visible; + } + + public String getPerms() + { + return perms; + } + + public void setPerms(String perms) + { + this.perms = perms; + } + + public String getIcon() + { + return icon; + } + + public void setIcon(String icon) + { + this.icon = icon; + } + + public String getCreateTime() + { + return createTime; + } + + public void setCreateTime(String createTime) + { + this.createTime = createTime; + } + + public String getUpdateTime() + { + return updateTime; + } + + public void setUpdateTime(String updateTime) + { + this.updateTime = updateTime; + } + + public String getUpdateBy() + { + return updateBy; + } + + public void setUpdateBy(String updateBy) + { + this.updateBy = updateBy; + } + + public String getRemark() + { + return remark; + } + + public void setRemark(String remark) + { + this.remark = remark; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } + + @Override + public String toString() { + return "Menu{" + + "menuId=" + menuId + + ", menuName=" + menuName + + ", parentId='" + parentId + '\'' + + ", orderNum='" + orderNum + '\'' + + ", url='" + url + '\'' + + ", menuType=" + menuType + + ", visible='" + visible + '\'' + + ", perms=" + perms + + ", icon=" + icon + + ", createTime=" + createTime + + ", updateTime=" + updateTime + + ", updateBy=" + updateBy + + ", remark=" + remark + + '}'; + } +} diff --git a/src/main/java/com/ruoyi/project/system/menu/service/IMenuService.java b/src/main/java/com/ruoyi/project/system/menu/service/IMenuService.java new file mode 100644 index 000000000..5083b96e8 --- /dev/null +++ b/src/main/java/com/ruoyi/project/system/menu/service/IMenuService.java @@ -0,0 +1,22 @@ +package com.ruoyi.project.system.menu.service; + +import java.util.List; +import com.ruoyi.project.system.menu.domain.Menu; + +/** + * 菜单 业务层 + * + * @author yangzz + */ +public interface IMenuService +{ + + /** + * 根据用户ID查询权限表 + * + * @param userId 用户ID + * @return 菜单列表 + */ + public List findMenusByUserId(Long userId); + +} diff --git a/src/main/java/com/ruoyi/project/system/menu/service/MenuService.java b/src/main/java/com/ruoyi/project/system/menu/service/MenuService.java new file mode 100644 index 000000000..24f064953 --- /dev/null +++ b/src/main/java/com/ruoyi/project/system/menu/service/MenuService.java @@ -0,0 +1,36 @@ +package com.ruoyi.project.system.menu.service; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.ruoyi.project.system.menu.dao.IMenuDao; +import com.ruoyi.project.system.menu.domain.Menu; +import com.ruoyi.project.util.TreeUtil; + +/** + * 用户 业务层处理 + * + * @author yangzz + */ +@Service("menuService") +public class MenuService implements IMenuService +{ + + @Autowired + private IMenuDao menuDao; + + /** + * 根据用户ID查询权限表 + * + * @param userId 用户ID + * @return 菜单列表 + */ + public List findMenusByUserId(Long userId) + { + List menus = menuDao.findMenusByUserId(userId); + return TreeUtil.getChildPerms(menus, 0); + } + +} diff --git a/src/main/java/com/ruoyi/project/system/user/controller/IndexController.java b/src/main/java/com/ruoyi/project/system/user/controller/IndexController.java index ea019889c..e80eb16df 100644 --- a/src/main/java/com/ruoyi/project/system/user/controller/IndexController.java +++ b/src/main/java/com/ruoyi/project/system/user/controller/IndexController.java @@ -1,10 +1,15 @@ package com.ruoyi.project.system.user.controller; +import java.util.List; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; + import com.ruoyi.framework.core.controller.BaseController; +import com.ruoyi.project.system.menu.domain.Menu; +import com.ruoyi.project.system.menu.service.IMenuService; import com.ruoyi.project.system.user.domain.User; import com.ruoyi.project.system.user.service.IUserService; @@ -20,34 +25,26 @@ public class IndexController extends BaseController @Autowired private IUserService userService; + @Autowired + private IMenuService menuService; + // 系统首页 @RequestMapping("/index") public String index(Model model) throws Exception { // 取身份信息 User user = getUser(); - // 根据用户id取出菜单 - //List permissions = userService.findPermsListByUserId(currentUser.getUserName()); - - // 通过model传到页面 - //session.setAttribute("permissions", TreeUtil.getChildPerms(permissions, 0)); - model.addAttribute("username", user.getUserName()); + List menus = menuService.findMenusByUserId(user.getUserId()); + model.addAttribute("menus", menus); + model.addAttribute("user", user); return "index"; } - + // 系统介绍 @RequestMapping("/main") public String main() throws Exception { - // 取身份信息 - User currentUser = getUser(); - - // 根据用户id取出菜单 - //List permissions = userService.findPermsListByUserId(currentUser.getUserName()); - - // 通过model传到页面 - //session.setAttribute("permissions", TreeUtil.getChildPerms(permissions, 0)); return "main"; } diff --git a/src/main/java/com/ruoyi/project/system/user/controller/LoginController.java b/src/main/java/com/ruoyi/project/system/user/controller/LoginController.java index 53c11b18a..def10b1b4 100644 --- a/src/main/java/com/ruoyi/project/system/user/controller/LoginController.java +++ b/src/main/java/com/ruoyi/project/system/user/controller/LoginController.java @@ -7,9 +7,7 @@ import org.apache.shiro.subject.Subject; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; - import com.ruoyi.common.tools.StringTools; import com.ruoyi.common.utils.security.ShiroUtils; import com.ruoyi.framework.core.controller.BaseController; diff --git a/src/main/java/com/ruoyi/project/system/user/domain/User.java b/src/main/java/com/ruoyi/project/system/user/domain/User.java index 4be726650..f405537a5 100644 --- a/src/main/java/com/ruoyi/project/system/user/domain/User.java +++ b/src/main/java/com/ruoyi/project/system/user/domain/User.java @@ -11,9 +11,9 @@ public class User implements Serializable { private static final long serialVersionUID = 1L; // 用户ID - private Integer userId; + private Long userId; // 部门ID - private Integer deptId; + private Long deptId; // 登录名 private String loginName; // 用户名称 @@ -39,7 +39,7 @@ public class User implements Serializable { } - public User(Integer userId, String loginName, String password) + public User(Long userId, String loginName, String password) { super(); this.userId = userId; @@ -47,22 +47,22 @@ public class User implements Serializable this.password = password; } - public Integer getUserId() + public Long getUserId() { return userId; } - public void setUserId(Integer userId) + public void setUserId(Long userId) { this.userId = userId; } - public Integer getDeptId() + public Long getDeptId() { return deptId; } - public void setDeptId(Integer deptId) + public void setDeptId(Long deptId) { this.deptId = deptId; } @@ -168,12 +168,20 @@ public class User implements Serializable } @Override - public String toString() - { - return "{\"userId\":\"" + userId + "\",\"deptId\":\"" + deptId + "\",\"loginName\":\"" + loginName - + "\",\"userName\":\"" + userName + "\",\"email\":\"" + email + "\",\"phonenumber\":\"" + phonenumber - + "\",\"password\":\"" + password + "\",\"salt\":\"" + salt + "\",\"status\":\"" + status - + "\",\"refuseDes\":\"" + refuseDes + "\",\"createTime\":\"" + createTime + "\",\"roleName\":\"" - + roleName + "\"} "; + public String toString() { + return "User{" + + "userId=" + userId + + ", deptId=" + deptId + + ", loginName='" + loginName + '\'' + + ", userName='" + userName + '\'' + + ", email='" + email + '\'' + + ", phonenumber=" + phonenumber + + ", password='" + password + '\'' + + ", salt=" + salt + + ", status=" + status + + ", refuseDes=" + refuseDes + + ", createTime=" + createTime + + ", roleName=" + roleName + + '}'; } } diff --git a/src/main/java/com/ruoyi/project/util/TreeUtil.java b/src/main/java/com/ruoyi/project/util/TreeUtil.java new file mode 100644 index 000000000..ceee1f284 --- /dev/null +++ b/src/main/java/com/ruoyi/project/util/TreeUtil.java @@ -0,0 +1,185 @@ +package com.ruoyi.project.util; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import com.ruoyi.project.system.menu.domain.Menu; + +/** + * 权限数据处理 + * + * @author y + */ +public class TreeUtil +{ + + /** + * 根据父节点的ID获取所有子节点 + * + * @param list 分类表 + * @param typeId 传入的父节点ID + * @return String + */ + public static List getChildPerms(List list, int praentId) + { + List returnList = new ArrayList(); + for (Iterator iterator = list.iterator(); iterator.hasNext();) + { + Menu t = (Menu) iterator.next(); + // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点 + if (t.getParentId() == praentId) + { + recursionFn(list, t); + returnList.add(t); + } + } + return returnList; + } + + /** + * 递归列表 + * + * @param list + * @param Menu + */ + private static void recursionFn(List list, Menu t) + { + List childList = getChildList(list, t);// 得到子节点列表 + t.setChildren(childList); + for (Menu tChild : childList) + { + if (hasChild(list, tChild)) + { + // 判断是否有子节点 + Iterator it = childList.iterator(); + while (it.hasNext()) + { + Menu n = (Menu) it.next(); + recursionFn(list, n); + } + } + } + } + + // 得到子节点列表 + private static List getChildList(List list, Menu t) + { + + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) + { + Menu n = (Menu) it.next(); + if (n.getParentId().intValue() == t.getMenuId().intValue()) + { + tlist.add(n); + } + } + return tlist; + } + + List returnList = new ArrayList(); + + /** + * 根据父节点的ID获取所有子节点 + * + * @param list 分类表 + * @param typeId 传入的父节点ID + * @param prefix 子节点前缀 + */ + public List getChildPerms(List list, int typeId, String prefix) + { + if (list == null) + return null; + for (Iterator iterator = list.iterator(); iterator.hasNext();) + { + Menu node = (Menu) iterator.next(); + // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点 + if (node.getParentId() == typeId) + { + recursionFn(list, node, prefix); + } + // 二、遍历所有的父节点下的所有子节点 + /* + * if (node.getParentId()==0) { recursionFn(list, node); } + */ + } + return returnList; + } + + private void recursionFn(List list, Menu node, String p) + { + List childList = getChildList(list, node);// 得到子节点列表 + if (hasChild(list, node)) + {// 判断是否有子节点 + returnList.add(node); + Iterator it = childList.iterator(); + while (it.hasNext()) + { + Menu n = (Menu) it.next(); + n.setMenuName(p + n.getMenuName()); + recursionFn(list, n, p + p); + } + } + else + { + returnList.add(node); + } + } + + // 判断是否有子节点 + private static boolean hasChild(List list, Menu t) + { + return getChildList(list, t).size() > 0 ? true : false; + } + + // 本地模拟数据测试 + public static void main(String[] args) + { + long start = System.currentTimeMillis(); + List permList = new ArrayList(); + + Menu perm1 = new Menu(); + perm1.setMenuId(100); + perm1.setMenuName("系统管理"); + perm1.setParentId(0); + + Menu perm2 = new Menu(); + perm2.setMenuId(101); + perm2.setMenuName("用户管理"); + perm2.setParentId(100); + + Menu perm3 = new Menu(); + perm3.setMenuId(102); + perm3.setMenuName("角色管理"); + perm3.setParentId(100); + + Menu perm4 = new Menu(); + perm4.setMenuId(103); + perm4.setMenuName("菜单管理"); + perm4.setParentId(100); + + Menu perm5 = new Menu(); + perm5.setMenuId(103); + perm5.setMenuName("日志管理"); + perm5.setParentId(100); + + permList.add(perm1); + permList.add(perm2); + permList.add(perm3); + permList.add(perm4); + permList.add(perm5); + + List ns = TreeUtil.getChildPerms(permList, 0); + for (Menu m : ns) + { + System.out.println(m.getMenuName()); + System.out.println(m.getChildren()); + } + long end = System.currentTimeMillis(); + System.out.println("用时:" + (end - start) + "ms"); + + } + +} diff --git a/src/main/resources/application-druid.yml b/src/main/resources/application-druid.yml index e4cf03873..3acbe61b4 100644 --- a/src/main/resources/application-druid.yml +++ b/src/main/resources/application-druid.yml @@ -7,7 +7,8 @@ spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.jdbc.Driver - url: jdbc:mysql://10.213.24.45:3306/ry?useUnicode=true&characterEncoding=utf8 + #url: jdbc:mysql://10.213.24.45:3306/ry?useUnicode=true&characterEncoding=utf8 + url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8 username: root password: password initialSize: 1 diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index cfb79e070..3973c4f4e 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,35 +1,35 @@ -server: - port: 80 - tomcat: - uri-encoding: utf-8 -user: - password: - #密码错误{maxRetryCount}次锁定10分钟 - maxRetryCount: 5 -spring: - thymeleaf: - mode: LEGACYHTML5 - cache: false - messages: - #国际化资源文件路径 - basename: i18n/messages - jackson: - time-zone: GMT+8 - date-format: yyyy-MM-dd HH:mm:ss - profiles: - active: druid - http: - multipart: - max-file-size: 30Mb - max-request-size: 30Mb - devtools: - restart: - enabled: true -# MyBatis -mybatis: - # 配置类型别名 - typeAliasesPackage: com.ruoyi.project.system.user.domain - # 配置mapper的扫描,找到所有的mapper.xml映射文件 - mapperLocations: classpath:mybatis/**/*Mapper.xml - # 加载全局的配置文件 +server: + port: 80 + tomcat: + uri-encoding: utf-8 +user: + password: + #密码错误{maxRetryCount}次锁定10分钟 + maxRetryCount: 5 +spring: + thymeleaf: + mode: LEGACYHTML5 + cache: false + messages: + #国际化资源文件路径 + basename: i18n/messages + jackson: + time-zone: GMT+8 + date-format: yyyy-MM-dd HH:mm:ss + profiles: + active: druid + http: + multipart: + max-file-size: 30Mb + max-request-size: 30Mb + devtools: + restart: + enabled: true +# MyBatis +mybatis: + # 配置类型别名 + typeAliasesPackage: com.ruoyi.project.system.user.domain + # 配置mapper的扫描,找到所有的mapper.xml映射文件 + mapperLocations: classpath:mybatis/**/*Mapper.xml + # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml \ No newline at end of file diff --git a/src/main/resources/mybatis/mybatis-config.xml b/src/main/resources/mybatis/mybatis-config.xml index 23d81602c..ab90e043e 100644 --- a/src/main/resources/mybatis/mybatis-config.xml +++ b/src/main/resources/mybatis/mybatis-config.xml @@ -4,8 +4,16 @@ PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> - + + + + + + - + + + + diff --git a/src/main/resources/mybatis/system/SystemMenuMapper.xml b/src/main/resources/mybatis/system/SystemMenuMapper.xml new file mode 100644 index 000000000..fd7ed9e35 --- /dev/null +++ b/src/main/resources/mybatis/system/SystemMenuMapper.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mybatis/system/UserMapper.xml b/src/main/resources/mybatis/system/SystemUserMapper.xml similarity index 100% rename from src/main/resources/mybatis/system/UserMapper.xml rename to src/main/resources/mybatis/system/SystemUserMapper.xml diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index e1152a872..98c5b4348 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -1,170 +1,164 @@ - - - - - - - 若依管理系统首页 - - - - - - - - - - - -
- - - - - - -
-
- -
-
- - - - - 退出 -
-
- -
- -
- -
- - - - - - - - - - - - - - - - - - - - + + + + + + + 若依管理系统首页 + + + + + + + + + + + +
+ + + + + + +
+
+ +
+
+ + + + + 退出 +
+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +