|
|
@@ -65,7 +65,7 @@ public class DatabaseInitializer implements CommandLineRunner {
|
|
|
"openid VARCHAR(64) NOT NULL, " +
|
|
|
"unionid VARCHAR(64), " +
|
|
|
"family_id BIGINT NOT NULL, " +
|
|
|
- "role ENUM('parent','child') NOT NULL, " +
|
|
|
+ "role ENUM('parent','child','admin') NOT NULL, " +
|
|
|
"nickname VARCHAR(50), " +
|
|
|
"avatar VARCHAR(255), " +
|
|
|
"password VARCHAR(128), " +
|
|
|
@@ -575,6 +575,24 @@ public class DatabaseInitializer implements CommandLineRunner {
|
|
|
// 修改失败,忽略错误
|
|
|
}
|
|
|
|
|
|
+ // 迁移5.1: 修改users.role为支持admin
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("ALTER TABLE users MODIFY COLUMN role ENUM('parent', 'child', 'teacher', 'admin') NOT NULL");
|
|
|
+ log.info("已更新users.role字段支持admin角色");
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 修改失败,忽略错误
|
|
|
+ }
|
|
|
+
|
|
|
+ // 迁移5.2: 确保管理员角色为admin(修复旧数据遗留问题)
|
|
|
+ try {
|
|
|
+ int updated = jdbcTemplate.update("UPDATE admins SET role = 'admin' WHERE username = 'admin'");
|
|
|
+ if (updated > 0) {
|
|
|
+ log.info("已修正管理员角色为admin");
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 更新失败,忽略错误
|
|
|
+ }
|
|
|
+
|
|
|
// 迁移6: 创建streets表(街道地址维度表)
|
|
|
try {
|
|
|
jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS streets (" +
|
|
|
@@ -1021,6 +1039,56 @@ log.info("已添加template_id列到tasks表");
|
|
|
} catch (Exception e) {
|
|
|
}
|
|
|
|
|
|
+ // 迁移26: guide_applications表添加address和bank_card字段
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("ALTER TABLE guide_applications ADD COLUMN address VARCHAR(500) COMMENT '地址'");
|
|
|
+ log.info("已添加address列到guide_applications表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 列已存在,忽略错误
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("ALTER TABLE guide_applications ADD COLUMN bank_card VARCHAR(50) COMMENT '银行卡号'");
|
|
|
+ log.info("已添加bank_card列到guide_applications表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 列已存在,忽略错误
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("ALTER TABLE guide_applications ADD COLUMN bank_name VARCHAR(100) COMMENT '开户行'");
|
|
|
+ log.info("已添加bank_name列到guide_applications表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 列已存在,忽略错误
|
|
|
+ }
|
|
|
+
|
|
|
+ // 迁移27: users表添加address字段(成长规划师地址)
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("ALTER TABLE users ADD COLUMN address VARCHAR(500) COMMENT '地址'");
|
|
|
+ log.info("已添加address列到users表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 列已存在,忽略错误
|
|
|
+ }
|
|
|
+
|
|
|
+ // 迁移28: 创建guide_application_records表(申请过程记录)
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS guide_application_records (" +
|
|
|
+ "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
+ "application_id BIGINT NOT NULL COMMENT '关联申请ID', " +
|
|
|
+ "user_id BIGINT NOT NULL COMMENT '操作人用户ID', " +
|
|
|
+ "action VARCHAR(50) NOT NULL COMMENT '操作: submit/approve/reject/withdraw/resubmit', " +
|
|
|
+ "from_status VARCHAR(20) COMMENT '操作前状态', " +
|
|
|
+ "to_status VARCHAR(20) NOT NULL COMMENT '操作后状态', " +
|
|
|
+ "remark VARCHAR(500) COMMENT '备注/原因', " +
|
|
|
+ "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
+ "INDEX idx_application_id (application_id), " +
|
|
|
+ "INDEX idx_user_id (user_id), " +
|
|
|
+ "INDEX idx_action (action)" +
|
|
|
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长规划师申请过程记录表'");
|
|
|
+ log.info("已创建guide_application_records表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 表已存在,忽略错误
|
|
|
+ }
|
|
|
+
|
|
|
log.info("数据库迁移完成");
|
|
|
}
|
|
|
|
|
|
@@ -1223,6 +1291,41 @@ try {
|
|
|
log.warn("初始化任务模板失败: {}", e.getMessage());
|
|
|
}
|
|
|
|
|
|
+// 初始化 users 表测试用户
|
|
|
+try {
|
|
|
+ // 创建默认家庭(如果不存在)
|
|
|
+ Integer familyCount = jdbcTemplate.queryForObject(
|
|
|
+ "SELECT COUNT(*) FROM families WHERE id = 1", Integer.class);
|
|
|
+ if (familyCount == null || familyCount == 0) {
|
|
|
+ jdbcTemplate.execute("INSERT INTO families (id, name, invite_code) VALUES (1, '默认家庭', '888888')");
|
|
|
+ log.info("默认家庭已创建");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 密码加密: MD5("xzyj_salt_" + password)
|
|
|
+ String adminPassword = org.springframework.util.DigestUtils.md5DigestAsHex("xzyj_salt_admin123".getBytes());
|
|
|
+ String teacherPassword = org.springframework.util.DigestUtils.md5DigestAsHex("xzyj_salt_teacher123".getBytes());
|
|
|
+
|
|
|
+ // 创建管理员用户(管理员角色,密码 admin123)
|
|
|
+ Integer adminUserCount = jdbcTemplate.queryForObject(
|
|
|
+ "SELECT COUNT(*) FROM users WHERE phone = '13800138000'", Integer.class);
|
|
|
+ if (adminUserCount == null || adminUserCount == 0) {
|
|
|
+ jdbcTemplate.execute("INSERT INTO users (openid, family_id, role, phone, nickname, real_name, password) VALUES " +
|
|
|
+ "('seed_admin_13800138000', 1, 'admin', '13800138000', '系统管理员', '系统管理员', '" + adminPassword + "')");
|
|
|
+ log.info("测试管理员用户已创建: 13800138000 (admin角色, 密码 admin123)");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 创建测试教师用户
|
|
|
+ Integer teacherUserCount = jdbcTemplate.queryForObject(
|
|
|
+ "SELECT COUNT(*) FROM users WHERE phone = '13800138001'", Integer.class);
|
|
|
+ if (teacherUserCount == null || teacherUserCount == 0) {
|
|
|
+ jdbcTemplate.execute("INSERT INTO users (openid, family_id, role, phone, nickname, real_name, password) VALUES " +
|
|
|
+ "('seed_teacher_13800138001', 1, 'teacher', '13800138001', '测试教师', '测试教师', '" + teacherPassword + "')");
|
|
|
+ log.info("测试教师用户已创建: 13800138001 (教师角色, 密码 teacher123)");
|
|
|
+ }
|
|
|
+} catch (Exception e) {
|
|
|
+ log.warn("初始化测试用户失败: {}", e.getMessage());
|
|
|
+}
|
|
|
+
|
|
|
// 初始化成长规划师模块相关表
|
|
|
initGuideModuleTables(jdbcTemplate);
|
|
|
}
|
|
|
@@ -1437,6 +1540,14 @@ try {
|
|
|
log.warn("创建guide_invite_codes表失败: {}", e.getMessage());
|
|
|
}
|
|
|
|
|
|
+ // 迁移29: assessment_orders表添加appointment_id字段
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("ALTER TABLE assessment_orders ADD COLUMN appointment_id BIGINT COMMENT '关联的预约ID'");
|
|
|
+ log.info("已添加appointment_id列到assessment_orders表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 列已存在,忽略错误
|
|
|
+ }
|
|
|
+
|
|
|
log.info("成长规划师模块数据库表初始化完成");
|
|
|
}
|
|
|
}
|