Преглед изворни кода

fix(db): 迁移225 articles 添加 growth_category 列

- 修复 Unknown column 'growth_category' in 'field list'
- Article 实体已含字段,生产库缺列,getFeatured 精选查询报错
- 生产 DB 已直连 ALTER(即时生效)
- schema.sql 同步补列 + 解决 unlock_gates/microbiome_article 冲突
Xiaogang Liao пре 1 месец
родитељ
комит
1ead12a777

+ 29 - 1
cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java

@@ -8557,6 +8557,9 @@ private void runMigration100() {
 			log.warn("health_gut_flora.detection_rate 扩容失败(可能已修改): " + e.getMessage());
 		}
 
+		// 迁移225: articles 添加 growth_category 列(成长分类筛选,Article 实体已含字段,生产库缺列导致 Unknown column 'growth_category')
+		ensureColumn("articles", "growth_category", "VARCHAR(50) DEFAULT NULL COMMENT '成长分类'");
+
 		// 迁移209: 创建 survey_templates 表(定期调研模板)
 		try {
 			jdbcTemplate.execute(
@@ -8794,7 +8797,7 @@ private void runMigration100() {
 		// 迁移221: nutrition_product 添加 local_product_id 字段(关联本平台商品)
 		ensureColumn("nutrition_product", "local_product_id", "BIGINT DEFAULT NULL COMMENT '本平台商品ID,关联products.id'");
 
-		// 迁移222: 创建 unlock_gates 表(通关关卡定义)
+// 迁移222: 创建 unlock_gates 表(通关关卡定义)
 		try {
 			jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS unlock_gates (" +
 				"id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
@@ -8848,5 +8851,30 @@ private void runMigration100() {
 		} catch (Exception e) {
 			log.warn("创建family_gate_progress表或插入种子数据失败: " + e.getMessage());
 		}
+
+		// 迁移222: 创建 microbiome_article 表(菌群知识库文章管理)
+		try {
+			jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS microbiome_article (" +
+					"id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
+					"title VARCHAR(255) NOT NULL COMMENT '文章标题', " +
+					"content MEDIUMTEXT COMMENT '文章原文Markdown', " +
+					"category VARCHAR(50) DEFAULT '科普' COMMENT '分类', " +
+					"tags VARCHAR(500) COMMENT '逗号分隔标签', " +
+					"source_url VARCHAR(500) COMMENT '来源URL', " +
+					"pub_date VARCHAR(20) COMMENT '发布日期', " +
+					"status TINYINT DEFAULT 1 COMMENT '1=启用 0=禁用', " +
+					"created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
+					"updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
+					"INDEX idx_category (category), " +
+					"INDEX idx_status (status), " +
+					"FULLTEXT INDEX ft_content (title, content)" +
+					") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='菌群知识库文章'");
+			log.info("已创建microbiome_article表");
+		} catch (Exception e) {
+			log.warn("创建microbiome_article表失败(可能已存在): " + e.getMessage());
+		}
+
+		// 迁移224: health_reports 添加 shannon_index 列(修复 Unknown column 错误)
+		ensureColumn("health_reports", "shannon_index", "VARCHAR(32) DEFAULT NULL COMMENT '香农指数'");
 	}
 }

+ 20 - 0
cfc-backend/src/main/resources/schema.sql

@@ -1372,6 +1372,7 @@ CREATE TABLE IF NOT EXISTS articles (
     visibility VARCHAR(20) DEFAULT 'public' COMMENT '浏览权限:public/login/private',
     visible_to TEXT COMMENT '私密指定人群 JSON',
     status VARCHAR(20) DEFAULT 'draft' COMMENT '状态:draft/published/archived',
+    growth_category VARCHAR(50) DEFAULT NULL COMMENT '成长分类',
     is_featured TINYINT DEFAULT 0 COMMENT '是否精选:1 精选/0 普通',
     published_at DATETIME DEFAULT NULL COMMENT '发布时间',
     view_count INT DEFAULT 0 COMMENT '浏览次数',
@@ -1713,6 +1714,8 @@ CREATE TABLE IF NOT EXISTS health_reports (
     proxy_uploader_id BIGINT COMMENT '代上传人ID(规划师/营养师)',
     proxy_upload_note TEXT COMMENT '代上传备注',
     ai_analysis TEXT COMMENT 'AI解读结果JSON',
+    shannon_index VARCHAR(32) DEFAULT NULL COMMENT '香农指数',
+    payload_json LONGTEXT COMMENT '报告完整载荷快照',
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
     INDEX idx_user_id (user_id),
@@ -4618,3 +4621,20 @@ CREATE TABLE IF NOT EXISTS family_gate_progress (
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
     UNIQUE KEY uk_family_gate (family_id, gate_id)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭关卡通关进度';
+
+-- 菌群知识库文章管理
+CREATE TABLE IF NOT EXISTS microbiome_article (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    title VARCHAR(255) NOT NULL COMMENT '文章标题',
+    content MEDIUMTEXT COMMENT '文章原文Markdown',
+    category VARCHAR(50) DEFAULT '科普' COMMENT '分类',
+    tags VARCHAR(500) COMMENT '逗号分隔标签',
+    source_url VARCHAR(500) COMMENT '来源URL',
+    pub_date VARCHAR(20) COMMENT '发布日期',
+    status TINYINT DEFAULT 1 COMMENT '1=启用 0=禁用',
+    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    INDEX idx_category (category),
+    INDEX idx_status (status),
+    FULLTEXT INDEX ft_content (title, content)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='菌群知识库文章';