-- ===========================================
-- 通知发送记录表
-- 用于记录各类通知消息的发送记录，实现防重机制
-- 确保同一任务同一人同一通知类型只发送一次
-- ===========================================
DROP TABLE IF EXISTS `sys_notify_send_log`;

CREATE TABLE `sys_notify_send_log` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `notify_task_id` bigint DEFAULT NULL COMMENT '关联的通知任务ID',
  `task_id` bigint NOT NULL COMMENT '任务ID',
  `user_id` bigint NOT NULL COMMENT '接收用户ID',
  `user_name` varchar(64) DEFAULT NULL COMMENT '接收用户姓名',
  `notify_type` varchar(32) NOT NULL COMMENT '通知类型：TASK_ASSIGN-任务分配, STATUS_CHANGE-状态变更, TASK_CREATE-任务创建',
  `channel` varchar(32) NOT NULL COMMENT '通知渠道：WECHAT-微信订阅消息, SMS-短信, APP_PUSH-APP推送, SITE_MSG-站内消息',
  `send_content` text,
  `send_status` char(1) DEFAULT '0' COMMENT '发送状态：0-待发送, 1-发送成功, 2-发送失败',
  `send_time` datetime DEFAULT NULL COMMENT '发送时间',
  `send_result` varchar(500) DEFAULT NULL COMMENT '发送结果/错误信息',
  `retry_count` int DEFAULT '0' COMMENT '重试次数',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `response_msg` text COMMENT '响应消息',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_task_user_type_channel` (`task_id`,`user_id`,`notify_type`,`channel`) COMMENT '同一任务同一用户同一类型同一渠道只能有一条记录',
  KEY `idx_task_id` (`task_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_notify_type` (`notify_type`),
  KEY `idx_send_status` (`send_status`),
  KEY `idx_create_time` (`create_time`),
  KEY `idx_notify_task_id` (`notify_task_id`)
) ENGINE=InnoDB AUTO_INCREMENT=64 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='通知发送记录表';

-- ===========================================
-- 使用说明：
-- 1. 在发送通知前，先检查是否已存在相同记录
-- 2. 如果不存在，则插入记录并发送通知
-- 3. 发送成功后更新 send_status 为 1
-- 4. 发送失败后更新 send_status 为 2，并记录错误信息
-- 5. 可以通过定时任务重试发送失败的记录
--
-- 通知类型说明：
-- TASK_ASSIGN - 任务分配通知（新任务推送给执行人）
-- STATUS_CHANGE - 任务状态变更通知
-- TASK_CREATE - 任务创建成功通知
--
-- 通知渠道说明：
-- WECHAT - 微信小程序订阅消息
-- SMS - 短信通知
-- APP_PUSH - APP推送通知
-- SITE_MSG - 系统站内消息
-- ===========================================
