-- 周报元数据表(用于快速查询和统计) -- 2026-08-27 创建 CREATE TABLE IF NOT EXISTS `weekly_reports` ( `id` INT NOT NULL AUTO_INCREMENT, `year` INT NOT NULL COMMENT '年份', `week_number` INT NOT NULL COMMENT '周数 (1-53)', `start_date` DATE NOT NULL COMMENT '周一日期', `end_date` DATE NOT NULL COMMENT '周五日期', `project` VARCHAR(50) NOT NULL COMMENT '项目名称 (如 G5/G6)', `main_task` VARCHAR(500) COMMENT '本周主要任务', `file_path` VARCHAR(255) NOT NULL COMMENT '归档文件路径', `has_problems` TINYINT(1) DEFAULT 0 COMMENT '是否存在问题', `word_count` INT DEFAULT 0 COMMENT '字数统计', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_year_week` (`year`, `week_number`, `project`), KEY `idx_date` (`start_date`, `end_date`), KEY `idx_project` (`project`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='周报元数据表'; -- 周报每日工作明细表(可选,用于更细粒度的查询) CREATE TABLE IF NOT EXISTS `weekly_report_daily` ( `id` INT NOT NULL AUTO_INCREMENT, `report_id` INT NOT NULL COMMENT '周报 ID', `day_of_week` TINYINT NOT NULL COMMENT '星期几 (1-5)', `work_date` DATE NOT NULL COMMENT '具体日期', `work_items` TEXT COMMENT '工作内容列表 (JSON 数组或换行分隔)', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_report` (`report_id`), KEY `idx_date` (`work_date`), CONSTRAINT `fk_report` FOREIGN KEY (`report_id`) REFERENCES `weekly_reports` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='周报每日工作明细表'; -- 周报问题记录表(可选,用于问题追踪) CREATE TABLE IF NOT EXISTS `weekly_report_problems` ( `id` INT NOT NULL AUTO_INCREMENT, `report_id` INT NOT NULL COMMENT '周报 ID', `problem_description` TEXT NOT NULL COMMENT '问题描述', `status` VARCHAR(20) DEFAULT 'open' COMMENT '状态:open/resolved/closed', `resolved_at` DATETIME NULL COMMENT '解决时间', `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_report` (`report_id`), CONSTRAINT `fk_problem_report` FOREIGN KEY (`report_id`) REFERENCES `weekly_reports` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='周报问题记录表'; -- 示例数据 INSERT INTO `weekly_reports` (`year`, `week_number`, `start_date`, `end_date`, `project`, `main_task`, `file_path`, `has_problems`, `word_count`) VALUES (2026, 29, '2026-07-14', '2026-07-18', 'G5', '库存预警模块开发', 'weekly-reports/2026/2026-W29.md', 0, 500), (2026, 31, '2026-07-28', '2026-08-01', 'G5', '委外发料需求开发', 'weekly-reports/2026/2026-W31-周报.md', 0, 600); -- 常用查询示例 -- 1. 查询某年所有周报 SELECT * FROM weekly_reports WHERE year = 2026 ORDER BY week_number; -- 2. 查询某月所有周报 SELECT * FROM weekly_reports WHERE start_date >= '2026-08-01' AND end_date <= '2026-08-31' ORDER BY start_date; -- 3. 统计某项目全年周报数量 SELECT project, COUNT(*) as report_count FROM weekly_reports WHERE year = 2026 GROUP BY project; -- 4. 查询存在问题的周报 SELECT * FROM weekly_reports WHERE has_problems = 1; -- 5. 查询某时间范围的工作天数 SELECT SUM(day_of_week) as total_days FROM weekly_report_daily WHERE work_date BETWEEN '2026-07-01' AND '2026-09-30'; -- 6. 月度统计(用于考核) SELECT YEAR(start_date) as year, MONTH(start_date) as month, project, COUNT(*) as weeks_count, SUM(has_problems) as problem_weeks, AVG(word_count) as avg_words FROM weekly_reports WHERE start_date >= '2026-08-01' AND start_date <= '2026-08-31' GROUP BY YEAR(start_date), MONTH(start_date), project;