-- ===========================================
|
-- 通知任务主表
|
-- 用于统一管理待发送的通知任务,由消息系统决定发送渠道
|
-- ===========================================
|
|
-- 删除旧表(如果需要重建)
|
-- 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(), '任务分配-短信(默认关闭)'),
|
('TASK_ASSIGN', 'QY_WECHAT', '0', 85, 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) 更新通知任务状态
|
-- ===========================================
|