diff --git a/sql/mysql/youlai_boot.sql b/sql/mysql/youlai_boot.sql deleted file mode 100644 index dc52c6cd..00000000 --- a/sql/mysql/youlai_boot.sql +++ /dev/null @@ -1,610 +0,0 @@ - -# YouLai_Boot 数据库(MySQL 5.7 ~ MySQL 8.x) -# Copyright (c) 2021-present, youlai.tech - - --- ---------------------------- --- 1. 创建数据库 --- ---------------------------- -CREATE DATABASE IF NOT EXISTS youlai_boot CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci; - - --- ---------------------------- --- 2. 创建表 && 数据初始化 --- ---------------------------- -use youlai_boot; - -SET NAMES utf8mb4; # 设置字符集 -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(100) NOT NULL COMMENT '部门名称', - `code` varchar(100) NOT NULL COMMENT '部门编号', - `parent_id` bigint DEFAULT 0 COMMENT '父节点id', - `tree_path` varchar(255) NOT NULL COMMENT '父节点id路径', - `sort` smallint DEFAULT 0 COMMENT '显示顺序', - `status` tinyint DEFAULT 1 COMMENT '状态(1-正常 0-禁用)', - `create_by` bigint NULL COMMENT '创建人ID', - `create_time` datetime NULL COMMENT '创建时间', - `update_by` bigint NULL COMMENT '修改人ID', - `update_time` datetime NULL COMMENT '更新时间', - `is_deleted` tinyint DEFAULT 0 COMMENT '逻辑删除标识(1-已删除 0-未删除)', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `uk_code`(`code` ASC) USING BTREE COMMENT '部门编号唯一索引' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '部门表'; - --- ---------------------------- --- Records of sys_dept --- ---------------------------- -INSERT INTO `sys_dept` VALUES (1, '有来技术', 'YOULAI', 0, '0', 1, 1, 1, NULL, 1, now(), 0); -INSERT INTO `sys_dept` VALUES (2, '研发部门', 'RD001', 1, '0,1', 1, 1, 2, NULL, 2, now(), 0); -INSERT INTO `sys_dept` VALUES (3, '测试部门', 'QA001', 1, '0,1', 1, 1, 2, NULL, 2, now(), 0); - --- ---------------------------- --- Table structure for sys_dict --- ---------------------------- -DROP TABLE IF EXISTS `sys_dict`; -CREATE TABLE `sys_dict` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键 ', - `dict_code` varchar(50) COMMENT '类型编码', - `name` varchar(50) COMMENT '类型名称', - `status` tinyint(1) DEFAULT '0' COMMENT '状态(0:正常;1:禁用)', - `remark` varchar(255) COMMENT '备注', - `create_time` datetime COMMENT '创建时间', - `create_by` bigint COMMENT '创建人ID', - `update_time` datetime COMMENT '更新时间', - `update_by` bigint COMMENT '修改人ID', - `is_deleted` tinyint DEFAULT '0' COMMENT '是否删除(1-删除,0-未删除)', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_dict_code` (`dict_code`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='字典表'; --- ---------------------------- --- Records of sys_dict --- ---------------------------- -INSERT INTO `sys_dict` VALUES (1, 'gender', '性别', 1, NULL, now() , 1,now(), 1,0); -INSERT INTO `sys_dict` VALUES (2, 'notice_type', '通知类型', 1, NULL, now(), 1,now(), 1,0); -INSERT INTO `sys_dict` VALUES (3, 'notice_level', '通知级别', 1, NULL, now(), 1,now(), 1,0); - - --- ---------------------------- --- Table structure for sys_dict_item --- ---------------------------- -DROP TABLE IF EXISTS `sys_dict_item`; -CREATE TABLE `sys_dict_item` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', - `dict_code` varchar(50) COMMENT '关联字典编码,与sys_dict表中的dict_code对应', - `value` varchar(50) COMMENT '字典项值', - `label` varchar(100) COMMENT '字典项标签', - `tag_type` varchar(50) COMMENT '标签类型,用于前端样式展示(如success、warning等)', - `status` tinyint DEFAULT '0' COMMENT '状态(1-正常,0-禁用)', - `sort` int DEFAULT '0' COMMENT '排序', - `remark` varchar(255) COMMENT '备注', - `create_time` datetime COMMENT '创建时间', - `create_by` bigint COMMENT '创建人ID', - `update_time` datetime COMMENT '更新时间', - `update_by` bigint COMMENT '修改人ID', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='字典项表'; - --- ---------------------------- --- Records of sys_dict_item --- ---------------------------- -INSERT INTO `sys_dict_item` VALUES (1, 'gender', '1', '男', 'primary', 1, 1, NULL, now(), 1,now(),1); -INSERT INTO `sys_dict_item` VALUES (2, 'gender', '2', '女', 'danger', 1, 2, NULL, now(), 1,now(),1); -INSERT INTO `sys_dict_item` VALUES (3, 'gender', '0', '保密', 'info', 1, 3, NULL, now(), 1,now(),1); -INSERT INTO `sys_dict_item` VALUES (4, 'notice_type', '1', '系统升级', 'success', 1, 1, '', now(), 1,now(),1); -INSERT INTO `sys_dict_item` VALUES (5, 'notice_type', '2', '系统维护', 'primary', 1, 2, '', now(), 1,now(),1); -INSERT INTO `sys_dict_item` VALUES (6, 'notice_type', '3', '安全警告', 'danger', 1, 3, '', now(), 1,now(),1); -INSERT INTO `sys_dict_item` VALUES (7, 'notice_type', '4', '假期通知', 'success', 1, 4, '', now(), 1,now(),1); -INSERT INTO `sys_dict_item` VALUES (8, 'notice_type', '5', '公司新闻', 'primary', 1, 5, '', now(), 1,now(),1); -INSERT INTO `sys_dict_item` VALUES (9, 'notice_type', '99', '其他', 'info', 1, 99, '', now(), 1,now(),1); -INSERT INTO `sys_dict_item` VALUES (10, 'notice_level', 'L', '低', 'info', 1, 1, '', now(), 1,now(),1); -INSERT INTO `sys_dict_item` VALUES (11, 'notice_level', 'M', '中', 'warning', 1, 2, '', now(), 1,now(),1); -INSERT INTO `sys_dict_item` VALUES (12, 'notice_level', 'H', '高', 'danger', 1, 3, '', now(), 1,now(),1); - --- ---------------------------- --- Table structure for sys_menu --- ---------------------------- -DROP TABLE IF EXISTS `sys_menu`; -CREATE TABLE `sys_menu` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', - `parent_id` bigint NOT NULL COMMENT '父菜单ID', - `tree_path` varchar(255) COMMENT '父节点ID路径', - `name` varchar(64) NOT NULL COMMENT '菜单名称', - `type` tinyint NOT NULL COMMENT '菜单类型(1-菜单 2-目录 3-外链 4-按钮)', - `route_name` varchar(255) COMMENT '路由名称(Vue Router 中用于命名路由)', - `route_path` varchar(128) COMMENT '路由路径(Vue Router 中定义的 URL 路径)', - `component` varchar(128) COMMENT '组件路径(组件页面完整路径,相对于 src/views/,缺省后缀 .vue)', - `perm` varchar(128) COMMENT '【按钮】权限标识', - `always_show` tinyint DEFAULT 0 COMMENT '【目录】只有一个子路由是否始终显示(1-是 0-否)', - `keep_alive` tinyint DEFAULT 0 COMMENT '【菜单】是否开启页面缓存(1-是 0-否)', - `visible` tinyint(1) DEFAULT 1 COMMENT '显示状态(1-显示 0-隐藏)', - `sort` int DEFAULT 0 COMMENT '排序', - `icon` varchar(64) COMMENT '菜单图标', - `redirect` varchar(128) COMMENT '跳转路径', - `create_time` datetime NULL COMMENT '创建时间', - `update_time` datetime NULL COMMENT '更新时间', - `params` varchar(255) NULL COMMENT '路由参数', - PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '菜单管理'; - --- ---------------------------- --- Records of sys_menu --- ---------------------------- -INSERT INTO `sys_menu` VALUES (1, 0, '0', '系统管理', 2, '', '/system', 'Layout', NULL, NULL, NULL, 1, 1, 'system', '/system/user', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (2, 1, '0,1', '用户管理', 1, 'User', 'user', 'system/user/index', NULL, NULL, 1, 1, 1, 'el-icon-User', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (3, 1, '0,1', '角色管理', 1, 'Role', 'role', 'system/role/index', NULL, NULL, 1, 1, 2, 'role', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (4, 1, '0,1', '菜单管理', 1, 'SysMenu', 'menu', 'system/menu/index', NULL, NULL, 1, 1, 3, 'menu', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (5, 1, '0,1', '部门管理', 1, 'Dept', 'dept', 'system/dept/index', NULL, NULL, 1, 1, 4, 'tree', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (6, 1, '0,1', '字典管理', 1, 'Dict', 'dict', 'system/dict/index', NULL, NULL, 1, 1, 5, 'dict', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (20, 0, '0', '多级菜单', 2, NULL, '/multi-level', 'Layout', NULL, 1, NULL, 1, 9, 'cascader', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (21, 20, '0,20', '菜单一级', 2, NULL, 'multi-level1', 'Layout', NULL, 1, NULL, 1, 1, '', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (22, 21, '0,20,21', '菜单二级', 2, NULL, 'multi-level2', 'Layout', NULL, 0, NULL, 1, 1, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (23, 22, '0,20,21,22', '菜单三级-1', 1, NULL, 'multi-level3-1', 'demo/multi-level/children/children/level3-1', NULL, 0, 1, 1, 1, '', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (24, 22, '0,20,21,22', '菜单三级-2', 1, NULL, 'multi-level3-2', 'demo/multi-level/children/children/level3-2', NULL, 0, 1, 1, 2, '', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (26, 0, '0', '平台文档', 2, '', '/doc', 'Layout', NULL, NULL, NULL, 1, 8, 'document', 'https://juejin.cn/post/7228990409909108793', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (30, 26, '0,26', '平台文档(外链)', 3, NULL, 'https://juejin.cn/post/7228990409909108793', '', NULL, NULL, NULL, 1, 2, 'document', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (31, 2, '0,1,2', '用户新增', 4, NULL, '', NULL, 'sys:user:add', NULL, NULL, 1, 1, '', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (32, 2, '0,1,2', '用户编辑', 4, NULL, '', NULL, 'sys:user:edit', NULL, NULL, 1, 2, '', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (33, 2, '0,1,2', '用户删除', 4, NULL, '', NULL, 'sys:user:delete', NULL, NULL, 1, 3, '', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (36, 0, '0', '组件封装', 2, NULL, '/component', 'Layout', NULL, NULL, NULL, 1, 10, 'menu', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (37, 36, '0,36', '富文本编辑器', 1, 'WangEditor', 'wang-editor', 'demo/wang-editor', NULL, NULL, 1, 1, 2, '', '', NULL, NULL, NULL); -INSERT INTO `sys_menu` VALUES (38, 36, '0,36', '图片上传', 1, 'Upload', 'upload', 'demo/upload', NULL, NULL, 1, 1, 3, '', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (39, 36, '0,36', '图标选择器', 1, 'IconSelect', 'icon-select', 'demo/icon-select', NULL, NULL, 1, 1, 4, '', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (40, 0, '0', '接口文档', 2, NULL, '/api', 'Layout', NULL, 1, NULL, 1, 7, 'api', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (41, 40, '0,40', 'Apifox', 1, 'Apifox', 'apifox', 'demo/api/apifox', NULL, NULL, 1, 1, 1, 'api', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (70, 3, '0,1,3', '角色新增', 4, NULL, '', NULL, 'sys:role:add', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (71, 3, '0,1,3', '角色编辑', 4, NULL, '', NULL, 'sys:role:edit', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (72, 3, '0,1,3', '角色删除', 4, NULL, '', NULL, 'sys:role:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (73, 4, '0,1,4', '菜单新增', 4, NULL, '', NULL, 'sys:menu:add', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (74, 4, '0,1,4', '菜单编辑', 4, NULL, '', NULL, 'sys:menu:edit', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (75, 4, '0,1,4', '菜单删除', 4, NULL, '', NULL, 'sys:menu:delete', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (76, 5, '0,1,5', '部门新增', 4, NULL, '', NULL, 'sys:dept:add', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (77, 5, '0,1,5', '部门编辑', 4, NULL, '', NULL, 'sys:dept:edit', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (78, 5, '0,1,5', '部门删除', 4, NULL, '', NULL, 'sys:dept:delete', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (79, 6, '0,1,6', '字典新增', 4, NULL, '', NULL, 'sys:dict:add', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (81, 6, '0,1,6', '字典编辑', 4, NULL, '', NULL, 'sys:dict:edit', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (84, 6, '0,1,6', '字典删除', 4, NULL, '', NULL, 'sys:dict:delete', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (88, 2, '0,1,2', '重置密码', 4, NULL, '', NULL, 'sys:user:reset-password', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (89, 0, '0', '功能演示', 2, NULL, '/function', 'Layout', NULL, NULL, NULL, 1, 12, 'menu', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (90, 89, '0,89', 'Websocket', 1, 'WebSocket', '/function/websocket', 'demo/websocket', NULL, NULL, 1, 1, 3, '', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (95, 36, '0,36', '字典组件', 1, 'DictDemo', 'dict-demo', 'demo/dictionary', NULL, NULL, 1, 1, 4, '', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (97, 89, '0,89', 'Icons', 1, 'IconDemo', 'icon-demo', 'demo/icons', NULL, NULL, 1, 1, 2, 'el-icon-Notification', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (102, 26, '0,26', 'document', 3, NULL, 'internal-doc', 'demo/internal-doc', NULL, NULL, NULL, 1, 1, 'document', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (105, 2, '0,1,2', '用户查询', 4, NULL, '', NULL, 'sys:user:query', 0, 0, 1, 0, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (106, 2, '0,1,2', '用户导入', 4, NULL, '', NULL, 'sys:user:import', NULL, NULL, 1, 5, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (107, 2, '0,1,2', '用户导出', 4, NULL, '', NULL, 'sys:user:export', NULL, NULL, 1, 6, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (108, 36, '0,36', '增删改查', 1, 'Curd', 'curd', 'demo/curd/index', NULL, NULL, 1, 1, 0, '', '', NULL, NULL, NULL); -INSERT INTO `sys_menu` VALUES (109, 36, '0,36', '列表选择器', 1, 'TableSelect', 'table-select', 'demo/table-select/index', NULL, NULL, 1, 1, 1, '', '', NULL, NULL, NULL); -INSERT INTO `sys_menu` VALUES (110, 0, '0', '路由参数', 2, NULL, '/route-param', 'Layout', NULL, 1, 1, 1, 11, 'el-icon-ElementPlus', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (111, 110, '0,110', '参数(type=1)', 1, 'RouteParamType1', 'route-param-type1', 'demo/route-param', NULL, 0, 1, 1, 1, 'el-icon-Star', NULL, now(), now(), '{\"type\": \"1\"}'); -INSERT INTO `sys_menu` VALUES (112, 110, '0,110', '参数(type=2)', 1, 'RouteParamType2', 'route-param-type2', 'demo/route-param', NULL, 0, 1, 1, 2, 'el-icon-StarFilled', NULL, now(), now(), '{\"type\": \"2\"}'); -INSERT INTO `sys_menu` VALUES (117, 1, '0,1', '系统日志', 1, 'Log', 'log', 'system/log/index', NULL, 0, 1, 1, 6, 'document', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (118, 0, '0', '系统工具', 2, NULL, '/codegen', 'Layout', NULL, 0, 1, 1, 2, 'menu', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (119, 118, '0,118', '代码生成', 1, 'Codegen', 'codegen', 'codegen/index', NULL, 0, 1, 1, 1, 'code', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (120, 1, '0,1', '系统配置', 1, 'Config', 'config', 'system/config/index', NULL, 0, 1, 1, 7, 'setting', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (121, 120, '0,1,120', '系统配置查询', 4, NULL, '', NULL, 'sys:config:query', 0, 1, 1, 1, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (122, 120, '0,1,120', '系统配置新增', 4, NULL, '', NULL, 'sys:config:add', 0, 1, 1, 2, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (123, 120, '0,1,120', '系统配置修改', 4, NULL, '', NULL, 'sys:config:update', 0, 1, 1, 3, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (124, 120, '0,1,120', '系统配置删除', 4, NULL, '', NULL, 'sys:config:delete', 0, 1, 1, 4, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (125, 120, '0,1,120', '系统配置刷新', 4, NULL, '', NULL, 'sys:config:refresh', 0, 1, 1, 5, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (126, 1, '0,1', '通知公告', 1, 'Notice', 'notice', 'system/notice/index', NULL, NULL, NULL, 1, 9, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (127, 126, '0,1,126', '通知查询', 4, NULL, '', NULL, 'sys:notice:query', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (128, 126, '0,1,126', '通知新增', 4, NULL, '', NULL, 'sys:notice:add', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (129, 126, '0,1,126', '通知编辑', 4, NULL, '', NULL, 'sys:notice:edit', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (130, 126, '0,1,126', '通知删除', 4, NULL, '', NULL, 'sys:notice:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (133, 126, '0,1,126', '通知发布', 4, NULL, '', NULL, 'sys:notice:publish', 0, 1, 1, 5, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (134, 126, '0,1,126', '通知撤回', 4, NULL, '', NULL, 'sys:notice:revoke', 0, 1, 1, 6, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (135, 1, '0,1', '字典项', 1, 'DictItem', 'dict-item', 'system/dict/dict-item', NULL, 0, 1, 0, 6, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (136, 135, '0,1,135', '字典项新增', 4, NULL, '', NULL, 'sys:dict-item:add', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (137, 135, '0,1,135', '字典项编辑', 4, NULL, '', NULL, 'sys:dict-item:edit', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (138, 135, '0,1,135', '字典项删除', 4, NULL, '', NULL, 'sys:dict-item:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (139, 3, '0,1,3', '角色查询', 4, NULL, '', NULL, 'sys:role:query', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (140, 4, '0,1,4', '菜单查询', 4, NULL, '', NULL, 'sys:menu:query', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (141, 5, '0,1,5', '部门查询', 4, NULL, '', NULL, 'sys:dept:query', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (142, 6, '0,1,6', '字典查询', 4, NULL, '', NULL, 'sys:dict:query', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (143, 135, '0,1,135', '字典项查询', 4, NULL, '', NULL, 'sys:dict-item:query', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (144, 26, '0,26', '后端文档', 3, NULL, 'https://youlai.blog.csdn.net/article/details/145178880', '', NULL, NULL, NULL, 1, 3, 'document', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (145, 26, '0,26', '移动端文档', 3, NULL, 'https://youlai.blog.csdn.net/article/details/143222890', '', NULL, NULL, NULL, 1, 4, 'document', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (146, 36, '0,36', '拖拽组件', 1, 'Drag', 'drag', 'demo/drag', NULL, NULL, NULL, 1, 5, '', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (147, 36, '0,36', '滚动文本', 1, 'TextScroll', 'text-scroll', 'demo/text-scroll', NULL, NULL, NULL, 1, 6, '', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (148, 89, '0,89', '字典实时同步', 1, 'DictSync', 'dict-sync', 'demo/dict-sync', NULL, NULL, NULL, 1, 3, '', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (149, 89, '0,89', 'VxeTable', 1, 'VxeTable', 'vxe-table', 'demo/vxe-table/index', NULL, NULL, 1, 1, 0, 'el-icon-MagicStick', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (150, 36, '0,36', '自适应表格操作列', 1, 'AutoOperationColumn', 'operation-column', 'demo/auto-operation-column', NULL, NULL, 1, 1, 1, '', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (151, 89, '0,89', 'CURD单文件', 1, 'CurdSingle', 'curd-single', 'demo/curd-single', NULL, NULL, 1, 1, 7, 'el-icon-Reading', '', now(),now(), NULL); -INSERT INTO `sys_menu` VALUES (152, 0, '0', 'AI助手', 2, NULL, '/platform', 'Layout', NULL, NULL, NULL, 1, 13, 'platform', '', now(), now(), NULL); -INSERT INTO `sys_menu` VALUES (153, 152, '0,152', 'AI命令记录', 1, 'AiCommandRecord', 'command-record', 'ai/command-record/index', NULL, NULL, 1, 1, 1, 'document', NULL, now(), now(), 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) NOT NULL COMMENT '角色名称', - `code` varchar(32) NOT NULL COMMENT '角色编码', - `sort` int NULL COMMENT '显示顺序', - `status` tinyint(1) DEFAULT 1 COMMENT '角色状态(1-正常 0-停用)', - `data_scope` tinyint NULL COMMENT '数据权限(1-所有数据 2-部门及子部门数据 3-本部门数据 4-本人数据)', - `create_by` bigint NULL COMMENT '创建人 ID', - `create_time` datetime NULL COMMENT '创建时间', - `update_by` bigint NULL COMMENT '更新人ID', - `update_time` datetime NULL COMMENT '更新时间', - `is_deleted` tinyint(1) DEFAULT 0 COMMENT '逻辑删除标识(0-未删除 1-已删除)', - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `uk_name`(`name` ASC) USING BTREE COMMENT '角色名称唯一索引', - UNIQUE INDEX `uk_code`(`code` ASC) USING BTREE COMMENT '角色编码唯一索引' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '角色表'; - --- ---------------------------- --- Records of sys_role --- ---------------------------- -INSERT INTO `sys_role` VALUES (1, '超级管理员', 'ROOT', 1, 1, 1, NULL, now(), NULL, now(), 0); -INSERT INTO `sys_role` VALUES (2, '系统管理员', 'ADMIN', 2, 1, 1, NULL, now(), NULL, NULL, 0); -INSERT INTO `sys_role` VALUES (3, '访问游客', 'GUEST', 3, 1, 3, NULL, now(), NULL, now(), 0); -INSERT INTO `sys_role` VALUES (4, '系统管理员1', 'ADMIN1', 4, 1, 1, NULL, now(), NULL, NULL, 0); -INSERT INTO `sys_role` VALUES (5, '系统管理员2', 'ADMIN2', 5, 1, 1, NULL, now(), NULL, NULL, 0); -INSERT INTO `sys_role` VALUES (6, '系统管理员3', 'ADMIN3', 6, 1, 1, NULL, now(), NULL, NULL, 0); -INSERT INTO `sys_role` VALUES (7, '系统管理员4', 'ADMIN4', 7, 1, 1, NULL, now(), NULL, NULL, 0); -INSERT INTO `sys_role` VALUES (8, '系统管理员5', 'ADMIN5', 8, 1, 1, NULL, now(), NULL, NULL, 0); -INSERT INTO `sys_role` VALUES (9, '系统管理员6', 'ADMIN6', 9, 1, 1, NULL, now(), NULL, NULL, 0); -INSERT INTO `sys_role` VALUES (10, '系统管理员7', 'ADMIN7', 10, 1, 1, NULL, now(), NULL, NULL, 0); -INSERT INTO `sys_role` VALUES (11, '系统管理员8', 'ADMIN8', 11, 1, 1, NULL, now(), NULL, NULL, 0); -INSERT INTO `sys_role` VALUES (12, '系统管理员9', 'ADMIN9', 12, 1, 1, NULL, now(), NULL, NULL, 0); - --- ---------------------------- --- 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', - UNIQUE INDEX `uk_roleid_menuid`(`role_id` ASC, `menu_id` ASC) USING BTREE COMMENT '角色菜单唯一索引' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '角色和菜单关联表'; - --- ---------------------------- --- 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, 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 `sys_role_menu` VALUES (2, 89); -INSERT INTO `sys_role_menu` VALUES (2, 90); -INSERT INTO `sys_role_menu` VALUES (2, 91); -INSERT INTO `sys_role_menu` VALUES (2, 95); -INSERT INTO `sys_role_menu` VALUES (2, 97); -INSERT INTO `sys_role_menu` VALUES (2, 102); -INSERT INTO `sys_role_menu` VALUES (2, 105); -INSERT INTO `sys_role_menu` VALUES (2, 106); -INSERT INTO `sys_role_menu` VALUES (2, 107); -INSERT INTO `sys_role_menu` VALUES (2, 108); -INSERT INTO `sys_role_menu` VALUES (2, 109); -INSERT INTO `sys_role_menu` VALUES (2, 110); -INSERT INTO `sys_role_menu` VALUES (2, 111); -INSERT INTO `sys_role_menu` VALUES (2, 112); -INSERT INTO `sys_role_menu` VALUES (2, 114); -INSERT INTO `sys_role_menu` VALUES (2, 115); -INSERT INTO `sys_role_menu` VALUES (2, 116); -INSERT INTO `sys_role_menu` VALUES (2, 117); -INSERT INTO `sys_role_menu` VALUES (2, 118); -INSERT INTO `sys_role_menu` VALUES (2, 119); -INSERT INTO `sys_role_menu` VALUES (2, 120); -INSERT INTO `sys_role_menu` VALUES (2, 121); -INSERT INTO `sys_role_menu` VALUES (2, 122); -INSERT INTO `sys_role_menu` VALUES (2, 123); -INSERT INTO `sys_role_menu` VALUES (2, 124); -INSERT INTO `sys_role_menu` VALUES (2, 125); -INSERT INTO `sys_role_menu` VALUES (2, 126); -INSERT INTO `sys_role_menu` VALUES (2, 127); -INSERT INTO `sys_role_menu` VALUES (2, 128); -INSERT INTO `sys_role_menu` VALUES (2, 129); -INSERT INTO `sys_role_menu` VALUES (2, 130); -INSERT INTO `sys_role_menu` VALUES (2, 131); -INSERT INTO `sys_role_menu` VALUES (2, 132); -INSERT INTO `sys_role_menu` VALUES (2, 133); -INSERT INTO `sys_role_menu` VALUES (2, 134); -INSERT INTO `sys_role_menu` VALUES (2, 135); -INSERT INTO `sys_role_menu` VALUES (2, 136); -INSERT INTO `sys_role_menu` VALUES (2, 137); -INSERT INTO `sys_role_menu` VALUES (2, 138); -INSERT INTO `sys_role_menu` VALUES (2, 139); -INSERT INTO `sys_role_menu` VALUES (2, 140); -INSERT INTO `sys_role_menu` VALUES (2, 141); -INSERT INTO `sys_role_menu` VALUES (2, 142); -INSERT INTO `sys_role_menu` VALUES (2, 143); -INSERT INTO `sys_role_menu` VALUES (2, 144); -INSERT INTO `sys_role_menu` VALUES (2, 145); -INSERT INTO `sys_role_menu` VALUES (2, 146); -INSERT INTO `sys_role_menu` VALUES (2, 147); -INSERT INTO `sys_role_menu` VALUES (2, 148); -INSERT INTO `sys_role_menu` VALUES (2, 149); -INSERT INTO `sys_role_menu` VALUES (2, 150); -INSERT INTO `sys_role_menu` VALUES (2, 151); - --- ---------------------------- --- Table structure for sys_user --- ---------------------------- -DROP TABLE IF EXISTS `sys_user`; -CREATE TABLE `sys_user` ( - `id` bigint NOT NULL AUTO_INCREMENT, - `username` varchar(64) COMMENT '用户名', - `nickname` varchar(64) COMMENT '昵称', - `gender` tinyint(1) DEFAULT 1 COMMENT '性别((1-男 2-女 0-保密)', - `password` varchar(100) COMMENT '密码', - `dept_id` int COMMENT '部门ID', - `avatar` varchar(255) COMMENT '用户头像', - `mobile` varchar(20) COMMENT '联系方式', - `status` tinyint(1) DEFAULT 1 COMMENT '状态(1-正常 0-禁用)', - `email` varchar(128) COMMENT '用户邮箱', - `create_time` datetime COMMENT '创建时间', - `create_by` bigint COMMENT '创建人ID', - `update_time` datetime COMMENT '更新时间', - `update_by` bigint COMMENT '修改人ID', - `is_deleted` tinyint(1) DEFAULT 0 COMMENT '逻辑删除标识(0-未删除 1-已删除)', - `openid` char(28) COMMENT '微信 openid', - PRIMARY KEY (`id`) USING BTREE, - KEY `login_name` (`username`) -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '用户信息表'; - --- ---------------------------- --- Records of sys_user --- ---------------------------- -INSERT INTO `sys_user` VALUES (1, 'root', '有来技术', 0, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', NULL, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345677', 1, 'youlaitech@163.com', now(), NULL, now(), NULL, 0,NULL); -INSERT INTO `sys_user` VALUES (2, 'admin', '系统管理员', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 1, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345678', 1, 'youlaitech@163.com', now(), NULL, now(), NULL, 0,NULL); -INSERT INTO `sys_user` VALUES (3, 'test', '测试小用户', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 3, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345679', 1, 'youlaitech@163.com', now(), NULL, now(), NULL, 0,NULL); - --- ---------------------------- --- 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 = utf8mb4 COMMENT = '用户和角色关联表'; - --- ---------------------------- --- 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); - - --- ---------------------------- --- Table structure for sys_log --- ---------------------------- -DROP TABLE IF EXISTS `sys_log`; -CREATE TABLE `sys_log` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', - `module` varchar(50) NOT NULL COMMENT '日志模块', - `request_method` varchar(64) NOT NULL COMMENT '请求方式', - `request_params` text COMMENT '请求参数(批量请求参数可能会超过text)', - `response_content` mediumtext COMMENT '返回参数', - `content` varchar(255) NOT NULL COMMENT '日志内容', - `request_uri` varchar(255) COMMENT '请求路径', - `method` varchar(255) COMMENT '方法名', - `ip` varchar(45) COMMENT 'IP地址', - `province` varchar(100) COMMENT '省份', - `city` varchar(100) COMMENT '城市', - `execution_time` bigint COMMENT '执行时间(ms)', - `browser` varchar(100) COMMENT '浏览器', - `browser_version` varchar(100) COMMENT '浏览器版本', - `os` varchar(100) COMMENT '终端系统', - `create_by` bigint COMMENT '创建人ID', - `create_time` datetime COMMENT '创建时间', - `is_deleted` tinyint DEFAULT '0' COMMENT '逻辑删除标识(1-已删除 0-未删除)', - PRIMARY KEY (`id`) USING BTREE, - KEY `idx_create_time` (`create_time`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='系统日志表'; - --- ---------------------------- --- Table structure for gen_config --- ---------------------------- -DROP TABLE IF EXISTS `gen_config`; -CREATE TABLE `gen_config` ( - `id` bigint NOT NULL AUTO_INCREMENT, - `table_name` varchar(100) NOT NULL COMMENT '表名', - `module_name` varchar(100) COMMENT '模块名', - `package_name` varchar(255) NOT NULL COMMENT '包名', - `business_name` varchar(100) NOT NULL COMMENT '业务名', - `entity_name` varchar(100) NOT NULL COMMENT '实体类名', - `author` varchar(50) NOT NULL COMMENT '作者', - `parent_menu_id` bigint COMMENT '上级菜单ID,对应sys_menu的id ', - `remove_table_prefix` varchar(20) COMMENT '要移除的表前缀,如: sys_', - `page_type` varchar(20) COMMENT '页面类型(classic|curd)', - `create_time` datetime COMMENT '创建时间', - `update_time` datetime COMMENT '更新时间', - `is_deleted` tinyint(4) DEFAULT 0 COMMENT '是否删除', - PRIMARY KEY (`id`), - UNIQUE KEY `uk_tablename` (`table_name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代码生成基础配置表'; - --- ---------------------------- --- Table structure for gen_field_config --- ---------------------------- -DROP TABLE IF EXISTS `gen_field_config`; -CREATE TABLE `gen_field_config` ( - `id` bigint NOT NULL AUTO_INCREMENT, - `config_id` bigint NOT NULL COMMENT '关联的配置ID', - `column_name` varchar(100) , - `column_type` varchar(50) , - `column_length` int , - `field_name` varchar(100) NOT NULL COMMENT '字段名称', - `field_type` varchar(100) COMMENT '字段类型', - `field_sort` int COMMENT '字段排序', - `field_comment` varchar(255) COMMENT '字段描述', - `max_length` int , - `is_required` tinyint(1) COMMENT '是否必填', - `is_show_in_list` tinyint(1) DEFAULT '0' COMMENT '是否在列表显示', - `is_show_in_form` tinyint(1) DEFAULT '0' COMMENT '是否在表单显示', - `is_show_in_query` tinyint(1) DEFAULT '0' COMMENT '是否在查询条件显示', - `query_type` tinyint COMMENT '查询方式', - `form_type` tinyint COMMENT '表单类型', - `dict_type` varchar(50) COMMENT '字典类型', - `create_time` datetime COMMENT '创建时间', - `update_time` datetime COMMENT '更新时间', - PRIMARY KEY (`id`), - KEY `config_id` (`config_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代码生成字段配置表'; - --- ---------------------------- --- 系统配置表 --- ---------------------------- -DROP TABLE IF EXISTS `sys_config`; -CREATE TABLE `sys_config` ( - `id` bigint NOT NULL AUTO_INCREMENT, - `config_name` varchar(50) NOT NULL COMMENT '配置名称', - `config_key` varchar(50) NOT NULL COMMENT '配置key', - `config_value` varchar(100) NOT NULL COMMENT '配置值', - `remark` varchar(255) COMMENT '备注', - `create_time` datetime COMMENT '创建时间', - `create_by` bigint COMMENT '创建人ID', - `update_time` datetime COMMENT '更新时间', - `update_by` bigint COMMENT '更新人ID', - `is_deleted` tinyint(4) DEFAULT '0' NOT NULL COMMENT '逻辑删除标识(0-未删除 1-已删除)', - PRIMARY KEY (`id`) -) ENGINE=InnoDB COMMENT='系统配置表'; - -INSERT INTO `sys_config` VALUES (1, '系统限流QPS', 'IP_QPS_THRESHOLD_LIMIT', '10', '单个IP请求的最大每秒查询数(QPS)阈值Key', now(), 1, NULL, NULL, 0); - --- ---------------------------- --- 通知公告表 --- ---------------------------- -DROP TABLE IF EXISTS `sys_notice`; -CREATE TABLE `sys_notice` ( - `id` bigint NOT NULL AUTO_INCREMENT, - `title` varchar(50) COMMENT '通知标题', - `content` text COMMENT '通知内容', - `type` tinyint NOT NULL COMMENT '通知类型(关联字典编码:notice_type)', - `level` varchar(5) NOT NULL COMMENT '通知等级(字典code:notice_level)', - `target_type` tinyint NOT NULL COMMENT '目标类型(1: 全体, 2: 指定)', - `target_user_ids` varchar(255) COMMENT '目标人ID集合(多个使用英文逗号,分割)', - `publisher_id` bigint COMMENT '发布人ID', - `publish_status` tinyint DEFAULT '0' COMMENT '发布状态(0: 未发布, 1: 已发布, -1: 已撤回)', - `publish_time` datetime COMMENT '发布时间', - `revoke_time` datetime COMMENT '撤回时间', - `create_by` bigint NOT NULL COMMENT '创建人ID', - `create_time` datetime NOT NULL COMMENT '创建时间', - `update_by` bigint COMMENT '更新人ID', - `update_time` datetime COMMENT '更新时间', - `is_deleted` tinyint(1) DEFAULT '0' COMMENT '是否删除(0: 未删除, 1: 已删除)', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通知公告表'; - -INSERT INTO `sys_notice` VALUES (1, 'v2.12.0 新增系统日志,访问趋势统计功能。', '

1. 消息通知

2. 字典重构

3. 代码生成

', 1, 'L', 1, '2', 1, 1, now(), now(), 2, now(), 1, now(), 0); -INSERT INTO `sys_notice` VALUES (2, 'v2.13.0 新增菜单搜索。', '

1. 消息通知

2. 字典重构

3. 代码生成

', 1, 'L', 1, '2', 1, 1, now(), now(), 2, now(), 1, now(), 0); -INSERT INTO `sys_notice` VALUES (3, 'v2.14.0 新增个人中心。', '

1. 消息通知

2. 字典重构

3. 代码生成

', 1, 'L', 1, '2', 2, 1, now(), now(), 2, now(), 2, now(), 0); -INSERT INTO `sys_notice` VALUES (4, 'v2.15.0 登录页面改造。', '

1. 消息通知

2. 字典重构

3. 代码生成

', 1, 'L', 1, '2', 2, 1, now(), now(), 2, now(), 2, now(), 0); -INSERT INTO `sys_notice` VALUES (5, 'v2.16.0 通知公告、字典翻译组件。', '

1. 消息通知

2. 字典重构

3. 代码生成

', 1, 'L', 1, '2', 2, 1, now(), now(), 2, now(), 2, now(), 0); -INSERT INTO `sys_notice` VALUES (6, '系统将于本周六凌晨 2 点进行维护,预计维护时间为 2 小时。', '

1. 消息通知

2. 字典重构

3. 代码生成

', 2, 'H', 1, '2', 2, 1, now(), now(), 2, now(), 2, now(), 0); -INSERT INTO `sys_notice` VALUES (7, '最近发现一些钓鱼邮件,请大家提高警惕,不要点击陌生链接。', '

1. 消息通知

2. 字典重构

3. 代码生成

', 3, 'L', 1, '2', 2, 1, now(), now(), 2, now(), 2, now(), 0); -INSERT INTO `sys_notice` VALUES (8, '国庆假期从 10 月 1 日至 10 月 7 日放假,共 7 天。', '

1. 消息通知

2. 字典重构

3. 代码生成

', 4, 'L', 1, '2', 2, 1, now(), now(), 2, now(), 2, now(), 0); -INSERT INTO `sys_notice` VALUES (9, '公司将在 10 月 15 日举办新产品发布会,敬请期待。', '公司将在 10 月 15 日举办新产品发布会,敬请期待。', 5, 'H', 1, '2', 2, 1, now(), now(), 2, now(), 2, now(), 0); -INSERT INTO `sys_notice` VALUES (10, 'v2.16.1 版本发布。', 'v2.16.1 版本修复了 WebSocket 重复连接导致的后台线程阻塞问题,优化了通知公告。', 1, 'M', 1, '2', 2, 1, now(), now(), 2, now(), 2, now(), 0); - --- ---------------------------- --- 用户通知公告表 --- ---------------------------- -DROP TABLE IF EXISTS `sys_user_notice`; -CREATE TABLE `sys_user_notice` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', - `notice_id` bigint NOT NULL COMMENT '公共通知id', - `user_id` bigint NOT NULL COMMENT '用户id', - `is_read` bigint DEFAULT '0' COMMENT '读取状态(0: 未读, 1: 已读)', - `read_time` datetime COMMENT '阅读时间', - `create_time` datetime NOT NULL COMMENT '创建时间', - `update_time` datetime COMMENT '更新时间', - `is_deleted` tinyint DEFAULT '0' COMMENT '逻辑删除(0: 未删除, 1: 已删除)', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户通知公告表'; - -INSERT INTO `sys_user_notice` VALUES (1, 1, 2, 1, NULL, now(), now(), 0); -INSERT INTO `sys_user_notice` VALUES (2, 2, 2, 1, NULL, now(), now(), 0); -INSERT INTO `sys_user_notice` VALUES (3, 3, 2, 1, NULL, now(), now(), 0); -INSERT INTO `sys_user_notice` VALUES (4, 4, 2, 1, NULL, now(), now(), 0); -INSERT INTO `sys_user_notice` VALUES (5, 5, 2, 1, NULL, now(), now(), 0); -INSERT INTO `sys_user_notice` VALUES (6, 6, 2, 1, NULL, now(), now(), 0); -INSERT INTO `sys_user_notice` VALUES (7, 7, 2, 1, NULL, now(), now(), 0); -INSERT INTO `sys_user_notice` VALUES (8, 8, 2, 1, NULL, now(), now(), 0); -INSERT INTO `sys_user_notice` VALUES (9, 9, 2, 1, NULL, now(), now(), 0); -INSERT INTO `sys_user_notice` VALUES (10, 10, 2, 1, NULL, now(), now(), 0); - --- ---------------------------- --- AI 命令记录表 --- ---------------------------- -DROP TABLE IF EXISTS `ai_command_log`; -CREATE TABLE `ai_command_log` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', - `user_id` bigint DEFAULT NULL COMMENT '用户ID', - `username` varchar(64) DEFAULT NULL COMMENT '用户名', - `original_command` text COMMENT '原始命令', - `ai_provider` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'AI 供应商(qwen/openai/deepseek/gemini等)', - `ai_model` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'AI 模型名称(qwen-plus/qwen-max/gpt-4-turbo等)', - `parse_status` tinyint DEFAULT '0' COMMENT '解析是否成功(0-失败, 1-成功)', - `function_calls` text COMMENT '解析出的函数调用列表(JSON)', - `explanation` varchar(500) DEFAULT NULL COMMENT 'AI的理解说明', - `confidence` decimal(3,2) DEFAULT NULL COMMENT '置信度(0.00-1.00)', - `parse_error_message` text COMMENT '解析错误信息', - `input_tokens` int DEFAULT NULL COMMENT '输入Token数量', - `output_tokens` int DEFAULT NULL COMMENT '输出Token数量', - `parse_duration_ms` int DEFAULT NULL COMMENT '解析耗时(毫秒)', - `function_name` varchar(255) DEFAULT NULL COMMENT '执行的函数名称', - `function_arguments` text COMMENT '函数参数(JSON)', - `execute_status` tinyint(1) DEFAULT NULL COMMENT '执行状态(0-待执行, 1-成功, -1-失败)', - `execute_error_message` text COMMENT '执行错误信息', - `ip_address` varchar(128) DEFAULT NULL COMMENT 'IP地址', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `update_time` datetime DEFAULT NULL COMMENT '更新时间', - PRIMARY KEY (`id`), - KEY `idx_user_id` (`user_id`), - KEY `idx_create_time` (`create_time`), - KEY `idx_provider` (`ai_provider`), - KEY `idx_model` (`ai_model`), - KEY `idx_parse_success` (`parse_status`), - KEY `idx_execute_status` (`execute_status`) -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI 命令记录表'; - - -SET FOREIGN_KEY_CHECKS = 1; diff --git a/src/main/java/com/youlai/boot/common/base/BaseEntity.java b/src/main/java/com/youlai/boot/common/base/BaseEntity.java index 9c6a2812..19bf36ab 100644 --- a/src/main/java/com/youlai/boot/common/base/BaseEntity.java +++ b/src/main/java/com/youlai/boot/common/base/BaseEntity.java @@ -13,6 +13,7 @@ import java.time.LocalDateTime; * 基础实体类 * *

实体类的基类,包含了实体类的公共属性,如创建时间、更新时间、逻辑删除标识等

+ *

多租户模式下,会自动添加 tenant_id 字段(通过 MyMetaObjectHandler 自动填充)

* * @author Ray * @since 2024/6/23 @@ -29,6 +30,26 @@ public class BaseEntity implements Serializable { @TableId(type = IdType.AUTO) private Long id; + /** + * 租户ID(多租户模式) + *

+ * 注意:此字段仅在启用多租户时生效 + * 通过 MyMetaObjectHandler 自动填充,无需手动设置 + * 如果不需要多租户,可以通过配置 youlai.tenant.enabled=false 禁用 + *

+ *

+ * 重要说明: + * 1. 默认使用 exist = false 标记字段不存在于数据库,避免单租户模式下报错 + * 2. 在启用多租户时,需要确保数据库表中有 tenant_id 字段 + * 3. 多租户的数据隔离主要通过 TenantLineHandler 自动添加 WHERE 条件实现 + * 4. 如果需要在 INSERT 时写入 tenant_id,请将 exist 改为 true 或移除 exist 属性 + * 5. 或者执行 add_tenant_column.sql 脚本为表添加 tenant_id 字段 + *

+ */ + @TableField(value = "tenant_id", exist = false) + @JsonInclude(value = JsonInclude.Include.NON_NULL) + private Long tenantId; + /** * 创建时间 */ diff --git a/src/main/java/com/youlai/boot/config/MybatisConfig.java b/src/main/java/com/youlai/boot/config/MybatisConfig.java index 537cb7e5..6cca57d5 100644 --- a/src/main/java/com/youlai/boot/config/MybatisConfig.java +++ b/src/main/java/com/youlai/boot/config/MybatisConfig.java @@ -5,11 +5,16 @@ import com.baomidou.mybatisplus.core.config.GlobalConfig; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; +import com.youlai.boot.config.property.TenantProperties; import com.youlai.boot.plugin.mybatis.MyDataPermissionHandler; import com.youlai.boot.plugin.mybatis.MyMetaObjectHandler; +import com.youlai.boot.plugin.mybatis.TenantLineHandler; import org.apache.ibatis.mapping.DatabaseIdProvider; import org.apache.ibatis.mapping.VendorDatabaseIdProvider; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; @@ -29,14 +34,30 @@ public class MybatisConfig { @Value("${app.db-type:mysql}") private String dbType; + @Autowired(required = false) + private TenantLineHandler tenantLineHandler; + + @Autowired(required = false) + private TenantProperties tenantProperties; + /** * 分页插件和数据权限插件 + *

+ * 如果启用了多租户,则添加多租户插件(必须在最前面) + *

*/ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + + // 多租户插件(如果启用,必须在最前面) + if (tenantProperties != null && Boolean.TRUE.equals(tenantProperties.getEnabled()) && tenantLineHandler != null) { + interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(tenantLineHandler)); + } + // 数据权限 interceptor.addInnerInterceptor(new DataPermissionInterceptor(new MyDataPermissionHandler())); + // 分页插件,根据配置动态选择数据库类型 DbType mpDbType = DbType.MYSQL; String type = dbType == null ? "mysql" : dbType.toLowerCase(); diff --git a/src/main/java/com/youlai/boot/platform/ai/mapper/AiCommandLogMapper.java b/src/main/java/com/youlai/boot/platform/ai/mapper/AiCommandLogMapper.java index 7f6fbed8..90bb3f32 100644 --- a/src/main/java/com/youlai/boot/platform/ai/mapper/AiCommandLogMapper.java +++ b/src/main/java/com/youlai/boot/platform/ai/mapper/AiCommandLogMapper.java @@ -23,3 +23,4 @@ public interface AiCommandLogMapper extends BaseMapper { IPage getLogPage(Page page, AiCommandPageQuery queryParams); } + diff --git a/src/main/java/com/youlai/boot/platform/ai/model/entity/AiCommandLog.java b/src/main/java/com/youlai/boot/platform/ai/model/entity/AiCommandLog.java index 47e1f067..9a55687f 100644 --- a/src/main/java/com/youlai/boot/platform/ai/model/entity/AiCommandLog.java +++ b/src/main/java/com/youlai/boot/platform/ai/model/entity/AiCommandLog.java @@ -79,3 +79,4 @@ public class AiCommandLog extends BaseEntity { private String ipAddress; } + diff --git a/src/main/java/com/youlai/boot/platform/ai/model/vo/AiCommandLogVO.java b/src/main/java/com/youlai/boot/platform/ai/model/vo/AiCommandLogVO.java index 0481087d..b35d3745 100644 --- a/src/main/java/com/youlai/boot/platform/ai/model/vo/AiCommandLogVO.java +++ b/src/main/java/com/youlai/boot/platform/ai/model/vo/AiCommandLogVO.java @@ -90,3 +90,4 @@ public class AiCommandLogVO implements Serializable { private LocalDateTime updateTime; } + diff --git a/src/main/java/com/youlai/boot/platform/ai/service/AiCommandLogService.java b/src/main/java/com/youlai/boot/platform/ai/service/AiCommandLogService.java index 4628881d..5b4bea19 100644 --- a/src/main/java/com/youlai/boot/platform/ai/service/AiCommandLogService.java +++ b/src/main/java/com/youlai/boot/platform/ai/service/AiCommandLogService.java @@ -30,3 +30,4 @@ public interface AiCommandLogService extends IService { void rollbackCommand(String logId); } + diff --git a/src/main/java/com/youlai/boot/platform/ai/service/impl/AiCommandLogServiceImpl.java b/src/main/java/com/youlai/boot/platform/ai/service/impl/AiCommandLogServiceImpl.java index fb0eea05..05ec8f4f 100644 --- a/src/main/java/com/youlai/boot/platform/ai/service/impl/AiCommandLogServiceImpl.java +++ b/src/main/java/com/youlai/boot/platform/ai/service/impl/AiCommandLogServiceImpl.java @@ -47,3 +47,4 @@ public class AiCommandLogServiceImpl extends ServiceImpl + * 支持自动填充创建时间、更新时间和租户ID + *

* * @author haoxr * @since 2022/10/14 */ @Component +@RequiredArgsConstructor public class MyMetaObjectHandler implements MetaObjectHandler { + @Autowired(required = false) + private TenantProperties tenantProperties; + /** - * 新增填充创建时间 + * 新增填充创建时间、更新时间和租户ID * * @param metaObject 元数据 */ @@ -24,6 +35,27 @@ public class MyMetaObjectHandler implements MetaObjectHandler { public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class); this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class); + + // 如果启用了多租户,自动填充租户ID + // 注意:由于 BaseEntity 中 tenantId 字段使用了 exist = false(避免单租户模式报错) + // 在启用多租户时,需要通过反射动态修改字段的 exist 属性,或者直接设置值 + // 但 MyBatis-Plus 的字段映射是静态的,无法动态修改 + // 因此,我们使用 strictInsertFill,它会自动处理字段映射 + // 如果字段不存在(exist = false),strictInsertFill 会跳过,不会报错 + if (tenantProperties != null && Boolean.TRUE.equals(tenantProperties.getEnabled())) { + Long tenantId = TenantContextHolder.getTenantId(); + if (tenantId != null) { + // 使用数据库字段名(tenant_id)进行填充 + // 注意:由于 exist = false,这个填充不会写入数据库 + // 但多租户的数据隔离是通过 TenantLineHandler 自动添加 WHERE 条件实现的 + // 所以这里只需要设置实体对象的属性值即可(用于业务逻辑) + String propertyName = "tenantId"; + if (metaObject.hasGetter(propertyName)) { + // 直接设置值到实体对象,不依赖字段映射 + metaObject.setValue(propertyName, tenantId); + } + } + } } /** diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index df4c8e98..09335b47 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -10,19 +10,19 @@ spring: type: com.alibaba.druid.pool.DruidDataSource # === MySQL 数据源(默认启用) === driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://www.youlai.tech:3306/youlai_boot?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&allowMultiQueries=true + url: jdbc:mysql://www.youlai.tech:3306/youlai_admin?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&allowMultiQueries=true username: youlai password: 123456 # === PostgreSQL 数据源示例(按需启用) === # driver-class-name: org.postgresql.Driver - # url: jdbc:postgresql://127.0.0.1:5432/youlai_boot + # url: jdbc:postgresql://127.0.0.1:5432/youlai_admin # username: postgres # password: 123456 # === 达梦 DM 数据源示例(按需启用,注意按实际驱动与 URL 调整) === # driver-class-name: dm.jdbc.driver.DmDriver - # url: jdbc:dm://127.0.0.1:5236?schema=YOULAI_BOOT + # url: jdbc:dm://127.0.0.1:5236?schema=YOULAI_ADMIN # username: SYSDBA # password: 123456 data: @@ -264,3 +264,32 @@ wx: miniapp: app-id: xxxxxx app-secret: xxxxxx + +# ============================================ +# 多租户配置 +# ============================================ +# 说明:通过 youlai.tenant.enabled 控制是否启用多租户功能 +# 启用后,所有 SQL 查询会自动添加 tenant_id 过滤条件 +# ============================================ +youlai: + tenant: + # 是否启用多租户功能(默认:false) + # 设置为 true 启用多租户,设置为 false 禁用多租户(零成本切换) + enabled: false + + # 租户字段名(默认:tenant_id) + column: tenant_id + + # 默认租户ID(用于兼容旧数据,tenant_id 为 NULL 时使用) + default-tenant-id: 1 + + # 请求头中的租户ID字段名(默认:tenant-id) + header-name: tenant-id + + # 忽略多租户过滤的表名列表(系统表、租户表等不需要租户隔离的表) + ignore-tables: + - sys_tenant # 租户表本身 + - sys_dict # 字典表(通常共享) + - sys_dict_item # 字典项表(通常共享) + - sys_config # 系统配置表(通常共享) +# ============================================ \ No newline at end of file diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index b92bcc1a..2dcf4b99 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -6,19 +6,19 @@ spring: type: com.alibaba.druid.pool.DruidDataSource # === MySQL 数据源(默认启用) === driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://www.youlai.tech:3306/youlai_boot?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&allowMultiQueries=true + url: jdbc:mysql://www.youlai.tech:3306/youlai_admin?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&allowMultiQueries=true username: youlai password: 123456 # === PostgreSQL 数据源示例(按需启用) === # driver-class-name: org.postgresql.Driver - # url: jdbc:postgresql://127.0.0.1:5432/youlai_boot + # url: jdbc:postgresql://127.0.0.1:5432/youlai_admin # username: postgres # password: 123456 # === 达梦 DM 数据源示例(按需启用,注意按实际驱动与 URL 调整) === # driver-class-name: dm.jdbc.driver.DmDriver - # url: jdbc:dm://127.0.0.1:5236?schema=YOULAI_BOOT + # url: jdbc:dm://127.0.0.1:5236?schema=YOULAI_ADMIN # username: SYSDBA # password: 123456 data: diff --git a/src/main/resources/mapper/ai/AiCommandLogMapper.xml b/src/main/resources/mapper/ai/AiCommandLogMapper.xml index f006c788..55a12a2b 100644 --- a/src/main/resources/mapper/ai/AiCommandLogMapper.xml +++ b/src/main/resources/mapper/ai/AiCommandLogMapper.xml @@ -94,3 +94,4 @@ +