-- 待办事项中心任务表
-- 说明：active_idempotent_key 仅在非终态任务中保留，终态时置空，
--       用于同时满足“有效任务唯一”和“终态后允许重新创建”的要求。

CREATE TABLE `sys_todo_task` (
  `todo_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '待办任务主键',
  `task_type` varchar(64) NOT NULL COMMENT '待办类型编码',
  `title` varchar(200) NOT NULL COMMENT '待办标题',
  `summary` varchar(500) DEFAULT NULL COMMENT '待办摘要',
  `content` text COMMENT '待办详细内容（纯文本）',
  `business_type` varchar(64) NOT NULL COMMENT '业务类型编码',
  `business_id` varchar(64) NOT NULL COMMENT '业务主键或单号',
  `route_name` varchar(100) NOT NULL COMMENT '前端白名单路由名称',
  `route_params` varchar(1000) DEFAULT NULL COMMENT '前端路由参数 JSON',
  `assignee_user_id` bigint(20) NOT NULL COMMENT '接收用户 ID',
  `assignee_merchant_id` varchar(64) DEFAULT NULL COMMENT '接收运营商 ID',
  `priority` tinyint(3) NOT NULL DEFAULT '1' COMMENT '优先级（1普通 2重要 3紧急）',
  `task_status` varchar(20) NOT NULL DEFAULT 'PENDING' COMMENT '任务状态（PENDING PROCESSING COMPLETED CANCELLED EXPIRED）',
  `read_status` char(1) NOT NULL DEFAULT '0' COMMENT '阅读状态（0未读 1已读）',
  `read_time` datetime DEFAULT NULL COMMENT '阅读时间',
  `due_time` datetime DEFAULT NULL COMMENT '截止时间',
  `completed_time` datetime DEFAULT NULL COMMENT '完成时间',
  `completed_by` bigint(20) DEFAULT NULL COMMENT '完成人用户 ID',
  `cancel_reason` varchar(500) DEFAULT NULL COMMENT '取消原因',
  `idempotent_key` varchar(200) NOT NULL COMMENT '业务原始幂等键',
  `active_idempotent_key` varchar(200) DEFAULT NULL COMMENT '有效任务幂等键，终态置空',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
  `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除（0正常 2删除）',
  PRIMARY KEY (`todo_id`) USING BTREE,
  UNIQUE KEY `uk_todo_active_idempotent` (`active_idempotent_key`) USING BTREE,
  KEY `idx_todo_user_status` (`assignee_user_id`, `task_status`, `read_status`, `priority`, `create_time`) USING BTREE,
  KEY `idx_todo_merchant_status` (`assignee_merchant_id`, `task_status`, `create_time`) USING BTREE,
  KEY `idx_todo_business` (`business_type`, `business_id`) USING BTREE,
  KEY `idx_todo_history_cleanup` (`del_flag`, `task_status`, `completed_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='用户待办任务表';
