|
|
@@ -456,6 +456,84 @@ public class DatabaseInitializer implements CommandLineRunner {
|
|
|
// 修改失败,忽略错误
|
|
|
}
|
|
|
|
|
|
+ // 迁移6: 创建streets表(街道地址维度表)
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS streets (" +
|
|
|
+ "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
+ "province VARCHAR(50) COMMENT '省份', " +
|
|
|
+ "province_code VARCHAR(20) COMMENT '省份编码', " +
|
|
|
+ "city VARCHAR(50) COMMENT '城市', " +
|
|
|
+ "city_code VARCHAR(20) COMMENT '城市编码', " +
|
|
|
+ "district VARCHAR(50) COMMENT '区县', " +
|
|
|
+ "district_code VARCHAR(20) COMMENT '区县编码', " +
|
|
|
+ "street VARCHAR(100) COMMENT '街道', " +
|
|
|
+ "street_code VARCHAR(20) COMMENT '街道编码', " +
|
|
|
+ "full_name VARCHAR(200) COMMENT '完整地址', " +
|
|
|
+ "level INT COMMENT '层级:1省2市3区4街道', " +
|
|
|
+ "parent_id BIGINT COMMENT '父级ID', " +
|
|
|
+ "sort_order INT DEFAULT 0 COMMENT '排序', " +
|
|
|
+ "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
+ "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
|
|
|
+ "INDEX idx_level (level), " +
|
|
|
+ "INDEX idx_parent_id (parent_id), " +
|
|
|
+ "INDEX idx_street_code (street_code), " +
|
|
|
+ "INDEX idx_full_name (full_name(50))" +
|
|
|
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
|
|
|
+ log.info("已创建streets表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 表已存在,忽略错误
|
|
|
+ }
|
|
|
+
|
|
|
+ // 迁移7: families表添加地址字段
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("ALTER TABLE families ADD COLUMN street_id BIGINT COMMENT '街道ID'");
|
|
|
+ log.info("已添加street_id列到families表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 列已存在,忽略错误
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("ALTER TABLE families ADD COLUMN province VARCHAR(50) COMMENT '省份'");
|
|
|
+ jdbcTemplate.execute("ALTER TABLE families ADD COLUMN city VARCHAR(50) COMMENT '城市'");
|
|
|
+ jdbcTemplate.execute("ALTER TABLE families ADD COLUMN district VARCHAR(50) COMMENT '区县'");
|
|
|
+ jdbcTemplate.execute("ALTER TABLE families ADD COLUMN street VARCHAR(100) COMMENT '街道'");
|
|
|
+ log.info("已添加地址字段到families表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 列已存在,忽略错误
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("ALTER TABLE families ADD INDEX idx_street_id (street_id)");
|
|
|
+ log.info("已添加idx_street_id索引到families表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 索引已存在,忽略错误
|
|
|
+ }
|
|
|
+
|
|
|
+ // 迁移8: teachers表添加地址字段
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("ALTER TABLE teachers ADD COLUMN street_id BIGINT COMMENT '街道ID'");
|
|
|
+ log.info("已添加street_id列到teachers表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 列已存在,忽略错误
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("ALTER TABLE teachers ADD COLUMN province VARCHAR(50) COMMENT '省份'");
|
|
|
+ jdbcTemplate.execute("ALTER TABLE teachers ADD COLUMN city VARCHAR(50) COMMENT '城市'");
|
|
|
+ jdbcTemplate.execute("ALTER TABLE teachers ADD COLUMN district VARCHAR(50) COMMENT '区县'");
|
|
|
+ jdbcTemplate.execute("ALTER TABLE teachers ADD COLUMN street VARCHAR(100) COMMENT '街道'");
|
|
|
+ log.info("已添加地址字段到teachers表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 列已存在,忽略错误
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("ALTER TABLE teachers ADD INDEX idx_street_id (street_id)");
|
|
|
+ log.info("已添加idx_street_id索引到teachers表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 索引已存在,忽略错误
|
|
|
+ }
|
|
|
+
|
|
|
log.info("数据库迁移完成");
|
|
|
}
|
|
|
|
|
|
@@ -553,26 +631,65 @@ try {
|
|
|
log.warn("初始化默认管理员失败: {}", e.getMessage());
|
|
|
}
|
|
|
|
|
|
-// 初始化任务模板示例数据
|
|
|
-try {
|
|
|
- Integer count = jdbcTemplate.queryForObject(
|
|
|
- "SELECT COUNT(*) FROM admin_task_templates", Integer.class);
|
|
|
+ // 初始化任务模板示例数据
|
|
|
+ try {
|
|
|
+ Integer count = jdbcTemplate.queryForObject(
|
|
|
+ "SELECT COUNT(*) FROM admin_task_templates", Integer.class);
|
|
|
|
|
|
- if (count == null || count == 0) {
|
|
|
- jdbcTemplate.execute("INSERT INTO admin_task_templates (title, description, points, category, need_review, recommended_age, difficulty, is_active) VALUES " +
|
|
|
- "('完成作业', '按时完成学校布置的家庭作业', 10, '学习', 1, 6, 'medium', 1), " +
|
|
|
- "('阅读30分钟', '自主阅读课外书籍30分钟', 8, '阅读', 0, 5, 'easy', 1), " +
|
|
|
- "('整理房间', '收拾整理自己的房间和书桌', 6, '家务', 0, 6, 'easy', 1), " +
|
|
|
- "('洗碗', '饭后帮忙清洗餐具', 5, '家务', 1, 8, 'medium', 1), " +
|
|
|
- "('户外运动1小时', '进行跑步、球类等户外运动', 12, '运动', 0, 7, 'hard', 1), " +
|
|
|
- "('练习书法', '练习毛笔或硬笔书法20分钟', 7, '学习', 0, 7, 'medium', 1), " +
|
|
|
- "('早睡早起', '晚上9点前睡觉,早上7点前起床', 5, '生活习惯', 0, 5, 'easy', 1), " +
|
|
|
- "('背诵古诗', '背诵一首古诗词', 8, '学习', 1, 6, 'medium', 1)");
|
|
|
- log.info("任务模板示例数据已初始化");
|
|
|
- }
|
|
|
-} catch (Exception e) {
|
|
|
- log.warn("初始化任务模板失败: {}", e.getMessage());
|
|
|
-}
|
|
|
+ if (count == null || count == 0) {
|
|
|
+ jdbcTemplate.execute("INSERT INTO admin_task_templates (title, description, points, category, need_review, recommended_age, difficulty, is_active) VALUES " +
|
|
|
+ "('完成作业', '按时完成学校布置的家庭作业', 10, '学习', 1, 6, 'medium', 1), " +
|
|
|
+ "('阅读30分钟', '自主阅读课外书籍30分钟', 8, '阅读', 0, 5, 'easy', 1), " +
|
|
|
+ "('整理房间', '收拾整理自己的房间和书桌', 6, '家务', 0, 6, 'easy', 1), " +
|
|
|
+ "('洗碗', '饭后帮忙清洗餐具', 5, '家务', 1, 8, 'medium', 1), " +
|
|
|
+ "('户外运动1小时', '进行跑步、球类等户外运动', 12, '运动', 0, 7, 'hard', 1), " +
|
|
|
+ "('练习书法', '练习毛笔或硬笔书法20分钟', 7, '学习', 0, 7, 'medium', 1), " +
|
|
|
+ "('早睡早起', '晚上9点前睡觉,早上7点前起床', 5, '生活习惯', 0, 5, 'easy', 1), " +
|
|
|
+ "('背诵古诗', '背诵一首古诗词', 8, '学习', 1, 6, 'medium', 1)");
|
|
|
+ log.info("任务模板示例数据已初始化");
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("初始化任务模板失败: {}", e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 初始化街道数据示例(广东省广州市)
|
|
|
+ try {
|
|
|
+ Integer count = jdbcTemplate.queryForObject(
|
|
|
+ "SELECT COUNT(*) FROM streets", Integer.class);
|
|
|
+
|
|
|
+ if (count == null || count == 0) {
|
|
|
+ // 省
|
|
|
+ jdbcTemplate.execute("INSERT INTO streets (province, province_code, full_name, level, parent_id, sort_order) VALUES " +
|
|
|
+ "('广东省', '44', '广东省', 1, NULL, 1)");
|
|
|
+
|
|
|
+ // 市
|
|
|
+ jdbcTemplate.execute("INSERT INTO streets (province, province_code, city, city_code, full_name, level, parent_id, sort_order) VALUES " +
|
|
|
+ "('广东省', '44', '广州市', '4401', '广东省广州市', 2, 1, 1), " +
|
|
|
+ "('广东省', '44', '深圳市', '4403', '广东省深圳市', 2, 1, 2), " +
|
|
|
+ "('广东省', '44', '珠海市', '4404', '广东省珠海市', 2, 1, 3)");
|
|
|
+
|
|
|
+ // 区
|
|
|
+ jdbcTemplate.execute("INSERT INTO streets (province, province_code, city, city_code, district, district_code, full_name, level, parent_id, sort_order) VALUES " +
|
|
|
+ "('广东省', '44', '广州市', '4401', '天河区', '440106', '广东省广州市天河区', 3, 2, 1), " +
|
|
|
+ "('广东省', '44', '广州市', '4401', '越秀区', '440104', '广东省广州市越秀区', 3, 2, 2), " +
|
|
|
+ "('广东省', '44', '广州市', '4401', '番禺区', '440113', '广东省广州市番禺区', 3, 2, 3), " +
|
|
|
+ "('广东省', '44', '深圳市', '4403', '南山区', '440305', '广东省深圳市南山区', 3, 3, 1), " +
|
|
|
+ "('广东省', '44', '深圳市', '4403', '福田区', '440304', '广东省深圳市福田区', 3, 3, 2)");
|
|
|
+
|
|
|
+ // 街道
|
|
|
+ jdbcTemplate.execute("INSERT INTO streets (province, province_code, city, city_code, district, district_code, street, street_code, full_name, level, parent_id, sort_order) VALUES " +
|
|
|
+ "('广东省', '44', '广州市', '4401', '天河区', '440106', '天河南街道', '440106001', '广东省广州市天河区天河南街道', 4, 4, 1), " +
|
|
|
+ "('广东省', '44', '广州市', '4401', '天河区', '440106', '沙河街道', '440106002', '广东省广州市天河区沙河街道', 4, 4, 2), " +
|
|
|
+ "('广东省', '44', '广州市', '4401', '越秀区', '440104', '东山街道', '440104001', '广东省广州市越秀区东山街道', 4, 5, 1), " +
|
|
|
+ "('广东省', '44', '广州市', '4401', '番禺区', '440113', '市桥街道', '440113001', '广东省广州市番禺区市桥街道', 4, 6, 1), " +
|
|
|
+ "('广东省', '44', '深圳市', '4403', '南山区', '440305', '南山街道', '440305001', '广东省深圳市南山区南山街道', 4, 7, 1), " +
|
|
|
+ "('广东省', '44', '深圳市', '4403', '福田区', '440304', '福田街道', '440304001', '广东省深圳市福田区福田街道', 4, 8, 1)");
|
|
|
+
|
|
|
+ log.info("街道示例数据已初始化");
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("初始化街道数据失败: {}", e.getMessage());
|
|
|
+ }
|
|
|
|
|
|
try {
|
|
|
Integer count = jdbcTemplate.queryForObject(
|