Просмотр исходного кода

fix(backend): 迁移431 uk_min 冲突规避(恢复工作区未提交增强): 先设临时值再设终值, 避免逐行UPDATE撞唯一键

Xiaogang Liao 1 неделя назад
Родитель
Сommit
6f224d0e08

+ 10 - 2
cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java

@@ -3421,18 +3421,26 @@ insertSysConfigSeed("gift_membership_pay_price", "198000", "送会员商品达
      */
     private void migrateSalesAwardTierThresholds() {
         try {
+            // 唯一键 uk_min 冲突规避:先设临时值(唯一且不撞最终值),再设最终值。
+            // 单条 CASE UPDATE 逐行执行时,若直接改 100→10000 会与尚未更新的 10000(原钻石)撞 uk_min。
+            jdbcTemplate.execute(
+                    "UPDATE cf_direct_sales_tier SET min_annual_ppoints = 9000000 + id, tier_name = CONCAT('TMP', id) "
+                            + "WHERE id BETWEEN 1 AND 5 AND tier_name IN ('青铜','白银','黄金','铂金','钻石')");
             jdbcTemplate.execute(
                     "UPDATE cf_direct_sales_tier SET min_annual_ppoints = CASE id "
                             + "WHEN 1 THEN 10000 WHEN 2 THEN 50000 WHEN 3 THEN 200000 WHEN 4 THEN 500000 WHEN 5 THEN 1000000 END, "
                             + "tier_name = CASE id WHEN 1 THEN '新秀' WHEN 2 THEN '小成' WHEN 3 THEN '中富' "
                             + "WHEN 4 THEN '大成' WHEN 5 THEN '至富' END "
-                            + "WHERE id BETWEEN 1 AND 5");
+                            + "WHERE id BETWEEN 1 AND 5 AND min_annual_ppoints BETWEEN 9000001 AND 9000005");
+            jdbcTemplate.execute(
+                    "UPDATE cf_indirect_sales_tier SET min_self_ppoints = 9000000 + id, tier_name = CONCAT('TMP', id) "
+                            + "WHERE id BETWEEN 1 AND 5 AND tier_name IN ('青铜','白银','黄金','铂金','钻石')");
             jdbcTemplate.execute(
                     "UPDATE cf_indirect_sales_tier SET min_self_ppoints = CASE id "
                             + "WHEN 1 THEN 10000 WHEN 2 THEN 50000 WHEN 3 THEN 200000 WHEN 4 THEN 500000 WHEN 5 THEN 1000000 END, "
                             + "tier_name = CASE id WHEN 1 THEN '新秀' WHEN 2 THEN '小成' WHEN 3 THEN '中富' "
                             + "WHEN 4 THEN '大成' WHEN 5 THEN '至富' END "
-                            + "WHERE id BETWEEN 1 AND 5");
+                            + "WHERE id BETWEEN 1 AND 5 AND min_self_ppoints BETWEEN 9000001 AND 9000005");
             log.info("迁移431完成:销售奖档位门槛×100(分),档位名新秀/小成/中富/大成/至富");
         } catch (Exception e) {
             log.warn("迁移431失败(幂等容忍): {}", e.getMessage());