|
|
@@ -3023,6 +3023,11 @@ try {
|
|
|
} catch (Exception e) {
|
|
|
log.warn("创建dan_knowledge_base_tag表可能已存在: {}", e.getMessage());
|
|
|
}
|
|
|
+
|
|
|
+ // 迁移: foods表添加营养字段
|
|
|
+ ensureColumn("foods", "energy_kj", "DECIMAL(8,2) COMMENT '能量(kJ/100g)'");
|
|
|
+ ensureColumn("foods", "starch", "DECIMAL(8,2) COMMENT '淀粉(g/100g)'");
|
|
|
+ ensureColumn("foods", "cholesterol", "DECIMAL(8,2) COMMENT '胆固醇(mg/100g)'");
|
|
|
}
|
|
|
|
|
|
private void insertSysConfigSeed(String key, String value, String desc) {
|
|
|
@@ -3121,6 +3126,116 @@ try {
|
|
|
+ "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, "
|
|
|
+ "INDEX idx_user_date (user_id, meal_date), "
|
|
|
+ "INDEX idx_child_date (child_id, meal_date)"
|
|
|
+ + ");",
|
|
|
+
|
|
|
+ "CREATE TABLE IF NOT EXISTS report_food_suitability ("
|
|
|
+ + "id BIGINT AUTO_INCREMENT PRIMARY KEY, "
|
|
|
+ + "report_id BIGINT NOT NULL COMMENT '健康报告ID', "
|
|
|
+ + "food_id BIGINT COMMENT '食材ID', "
|
|
|
+ + "food_name VARCHAR(100) NOT NULL COMMENT '食材名称', "
|
|
|
+ + "category VARCHAR(50) COMMENT '分类', "
|
|
|
+ + "score INT NOT NULL COMMENT '适宜度评分', "
|
|
|
+ + "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, "
|
|
|
+ + "INDEX idx_report (report_id), "
|
|
|
+ + "INDEX idx_food (food_id)"
|
|
|
+ + ");",
|
|
|
+
|
|
|
+ "CREATE TABLE IF NOT EXISTS user_food_preference ("
|
|
|
+ + "id BIGINT AUTO_INCREMENT PRIMARY KEY, "
|
|
|
+ + "user_id BIGINT NOT NULL COMMENT '用户ID', "
|
|
|
+ + "food_id BIGINT COMMENT '食材ID', "
|
|
|
+ + "food_name VARCHAR(100) NOT NULL COMMENT '食材名称', "
|
|
|
+ + "score INT NOT NULL DEFAULT 0 COMMENT '评分', "
|
|
|
+ + "reason VARCHAR(500) COMMENT '原因', "
|
|
|
+ + "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, "
|
|
|
+ + "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, "
|
|
|
+ + "INDEX idx_user (user_id)"
|
|
|
+ + ");",
|
|
|
+
|
|
|
+ "CREATE TABLE IF NOT EXISTS food_nutrients ("
|
|
|
+ + "id BIGINT AUTO_INCREMENT PRIMARY KEY, "
|
|
|
+ + "food_id BIGINT NOT NULL COMMENT '食材ID', "
|
|
|
+ + "nutrient_code VARCHAR(20) NOT NULL COMMENT '营养素编码', "
|
|
|
+ + "amount_per_100g DECIMAL(10,4) NOT NULL COMMENT '每100g含量', "
|
|
|
+ + "unit VARCHAR(20) NOT NULL COMMENT '单位', "
|
|
|
+ + "source VARCHAR(50) DEFAULT 'importer' COMMENT '数据来源', "
|
|
|
+ + "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, "
|
|
|
+ + "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, "
|
|
|
+ + "UNIQUE KEY uk_food_nutrient (food_id, nutrient_code), "
|
|
|
+ + "INDEX idx_nutrient (nutrient_code)"
|
|
|
+ + ");",
|
|
|
+
|
|
|
+ "CREATE TABLE IF NOT EXISTS rdi_standards ("
|
|
|
+ + "id BIGINT AUTO_INCREMENT PRIMARY KEY, "
|
|
|
+ + "nutrient_code VARCHAR(20) NOT NULL COMMENT '营养素编码', "
|
|
|
+ + "age_group VARCHAR(10) NOT NULL COMMENT '年龄段', "
|
|
|
+ + "gender VARCHAR(6) DEFAULT 'all' COMMENT '性别', "
|
|
|
+ + "rdi_type VARCHAR(10) NOT NULL COMMENT '参考类型', "
|
|
|
+ + "amount DECIMAL(10,4) NOT NULL COMMENT '推荐量', "
|
|
|
+ + "unit VARCHAR(20) NOT NULL COMMENT '单位', "
|
|
|
+ + "source VARCHAR(100) COMMENT '数据来源', "
|
|
|
+ + "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, "
|
|
|
+ + "UNIQUE KEY uk_rdi (nutrient_code, age_group, gender, rdi_type), "
|
|
|
+ + "INDEX idx_age (age_group)"
|
|
|
+ + ");",
|
|
|
+
|
|
|
+ "CREATE TABLE IF NOT EXISTS shopping_lists ("
|
|
|
+ + "id BIGINT AUTO_INCREMENT PRIMARY KEY, "
|
|
|
+ + "user_id BIGINT NOT NULL COMMENT '用户ID', "
|
|
|
+ + "child_id BIGINT COMMENT '孩子ID', "
|
|
|
+ + "report_id BIGINT COMMENT '健康报告ID', "
|
|
|
+ + "title VARCHAR(200) COMMENT '标题', "
|
|
|
+ + "source VARCHAR(20) NOT NULL COMMENT '来源', "
|
|
|
+ + "status VARCHAR(20) DEFAULT 'active' COMMENT '状态', "
|
|
|
+ + "total_items INT DEFAULT 0 COMMENT '总项数', "
|
|
|
+ + "purchased_items INT DEFAULT 0 COMMENT '已购项数', "
|
|
|
+ + "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, "
|
|
|
+ + "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, "
|
|
|
+ + "INDEX idx_user (user_id), "
|
|
|
+ + "INDEX idx_report (report_id), "
|
|
|
+ + "INDEX idx_status (status)"
|
|
|
+ + ");",
|
|
|
+
|
|
|
+ "CREATE TABLE IF NOT EXISTS shopping_list_items ("
|
|
|
+ + "id BIGINT AUTO_INCREMENT PRIMARY KEY, "
|
|
|
+ + "list_id BIGINT NOT NULL COMMENT '购物清单ID', "
|
|
|
+ + "food_id BIGINT COMMENT '食材ID', "
|
|
|
+ + "food_name VARCHAR(100) NOT NULL COMMENT '食材名称', "
|
|
|
+ + "category VARCHAR(50) COMMENT '分类', "
|
|
|
+ + "quantity DECIMAL(8,2) DEFAULT 1 COMMENT '数量', "
|
|
|
+ + "unit VARCHAR(20) DEFAULT '份' COMMENT '单位', "
|
|
|
+ + "priority VARCHAR(10) DEFAULT 'medium' COMMENT '优先级', "
|
|
|
+ + "reason VARCHAR(200) COMMENT '推荐原因', "
|
|
|
+ + "score INT COMMENT '评分', "
|
|
|
+ + "source VARCHAR(20) COMMENT '来源', "
|
|
|
+ + "purchased TINYINT DEFAULT 0 COMMENT '是否已购', "
|
|
|
+ + "purchased_at DATETIME COMMENT '购买时间', "
|
|
|
+ + "sort_order INT DEFAULT 0 COMMENT '排序', "
|
|
|
+ + "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, "
|
|
|
+ + "INDEX idx_list (list_id), "
|
|
|
+ + "INDEX idx_purchased (purchased)"
|
|
|
+ + ");",
|
|
|
+
|
|
|
+ "CREATE TABLE IF NOT EXISTS follow_up ("
|
|
|
+ + "id BIGINT AUTO_INCREMENT PRIMARY KEY, "
|
|
|
+ + "family_id BIGINT NOT NULL COMMENT '家庭ID', "
|
|
|
+ + "child_id BIGINT COMMENT '孩子ID', "
|
|
|
+ + "teacher_id BIGINT COMMENT '规划师ID', "
|
|
|
+ + "deficiency_id BIGINT COMMENT '缺乏项ID', "
|
|
|
+ + "message_id BIGINT COMMENT '消息ID', "
|
|
|
+ + "status VARCHAR(20) DEFAULT 'pending' COMMENT '状态', "
|
|
|
+ + "priority VARCHAR(10) DEFAULT 'medium' COMMENT '优先级', "
|
|
|
+ + "description VARCHAR(500) COMMENT '描述', "
|
|
|
+ + "parent_feedback TEXT COMMENT '家长反馈', "
|
|
|
+ + "teacher_review VARCHAR(500) COMMENT '规划师点评', "
|
|
|
+ + "due_date DATETIME COMMENT '截止日期', "
|
|
|
+ + "completed_at DATETIME COMMENT '完成时间', "
|
|
|
+ + "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, "
|
|
|
+ + "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, "
|
|
|
+ + "INDEX idx_family (family_id), "
|
|
|
+ + "INDEX idx_teacher (teacher_id), "
|
|
|
+ + "INDEX idx_status (status), "
|
|
|
+ + "INDEX idx_due (due_date)"
|
|
|
+ ");"
|
|
|
};
|
|
|
|