-- ===================================================== -- Timeline 数据库迁移脚本 -- 版本: V1.3.0 -- 日期: 2024 -- 描述: 第三阶段智能化功能 - 提醒系统、数据分析 -- ===================================================== -- ----------------------------------------------------- -- 1. 提醒系统表结构 -- ----------------------------------------------------- -- 提醒表 CREATE TABLE IF NOT EXISTS reminder ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '提醒唯一标识', user_id VARCHAR(64) NOT NULL COMMENT '用户ID', type VARCHAR(20) NOT NULL COMMENT '提醒类型: RECORD/MEMORY/ANNIVERSARY/CUSTOM', title VARCHAR(200) NOT NULL COMMENT '提醒标题', content TEXT COMMENT '提醒内容', story_instance_id VARCHAR(64) COMMENT '关联的故事ID', story_item_id VARCHAR(64) COMMENT '关联的节点ID', remind_time DATETIME NOT NULL COMMENT '提醒时间', repeat_type VARCHAR(20) DEFAULT 'NONE' COMMENT '重复类型: NONE/DAILY/WEEKLY/MONTHLY/YEARLY', is_sent TINYINT DEFAULT 0 COMMENT '是否已发送 0-否 1-是', sent_time DATETIME COMMENT '发送时间', is_enabled TINYINT DEFAULT 1 COMMENT '是否启用 0-禁用 1-启用', create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX idx_reminder_user (user_id, is_enabled, remind_time), INDEX idx_reminder_pending (is_sent, remind_time), INDEX idx_reminder_type (type) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='提醒表'; -- ----------------------------------------------------- -- 2. 纪念日表结构 -- ----------------------------------------------------- -- 纪念日表 CREATE TABLE IF NOT EXISTS anniversary ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '纪念日唯一标识', user_id VARCHAR(64) NOT NULL COMMENT '用户ID', title VARCHAR(200) NOT NULL COMMENT '纪念日标题', description TEXT COMMENT '描述', anniversary_date DATE NOT NULL COMMENT '纪念日日期', repeat_type VARCHAR(20) DEFAULT 'YEARLY' COMMENT '重复类型: YEARLY/MONTHLY/ONCE', remind_days INT DEFAULT 1 COMMENT '提前提醒天数', is_lunar TINYINT DEFAULT 0 COMMENT '是否农历 0-公历 1-农历', is_enabled TINYINT DEFAULT 1 COMMENT '是否启用', create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', is_delete TINYINT DEFAULT 0 COMMENT '是否删除', INDEX idx_anniversary_user (user_id, is_delete), INDEX idx_anniversary_date (anniversary_date) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='纪念日表'; -- ----------------------------------------------------- -- 3. 用户统计缓存表 -- ----------------------------------------------------- -- 用户统计缓存表 CREATE TABLE IF NOT EXISTS user_stats_cache ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', user_id VARCHAR(64) UNIQUE NOT NULL COMMENT '用户ID', total_moments BIGINT DEFAULT 0 COMMENT '总时刻数', total_media BIGINT DEFAULT 0 COMMENT '总媒体数', total_stories BIGINT DEFAULT 0 COMMENT '总故事数', total_comments BIGINT DEFAULT 0 COMMENT '总评论数', total_likes BIGINT DEFAULT 0 COMMENT '总点赞数', consecutive_days INT DEFAULT 0 COMMENT '连续记录天数', max_consecutive_days INT DEFAULT 0 COMMENT '最长连续记录天数', last_active_date DATE COMMENT '最后活跃日期', stats_json JSON COMMENT '详细统计数据JSON', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX idx_stats_user (user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户统计缓存表'; -- ----------------------------------------------------- -- 4. 年度报告表 -- ----------------------------------------------------- -- 年度报告表 CREATE TABLE IF NOT EXISTS yearly_report ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '报告唯一标识', user_id VARCHAR(64) NOT NULL COMMENT '用户ID', year INT NOT NULL COMMENT '年份', total_moments BIGINT DEFAULT 0 COMMENT '年度时刻数', total_media BIGINT DEFAULT 0 COMMENT '年度媒体数', most_active_month VARCHAR(7) COMMENT '最活跃月份', most_active_day DATE COMMENT '最活跃日期', top_location VARCHAR(200) COMMENT '最常去地点', top_tag VARCHAR(50) COMMENT '最常用标签', monthly_breakdown JSON COMMENT '月度明细JSON', insights JSON COMMENT 'AI洞察JSON', create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', UNIQUE KEY uk_user_year (user_id, year), INDEX idx_report_user (user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='年度报告表'; -- ----------------------------------------------------- -- 5. 智能填充历史表 -- ----------------------------------------------------- -- 智能填充历史表 CREATE TABLE IF NOT EXISTS smart_fill_history ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '记录唯一标识', user_id VARCHAR(64) NOT NULL COMMENT '用户ID', file_name VARCHAR(500) COMMENT '文件名', inferred_time DATETIME COMMENT '推断的时间', time_source VARCHAR(20) COMMENT '时间来源', time_confidence INT COMMENT '时间置信度', inferred_location VARCHAR(200) COMMENT '推断的地点', location_source VARCHAR(20) COMMENT '地点来源', location_confidence INT COMMENT '地点置信度', is_applied TINYINT DEFAULT 0 COMMENT '是否已应用 0-否 1-是', create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', INDEX idx_fill_user (user_id, create_time DESC) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='智能填充历史表'; -- ----------------------------------------------------- -- 6. 定时任务配置表 -- ----------------------------------------------------- -- 定时任务配置表 CREATE TABLE IF NOT EXISTS scheduled_task ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', task_name VARCHAR(100) UNIQUE NOT NULL COMMENT '任务名称', task_type VARCHAR(50) NOT NULL COMMENT '任务类型', cron_expression VARCHAR(100) COMMENT 'Cron表达式', is_enabled TINYINT DEFAULT 1 COMMENT '是否启用', last_execute_time DATETIME COMMENT '最后执行时间', next_execute_time DATETIME COMMENT '下次执行时间', execute_count BIGINT DEFAULT 0 COMMENT '执行次数', last_status VARCHAR(20) COMMENT '最后执行状态', last_error TEXT COMMENT '最后错误信息', create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='定时任务配置表'; -- 初始化定时任务 INSERT INTO scheduled_task (task_name, task_type, cron_expression, is_enabled) VALUES ('MEMORY_REMINDER_TASK', 'REMINDER', '0 0 8 * * ?', 1), ('STATS_CACHE_TASK', 'STATS', '0 0 3 * * ?', 1), ('YEARLY_REPORT_TASK', 'REPORT', '0 0 0 1 1 ?', 1) ON DUPLICATE KEY UPDATE task_name = task_name; -- ----------------------------------------------------- -- 回滚脚本 (如需回滚,请执行以下语句) -- ----------------------------------------------------- /* -- 删除新增表 DROP TABLE IF EXISTS scheduled_task; DROP TABLE IF EXISTS smart_fill_history; DROP TABLE IF EXISTS yearly_report; DROP TABLE IF EXISTS user_stats_cache; DROP TABLE IF EXISTS anniversary; DROP TABLE IF EXISTS reminder; */