|
@@ -7346,5 +7346,54 @@ private void runMigration100() {
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
log.warn("创建five_dimension_self_checks表失败: {}", e.getMessage());
|
|
log.warn("创建five_dimension_self_checks表失败: {}", e.getMessage());
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // 迁移147: virtual_goods_config 插入会员年卡道具映射(虚拟支付上线准备)
|
|
|
|
|
+ try {
|
|
|
|
|
+ jdbcTemplate.execute("INSERT IGNORE INTO virtual_goods_config (goods_type, biz_key, product_id, goods_name, status) " +
|
|
|
|
|
+ "VALUES ('MEMBERSHIP', 'member1314', 'TBD', '会员年卡', 1)");
|
|
|
|
|
+ log.info("已插入会员年卡道具映射: member1314");
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.warn("插入会员年卡道具映射失败: {}", e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 迁移148: 修复 membership_levels 表重复行 + 添加 UNIQUE KEY uk_level_code
|
|
|
|
|
+ // 原因:早期建表缺少 UNIQUE KEY uk_level_code,加上 INSERT IGNORE 在无唯一键时反复插入,
|
|
|
|
|
+ // 导致生产环境 FREE/FAMILY/PROVIDER 三个等级各 69 行重复,
|
|
|
|
|
+ // MembershipService.createOrder() 调用 selectOne(level_code) 触发 TooManyResultsException。
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 1) 删除重复行:保留每个 level_code 最早插入的(id 最小),其余删除
|
|
|
|
|
+ int deleted = jdbcTemplate.update(
|
|
|
|
|
+ "DELETE m1 FROM membership_levels m1 " +
|
|
|
|
|
+ "INNER JOIN membership_levels m2 " +
|
|
|
|
|
+ "ON m1.level_code = m2.level_code AND m1.id > m2.id");
|
|
|
|
|
+ log.info("已清理 membership_levels 重复行: 删除{}条", deleted);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.warn("清理 membership_levels 重复行失败: {}", e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 2) 添加 UNIQUE KEY(幂等:先查再 ADD)
|
|
|
|
|
+ Integer idxCount = jdbcTemplate.queryForObject(
|
|
|
|
|
+ "SELECT COUNT(*) FROM information_schema.statistics " +
|
|
|
|
|
+ "WHERE table_schema = DATABASE() AND table_name = 'membership_levels' AND index_name = 'uk_level_code'",
|
|
|
|
|
+ Integer.class);
|
|
|
|
|
+ if (idxCount == null || idxCount == 0) {
|
|
|
|
|
+ jdbcTemplate.execute("ALTER TABLE membership_levels ADD UNIQUE KEY uk_level_code (level_code)");
|
|
|
|
|
+ log.info("已添加 uk_level_code 唯一索引到 membership_levels 表");
|
|
|
|
|
+ } else {
|
|
|
|
|
+ log.info("uk_level_code 唯一索引已存在,跳过添加");
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.warn("添加 uk_level_code 唯一索引失败: {}", e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 迁移149: payment_orders表添加user_coupon_id列(VirtualPayTimeoutTask selectList 触发 Unknown column)
|
|
|
|
|
+ // 原因:旧库建表时缺少此列,entity PaymentOrder 已声明 userCouponId,导致 MyBatis-Plus 全列查询失败。
|
|
|
|
|
+ // 本地与远端新库已有,本迁移对它们幂等。
|
|
|
|
|
+ try {
|
|
|
|
|
+ ensureColumn("payment_orders", "user_coupon_id", "BIGINT COMMENT '使用的用户优惠券ID'");
|
|
|
|
|
+ log.info("已确保payment_orders.user_coupon_id列存在");
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.warn("添加payment_orders.user_coupon_id列失败: {}", e.getMessage());
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|