Просмотр исходного кода

fix(backend): 迁移151 growth_records 补齐学校/年级7列 - 修复 Unknown column 'school'

GrowthRecord 实体 @TableField 为 camelCase 列名, runMigration99() 死代码从未执行
且其 snake_case 列名与实体不匹配, 导致全列查询报 Unknown column 'school'。
schema.sql 同步为 camelCase 与实体一致。
Xiaogang Liao 1 месяц назад
Родитель
Сommit
9dd9a45cbd

+ 21 - 0
cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java

@@ -7395,5 +7395,26 @@ private void runMigration100() {
 		} catch (Exception e) {
 			log.warn("添加payment_orders.user_coupon_id列失败: {}", e.getMessage());
 		}
+
+		// 迁移150: activities表添加member_price列(会员价支持)
+		try {
+			ensureColumn("activities", "member_price", "INT COMMENT '会员价(分)' AFTER price");
+			log.info("已确保activities.member_price列存在");
+		} catch (Exception e) {
+			log.warn("添加activities.member_price列失败: {}", e.getMessage());
+		}
+
+		// 迁移151: growth_records表补齐学校/年级字段(GrowthRecord 实体全列查询 Unknown column 'school')
+		// 原因:实体已声明 school/grade/academicPerformance/schoolProvince/schoolCity/schoolDistrict/schoolStreet,
+		//      且 @TableField 为 camelCase 列名,但旧库建表时缺失这些列;
+		//      runMigration99() 为死代码从未执行,且其 snake_case 列名与实体 camelCase 不匹配。
+		ensureColumn("growth_records", "school", "VARCHAR(100) COMMENT '学校名称'");
+		ensureColumn("growth_records", "grade", "INT COMMENT '年级(数字)'");
+		ensureColumn("growth_records", "academicPerformance", "VARCHAR(200) COMMENT '成绩/学业表现'");
+		ensureColumn("growth_records", "schoolProvince", "VARCHAR(50) COMMENT '学校所在省'");
+		ensureColumn("growth_records", "schoolCity", "VARCHAR(50) COMMENT '学校所在市'");
+		ensureColumn("growth_records", "schoolDistrict", "VARCHAR(50) COMMENT '学校所在区'");
+		ensureColumn("growth_records", "schoolStreet", "VARCHAR(100) COMMENT '学校所在街道'");
+		log.info("已确保growth_records学校/年级相关列存在");
 	}
 }

+ 6 - 5
cfc-backend/src/main/resources/schema.sql

@@ -464,11 +464,11 @@ CREATE TABLE IF NOT EXISTS growth_records (
     weight VARCHAR(20) COMMENT '体重',
     school VARCHAR(100) COMMENT '学校名称',
     grade INT COMMENT '年级(数字)',
-    academic_performance VARCHAR(200) COMMENT '成绩/学业表现',
-    school_province VARCHAR(50) COMMENT '学校所在省',
-    school_city VARCHAR(50) COMMENT '学校所在市',
-    school_district VARCHAR(50) COMMENT '学校所在区',
-    school_street VARCHAR(100) COMMENT '学校所在街道',
+    academicPerformance VARCHAR(200) COMMENT '成绩/学业表现',
+    schoolProvince VARCHAR(50) COMMENT '学校所在省',
+    schoolCity VARCHAR(50) COMMENT '学校所在市',
+    schoolDistrict VARCHAR(50) COMMENT '学校所在区',
+    schoolStreet VARCHAR(100) COMMENT '学校所在街道',
     assessment_summary TEXT COMMENT '测评摘要',
     overall_score INT COMMENT '综合得分',
     growth_suggestions TEXT COMMENT '成长建议',
@@ -1746,6 +1746,7 @@ CREATE TABLE IF NOT EXISTS activities (
     max_participants INT DEFAULT 0 COMMENT '最大参与人数',
     current_participants INT DEFAULT 0 COMMENT '当前参与人数',
     price INT DEFAULT 0 COMMENT '活动价格(分)',
+    member_price INT COMMENT '会员价(分)',
     vendor_id        BIGINT COMMENT '服务商ID',
     vendor_name      VARCHAR(100) COMMENT '服务商名称',
     feedback_dimensions TEXT COMMENT '评价维度列表JSON',