-- =========================================== -- 通知任务主表 -- 用于统一管理待发送的通知任务,由消息系统决定发送渠道 -- =========================================== -- 删除旧表(如果需要重建) -- DROP TABLE IF EXISTS `sys_notify_task`; CREATE TABLE `sys_notify_task` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `task_id` bigint(20) NOT NULL COMMENT '关联的业务任务ID', `task_code` varchar(64) DEFAULT NULL COMMENT '任务编号', `notify_type` varchar(32) NOT NULL COMMENT '通知类型:TASK_ASSIGN-任务分配, STATUS_CHANGE-状态变更, TASK_CREATE-任务创建', `user_id` bigint(20) NOT NULL COMMENT '接收用户ID', `user_name` varchar(64) DEFAULT NULL COMMENT '接收用户姓名', `user_phone` varchar(20) DEFAULT NULL COMMENT '接收用户手机号', `title` varchar(200) DEFAULT NULL COMMENT '通知标题', `content` varchar(500) DEFAULT NULL COMMENT '通知内容', `extra_data` text COMMENT '扩展数据(JSON格式,用于模板变量等)', `status` char(1) NOT NULL DEFAULT '0' COMMENT '处理状态:0-待处理, 1-处理中, 2-已完成, 3-失败', `retry_count` int(11) DEFAULT '0' COMMENT '重试次数', `max_retry` int(11) DEFAULT '3' COMMENT '最大重试次数', `error_msg` varchar(500) DEFAULT NULL COMMENT '错误信息', `create_by` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), UNIQUE KEY `uk_task_user_type` (`task_id`, `user_id`, `notify_type`) COMMENT '防重索引:同一任务同一用户同一类型只能有一条', KEY `idx_status` (`status`) COMMENT '状态索引,用于查询待处理任务', KEY `idx_user_id` (`user_id`) COMMENT '用户索引', KEY `idx_create_time` (`create_time`) COMMENT '创建时间索引' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通知任务主表'; -- =========================================== -- 通知渠道配置表 -- 用于配置各类通知启用的发送渠道 -- =========================================== CREATE TABLE `sys_notify_channel_config` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `notify_type` varchar(32) NOT NULL COMMENT '通知类型', `channel` varchar(32) NOT NULL COMMENT '渠道:WECHAT-微信订阅消息, SMS-短信, SITE_MSG-站内消息, APP_PUSH-APP推送', `enabled` char(1) NOT NULL DEFAULT '1' COMMENT '是否启用:0-禁用, 1-启用', `priority` int(11) DEFAULT '0' COMMENT '优先级(数字越大优先级越高)', `config_json` text COMMENT '渠道配置(JSON格式,如模板ID等)', `create_by` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), UNIQUE KEY `uk_type_channel` (`notify_type`, `channel`) COMMENT '通知类型和渠道唯一' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通知渠道配置表'; -- =========================================== -- 初始化通知渠道配置 -- =========================================== -- 任务分配通知 - 启用微信、短信、站内消息 INSERT INTO `sys_notify_channel_config` (`notify_type`, `channel`, `enabled`, `priority`, `config_json`, `create_by`, `create_time`, `remark`) VALUES ('TASK_ASSIGN', 'SITE_MSG', '1', 100, NULL, 'admin', NOW(), '任务分配-站内消息'), ('TASK_ASSIGN', 'WECHAT', '1', 90, NULL, 'admin', NOW(), '任务分配-微信订阅消息'), ('TASK_ASSIGN', 'SMS', '0', 80, NULL, 'admin', NOW(), '任务分配-短信(默认关闭)'); -- 状态变更通知 - 仅启用站内消息 INSERT INTO `sys_notify_channel_config` (`notify_type`, `channel`, `enabled`, `priority`, `config_json`, `create_by`, `create_time`, `remark`) VALUES ('STATUS_CHANGE', 'SITE_MSG', '1', 100, NULL, 'admin', NOW(), '状态变更-站内消息'); -- 任务创建通知 - 仅启用站内消息 INSERT INTO `sys_notify_channel_config` (`notify_type`, `channel`, `enabled`, `priority`, `config_json`, `create_by`, `create_time`, `remark`) VALUES ('TASK_CREATE', 'SITE_MSG', '1', 100, NULL, 'admin', NOW(), '任务创建-站内消息'); -- =========================================== -- 修改发送记录表,增加关联通知任务主表的字段 -- =========================================== -- 如果 sys_notify_send_log 表已存在,添加 notify_task_id 字段 ALTER TABLE `sys_notify_send_log` ADD COLUMN `notify_task_id` bigint(20) DEFAULT NULL COMMENT '关联的通知任务ID' AFTER `id`, ADD INDEX `idx_notify_task_id` (`notify_task_id`); -- =========================================== -- 说明: -- 1. sys_notify_task 是通知任务主表,记录需要发送的通知 -- 2. sys_notify_channel_config 配置每种通知类型启用哪些渠道 -- 3. sys_notify_send_log 记录每个渠道的发送明细 -- -- 工作流程: -- 1) 业务系统创建通知任务(插入 sys_notify_task) -- 2) 通知分发服务读取渠道配置(sys_notify_channel_config) -- 3) 根据配置向各渠道发送通知,并记录发送日志(sys_notify_send_log) -- 4) 更新通知任务状态 -- ===========================================