-- 诊单待办事项(T5 - 2026-05-05) -- 用途:医助在诊单上挂「将来要提醒自己的事」,到点由企微推送给创建人本人。 -- 设计:状态机 0=待执行 → 1=已发送(成功)/ 2=已取消(人工) / 3=发送失败(终态,不重试) -- 索引说明: -- idx_diagnosis_id —— 编辑页/列表按诊单查询 -- idx_creator_id —— 反查某 admin 创建过的待办(取消权限校验等) -- idx_status_remind_time —— 复合索引,cron 扫表「status=0 AND remind_time<=now」核心索引 CREATE TABLE IF NOT EXISTS `zyt_tcm_diagnosis_todo` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `diagnosis_id` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '所属诊单 id(zyt_tcm_diagnosis.id)', `patient_id` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '冗余患者 id,便于反查', `content` varchar(500) NOT NULL DEFAULT '' COMMENT '提醒内容(企微推送正文)', `remind_time` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '提醒时间戳(秒);cron 扫描 remind_time<=now', `status` tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT '状态:0=待执行 1=已发送 2=已取消 3=发送失败', `creator_id` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '创建人 admin.id(推送目标)', `creator_name` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人姓名快照', `notified_at` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '实际推送时间(成功时写入)', `error` varchar(500) NOT NULL DEFAULT '' COMMENT '失败原因(status=3 时写入)', `cancelled_at` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '取消时间', `cancelled_by` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '取消人 admin.id', `create_time` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '创建时间', `update_time` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '更新时间', `delete_time` int(11) unsigned NULL DEFAULT NULL COMMENT '软删除时间', PRIMARY KEY (`id`), KEY `idx_diagnosis_id` (`diagnosis_id`), KEY `idx_creator_id` (`creator_id`), KEY `idx_status_remind_time` (`status`, `remind_time`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '诊单待办事项(企微定时推送给创建人)';