wlzboy
1 天以前 08f95b2f159b56fa3bd4f4b348855989de8aa456
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
-- ===========================================
-- 通知任务主表
-- 用于统一管理待发送的通知任务,由消息系统决定发送渠道
-- ===========================================
 
-- 删除旧表(如果需要重建)
-- 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) 更新通知任务状态
-- ===========================================