|
|
@@ -144,23 +144,23 @@ public class DatabaseInitializer implements CommandLineRunner {
|
|
|
"INDEX idx_child_id (child_id)" +
|
|
|
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
|
|
|
|
|
- // 奖励表
|
|
|
- "CREATE TABLE IF NOT EXISTS rewards (" +
|
|
|
- "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
- "family_id BIGINT NOT NULL, " +
|
|
|
- "child_id BIGINT NOT NULL, " +
|
|
|
- "title VARCHAR(100) NOT NULL, " +
|
|
|
- "points_required INT NOT NULL, " +
|
|
|
- "category VARCHAR(32), " +
|
|
|
- "status ENUM('available','pending','exchanged','rejected') DEFAULT 'available', " +
|
|
|
- "exchange_approved TINYINT, " +
|
|
|
- "exchanged_at DATETIME, " +
|
|
|
- "is_template TINYINT DEFAULT 0, " +
|
|
|
- "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
- "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
|
|
|
- "INDEX idx_child_id_status (child_id, status), " +
|
|
|
- "INDEX idx_is_template (is_template)" +
|
|
|
- ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
|
|
+// 奖励表
|
|
|
+"CREATE TABLE IF NOT EXISTS rewards (" +
|
|
|
+"id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
+"family_id BIGINT NOT NULL, " +
|
|
|
+"child_id BIGINT NULL COMMENT '孩子ID,模板奖励为NULL', " +
|
|
|
+"title VARCHAR(100) NOT NULL, " +
|
|
|
+"points_required INT NOT NULL, " +
|
|
|
+"category VARCHAR(32), " +
|
|
|
+"status ENUM(\'available\',\'pending\',\'exchanged\',\'rejected\') DEFAULT \'available\', " +
|
|
|
+"exchange_approved TINYINT, " +
|
|
|
+"exchanged_at DATETIME, " +
|
|
|
+"is_template TINYINT DEFAULT 0, " +
|
|
|
+"created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
+"updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
|
|
|
+"INDEX idx_child_id_status (child_id, status), " +
|
|
|
+"INDEX idx_is_template (is_template)" +
|
|
|
+") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4",
|
|
|
|
|
|
// 奖励分类表
|
|
|
"CREATE TABLE IF NOT EXISTS reward_categories (" +
|
|
|
@@ -633,7 +633,23 @@ public class DatabaseInitializer implements CommandLineRunner {
|
|
|
// 表已存在,忽略错误
|
|
|
}
|
|
|
|
|
|
- log.info("数据库迁移完成");
|
|
|
+// 迁移13: admin_task_templates表添加teacher_id字段
|
|
|
+try {
|
|
|
+jdbcTemplate.execute("ALTER TABLE admin_task_templates ADD COLUMN teacher_id BIGINT COMMENT \'指导师ID\'");
|
|
|
+log.info("已添加teacher_id列到admin_task_templates表");
|
|
|
+} catch (Exception e) {
|
|
|
+// 列已存在,忽略错误
|
|
|
+}
|
|
|
+
|
|
|
+// 迁移14: rewards表child_id字段允许NULL(模板奖励不需要child_id)
|
|
|
+try {
|
|
|
+jdbcTemplate.execute("ALTER TABLE rewards MODIFY COLUMN child_id BIGINT NULL COMMENT \'孩子ID,模板奖励为NULL\'");
|
|
|
+log.info("已修改rewards.child_id字段允许NULL");
|
|
|
+} catch (Exception e) {
|
|
|
+// 修改失败,忽略错误
|
|
|
+}
|
|
|
+
|
|
|
+log.info("数据库迁移完成");
|
|
|
}
|
|
|
|
|
|
private void initializeDefaultData() {
|
|
|
@@ -643,17 +659,17 @@ public class DatabaseInitializer implements CommandLineRunner {
|
|
|
Integer count = jdbcTemplate.queryForObject(
|
|
|
"SELECT COUNT(*) FROM rewards WHERE is_template = 1", Integer.class);
|
|
|
|
|
|
- if (count == null || count == 0) {
|
|
|
- // 插入预设奖励模板
|
|
|
- jdbcTemplate.execute("INSERT INTO rewards (family_id, child_id, title, points_required, category, is_template) VALUES " +
|
|
|
- "(0, 0, '看动画片30分钟', 30, '精神类', 1), " +
|
|
|
- "(0, 0, '玩平板游戏30分钟', 40, '特权类', 1), " +
|
|
|
- "(0, 0, '去游乐场', 100, '物质类', 1), " +
|
|
|
- "(0, 0, '买玩具', 150, '物质类', 1), " +
|
|
|
- "(0, 0, '吃冰淇淋', 20, '物质类', 1), " +
|
|
|
- "(0, 0, '选择晚餐', 25, '特权类', 1)");
|
|
|
- log.info("预设奖励模板已初始化");
|
|
|
- }
|
|
|
+if (count == null || count == 0) {
|
|
|
+// 插入预设奖励模板(child_id为NULL表示模板)
|
|
|
+jdbcTemplate.execute("INSERT INTO rewards (family_id, child_id, title, points_required, category, is_template) VALUES " +
|
|
|
+"(0, NULL, \'看动画片30分钟\', 30, \'精神类\', 1), " +
|
|
|
+"(0, NULL, \'玩平板游戏30分钟\', 40, \'特权类\', 1), " +
|
|
|
+"(0, NULL, \'去游乐场\', 100, \'物质类\', 1), " +
|
|
|
+"(0, NULL, \'买玩具\', 150, \'物质类\', 1), " +
|
|
|
+"(0, NULL, \'吃冰淇淋\', 20, \'物质类\', 1), " +
|
|
|
+"(0, NULL, \'选择晚餐\', 25, \'特权类\', 1)");
|
|
|
+log.info("预设奖励模板已初始化");
|
|
|
+}
|
|
|
} catch (Exception e) {
|
|
|
log.warn("初始化预设奖励失败: {}", e.getMessage());
|
|
|
}
|