消息模块、爬虫

This commit is contained in:
2025-11-13 19:00:27 +08:00
parent 2982d53800
commit e20a7755f8
85 changed files with 8637 additions and 201 deletions

View File

@@ -0,0 +1,145 @@
-- =====================================================
-- 消息通知模块 - 数据库表结构
-- 包含3张表消息主体表、消息接收对象表、用户消息表
-- =====================================================
-- 1. 消息主体表
DROP TABLE IF EXISTS tb_sys_message;
CREATE TABLE tb_sys_message (
-- 基础标识
id VARCHAR(50) PRIMARY KEY COMMENT '主键ID',
message_id VARCHAR(50) NOT NULL UNIQUE COMMENT '消息唯一标识',
-- 消息内容
title VARCHAR(200) NOT NULL COMMENT '消息标题',
content TEXT NOT NULL COMMENT '消息内容',
message_type VARCHAR(20) NOT NULL DEFAULT 'notification' COMMENT '消息类型notification-通知/announcement-公告/warning-预警',
priority VARCHAR(20) NOT NULL DEFAULT 'normal' COMMENT '优先级normal-普通/important-重要/urgent-紧急',
-- 发送人信息
sender_id VARCHAR(50) NOT NULL COMMENT '发送人用户ID',
sender_name VARCHAR(100) COMMENT '发送人姓名(冗余字段)',
sender_dept_id VARCHAR(50) NOT NULL COMMENT '发送人部门ID',
sender_dept_name VARCHAR(100) COMMENT '发送人部门名称(冗余字段)',
-- 发送时间控制(定时发送功能)
send_mode VARCHAR(20) NOT NULL DEFAULT 'immediate' COMMENT '发送模式immediate-立即发送/scheduled-定时发送',
scheduled_time DATETIME COMMENT '计划发送时间sendMode=scheduled时必填',
actual_send_time DATETIME COMMENT '实际发送时间',
-- 状态管理
status VARCHAR(20) NOT NULL DEFAULT 'draft' COMMENT '状态draft-草稿/pending-待发送/sending-发送中/sent-已发送/failed-失败/cancelled-已取消',
-- 统计信息
target_user_count INT DEFAULT 0 COMMENT '目标用户总数',
sent_count INT DEFAULT 0 COMMENT '已发送数量',
success_count INT DEFAULT 0 COMMENT '发送成功数量',
failed_count INT DEFAULT 0 COMMENT '发送失败数量',
read_count INT DEFAULT 0 COMMENT '已读数量',
-- 失败处理和重试机制
retry_count INT DEFAULT 0 COMMENT '当前重试次数',
max_retry_count INT DEFAULT 3 COMMENT '最大重试次数',
last_error TEXT COMMENT '最后错误信息',
-- 基础字段
creator VARCHAR(50) COMMENT '创建人ID',
updater VARCHAR(50) COMMENT '更新人ID',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
delete_time DATETIME COMMENT '删除时间',
deleted BIT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除0-未删除1-已删除',
-- 索引
INDEX idx_message_id (message_id),
INDEX idx_sender_id (sender_id),
INDEX idx_sender_dept_id (sender_dept_id),
INDEX idx_status (status),
INDEX idx_send_mode (send_mode),
INDEX idx_scheduled_time (scheduled_time),
INDEX idx_create_time (create_time),
INDEX idx_delete_time (delete_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='消息主体表';
-- 2. 消息发送方式接收对象表
DROP TABLE IF EXISTS tb_sys_message_target;
CREATE TABLE tb_sys_message_target (
-- 基础标识
id VARCHAR(50) PRIMARY KEY COMMENT '主键ID',
message_id VARCHAR(50) NOT NULL COMMENT '消息ID关联tb_sys_message.message_id',
-- 发送方式
send_method VARCHAR(100) NOT NULL COMMENT '发送方式system-系统消息/email-邮件/sms-短信多选时逗号分隔system,email',
-- 接收对象
target_type VARCHAR(20) NOT NULL COMMENT '接收对象类型dept-部门/role-角色/user-人员',
target_id VARCHAR(50) NOT NULL COMMENT '接收对象ID部门ID/角色ID/用户ID',
target_name VARCHAR(100) COMMENT '接收对象名称(冗余字段,便于展示)',
-- 作用域部门(关键字段:限制角色的部门范围)
scope_dept_id VARCHAR(50) NOT NULL COMMENT '作用域部门IDdept时与target_id相同role时表示该角色限定在哪个部门及其子部门范围内user时为用户所属部门ID',
-- 基础字段
creator VARCHAR(50) COMMENT '创建人ID',
updater VARCHAR(50) COMMENT '更新人ID',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
delete_time DATETIME COMMENT '删除时间',
deleted tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除0-未删除1-已删除',
-- 索引
INDEX idx_messageID (message_id),
INDEX idx_target_type (target_type),
INDEX idx_scope_dept_id (scope_dept_id),
INDEX idx_delete_time (delete_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='消息发送方式接收对象表';
-- 3. 用户接收消息表
DROP TABLE IF EXISTS tb_sys_message_user;
CREATE TABLE tb_sys_message_user (
-- 基础标识
id VARCHAR(50) PRIMARY KEY COMMENT '主键ID',
message_id VARCHAR(50) NOT NULL COMMENT '消息ID关联tb_sys_message.message_id',
user_id VARCHAR(50) NOT NULL COMMENT '接收用户ID',
-- 发送方式
send_method VARCHAR(20) NOT NULL COMMENT '实际发送方式system-系统消息/email-邮件/sms-短信',
-- 阅读状态
is_read tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否已读0-未读1-已读',
read_time DATETIME COMMENT '阅读时间',
-- 发送状态
send_status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '发送状态pending-待发送/success-发送成功/failed-发送失败',
fail_reason TEXT COMMENT '失败原因',
-- 基础字段
creator VARCHAR(50) COMMENT '创建人ID',
updater VARCHAR(50) COMMENT '更新人ID',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
delete_time DATETIME COMMENT '删除时间',
deleted tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除0-未删除1-已删除',
-- 索引
INDEX idx_message_id (message_id),
INDEX idx_user_id (user_id),
INDEX idx_is_read (is_read),
INDEX idx_send_status (send_status),
INDEX idx_deleted (deleted),
INDEX idx_user_read (user_id, is_read, deleted) COMMENT '用户未读消息查询索引'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户接收消息表';
-- =====================================================
-- 初始化说明
-- =====================================================
-- 1. 执行本SQL脚本创建3张表
-- 2. 执行message_menu.sql插入菜单权限数据
-- 3. 表结构说明:
-- - tb_sys_message存储消息主体信息支持定时发送
-- - tb_sys_message_target存储接收对象配置scopeDeptID限制权限范围
-- - tb_sys_message_user存储每个用户的消息记录支持已读/未读状态
-- =====================================================

View File

@@ -39,6 +39,8 @@ SOURCE createTableAchievement.sql;
SOURCE createTableCrontab.sql;
SOURCE createTableMessage.sql;
-- =====================================================
-- 插入初始数据
-- =====================================================

View File

@@ -33,17 +33,18 @@ INSERT INTO `tb_sys_user_dept_role` (id, user_id, dept_id, role_id, creator, cre
('1', '1', 'root_department', 'superadmin', '1', now());
-- 插入模块数据
INSERT INTO `tb_sys_module` (id, module_id, name, code, description, icon, order_num, status, creator, create_time) VALUES
INSERT INTO `tb_sys_module` (id, module_id, name, code, description, icon, order_num, status, creator, create_time) VALUES
('1', 'module_system', '系统管理', 'system', '系统管理模块', 'el-icon-setting', 1, 1, '1', now()),
('2', 'module_news', '新闻管理', 'news', '新闻管理模块', 'el-icon-document', 2, 1, '1', now()),
('3', 'module_study', '学习管理', 'study', '学习管理模块', 'el-icon-reading', 3, 1, '1', now()),
('4', 'module_ai', 'AI管理', 'ai', 'AI管理模块', 'el-icon-cpu', 4, 1, '1', now()),
('5', 'module_usercenter', '用户中心', 'usercenter', '用户中心模块', 'el-icon-user', 5, 1, '1', now()),
('6', 'module_file', '文件管理', 'file', '文件管理模块', 'el-icon-folder', 6, 1, '1', now()),
('7', 'module_crontab', '定时任务', 'crontab', '定时任务管理模块', 'el-icon-alarm-clock', 7, 1, '1', now());
('7', 'module_crontab', '定时任务', 'crontab', '定时任务管理模块', 'el-icon-alarm-clock', 7, 1, '1', now()),
('8', 'module_message', '消息通知', 'message', '消息通知管理模块', 'el-icon-message', 8, 1, '1', now());
-- 插入权限数据
INSERT INTO `tb_sys_permission` (id,permission_id, name, code, description, module_id, creator, create_time) VALUES
INSERT INTO `tb_sys_permission` (id,permission_id, name, code, description, module_id, creator, create_time) VALUES
('0','perm_default', '默认权限', 'default', '默认权限', 'module_system', '1', now()),
('1','perm_system_manage', '系统管理', 'system:manage', '系统管理权限', 'module_system', '1', now()),
('2','perm_system_dept_manage', '系统部门查看', 'system:dept:manage', '系统部门查看权限', 'module_system', '1', now()),
@@ -60,7 +61,10 @@ INSERT INTO `tb_sys_permission` (id,permission_id, name, code, description, modu
('12','perm_usercenter_manage', '用户中心管理', 'usercenter:manage', '用户中心管理权限', 'module_usercenter', '1', now()),
('13','perm_file_manage', '文件管理', 'file:manage', '文件管理权限', 'module_file', '1', now()),
('14','perm_crontab_manage', '定时任务管理', 'crontab:manage', '定时任务管理权限', 'module_crontab', '1', now()),
('15','perm_crontab_execute', '定时任务执行', 'crontab:execute', '定时任务执行权限', 'module_crontab', '1', now());
('15','perm_crontab_execute', '定时任务执行', 'crontab:execute', '定时任务执行权限', 'module_crontab', '1', now()),
('16','perm_message_manage', '消息管理', 'message:manage', '消息管理权限(管理端)', 'module_message', '1', now()),
('17','perm_message_send', '消息发送', 'message:send', '消息发送权限', 'module_message', '1', now()),
('18','perm_message_view', '消息查看', 'message:view', '消息查看权限(用户端)', 'module_message', '1', now());
-- 插入角色-权限关联数据
INSERT INTO `tb_sys_role_permission` (id, role_id, permission_id, creator, create_time) VALUES
@@ -82,6 +86,9 @@ INSERT INTO `tb_sys_role_permission` (id, role_id, permission_id, creator, creat
('15', 'superadmin', 'perm_file_manage', '1', now()),
('16', 'superadmin', 'perm_crontab_manage', '1', now()),
('17', 'superadmin', 'perm_crontab_execute', '1', now()),
('18', 'superadmin', 'perm_message_manage', '1', now()),
('19', 'superadmin', 'perm_message_send', '1', now()),
('19.1', 'superadmin', 'perm_message_view', '1', now()),
-- 管理员:拥有业务管理权限,但没有系统日志等系统管理权限
('20', 'admin', 'perm_default', '1', now()),
@@ -92,13 +99,17 @@ INSERT INTO `tb_sys_role_permission` (id, role_id, permission_id, creator, creat
('25', 'admin', 'perm_ai_manage', '1', now()),
('26', 'admin', 'perm_usercenter_manage', '1', now()),
('27', 'admin', 'perm_file_manage', '1', now()),
('28', 'admin', 'perm_message_manage', '1', now()),
('29', 'admin', 'perm_message_send', '1', now()),
('29.1', 'admin', 'perm_message_view', '1', now()),
-- 自由角色:拥有用户视图相关的所有权限(前台用户权限)
('30', 'freedom', 'perm_default', '1', now()),
('31', 'freedom', 'perm_news_article_add', '1', now()),
('32', 'freedom', 'perm_ai_manage', '1', now()),
('33', 'freedom', 'perm_usercenter_manage', '1', now()),
('34', 'freedom', 'perm_file_manage', '1', now());
('34', 'freedom', 'perm_file_manage', '1', now()),
('35', 'freedom', 'perm_message_view', '1', now());
-- 插入前端菜单数据
INSERT INTO `tb_sys_menu` VALUES
@@ -106,7 +117,7 @@ INSERT INTO `tb_sys_menu` VALUES
('100', 'menu_home', '首页', NULL, '/home', 'user/home/HomeView', NULL, 1, 1, 'NavigationLayout', '1', NULL, '2025-10-27 17:26:06', '2025-10-29 11:49:56', NULL, 0),
('101', 'menu_resource_hot', '热门资源', NULL, '/resource-hot', 'user/resource-center/HotResourceView', NULL, 2, 3, 'NavigationLayout', '1', NULL, '2025-10-27 17:26:06', '2025-10-29 11:49:56', NULL, 0),
('200', 'menu_resource_center', '资源中心', NULL, '/resource-center', 'user/resource-center/ResourceCenterView', NULL, 2, 1, 'NavigationLayout', '1', NULL, '2025-10-27 17:26:06', '2025-10-29 11:49:56', NULL, 0),
('300', 'menu_study_plan', '学习计划', NULL, '/study-plan', 'user/study-plan/StudyPlanView', NULL, 3, 1, 'NavigationLayout', '1', NULL, '2025-10-27 17:26:06', '2025-10-29 11:48:39', NULL, 0),
('300', 'menu_study_plan', '学习计划', NULL, '/study-plan', '', NULL, 3, 1, 'NavigationLayout', '1', NULL, '2025-10-27 17:26:06', '2025-10-29 11:48:39', NULL, 0),
('301', 'menu_study_tasks', '学习任务', 'menu_study_plan', '/study-plan/tasks', 'user/study-plan/StudyTasksView', NULL, 1, 1, 'NavigationLayout', '1', NULL, '2025-10-27 17:26:06', '2025-10-29 11:48:39', NULL, 0),
('302', 'menu_course_center', '课程中心', 'menu_study_plan', '/study-plan/course', 'user/study-plan/CourseCenterView', NULL, 2, 1, 'NavigationLayout', '1', NULL, '2025-10-27 17:26:06', '2025-10-29 11:48:39', NULL, 0),
('303', 'menu_task_detail', '任务详情', 'menu_study_plan', '/study-plan/task-detail', 'user/study-plan/LearningTaskDetailView', NULL, 3, 3, 'NavigationLayout', '1', NULL, '2025-10-27 17:26:06', '2025-10-29 11:48:39', NULL, 0),
@@ -120,7 +131,6 @@ INSERT INTO `tb_sys_menu` VALUES
('500', 'menu_profile', '账号中心', 'menu_user_dropdown', '/profile', 'user/profile/ProfileView', NULL, 5, 1, 'NavigationLayout', '1', NULL, '2025-10-27 17:26:06', '2025-10-29 11:49:56', NULL, 0),
('501', 'menu_personal_info', '个人信息', 'menu_profile', '/profile/personal-info', 'user/profile/PersonalInfoView', NULL, 1, 0, 'NavigationLayout', '1', NULL, '2025-10-27 17:26:06', '2025-10-29 11:48:39', NULL, 0),
('502', 'menu_account_settings', '账号设置', 'menu_profile', '/profile/account-settings', 'user/profile/AccountSettingsView', NULL, 2, 0, 'NavigationLayout', '1', NULL, '2025-10-27 17:26:06', '2025-10-29 11:48:39', NULL, 0),
('600', 'menu_ai_assistant', '智能体模块', NULL, '/ai-assistant', 'user/ai-assistant/AIAssistantView', NULL, 6, 1, 'NavigationLayout', '1', NULL, '2025-10-27 17:26:06', '2025-10-29 11:48:39', NULL, 0),
-- 管理后台菜单 (1000-8999)
('1000', 'menu_admin_overview', '系统总览', NULL, '/admin/overview', 'admin/overview/SystemOverviewView', 'admin/overview.svg', 1, 0, 'SidebarLayout', '1', NULL, '2025-10-27 17:26:06', '2025-10-29 11:52:32', NULL, 0),
('2000', 'menu_sys_manage', '系统管理', NULL, '', '', 'admin/settings.svg', 2, 0, 'SidebarLayout', '1', NULL, '2025-10-27 17:26:06', '2025-10-29 11:52:35', NULL, 0),
@@ -157,7 +167,12 @@ INSERT INTO `tb_sys_menu` VALUES
('8000', 'menu_admin_crontab_manage', '定时任务管理', NULL, '', '', NULL, 8, 0, 'SidebarLayout', '1', NULL, '2025-10-27 17:26:06', '2025-10-29 11:48:39', NULL, 0),
('8001', 'menu_admin_crontab_task', '任务管理', 'menu_admin_crontab_manage', '/admin/manage/crontab/task', 'admin/manage/crontab/TaskManagementView', NULL, 1, 0, 'SidebarLayout', '1', NULL, '2025-10-27 17:26:06', '2025-10-29 11:48:39', NULL, 0),
('8002', 'menu_admin_crontab_log', '执行日志', 'menu_admin_crontab_manage', '/admin/manage/crontab/log', 'admin/manage/crontab/LogManagementView', NULL, 2, 0, 'SidebarLayout', '1', NULL, '2025-10-27 17:26:06', '2025-10-29 11:48:39', NULL, 0),
('8003', 'menu_admin_news_crawler', '新闻爬虫配置', 'menu_admin_crontab_manage', '/admin/manage/crontab/news-crawler', 'admin/manage/crontab/NewsCrawlerView', NULL, 3, 0, 'SidebarLayout', '1', NULL, '2025-10-27 17:26:06', '2025-10-29 11:48:39', NULL, 0);
('8003', 'menu_admin_news_crawler', '新闻爬虫配置', 'menu_admin_crontab_manage', '/admin/manage/crontab/news-crawler', 'admin/manage/crontab/NewsCrawlerView', NULL, 3, 0, 'SidebarLayout', '1', NULL, '2025-10-27 17:26:06', '2025-10-29 11:48:39', NULL, 0),
-- 消息通知模块菜单 (9000-9999)
('9001', 'menu_admin_message_manage', '消息管理', NULL, '/admin/manage/message', 'admin/manage/message/MessageManageView', 'admin/message.svg', 9, 0, 'SidebarLayout', '1', NULL, '2025-11-13 10:00:00', '2025-11-13 10:00:00', NULL, 0),
-- 用户端消息中心菜单 (650-699)
('650', 'menu_user_message_center', '消息中心', NULL, '/user/message', 'user/message/MyMessageListView', NULL, 7, 1, 'NavigationLayout', '1', NULL, '2025-11-13 10:00:00', '2025-11-13 10:00:00', NULL, 0),
('651', 'menu_user_message_detail', '消息详情', 'menu_user_message_center', '/user/message/detail/:messageID', 'user/message/MyMessageDetailView', NULL, 1, 3, 'NavigationLayout', '1', NULL, '2025-11-13 10:00:00', '2025-11-13 10:00:00', NULL, 0);
-- 插入菜单权限关联数据
INSERT INTO `tb_sys_menu_permission` (id, permission_id, menu_id, creator, create_time) VALUES
-- 前端菜单权限关联
@@ -174,7 +189,6 @@ INSERT INTO `tb_sys_menu_permission` (id, permission_id, menu_id, creator, creat
('115', 'perm_default', 'menu_profile', '1', now()),
('116', 'perm_default', 'menu_personal_info', '1', now()),
('117', 'perm_default', 'menu_account_settings', '1', now()),
('118', 'perm_ai_manage', 'menu_ai_assistant', '1', now()),
('119', 'perm_default', 'menu_user_dropdown', '1', now()),
('120', 'perm_news_article_add', 'menu_article_add', '1', now()),
('121', 'perm_default', 'menu_task_detail', '1', now()),
@@ -220,4 +234,15 @@ INSERT INTO `tb_sys_menu_permission` (id, permission_id, menu_id, creator, creat
('232', 'perm_crontab_manage', 'menu_admin_crontab_manage', '1', now()),
('233', 'perm_crontab_manage', 'menu_admin_crontab_task', '1', now()),
('234', 'perm_crontab_manage', 'menu_admin_crontab_log', '1', now()),
('235', 'perm_crontab_manage', 'menu_admin_news_crawler', '1', now());
('235', 'perm_crontab_manage', 'menu_admin_news_crawler', '1', now()),
-- 消息通知管理菜单权限关联
('240', 'perm_message_manage', 'menu_admin_message_manage', '1', now()),
('241', 'perm_message_manage', 'menu_admin_message_list', '1', now()),
('242', 'perm_message_send', 'menu_admin_message_create', '1', now()),
('243', 'perm_message_manage', 'menu_admin_message_detail', '1', now()),
-- 用户端消息中心权限关联
('250', 'perm_message_view', 'menu_user_message_center', '1', now()),
('251', 'perm_message_view', 'menu_user_message_detail', '1', now());