|
|
@@ -10268,5 +10268,59 @@ public class DatabaseInitializer implements CommandLineRunner {
|
|
|
// 迁移289: health_reports 补 report_format 列(HealthReport 实体已含字段,但从未迁移至 DB,全字段 SELECT 报 Unknown column)
|
|
|
ensureColumn("health_reports", "report_format",
|
|
|
"VARCHAR(32) DEFAULT NULL COMMENT '报告格式: pdf/image'");
|
|
|
+
|
|
|
+ // 迁移290: 批量补齐实体已含但 DB 从未迁移的真实缺列(全字段 SELECT 防 Unknown column)
|
|
|
+ // 审计核实:以下列不在任何历史 ADD COLUMN/ensureColumn 中,属真实缺口
|
|
|
+ // 涉及 12 表 33 列(food_nutrients 命名问题单列迁移291;articles/health_reports 等解析后无缺口)
|
|
|
+ ensureColumn("activities", "visibility", "VARCHAR(20) DEFAULT NULL COMMENT 'visibility'");
|
|
|
+ ensureColumn("activities", "visible_to", "TEXT DEFAULT NULL COMMENT 'visibleTo'");
|
|
|
+ ensureColumn("blood_type_pairing", "blood_type1", "VARCHAR(255) DEFAULT NULL COMMENT 'bloodType1'");
|
|
|
+ ensureColumn("blood_type_pairing", "blood_type2", "VARCHAR(255) DEFAULT NULL COMMENT 'bloodType2'");
|
|
|
+ ensureColumn("dan_knowledge_base", "file_url", "VARCHAR(500) DEFAULT NULL COMMENT 'fileUrl'");
|
|
|
+ ensureColumn("dan_knowledge_base", "file_name", "VARCHAR(255) DEFAULT NULL COMMENT 'fileName'");
|
|
|
+ ensureColumn("dan_knowledge_base", "source_url", "VARCHAR(500) DEFAULT NULL COMMENT 'sourceUrl'");
|
|
|
+ ensureColumn("dan_knowledge_base", "source_type", "VARCHAR(20) DEFAULT NULL COMMENT 'sourceType'");
|
|
|
+ ensureColumn("distribution_relations", "invite_code", "VARCHAR(64) DEFAULT NULL COMMENT 'inviteCode'");
|
|
|
+ ensureColumn("family_members", "birth_hour", "VARCHAR(20) DEFAULT NULL COMMENT 'birthHour'");
|
|
|
+ ensureColumn("family_members", "birth_weight", "INT DEFAULT NULL COMMENT 'birthWeight'");
|
|
|
+ ensureColumn("family_members", "birth_place", "VARCHAR(255) DEFAULT NULL COMMENT 'birthPlace'");
|
|
|
+ ensureColumn("family_members", "is_cesarean", "INT DEFAULT NULL COMMENT 'isCesarean'");
|
|
|
+ ensureColumn("food_recommend_idx", "index_score", "INT DEFAULT NULL COMMENT 'indexScore'");
|
|
|
+ ensureColumn("health_indicators", "symptoms", "VARCHAR(2000) DEFAULT NULL COMMENT 'symptoms'");
|
|
|
+ ensureColumn("numsoul_config", "keywords", "VARCHAR(2000) DEFAULT NULL COMMENT 'keywords'");
|
|
|
+ ensureColumn("numsoul_detail_config", "keywords", "VARCHAR(2000) DEFAULT NULL COMMENT 'keywords'");
|
|
|
+ ensureColumn("product_orders", "tracking_number", "VARCHAR(100) DEFAULT NULL COMMENT 'trackingNumber'");
|
|
|
+ ensureColumn("product_orders", "express_company", "VARCHAR(100) DEFAULT NULL COMMENT 'expressCompany'");
|
|
|
+ ensureColumn("product_orders", "delivery_method", "INT DEFAULT NULL COMMENT 'deliveryMethod'");
|
|
|
+ ensureColumn("product_orders", "pickup_code", "VARCHAR(64) DEFAULT NULL COMMENT 'pickupCode'");
|
|
|
+ ensureColumn("product_orders", "confirm_time", "DATETIME DEFAULT NULL COMMENT 'confirmTime'");
|
|
|
+ ensureColumn("product_orders", "refund_status", "INT DEFAULT NULL COMMENT 'refundStatus'");
|
|
|
+ ensureColumn("product_orders", "refund_reason", "VARCHAR(255) DEFAULT NULL COMMENT 'refundReason'");
|
|
|
+ ensureColumn("product_orders", "refund_amount", "INT DEFAULT NULL COMMENT 'refundAmount'");
|
|
|
+ ensureColumn("product_orders", "refund_time", "DATETIME DEFAULT NULL COMMENT 'refundTime'");
|
|
|
+ ensureColumn("promotion_tier_config", "min_team_size", "INT DEFAULT NULL COMMENT 'minTeamSize'");
|
|
|
+ ensureColumn("promotion_tier_config", "min_referral_earnings", "INT DEFAULT NULL COMMENT 'minReferralEarnings'");
|
|
|
+ ensureColumn("promotion_tier_config", "min_share_earnings", "INT DEFAULT NULL COMMENT 'minShareEarnings'");
|
|
|
+ ensureColumn("promotion_tier_config", "profit_share_percent", "INT DEFAULT NULL COMMENT 'profitSharePercent'");
|
|
|
+ ensureColumn("promotion_tier_config", "enabled", "INT DEFAULT NULL COMMENT 'enabled'");
|
|
|
+ ensureColumn("zodiac_pairing", "zodiac_code1", "VARCHAR(255) DEFAULT NULL COMMENT 'zodiacCode1'");
|
|
|
+ ensureColumn("zodiac_pairing", "zodiac_code2", "VARCHAR(255) DEFAULT NULL COMMENT 'zodiacCode2'");
|
|
|
+ log.info("已补齐真实缺列 (迁移290, 12表33列)");
|
|
|
+
|
|
|
+ // 迁移291: food_nutrients 列名对齐(amount_per_100g -> amount_per100g)
|
|
|
+ // FoodNutrient 实体字段 amountPer100g 经 MyBatis-Plus camel->snake 映射为 amount_per100g,
|
|
|
+ // 但建表 SQL 误用 amount_per_100g,导致实体全字段 SELECT 报 Unknown column 'amount_per100g'。
|
|
|
+ // 当前 FoodNutrientMapper 无 Service 调用,属潜在隐患;此处统一列名为 amount_per100g。
|
|
|
+ try {
|
|
|
+ Integer cnt = jdbcTemplate.queryForObject(
|
|
|
+ "SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() " +
|
|
|
+ "AND TABLE_NAME = 'food_nutrients' AND COLUMN_NAME = 'amount_per_100g'", Integer.class);
|
|
|
+ if (cnt != null && cnt > 0) {
|
|
|
+ jdbcTemplate.execute("ALTER TABLE food_nutrients CHANGE COLUMN amount_per_100g amount_per100g DECIMAL(10,4) NOT NULL COMMENT '每100g含量'");
|
|
|
+ log.info("已重命名 food_nutrients.amount_per_100g -> amount_per100g");
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 表不存在或列不存在,忽略
|
|
|
+ }
|
|
|
}
|
|
|
}
|