From be25c4b0a458e8cc0e66c5f121672fed9ebdf678 Mon Sep 17 00:00:00 2001 From: haoxr <1490493387@qq.com> Date: Fri, 10 Nov 2023 00:33:54 +0800 Subject: [PATCH 1/7] =?UTF-8?q?chore:=20=E9=A1=B9=E7=9B=AE=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E7=BB=93=E6=9E=84=E8=B0=83=E6=95=B4=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/mysql5/youlai_boot.sql | 353 ++++++++++++++++++ sql/{ => mysql8}/youlai_boot.sql | 0 .../youlai/system/config/SwaggerConfig.java | 2 +- .../system/controller/AuthController.java | 4 +- .../system/controller/SysDeptController.java | 3 +- .../system/controller/SysDictController.java | 3 +- .../system/controller/SysMenuController.java | 2 +- .../system/controller/SysRoleController.java | 2 +- .../system/controller/SysUserController.java | 2 +- .../annotation/DataPermission.java | 2 +- .../handler/MyDataPermissionHandler.java | 2 +- .../youlai/system/mapper/SysDeptMapper.java | 2 +- .../youlai/system/mapper/SysUserMapper.java | 2 +- .../annotation/PreventDuplicateSubmit.java | 2 +- .../aspect/DuplicateSubmitAspect.java | 4 +- 15 files changed, 367 insertions(+), 18 deletions(-) create mode 100644 sql/mysql5/youlai_boot.sql rename sql/{ => mysql8}/youlai_boot.sql (100%) rename src/main/java/com/youlai/system/{common => core/mybatisplus}/annotation/DataPermission.java (90%) rename src/main/java/com/youlai/system/{common => plugin/dupsubmit}/annotation/PreventDuplicateSubmit.java (87%) rename src/main/java/com/youlai/system/{ => plugin/dupsubmit}/aspect/DuplicateSubmitAspect.java (95%) diff --git a/sql/mysql5/youlai_boot.sql b/sql/mysql5/youlai_boot.sql new file mode 100644 index 00000000..8cba53da --- /dev/null +++ b/sql/mysql5/youlai_boot.sql @@ -0,0 +1,353 @@ +/* +* youlai_boot 权限系统数据库(MySQL5.7) +* @author haoxr +*/ + +-- ---------------------------- +-- 1. 创建数据库 +-- ---------------------------- +CREATE DATABASE IF NOT EXISTS youlai_boot DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; + + +-- ---------------------------- +-- 2. 创建表 && 数据初始化 +-- ---------------------------- +use youlai_boot; + +SET NAMES utf8; +SET FOREIGN_KEY_CHECKS = 0; + + +-- ---------------------------- +-- Table structure for sys_dept +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dept`; +CREATE TABLE `sys_dept` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '部门名称', + `parent_id` bigint NOT NULL DEFAULT 0 COMMENT '父节点id', + `tree_path` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '父节点id路径', + `sort` int NULL DEFAULT 0 COMMENT '显示顺序', + `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态(1:正常;0:禁用)', + `deleted` tinyint NULL DEFAULT 0 COMMENT '逻辑删除标识(1:已删除;0:未删除)', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `create_by` bigint NULL DEFAULT NULL COMMENT '创建人ID', + `update_by` bigint NULL DEFAULT NULL COMMENT '修改人ID', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 171 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '部门表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_dept +-- ---------------------------- +INSERT INTO `sys_dept` VALUES (1, '有来技术', 0, '0', 1, 1, 0, NULL, NULL, 1, 1); +INSERT INTO `sys_dept` VALUES (2, '研发部门', 1, '0,1', 1, 1, 0, NULL, '2022-04-19 12:46:37', 2, 2); +INSERT INTO `sys_dept` VALUES (3, '测试部门', 1, '0,1', 1, 1, 0, NULL, '2022-04-19 12:46:37', 2, 2); + +-- ---------------------------- +-- Table structure for sys_dict +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict`; +CREATE TABLE `sys_dict` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `type_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '字典类型编码', + `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '字典项名称', + `value` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '字典项值', + `sort` int NULL DEFAULT 0 COMMENT '排序', + `status` tinyint NULL DEFAULT 0 COMMENT '状态(1:正常;0:禁用)', + `defaulted` tinyint NULL DEFAULT 0 COMMENT '是否默认(1:是;0:否)', + `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '备注', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 69 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '字典数据表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_dict +-- ---------------------------- +INSERT INTO `sys_dict` VALUES (1, 'gender', '男', '1', 1, 1, 0, NULL, '2019-05-05 13:07:52', '2022-06-12 23:20:39'); +INSERT INTO `sys_dict` VALUES (2, 'gender', '女', '2', 2, 1, 0, NULL, '2019-04-19 11:33:00', '2019-07-02 14:23:05'); +INSERT INTO `sys_dict` VALUES (3, 'gender', '未知', '0', 1, 1, 0, NULL, '2020-10-17 08:09:31', '2020-10-17 08:09:31'); + +-- ---------------------------- +-- Table structure for sys_dict_type +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict_type`; +CREATE TABLE `sys_dict_type` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键 ', + `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '类型名称', + `code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '类型编码', + `status` tinyint(1) NULL DEFAULT 0 COMMENT '状态(0:正常;1:禁用)', + `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `type_code`(`code` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 89 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '字典类型表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_dict_type +-- ---------------------------- +INSERT INTO `sys_dict_type` VALUES (1, '性别', 'gender', 1, NULL, '2019-12-06 19:03:32', '2022-06-12 16:21:28'); + +-- ---------------------------- +-- Table structure for sys_menu +-- ---------------------------- +DROP TABLE IF EXISTS `sys_menu`; +CREATE TABLE `sys_menu` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `parent_id` bigint NOT NULL COMMENT '父菜单ID', + `tree_path` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '父节点ID路径', + `name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '菜单名称', + `type` tinyint NOT NULL COMMENT '菜单类型(1:菜单 2:目录 3:外链 4:按钮)', + `path` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '路由路径(浏览器地址栏路径)', + `component` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '组件路径(vue页面完整路径,省略.vue后缀)', + `perm` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '权限标识', + `visible` tinyint(1) NOT NULL DEFAULT '1' COMMENT '显示状态(1-显示;0-隐藏)', + `sort` int DEFAULT '0' COMMENT '排序', + `icon` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '菜单图标', + `redirect` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '跳转路径', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `always_show` tinyint DEFAULT NULL COMMENT '【目录】只有一个子路由是否始终显示(1:是 0:否)', + `keep_alive` tinyint DEFAULT NULL COMMENT '【菜单】是否开启页面缓存(1:是 0:否)', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=103 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=DYNAMIC COMMENT='菜单管理'; + +-- ---------------------------- +-- Records of sys_menu +-- ---------------------------- +INSERT INTO `sys_menu` VALUES (1, 0, '0', '系统管理', 2, '/system', 'Layout', NULL, 1, 1, 'system', '/system/user', '2021-08-28 09:12:21', '2021-08-28 09:12:21', NULL, NULL); +INSERT INTO `sys_menu` VALUES (2, 1, '0,1', '用户管理', 1, 'user', 'system/user/index', NULL, 1, 1, 'user', NULL, '2021-08-28 09:12:21', '2021-08-28 09:12:21', NULL, 1); +INSERT INTO `sys_menu` VALUES (3, 1, '0,1', '角色管理', 1, 'role', 'system/role/index', NULL, 1, 2, 'role', NULL, '2021-08-28 09:12:21', '2021-08-28 09:12:21', NULL, 1); +INSERT INTO `sys_menu` VALUES (4, 1, '0,1', '菜单管理', 1, 'menu', 'system/menu/index', NULL, 1, 3, 'menu', NULL, '2021-08-28 09:12:21', '2021-08-28 09:12:21', NULL, 1); +INSERT INTO `sys_menu` VALUES (5, 1, '0,1', '部门管理', 1, 'dept', 'system/dept/index', NULL, 1, 4, 'tree', NULL, '2021-08-28 09:12:21', '2021-08-28 09:12:21', NULL, 1); +INSERT INTO `sys_menu` VALUES (6, 1, '0,1', '字典管理', 1, 'dict', 'system/dict/index', NULL, 1, 5, 'dict', NULL, '2021-08-28 09:12:21', '2021-08-28 09:12:21', NULL, 1); +INSERT INTO `sys_menu` VALUES (20, 0, '0', '多级菜单', 2, '/multi-level', 'Layout', NULL, 1, 9, 'cascader', '/multi-level/multi-level1', '2022-02-16 23:11:00', '2022-02-16 23:11:00', NULL, NULL); +INSERT INTO `sys_menu` VALUES (21, 20, '0,20', '菜单一级', 1, 'multi-level1', 'demo/multi-level/level1', NULL, 1, 1, '', '/multi-level/multi-level2', '2022-02-16 23:13:38', '2022-02-16 23:13:38', NULL, 1); +INSERT INTO `sys_menu` VALUES (22, 21, '0,20,21', '菜单二级', 1, 'multi-level2', 'demo/multi-level/children/level2', NULL, 1, 1, '', '/multi-level/multi-level2/multi-level3-1', '2022-02-16 23:14:23', '2022-02-16 23:14:23', NULL, 1); +INSERT INTO `sys_menu` VALUES (23, 22, '0,20,21,22', '菜单三级-1', 1, 'multi-level3-1', 'demo/multi-level/children/children/level3-1', NULL, 1, 1, '', '', '2022-02-16 23:14:51', '2022-02-16 23:14:51', NULL, 1); +INSERT INTO `sys_menu` VALUES (24, 22, '0,20,21,22', '菜单三级-2', 1, 'multi-level3-2', 'demo/multi-level/children/children/level3-2', NULL, 1, 2, '', '', '2022-02-16 23:15:08', '2022-02-16 23:15:08', NULL, 1); +INSERT INTO `sys_menu` VALUES (26, 0, '0', '平台文档', 2, '/doc', 'Layout', NULL, 1, 8, 'document', NULL, '2022-02-17 22:51:20', '2022-02-17 22:51:20', NULL, NULL); +INSERT INTO `sys_menu` VALUES (30, 26, '0,26', '平台文档(外链)', 3, 'https://juejin.cn/post/7228990409909108793', '', NULL, 1, 2, 'link', '', '2022-02-18 00:01:40', '2022-02-18 00:01:40', NULL, NULL); +INSERT INTO `sys_menu` VALUES (31, 2, '0,1,2', '用户新增', 4, '', NULL, 'sys:user:add', 1, 1, '', '', '2022-10-23 11:04:08', '2022-10-23 11:04:11', NULL, NULL); +INSERT INTO `sys_menu` VALUES (32, 2, '0,1,2', '用户编辑', 4, '', NULL, 'sys:user:edit', 1, 2, '', '', '2022-10-23 11:04:08', '2022-10-23 11:04:11', NULL, NULL); +INSERT INTO `sys_menu` VALUES (33, 2, '0,1,2', '用户删除', 4, '', NULL, 'sys:user:delete', 1, 3, '', '', '2022-10-23 11:04:08', '2022-10-23 11:04:11', NULL, NULL); +INSERT INTO `sys_menu` VALUES (36, 0, '0', '组件封装', 2, '/component', 'Layout', NULL, 1, 10, 'menu', '', '2022-10-31 09:18:44', '2022-10-31 09:18:47', NULL, NULL); +INSERT INTO `sys_menu` VALUES (37, 36, '0,36', '富文本编辑器', 1, 'wang-editor', 'demo/wang-editor', NULL, 1, 1, '', '', NULL, NULL, NULL, 1); +INSERT INTO `sys_menu` VALUES (38, 36, '0,36', '图片上传', 1, 'upload', 'demo/upload', NULL, 1, 2, '', '', '2022-11-20 23:16:30', '2022-11-20 23:16:32', NULL, 1); +INSERT INTO `sys_menu` VALUES (39, 36, '0,36', '图标选择器', 1, 'icon-selector', 'demo/icon-selector', NULL, 1, 3, '', '', '2022-11-20 23:16:30', '2022-11-20 23:16:32', NULL, 1); +INSERT INTO `sys_menu` VALUES (40, 0, '0', '接口', 2, '/api', 'Layout', NULL, 1, 7, 'api', '', '2022-02-17 22:51:20', '2022-02-17 22:51:20', 1, NULL); +INSERT INTO `sys_menu` VALUES (41, 40, '0,40', '接口文档', 1, 'api-doc', 'demo/api-doc', NULL, 1, 1, 'api', '', '2022-02-17 22:51:20', '2022-02-17 22:51:20', NULL, 1); +INSERT INTO `sys_menu` VALUES (70, 3, '0,1,3', '角色新增', 4, '', NULL, 'sys:role:add', 1, 1, '', NULL, '2023-05-20 23:39:09', '2023-05-20 23:39:09', NULL, NULL); +INSERT INTO `sys_menu` VALUES (71, 3, '0,1,3', '角色编辑', 4, '', NULL, 'sys:role:edit', 1, 2, '', NULL, '2023-05-20 23:40:31', '2023-05-20 23:40:31', NULL, NULL); +INSERT INTO `sys_menu` VALUES (72, 3, '0,1,3', '角色删除', 4, '', NULL, 'sys:role:delete', 1, 3, '', NULL, '2023-05-20 23:41:08', '2023-05-20 23:41:08', NULL, NULL); +INSERT INTO `sys_menu` VALUES (73, 4, '0,1,4', '菜单新增', 4, '', NULL, 'sys:menu:add', 1, 1, '', NULL, '2023-05-20 23:41:35', '2023-05-20 23:41:35', NULL, NULL); +INSERT INTO `sys_menu` VALUES (74, 4, '0,1,4', '菜单编辑', 4, '', NULL, 'sys:menu:edit', 1, 3, '', NULL, '2023-05-20 23:41:58', '2023-05-20 23:41:58', NULL, NULL); +INSERT INTO `sys_menu` VALUES (75, 4, '0,1,4', '菜单删除', 4, '', NULL, 'sys:menu:delete', 1, 3, '', NULL, '2023-05-20 23:44:18', '2023-05-20 23:44:18', NULL, NULL); +INSERT INTO `sys_menu` VALUES (76, 5, '0,1,5', '部门新增', 4, '', NULL, 'sys:dept:add', 1, 1, '', NULL, '2023-05-20 23:45:00', '2023-05-20 23:45:00', NULL, NULL); +INSERT INTO `sys_menu` VALUES (77, 5, '0,1,5', '部门编辑', 4, '', NULL, 'sys:dept:edit', 1, 2, '', NULL, '2023-05-20 23:46:16', '2023-05-20 23:46:16', NULL, NULL); +INSERT INTO `sys_menu` VALUES (78, 5, '0,1,5', '部门删除', 4, '', NULL, 'sys:dept:delete', 1, 3, '', NULL, '2023-05-20 23:46:36', '2023-05-20 23:46:36', NULL, NULL); +INSERT INTO `sys_menu` VALUES (79, 6, '0,1,6', '字典类型新增', 4, '', NULL, 'sys:dict_type:add', 1, 1, '', NULL, '2023-05-21 00:16:06', '2023-05-21 00:16:06', NULL, NULL); +INSERT INTO `sys_menu` VALUES (81, 6, '0,1,6', '字典类型编辑', 4, '', NULL, 'sys:dict_type:edit', 1, 2, '', NULL, '2023-05-21 00:27:37', '2023-05-21 00:27:37', NULL, NULL); +INSERT INTO `sys_menu` VALUES (84, 6, '0,1,6', '字典类型删除', 4, '', NULL, 'sys:dict_type:delete', 1, 3, '', NULL, '2023-05-21 00:29:39', '2023-05-21 00:29:39', NULL, NULL); +INSERT INTO `sys_menu` VALUES (85, 6, '0,1,6', '字典数据新增', 4, '', NULL, 'sys:dict:add', 1, 4, '', NULL, '2023-05-21 00:46:56', '2023-05-21 00:47:06', NULL, NULL); +INSERT INTO `sys_menu` VALUES (86, 6, '0,1,6', '字典数据编辑', 4, '', NULL, 'sys:dict:edit', 1, 5, '', NULL, '2023-05-21 00:47:36', '2023-05-21 00:47:36', NULL, NULL); +INSERT INTO `sys_menu` VALUES (87, 6, '0,1,6', '字典数据删除', 4, '', NULL, 'sys:dict:delete', 1, 6, '', NULL, '2023-05-21 00:48:10', '2023-05-21 00:48:20', NULL, NULL); +INSERT INTO `sys_menu` VALUES (88, 2, '0,1,2', '重置密码', 4, '', NULL, 'sys:user:reset_pwd', 1, 4, '', NULL, '2023-05-21 00:49:18', '2023-05-21 00:49:18', NULL, NULL); +INSERT INTO `sys_menu` VALUES (89, 0, '0', '功能演示', 2, '/function', 'Layout', NULL, 1, 11, 'menu', '', '2022-10-31 09:18:44', '2022-10-31 09:18:47', NULL, NULL); +INSERT INTO `sys_menu` VALUES (90, 89, '0,89', 'Websocket', 1, 'websocket', 'demo/websocket', NULL, 1, 3, '', '', '2022-11-20 23:16:30', '2022-11-20 23:16:32', NULL, 1); +INSERT INTO `sys_menu` VALUES (91, 89, '0,89', '敬请期待...', 2, 'other', 'demo/other', NULL, 1, 4, '', '', '2022-11-20 23:16:30', '2022-11-20 23:16:32', NULL, NULL); +INSERT INTO `sys_menu` VALUES (93, 36, '0,36', '签名', 1, 'signature', 'demo/signature', NULL, 1, 6, '', '', '2022-11-20 23:16:30', '2022-11-20 23:16:32', NULL, 1); +INSERT INTO `sys_menu` VALUES (94, 36, '0,36', '表格', 1, 'table', 'demo/table', NULL, 1, 7, '', '', '2022-11-20 23:16:30', '2022-11-20 23:16:32', NULL, 1); +INSERT INTO `sys_menu` VALUES (95, 36, '0,36', '字典组件', 1, 'dict-demo', 'demo/dict', NULL, 1, 4, '', '', '2022-11-20 23:16:30', '2022-11-20 23:16:32', NULL, 1); +INSERT INTO `sys_menu` VALUES (96, 89, '0,89', 'Permission', 1, 'permission', 'demo/permission/page', NULL, 1, 1, '', '', '2022-11-20 23:16:30', '2022-11-20 23:16:32', NULL, 1); +INSERT INTO `sys_menu` VALUES (97, 89, '0,89', 'Icons', 1, 'icon-demo', 'demo/icons', NULL, 1, 2, '', '', '2022-11-20 23:16:30', '2022-11-20 23:16:32', NULL, 1); +INSERT INTO `sys_menu` VALUES (98, 0, '0', 'Table', 2, '/table', 'Layout', NULL, 0, 10, 'table', '', '2023-08-08 20:49:50', '2023-08-08 20:49:50', NULL, NULL); +INSERT INTO `sys_menu` VALUES (99, 98, '0,98', '动态Table', 1, 'dynamic-table', 'table/dynamic-table/index', NULL, 0, 1, '', '', '2023-08-08 20:54:42', '2023-08-08 20:54:42', NULL, 1); +INSERT INTO `sys_menu` VALUES (100, 98, '0,98', '拖拽Table', 1, 'drag-table', 'table/drag-table', NULL, 0, 2, '', '', '2023-08-08 20:54:42', '2023-08-08 20:54:42', NULL, 1); +INSERT INTO `sys_menu` VALUES (101, 98, '0,98', '综合Table', 1, 'complex-table', 'table/complex-table', NULL, 0, 3, '', '', '2023-08-08 20:54:42', '2023-08-08 20:54:42', NULL, 1); +INSERT INTO `sys_menu` VALUES (102, 26, '0,26', '平台文档(内嵌)', 3, 'internal-doc', 'demo/internal-doc', NULL, 1, 1, 'document', '', '2022-02-18 00:01:40', '2022-02-18 00:01:40', NULL, NULL); + +-- -------------------- +-- Table structure for sys_role +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role`; +CREATE TABLE `sys_role` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '角色名称', + `code` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '角色编码', + `sort` int NULL DEFAULT NULL COMMENT '显示顺序', + `status` tinyint(1) NULL DEFAULT 1 COMMENT '角色状态(1-正常;0-停用)', + `data_scope` tinyint NULL DEFAULT NULL COMMENT '数据权限(0-所有数据;1-部门及子部门数据;2-本部门数据;3-本人数据)', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识(0-未删除;1-已删除)', + `create_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `update_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `name`(`name` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 128 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_role +-- ---------------------------- +INSERT INTO `sys_role` VALUES (1, '超级管理员', 'ROOT', 1, 1, 0, 0, '2021-05-21 14:56:51', '2018-12-23 16:00:00'); +INSERT INTO `sys_role` VALUES (2, '系统管理员', 'ADMIN', 2, 1, 1, 0, '2021-03-25 12:39:54', NULL); +INSERT INTO `sys_role` VALUES (3, '访问游客', 'GUEST', 3, 1, 2, 0, '2021-05-26 15:49:05', '2019-05-05 16:00:00'); +INSERT INTO `sys_role` VALUES (4, '系统管理员1', 'ADMIN1', 2, 1, 1, 0, '2021-03-25 12:39:54', NULL); +INSERT INTO `sys_role` VALUES (5, '系统管理员2', 'ADMIN1', 2, 1, 1, 0, '2021-03-25 12:39:54', NULL); +INSERT INTO `sys_role` VALUES (6, '系统管理员3', 'ADMIN1', 2, 1, 1, 0, '2021-03-25 12:39:54', NULL); +INSERT INTO `sys_role` VALUES (7, '系统管理员4', 'ADMIN1', 2, 1, 1, 0, '2021-03-25 12:39:54', NULL); +INSERT INTO `sys_role` VALUES (8, '系统管理员5', 'ADMIN1', 2, 1, 1, 0, '2021-03-25 12:39:54', NULL); +INSERT INTO `sys_role` VALUES (9, '系统管理员6', 'ADMIN1', 2, 1, 1, 0, '2021-03-25 12:39:54', NULL); +INSERT INTO `sys_role` VALUES (10, '系统管理员7', 'ADMIN1', 2, 1, 1, 0, '2021-03-25 12:39:54', NULL); +INSERT INTO `sys_role` VALUES (11, '系统管理员8', 'ADMIN1', 2, 1, 1, 0, '2021-03-25 12:39:54', NULL); +INSERT INTO `sys_role` VALUES (12, '系统管理员9', 'ADMIN1', 2, 1, 1, 0, '2021-03-25 12:39:54', NULL); + +-- ---------------------------- +-- Table structure for sys_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role_menu`; +CREATE TABLE `sys_role_menu` ( + `role_id` bigint NOT NULL COMMENT '角色ID', + `menu_id` bigint NOT NULL COMMENT '菜单ID' +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色和菜单关联表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_role_menu +-- ---------------------------- +INSERT INTO `sys_role_menu` VALUES (2, 1); +INSERT INTO `sys_role_menu` VALUES (2, 2); +INSERT INTO `sys_role_menu` VALUES (2, 3); +INSERT INTO `sys_role_menu` VALUES (2, 4); +INSERT INTO `sys_role_menu` VALUES (2, 5); +INSERT INTO `sys_role_menu` VALUES (2, 6); +INSERT INTO `sys_role_menu` VALUES (2, 11); +INSERT INTO `sys_role_menu` VALUES (2, 12); +INSERT INTO `sys_role_menu` VALUES (2, 19); +INSERT INTO `sys_role_menu` VALUES (2, 18); +INSERT INTO `sys_role_menu` VALUES (2, 17); +INSERT INTO `sys_role_menu` VALUES (2, 13); +INSERT INTO `sys_role_menu` VALUES (2, 14); +INSERT INTO `sys_role_menu` VALUES (2, 15); +INSERT INTO `sys_role_menu` VALUES (2, 16); +INSERT INTO `sys_role_menu` VALUES (2, 9); +INSERT INTO `sys_role_menu` VALUES (2, 10); +INSERT INTO `sys_role_menu` VALUES (2, 37); +INSERT INTO `sys_role_menu` VALUES (2, 20); +INSERT INTO `sys_role_menu` VALUES (2, 21); +INSERT INTO `sys_role_menu` VALUES (2, 22); +INSERT INTO `sys_role_menu` VALUES (2, 23); +INSERT INTO `sys_role_menu` VALUES (2, 24); +INSERT INTO `sys_role_menu` VALUES (2, 32); +INSERT INTO `sys_role_menu` VALUES (2, 33); +INSERT INTO `sys_role_menu` VALUES (2, 39); +INSERT INTO `sys_role_menu` VALUES (2, 34); +INSERT INTO `sys_role_menu` VALUES (2, 26); +INSERT INTO `sys_role_menu` VALUES (2, 30); +INSERT INTO `sys_role_menu` VALUES (2, 31); +INSERT INTO `sys_role_menu` VALUES (2, 36); +INSERT INTO `sys_role_menu` VALUES (2, 38); +INSERT INTO `sys_role_menu` VALUES (2, 39); +INSERT INTO `sys_role_menu` VALUES (2, 40); +INSERT INTO `sys_role_menu` VALUES (2, 41); +INSERT INTO `sys_role_menu` VALUES (2, 1); +INSERT INTO `sys_role_menu` VALUES (2, 2); +INSERT INTO `sys_role_menu` VALUES (2, 3); +INSERT INTO `sys_role_menu` VALUES (2, 4); +INSERT INTO `sys_role_menu` VALUES (2, 5); +INSERT INTO `sys_role_menu` VALUES (2, 6); +INSERT INTO `sys_role_menu` VALUES (2, 20); +INSERT INTO `sys_role_menu` VALUES (2, 21); +INSERT INTO `sys_role_menu` VALUES (2, 22); +INSERT INTO `sys_role_menu` VALUES (2, 23); +INSERT INTO `sys_role_menu` VALUES (2, 24); +INSERT INTO `sys_role_menu` VALUES (2, 26); +INSERT INTO `sys_role_menu` VALUES (2, 30); +INSERT INTO `sys_role_menu` VALUES (2, 31); +INSERT INTO `sys_role_menu` VALUES (2, 32); +INSERT INTO `sys_role_menu` VALUES (2, 33); +INSERT INTO `sys_role_menu` VALUES (2, 36); +INSERT INTO `sys_role_menu` VALUES (2, 37); +INSERT INTO `sys_role_menu` VALUES (2, 38); +INSERT INTO `sys_role_menu` VALUES (2, 39); +INSERT INTO `sys_role_menu` VALUES (2, 40); +INSERT INTO `sys_role_menu` VALUES (2, 41); +INSERT INTO `sys_role_menu` VALUES (2, 70); +INSERT INTO `sys_role_menu` VALUES (2, 71); +INSERT INTO `sys_role_menu` VALUES (2, 72); +INSERT INTO `sys_role_menu` VALUES (2, 73); +INSERT INTO `sys_role_menu` VALUES (2, 74); +INSERT INTO `sys_role_menu` VALUES (2, 75); +INSERT INTO `sys_role_menu` VALUES (2, 76); +INSERT INTO `sys_role_menu` VALUES (2, 77); +INSERT INTO `sys_role_menu` VALUES (2, 78); +INSERT INTO `sys_role_menu` VALUES (2, 79); +INSERT INTO `sys_role_menu` VALUES (2, 81); +INSERT INTO `sys_role_menu` VALUES (2, 84); +INSERT INTO `sys_role_menu` VALUES (2, 85); +INSERT INTO `sys_role_menu` VALUES (2, 86); +INSERT INTO `sys_role_menu` VALUES (2, 87); +INSERT INTO `sys_role_menu` VALUES (2, 88); +INSERT INTO `youlai_boot`.`sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 89); +INSERT INTO `youlai_boot`.`sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 90); +INSERT INTO `youlai_boot`.`sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 91); +INSERT INTO `youlai_boot`.`sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 92); +INSERT INTO `youlai_boot`.`sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 93); +INSERT INTO `youlai_boot`.`sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 94); +INSERT INTO `youlai_boot`.`sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 95); +INSERT INTO `youlai_boot`.`sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 96); +INSERT INTO `youlai_boot`.`sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 97); +INSERT INTO `youlai_boot`.`sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 102); + + + +-- ---------------------------- +-- Table structure for sys_user +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user`; +CREATE TABLE `sys_user` ( + `id` int NOT NULL AUTO_INCREMENT, + `username` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名', + `nickname` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '昵称', + `gender` tinyint(1) NULL DEFAULT 1 COMMENT '性别((1:男;2:女))', + `password` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码', + `dept_id` int NULL DEFAULT NULL COMMENT '部门ID', + `avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '用户头像', + `mobile` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '联系方式', + `status` tinyint(1) NULL DEFAULT 1 COMMENT '用户状态((1:正常;0:禁用))', + `email` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户邮箱', + `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除标识(0:未删除;1:已删除)', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `login_name`(`username` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 288 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_user +-- ---------------------------- +INSERT INTO `sys_user` VALUES (1, 'root', '有来技术', 0, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', NULL, 'https://oss.youlai.tech/youlai-boot/2023/05/16/811270ef31f548af9cffc026dfc3777b.gif', '17621590365', 1, 'youlaitech@163.com', 0, NULL, NULL); +INSERT INTO `sys_user` VALUES (2, 'admin', '系统管理员', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 1, 'https://oss.youlai.tech/youlai-boot/2023/05/16/811270ef31f548af9cffc026dfc3777b.gif', '17621210366', 1, '', 0, '2019-10-10 13:41:22', '2022-07-31 12:39:30'); +INSERT INTO `sys_user` VALUES (3, 'test', '测试小用户', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 3, 'https://oss.youlai.tech/youlai-boot/2023/05/16/811270ef31f548af9cffc026dfc3777b.gif', '17621210366', 1, 'youlaitech@163.com', 0, '2021-06-05 01:31:29', '2021-06-05 01:31:29'); +INSERT INTO `sys_user` VALUES (287, '123', '123', 1, '$2a$10$mVoBVqm1837huf7kcN0wS.GVYKEFv0arb7GvzfFXoTyqDlcRzT.6i', 1, '', NULL, 1, NULL, 1, '2023-05-21 14:11:19', '2023-05-21 14:11:25'); + +-- ---------------------------- +-- Table structure for sys_user_role +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user_role`; +CREATE TABLE `sys_user_role` ( + `user_id` bigint NOT NULL COMMENT '用户ID', + `role_id` bigint NOT NULL COMMENT '角色ID', + PRIMARY KEY (`user_id`, `role_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户和角色关联表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_user_role +-- ---------------------------- +INSERT INTO `sys_user_role` VALUES (1, 1); +INSERT INTO `sys_user_role` VALUES (2, 2); +INSERT INTO `sys_user_role` VALUES (3, 3); +INSERT INTO `sys_user_role` VALUES (287, 2); + +SET FOREIGN_KEY_CHECKS = 1; + diff --git a/sql/youlai_boot.sql b/sql/mysql8/youlai_boot.sql similarity index 100% rename from sql/youlai_boot.sql rename to sql/mysql8/youlai_boot.sql diff --git a/src/main/java/com/youlai/system/config/SwaggerConfig.java b/src/main/java/com/youlai/system/config/SwaggerConfig.java index c19bee29..e557f3e8 100644 --- a/src/main/java/com/youlai/system/config/SwaggerConfig.java +++ b/src/main/java/com/youlai/system/config/SwaggerConfig.java @@ -31,7 +31,7 @@ public class SwaggerConfig { .title("系统接口文档") .version("2.4.0") ) - //全局安全校验项,也可以在对应的controller上加注解SecurityRequirement + // 全局安全校验项,也可以在对应的controller上加注解SecurityRequirement .components(new Components() .addSecuritySchemes(HttpHeaders.AUTHORIZATION, new SecurityScheme() diff --git a/src/main/java/com/youlai/system/controller/AuthController.java b/src/main/java/com/youlai/system/controller/AuthController.java index 33678798..70400f7b 100644 --- a/src/main/java/com/youlai/system/controller/AuthController.java +++ b/src/main/java/com/youlai/system/controller/AuthController.java @@ -1,13 +1,11 @@ package com.youlai.system.controller; -import com.youlai.system.common.constant.SecurityConstants; import com.youlai.system.common.result.Result; import com.youlai.system.model.dto.CaptchaResult; import com.youlai.system.model.dto.LoginResult; import com.youlai.system.service.AuthService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -32,7 +30,7 @@ public class AuthController { return Result.success(loginResult); } - @Operation(summary = "注销", security = {@SecurityRequirement(name = SecurityConstants.TOKEN_KEY)}) + @Operation(summary = "注销") @DeleteMapping("/logout") public Result logout() { authService.logout(); diff --git a/src/main/java/com/youlai/system/controller/SysDeptController.java b/src/main/java/com/youlai/system/controller/SysDeptController.java index 8c185aac..346180b2 100644 --- a/src/main/java/com/youlai/system/controller/SysDeptController.java +++ b/src/main/java/com/youlai/system/controller/SysDeptController.java @@ -1,6 +1,6 @@ package com.youlai.system.controller; -import com.youlai.system.common.annotation.PreventDuplicateSubmit; +import com.youlai.system.plugin.dupsubmit.annotation.PreventDuplicateSubmit; import com.youlai.system.common.model.Option; import com.youlai.system.common.result.Result; import com.youlai.system.model.form.DeptForm; @@ -8,7 +8,6 @@ import com.youlai.system.model.query.DeptQuery; import com.youlai.system.model.vo.DeptVO; import com.youlai.system.service.SysDeptService; import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/youlai/system/controller/SysDictController.java b/src/main/java/com/youlai/system/controller/SysDictController.java index 4d099d75..e0753224 100644 --- a/src/main/java/com/youlai/system/controller/SysDictController.java +++ b/src/main/java/com/youlai/system/controller/SysDictController.java @@ -3,7 +3,7 @@ package com.youlai.system.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.youlai.system.common.result.PageResult; import com.youlai.system.common.result.Result; -import com.youlai.system.common.annotation.PreventDuplicateSubmit; +import com.youlai.system.plugin.dupsubmit.annotation.PreventDuplicateSubmit; import com.youlai.system.model.form.DictForm; import com.youlai.system.model.form.DictTypeForm; import com.youlai.system.model.query.DictPageQuery; @@ -14,7 +14,6 @@ import com.youlai.system.common.model.Option; import com.youlai.system.service.SysDictService; import com.youlai.system.service.SysDictTypeService; import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/youlai/system/controller/SysMenuController.java b/src/main/java/com/youlai/system/controller/SysMenuController.java index 16f48c78..cc699c5a 100644 --- a/src/main/java/com/youlai/system/controller/SysMenuController.java +++ b/src/main/java/com/youlai/system/controller/SysMenuController.java @@ -1,7 +1,7 @@ package com.youlai.system.controller; import com.youlai.system.common.result.Result; -import com.youlai.system.common.annotation.PreventDuplicateSubmit; +import com.youlai.system.plugin.dupsubmit.annotation.PreventDuplicateSubmit; import com.youlai.system.model.form.MenuForm; import com.youlai.system.model.query.MenuQuery; import com.youlai.system.model.vo.MenuVO; diff --git a/src/main/java/com/youlai/system/controller/SysRoleController.java b/src/main/java/com/youlai/system/controller/SysRoleController.java index 5d1c5251..bfe03da6 100644 --- a/src/main/java/com/youlai/system/controller/SysRoleController.java +++ b/src/main/java/com/youlai/system/controller/SysRoleController.java @@ -1,7 +1,7 @@ package com.youlai.system.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.youlai.system.common.annotation.PreventDuplicateSubmit; +import com.youlai.system.plugin.dupsubmit.annotation.PreventDuplicateSubmit; import com.youlai.system.common.model.Option; import com.youlai.system.common.result.PageResult; import com.youlai.system.common.result.Result; diff --git a/src/main/java/com/youlai/system/controller/SysUserController.java b/src/main/java/com/youlai/system/controller/SysUserController.java index 505e48d8..c9164997 100644 --- a/src/main/java/com/youlai/system/controller/SysUserController.java +++ b/src/main/java/com/youlai/system/controller/SysUserController.java @@ -8,7 +8,7 @@ import com.youlai.system.common.constant.ExcelConstants; import com.youlai.system.common.result.PageResult; import com.youlai.system.common.result.Result; import com.youlai.system.common.util.ExcelUtils; -import com.youlai.system.common.annotation.PreventDuplicateSubmit; +import com.youlai.system.plugin.dupsubmit.annotation.PreventDuplicateSubmit; import com.youlai.system.plugin.easyexcel.UserImportListener; import com.youlai.system.model.vo.UserImportVO; import com.youlai.system.model.form.UserForm; diff --git a/src/main/java/com/youlai/system/common/annotation/DataPermission.java b/src/main/java/com/youlai/system/core/mybatisplus/annotation/DataPermission.java similarity index 90% rename from src/main/java/com/youlai/system/common/annotation/DataPermission.java rename to src/main/java/com/youlai/system/core/mybatisplus/annotation/DataPermission.java index 50789b5c..66eff5b5 100644 --- a/src/main/java/com/youlai/system/common/annotation/DataPermission.java +++ b/src/main/java/com/youlai/system/core/mybatisplus/annotation/DataPermission.java @@ -1,4 +1,4 @@ -package com.youlai.system.common.annotation; +package com.youlai.system.core.mybatisplus.annotation; import java.lang.annotation.*; diff --git a/src/main/java/com/youlai/system/core/mybatisplus/handler/MyDataPermissionHandler.java b/src/main/java/com/youlai/system/core/mybatisplus/handler/MyDataPermissionHandler.java index 6bb8454a..9c15f703 100644 --- a/src/main/java/com/youlai/system/core/mybatisplus/handler/MyDataPermissionHandler.java +++ b/src/main/java/com/youlai/system/core/mybatisplus/handler/MyDataPermissionHandler.java @@ -4,7 +4,7 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.extension.plugins.handler.DataPermissionHandler; -import com.youlai.system.common.annotation.DataPermission; +import com.youlai.system.core.mybatisplus.annotation.DataPermission; import com.youlai.system.common.base.IBaseEnum; import com.youlai.system.common.enums.DataScopeEnum; import com.youlai.system.common.util.SecurityUtils; diff --git a/src/main/java/com/youlai/system/mapper/SysDeptMapper.java b/src/main/java/com/youlai/system/mapper/SysDeptMapper.java index 280e78bb..61759bb1 100644 --- a/src/main/java/com/youlai/system/mapper/SysDeptMapper.java +++ b/src/main/java/com/youlai/system/mapper/SysDeptMapper.java @@ -3,7 +3,7 @@ package com.youlai.system.mapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.toolkit.Constants; -import com.youlai.system.common.annotation.DataPermission; +import com.youlai.system.core.mybatisplus.annotation.DataPermission; import com.youlai.system.model.entity.SysDept; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/src/main/java/com/youlai/system/mapper/SysUserMapper.java b/src/main/java/com/youlai/system/mapper/SysUserMapper.java index 05a7b6c7..e3680af5 100644 --- a/src/main/java/com/youlai/system/mapper/SysUserMapper.java +++ b/src/main/java/com/youlai/system/mapper/SysUserMapper.java @@ -2,7 +2,7 @@ package com.youlai.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.youlai.system.common.annotation.DataPermission; +import com.youlai.system.core.mybatisplus.annotation.DataPermission; import com.youlai.system.model.bo.UserBO; import com.youlai.system.model.entity.SysUser; import com.youlai.system.model.dto.UserAuthInfo; diff --git a/src/main/java/com/youlai/system/common/annotation/PreventDuplicateSubmit.java b/src/main/java/com/youlai/system/plugin/dupsubmit/annotation/PreventDuplicateSubmit.java similarity index 87% rename from src/main/java/com/youlai/system/common/annotation/PreventDuplicateSubmit.java rename to src/main/java/com/youlai/system/plugin/dupsubmit/annotation/PreventDuplicateSubmit.java index b7bcdb87..d23ce1b4 100644 --- a/src/main/java/com/youlai/system/common/annotation/PreventDuplicateSubmit.java +++ b/src/main/java/com/youlai/system/plugin/dupsubmit/annotation/PreventDuplicateSubmit.java @@ -1,4 +1,4 @@ -package com.youlai.system.common.annotation; +package com.youlai.system.plugin.dupsubmit.annotation; import java.lang.annotation.*; diff --git a/src/main/java/com/youlai/system/aspect/DuplicateSubmitAspect.java b/src/main/java/com/youlai/system/plugin/dupsubmit/aspect/DuplicateSubmitAspect.java similarity index 95% rename from src/main/java/com/youlai/system/aspect/DuplicateSubmitAspect.java rename to src/main/java/com/youlai/system/plugin/dupsubmit/aspect/DuplicateSubmitAspect.java index 7617fba1..0c5a3fad 100644 --- a/src/main/java/com/youlai/system/aspect/DuplicateSubmitAspect.java +++ b/src/main/java/com/youlai/system/plugin/dupsubmit/aspect/DuplicateSubmitAspect.java @@ -1,7 +1,7 @@ -package com.youlai.system.aspect; +package com.youlai.system.plugin.dupsubmit.aspect; import cn.hutool.core.util.StrUtil; -import com.youlai.system.common.annotation.PreventDuplicateSubmit; +import com.youlai.system.plugin.dupsubmit.annotation.PreventDuplicateSubmit; import com.youlai.system.common.result.ResultCode; import com.youlai.system.common.exception.BusinessException; import com.youlai.system.core.security.jwt.JwtTokenProvider; From 7e9179ac4991a877e0aaaafbb3fcfc4765e657b3 Mon Sep 17 00:00:00 2001 From: haoxr <1490493387@qq.com> Date: Fri, 10 Nov 2023 00:34:25 +0800 Subject: [PATCH 2/7] =?UTF-8?q?docs:=20=E8=AF=B4=E6=98=8E=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E6=B7=BB=E5=8A=A0=E9=A1=B9=E7=9B=AE=E7=BB=93=E6=9E=84?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 195 +++++++++++++++++++++++------------------------------- 1 file changed, 81 insertions(+), 114 deletions(-) diff --git a/README.md b/README.md index f1092476..72d3ef34 100644 --- a/README.md +++ b/README.md @@ -1,143 +1,110 @@ + +
+ ++ 有来技术官网 | + 有来技术博客| + Gitee| + Github +
+ # 项目简述 -项目基于 SpringBoot3、SpringSecurity6 、 JWT 、 Redis 、 Mybatis-Plus 、 Knife4j 等技术栈搭建的前后端分离开源权限管理系统。 +项目基于 JDK 17、SpringBoot3、SpringSecurity6 、 JWT 、 Redis 、 Mybatis-Plus 、 Knife4j 等技术栈搭建的前后端分离开源权限管理系统。 - -## 项目预览 -**在线预览地址** - -[http://vue3.youlai.tech/](http://vue3.youlai.tech/) - -**首页控制台** - -|  | -|-------------------------------------------------------------| -|  | - -**接口文档** - - - -**权限管理系统** - -|  |  | -| ------------------------------------------------------------ | ------------------------------------------------------------ | -|  |  | - - - -## 项目特色 -- Spring Boot 3.0 + Vue3 前后端分离单体应用,适合快速开发; -- Spring Security + JWT 认证鉴权方案; +- Spring Boot 3.0 + Vue 3 + Element-Plus 前后端分离单体应用,适合快速开发; +- Spring Security 6 + JWT 认证鉴权方案; - 基于 RBAC 模型的权限设计,细粒度接口方法、按钮级别权限控制。 -## 运行环境 -- JDK 17 -- IDEA Lombok 插件 -- IDEA MapStruct Support 插件 -- MySQL 8.x -## 项目地址 +# 项目结构 +``` +youlai-boot +├── sql # SQL脚本 + ├── mysql5 # MySQL5 脚本 + ├── mysql8 # MySQL8 脚本 +├── src # 源码目录 + ├── common # 公共模块 + ├── config # 自动装配配置 + ├── CorsConfig # 跨域共享配置 + ├── RedisConfig # Redis 配置 + ├── SwaggerConfig # API 接口文档配置 + ├── WebMvcConfig # WebMvc 配置 + ├── controller # 控制层 + ├── converter # MapStruct转换器 + ├── core # 核心模块 + ├── mybatisplus # Mybatis-Plus 配置和插件 + ├── security # Spring Security 安全配置和扩展 + ├── filter # 过滤器 + ├── RequestLogFilter # 请求日志过滤器 + ├── VerifyCodeFilter # 验证码过滤器 + ├── model # 模型层 + ├── bo # 业务对象 + ├── dto # 数据传输对象 + ├── entity # 实体对象 + ├── form # 表单对象 + ├── query # 查询参数对象 + ├── vo # 视图对象 + ├── mapper # 数据库访问层 + ├── plugin # 插件(可选) + ├── dupsubmit # 防重提交插件,用于防止表单重复提交 + ├── easyexcel # EasyExcel 插件,Excel 文件的读写 + ├── rabbitmq # RabbitMQ 插件,消息队列交互 + ├── websocket # WebSocket 插件,实时双向通信 + ├── xxljob # XXL-JOB 插件,分布式任务调度和执行 + ├── service # 业务逻辑层 +└── end +``` -| 项目名称 | 项目地址 | -|------|------------------------------------------------| -| 后端工程 | https://gitee.com/youlaiorg/youlai-boot | -| 前端工程 | https://gitee.com/youlaiorg/vue3-element-admin | +# 前端工程 +| 项目名称 | Gitee | Github | +|------|-------|------| +| 前端 | [vue3-element-admin](https://gitee.com/youlaiorg/vue3-element-admin) | [vue3-element-admin](https://github.com/youlaitech/vue3-element-admin) | - -## 接口文档 +# 接口文档 - `knife4j` 接口文档:[http://localhost:8989/doc.html](http://localhost:8989/doc.html) - `swagger` 接口文档:[http://localhost:8989/swagger-ui/index.html](http://localhost:8989/swagger-ui/index.html) -## 项目运行 -### 1. 数据库创建 +# 项目启动 -执行 [youlai_boot.sql](sql/youlai_boot.sql) 脚本完成数据库创建、表结构和基础数据的初始化。 +- 1. **数据库初始化** -### 2. 配置修改 +执行 [youlai_boot.sql](sql/mysql8/youlai_boot.sql) 脚本完成数据库创建、表结构和基础数据的初始化。 + +- 2. **修改配置** [application-dev.yml](src/main/resources/application-dev.yml) 修改MySQL、Redis连接配置; -### 3. 后端启动 +- 3. **启动项目** + 执行 [SystemApplication.java](src/main/java/com/youlai/system/SystemApplication.java) 的 main 方法完成后端项目启动; 访问接口文档地址 [http://localhost:8989/doc.html](http://localhost:8989/doc.html) 验证项目启动。 -### 4. 前端启动 -文档:[README.md](https://gitee.com/youlaiorg/vue3-element-admin#%E9%A1%B9%E7%9B%AE%E5%90%AF%E5%8A%A8) +# 💖加交流群 -## 开发规范 +> 关注公众号【有来技术】,获取交流群二维码,二维码过期请或不想关注公众号可加我微信(`haoxianrui`)备注“有来”,拉你进群。 -### 方法命名 - -以下命名涵盖了Controller、Service和Mapper层 - -|作用|示例| -|---|---| -|分页查询|getUserPage| -|列表查询|listUsers| -|单个查询|getUser/getUserDetail/getUserInfo ...| -|新增|saveUser| -|修改|updateUser| -|删除|deleteUser/removeUser| +|  | +|---------------------------------------------------------| -### 实体命名 - -| 名称 | 定义 | 示例 | -|--------|------------------|-----------| -| entity | 映射数据库实体,字段属性完全对应 | SysUser | -| bo | 多表关联查询的业务实体 | UserBO | -| query | 查询传参,建议参数≥3使用 | UserQuery | -| form | 表单对象 | UserForm | -| dto | RPC调用,可替代VO | UserDTO | -| vo | 视图层对象 | UserVO | - -### API规范 -在RESTFul架构中,每个URL代表一种资源,所以不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的"集合",所以API中的名词也应该使用复数。 - -**请求示例:** - -|请求描述|请求方法|请求路径| -|---|---|---| -|获取所有用户信息|GET|/api/v1/users| -|获取标识为1用户信息|GET|/api/v1/users/1| -|删除标识为1用户信息|DELETE|/api/v1/users/1| -|新增用户|POST|/api/v1/users| -|修改标识为1用户信息|PUT|/api/v1/users/1| -|修改标识为1用户状态|PATCH|/api/v1/users/1/status| -|获取当前登录用户信息|GET|/api/v1/users/{me,current}| - - -## 请求状态码规范 - -参考 [阿里Java开发手册](https://developer.aliyun.com/topic/java2020?utm_content=g_1000113416) - -## Git 提交规范 - - -参考 ([Angular](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular)) 社区规范,建议 IDEA 安装 Git Commit Template 插件 - -- `feat` 增加新功能 -- `fix` 修复问题/BUG -- `style` 代码风格相关无影响运行结果的 -- `perf` 优化/性能提升 -- `refactor` 重构 -- `revert` 撤销修改 -- `test` 测试相关 -- `docs` 文档/注释 -- `chore` 依赖更新/脚手架配置修改等 -- `workflow` 工作流改进 -- `ci` 持续集成 - -## 联系我们 - -> 欢迎添加开发者微信,备注「有来」进群 - -|  |  | -| --- | --- | From 8d2fa537ff6c4ba1bfa741913e864a0f1d993e60 Mon Sep 17 00:00:00 2001 From: haoxr <1490493387@qq.com> Date: Fri, 10 Nov 2023 00:36:32 +0800 Subject: [PATCH 3/7] =?UTF-8?q?docs:=20=E8=AF=B4=E6=98=8E=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E6=A0=BC=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 72d3ef34..c69d2a69 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Github -# 项目简述 +## 项目简述 项目基于 JDK 17、SpringBoot3、SpringSecurity6 、 JWT 、 Redis 、 Mybatis-Plus 、 Knife4j 等技术栈搭建的前后端分离开源权限管理系统。 @@ -31,7 +31,7 @@ - 基于 RBAC 模型的权限设计,细粒度接口方法、按钮级别权限控制。 -# 项目结构 +## 项目结构 ``` youlai-boot ├── sql # SQL脚本 @@ -70,37 +70,37 @@ youlai-boot └── end ``` -# 前端工程 +## 前端工程 | 项目名称 | Gitee | Github | |------|-------|------| | 前端 | [vue3-element-admin](https://gitee.com/youlaiorg/vue3-element-admin) | [vue3-element-admin](https://github.com/youlaitech/vue3-element-admin) | -# 接口文档 +## 接口文档 - `knife4j` 接口文档:[http://localhost:8989/doc.html](http://localhost:8989/doc.html) - `swagger` 接口文档:[http://localhost:8989/swagger-ui/index.html](http://localhost:8989/swagger-ui/index.html) -# 项目启动 +## 项目启动 -- 1. **数据库初始化** +1. **数据库初始化** 执行 [youlai_boot.sql](sql/mysql8/youlai_boot.sql) 脚本完成数据库创建、表结构和基础数据的初始化。 -- 2. **修改配置** +2. **修改配置** [application-dev.yml](src/main/resources/application-dev.yml) 修改MySQL、Redis连接配置; -- 3. **启动项目** +3. **启动项目** 执行 [SystemApplication.java](src/main/java/com/youlai/system/SystemApplication.java) 的 main 方法完成后端项目启动; 访问接口文档地址 [http://localhost:8989/doc.html](http://localhost:8989/doc.html) 验证项目启动。 -# 💖加交流群 +## 💖加交流群 > 关注公众号【有来技术】,获取交流群二维码,二维码过期请或不想关注公众号可加我微信(`haoxianrui`)备注“有来”,拉你进群。 From 34e157a1d653b2be02cd7ea4c678db3c0ac9e2f6 Mon Sep 17 00:00:00 2001 From: haoxr <1490493387@qq.com> Date: Fri, 10 Nov 2023 00:37:28 +0800 Subject: [PATCH 4/7] =?UTF-8?q?docs:=20=E8=AF=B4=E6=98=8E=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E6=A0=BC=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c69d2a69..25d034f8 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,7 @@ youlai-boot 访问接口文档地址 [http://localhost:8989/doc.html](http://localhost:8989/doc.html) 验证项目启动。 -## 💖加交流群 +## 加交流群 > 关注公众号【有来技术】,获取交流群二维码,二维码过期请或不想关注公众号可加我微信(`haoxianrui`)备注“有来”,拉你进群。 From 1f12e3b81688f15f6e1ccb5f6755de46b8ef1b43 Mon Sep 17 00:00:00 2001 From: haoxr <1490493387@qq.com> Date: Fri, 10 Nov 2023 12:22:52 +0800 Subject: [PATCH 5/7] =?UTF-8?q?docs:=20=E8=AF=B4=E6=98=8E=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E6=8E=92=E7=89=88=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 51 +++++++++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 25d034f8..83c797b1 100644 --- a/README.md +++ b/README.md @@ -16,22 +16,29 @@- 有来技术官网 | - 有来技术博客| - Gitee| - Github + 👀 在线预览 | + 📖 官方博客 | + 🦄 Gitee | + 🚢 Github
-## 项目简述 +## 📢 项目简介 -项目基于 JDK 17、SpringBoot3、SpringSecurity6 、 JWT 、 Redis 、 Mybatis-Plus 、 Knife4j 等技术栈搭建的前后端分离开源权限管理系统。 +**在线预览**: [https://vue3.youlai.tech](https://vue3.youlai.tech) -- Spring Boot 3.0 + Vue 3 + Element-Plus 前后端分离单体应用,适合快速开发; -- Spring Security 6 + JWT 认证鉴权方案; -- 基于 RBAC 模型的权限设计,细粒度接口方法、按钮级别权限控制。 +基于 JDK 17、Spring Boot 3、Spring Security 6、JWT、Redis、Mybatis-Plus、Knife4j、Vue 3、Element-Plus 构建的前后端分离单体权限管理系统。 +- **🚀 开发框架**: 使用 Spring Boot 3.0 和 Vue 3,以及 Element-Plus 等主流技术栈,实时更新。 -## 项目结构 +- **🔐 安全认证**: 结合 Spring Security 和 JWT 提供安全、无状态、分布式友好的身份验证和授权机制。 + +- **🔑 权限管理**: 基于 RBAC 模型,实现细粒度的权限控制,涵盖接口方法和按钮级别。 + +- **🛠️ 功能模块**: 包括用户管理、角色管理、菜单管理、部门管理、字典管理等多个功能。 + +- **📘 接口文档**: 自动生成接口文档,支持在线调试,提高开发效率。 + +## 📁 项目目录 ``` youlai-boot ├── sql # SQL脚本 @@ -70,37 +77,37 @@ youlai-boot └── end ``` -## 前端工程 -| 项目名称 | Gitee | Github | -|------|-------|------| -| 前端 | [vue3-element-admin](https://gitee.com/youlaiorg/vue3-element-admin) | [vue3-element-admin](https://github.com/youlaitech/vue3-element-admin) | +## 🌺 前端工程 +| Gitee | Github | +|-------|------| +| [vue3-element-admin](https://gitee.com/youlaiorg/vue3-element-admin) | [vue3-element-admin](https://github.com/youlaitech/vue3-element-admin) | -## 接口文档 +## 🌈 接口文档 - `knife4j` 接口文档:[http://localhost:8989/doc.html](http://localhost:8989/doc.html) - - `swagger` 接口文档:[http://localhost:8989/swagger-ui/index.html](http://localhost:8989/swagger-ui/index.html) +- `apifox` 在线接口文档:[https://www.apifox.cn/apidoc](https://www.apifox.cn/apidoc/shared-195e783f-4d85-4235-a038-eec696de4ea5) -## 项目启动 +## 🚀 项目启动 1. **数据库初始化** -执行 [youlai_boot.sql](sql/mysql8/youlai_boot.sql) 脚本完成数据库创建、表结构和基础数据的初始化。 + 执行 [youlai_boot.sql](sql/mysql8/youlai_boot.sql) 脚本完成数据库创建、表结构和基础数据的初始化。 2. **修改配置** -[application-dev.yml](src/main/resources/application-dev.yml) 修改MySQL、Redis连接配置; + [application-dev.yml](src/main/resources/application-dev.yml) 修改MySQL、Redis连接配置; 3. **启动项目** -执行 [SystemApplication.java](src/main/java/com/youlai/system/SystemApplication.java) 的 main 方法完成后端项目启动; + 执行 [SystemApplication.java](src/main/java/com/youlai/system/SystemApplication.java) 的 main 方法完成后端项目启动; -访问接口文档地址 [http://localhost:8989/doc.html](http://localhost:8989/doc.html) 验证项目启动。 + 访问接口文档地址 [http://ip:port/doc.html](http://localhost:8989/doc.html) 验证项目启动是否成功。 -## 加交流群 +## 💖 加交流群 > 关注公众号【有来技术】,获取交流群二维码,二维码过期请或不想关注公众号可加我微信(`haoxianrui`)备注“有来”,拉你进群。 From 1ca3e78f58a7a31492de227c12155136acb2f75a Mon Sep 17 00:00:00 2001 From: haoxr <1490493387@qq.com> Date: Fri, 10 Nov 2023 12:27:47 +0800 Subject: [PATCH 6/7] =?UTF-8?q?docs:=20=E8=AF=B4=E6=98=8E=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E6=8E=92=E7=89=88=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 83c797b1..20b46675 100644 --- a/README.md +++ b/README.md @@ -109,7 +109,7 @@ youlai-boot ## 💖 加交流群 -> 关注公众号【有来技术】,获取交流群二维码,二维码过期请或不想关注公众号可加我微信(`haoxianrui`)备注“有来”,拉你进群。 +> 关注公众号【有来技术】,获取交流群二维码,不想关注公众号或二维码过期欢迎加我微信(`haoxianrui`)备注【有来】即可,拉你进群。 |  | |---------------------------------------------------------| From 9e5ff6dfc57bf2696fe41e2db5bd808f67ac1ae0 Mon Sep 17 00:00:00 2001 From: haoxr <1490493387@qq.com> Date: Tue, 14 Nov 2023 23:44:57 +0800 Subject: [PATCH 7/7] =?UTF-8?q?chore:=20=E5=8D=87=E7=BA=A7redisson?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E8=87=B33.24.3=EF=BC=8C=E5=B9=B6=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E5=9F=9F=E5=90=8D=E6=9B=BF=E4=BB=A3IP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- src/main/resources/application-dev.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 3d7fb1e6..9db5828e 100644 --- a/pom.xml +++ b/pom.xml @@ -44,7 +44,7 @@