|
|
@@ -43,10 +43,12 @@ public class DatabaseInitializer implements CommandLineRunner {
|
|
|
initializeDefaultData();
|
|
|
initFoodTables();
|
|
|
runIndexMigrations();
|
|
|
- recordSchemaVersion(5);
|
|
|
+ runShopMigrations();
|
|
|
+ recordSchemaVersion(6);
|
|
|
log.info("数据库初始化完成!");
|
|
|
} else {
|
|
|
- log.info("数据库初始化已执行,跳过(schema_version >= 1)");
|
|
|
+ log.info("数据库初始化已执行,检查增量迁移...");
|
|
|
+ runShopMigrations(); // 增量迁移独立检查,不受主版本门控限制
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -55,7 +57,7 @@ public class DatabaseInitializer implements CommandLineRunner {
|
|
|
try {
|
|
|
jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS schema_version (version INT PRIMARY KEY, applied_at DATETIME DEFAULT CURRENT_TIMESTAMP)");
|
|
|
Integer v = jdbcTemplate.queryForObject("SELECT version FROM schema_version ORDER BY version DESC LIMIT 1", Integer.class);
|
|
|
- return v != null && v >= 1;
|
|
|
+ return v != null && v >= 6;
|
|
|
} catch (Exception e) {
|
|
|
return false;
|
|
|
}
|
|
|
@@ -87,6 +89,39 @@ public class DatabaseInitializer implements CommandLineRunner {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 增量迁移:添加商品订单相关字段(来自 migration_add_shop_tables.sql)
|
|
|
+ * 幂等执行,列已存在时忽略错误
|
|
|
+ */
|
|
|
+ private void runShopMigrations() {
|
|
|
+ log.info("开始执行商品订单增量迁移...");
|
|
|
+ String[] alterStatements = {
|
|
|
+ "ALTER TABLE `product_orders` ADD COLUMN `delivery_method` tinyint(1) DEFAULT 1 COMMENT '配送方式:1快递 2自提'",
|
|
|
+ "ALTER TABLE `product_orders` ADD COLUMN `address_snapshot` json DEFAULT NULL COMMENT '收货地址快照'",
|
|
|
+ "ALTER TABLE `product_orders` ADD COLUMN `coupon_id` int(11) DEFAULT NULL COMMENT '使用的优惠券ID'",
|
|
|
+ "ALTER TABLE `product_orders` ADD COLUMN `discount_amount` decimal(10,2) DEFAULT 0 COMMENT '优惠金额'",
|
|
|
+ "ALTER TABLE `product_orders` ADD COLUMN `delivery_fee` decimal(10,2) DEFAULT 0 COMMENT '运费'",
|
|
|
+ "ALTER TABLE `product_orders` ADD COLUMN `tracking_number` varchar(128) DEFAULT NULL COMMENT '快递单号'",
|
|
|
+ "ALTER TABLE `product_orders` ADD COLUMN `express_company` varchar(64) DEFAULT NULL COMMENT '快递公司'",
|
|
|
+ "ALTER TABLE `product_orders` ADD COLUMN `refund_status` tinyint(1) DEFAULT 0 COMMENT '退款状态:0无 1申请中 2已退款 3拒绝'",
|
|
|
+ "ALTER TABLE `product_orders` ADD COLUMN `refund_reason` varchar(512) DEFAULT NULL COMMENT '退款原因'",
|
|
|
+ "ALTER TABLE `product_orders` ADD COLUMN `refund_amount` decimal(10,2) DEFAULT NULL COMMENT '退款金额'",
|
|
|
+ "ALTER TABLE `product_orders` ADD COLUMN `refund_time` datetime DEFAULT NULL COMMENT '退款时间'",
|
|
|
+ "ALTER TABLE `product_orders` ADD COLUMN `pickup_code` varchar(16) DEFAULT NULL COMMENT '自提码'",
|
|
|
+ "ALTER TABLE `product_orders` ADD COLUMN `remark` varchar(512) DEFAULT NULL COMMENT '买家备注'"
|
|
|
+ };
|
|
|
+ for (String sql : alterStatements) {
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute(sql);
|
|
|
+ String colName = sql.replaceFirst(".*ADD COLUMN `?\\w+`?\\s+.*", "$1");
|
|
|
+ log.info("商品订单迁移成功: ADD COLUMN {}", colName);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.debug("商品订单字段已存在,跳过: {}", e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.info("商品订单增量迁移完成");
|
|
|
+ }
|
|
|
+
|
|
|
private void initializeDatabase() {
|
|
|
try {
|
|
|
// 尝试连接数据库,如果不存在则创建
|
|
|
@@ -2216,6 +2251,49 @@ log.info("已添加template_id列到tasks表");
|
|
|
log.warn("检查/添加activities表checkin_points列失败: {}", e.getMessage());
|
|
|
}
|
|
|
|
|
|
+ // ==================== 迁移: activities表添加报名相关列 ====================
|
|
|
+ try {
|
|
|
+ Integer colExists = jdbcTemplate.queryForObject(
|
|
|
+ "SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'activities' AND COLUMN_NAME = 'require_registration'",
|
|
|
+ Integer.class);
|
|
|
+ if (colExists == null || colExists == 0) {
|
|
|
+ jdbcTemplate.execute("ALTER TABLE activities ADD COLUMN require_registration TINYINT DEFAULT 1 COMMENT '是否需要报名: 1=需要, 0=直接参与'");
|
|
|
+ log.info("已添加require_registration列到activities表");
|
|
|
+ } else {
|
|
|
+ log.info("activities表require_registration列已存在,跳过");
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("检查/添加activities表require_registration列失败: {}", e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ Integer colExists = jdbcTemplate.queryForObject(
|
|
|
+ "SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'activities' AND COLUMN_NAME = 'require_checkin_review'",
|
|
|
+ Integer.class);
|
|
|
+ if (colExists == null || colExists == 0) {
|
|
|
+ jdbcTemplate.execute("ALTER TABLE activities ADD COLUMN require_checkin_review TINYINT DEFAULT 1 COMMENT '打卡是否需要审核: 1=需要, 0=直接通过'");
|
|
|
+ log.info("已添加require_checkin_review列到activities表");
|
|
|
+ } else {
|
|
|
+ log.info("activities表require_checkin_review列已存在,跳过");
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("检查/添加activities表require_checkin_review列失败: {}", e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ Integer colExists = jdbcTemplate.queryForObject(
|
|
|
+ "SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'activities' AND COLUMN_NAME = 'energy_penalty_unregistered'",
|
|
|
+ Integer.class);
|
|
|
+ if (colExists == null || colExists == 0) {
|
|
|
+ jdbcTemplate.execute("ALTER TABLE activities ADD COLUMN energy_penalty_unregistered INT DEFAULT 5 COMMENT '未报名打卡的行能量扣减值'");
|
|
|
+ log.info("已添加energy_penalty_unregistered列到activities表");
|
|
|
+ } else {
|
|
|
+ log.info("activities表energy_penalty_unregistered列已存在,跳过");
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("检查/添加activities表energy_penalty_unregistered列失败: {}", e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
// 迁移: 创建family_invitations表(家庭邀请令牌)
|
|
|
try {
|
|
|
jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS family_invitations (" +
|