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

feat(family): 存量家庭名回填迁移(幂等)

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

+ 16 - 0
cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java

@@ -3387,6 +3387,8 @@ insertSysConfigSeed("gift_membership_pay_price", "198000", "送会员商品达
         migrateProductsPurchasePriceToCents();
         migrateProductsPurchasePriceToCents();
         // 迁移431: 销售奖档位门槛 ×100(元→分)+ 档位名改为 新秀/小成/中富/大成/至富
         // 迁移431: 销售奖档位门槛 ×100(元→分)+ 档位名改为 新秀/小成/中富/大成/至富
         migrateSalesAwardTierThresholds();
         migrateSalesAwardTierThresholds();
+        // 迁移429(家庭): 存量家庭名回填(家庭主账号已填真实姓名但家庭名仍为旧规则 → 按新规则回填「XX家庭」;DML,无 schema 变更,幂等)
+        migrateFamilyNameBackfill();
     }
     }
 
 
     /**
     /**
@@ -3437,6 +3439,20 @@ insertSysConfigSeed("gift_membership_pay_price", "198000", "送会员商品达
         }
         }
     }
     }
 
 
+    /** 迁移:家庭主账号已填真实姓名但家庭名仍为旧规则 → 回填为「XX家庭」(幂等,重复执行无副作用) */
+    private void migrateFamilyNameBackfill() {
+        String sql = "UPDATE families f JOIN users u ON u.id = f.creator_id " +
+                "SET f.name = CONCAT(TRIM(u.real_name), '家庭'), f.updated_at = NOW() " +
+                "WHERE u.real_name IS NOT NULL AND TRIM(u.real_name) <> '' " +
+                "AND f.name <> CONCAT(TRIM(u.real_name), '家庭')";
+        try {
+            int n = jdbcTemplate.update(sql);
+            log.info("迁移[家庭名回填XX家庭] 影响行数={}", n);
+        } catch (Exception e) {
+            log.warn("迁移[家庭名回填XX家庭] 执行异常: {}", e.getMessage());
+        }
+    }
+
     /**
     /**
      * 迁移421: activities 表新增 audience_scope / audience_type 两列(A2)
      * 迁移421: activities 表新增 audience_scope / audience_type 两列(A2)
      * - audience_scope: all(默认,全部用户可参加) / member_only(仅会员可参加,后端硬门禁)
      * - audience_scope: all(默认,全部用户可参加) / member_only(仅会员可参加,后端硬门禁)

+ 1 - 1
cfc-backend/src/main/java/com/etotem/cfc/service/FamilyAdminOverviewService.java

@@ -104,7 +104,7 @@ public class FamilyAdminOverviewService {
             TaskItemVO vo = new TaskItemVO();
             TaskItemVO vo = new TaskItemVO();
             vo.setId(t.getId()); vo.setTitle(t.getTitle()); vo.setStatus(t.getStatus());
             vo.setId(t.getId()); vo.setTitle(t.getTitle()); vo.setStatus(t.getStatus());
             vo.setCategory(t.getCategory()); vo.setPoints(t.getPoints()); vo.setDeadline(t.getDeadline());
             vo.setCategory(t.getCategory()); vo.setPoints(t.getPoints()); vo.setDeadline(t.getDeadline());
-            vo.setChildId(t.getChildId()); vo.setExecutorType(t.getExecutorType());
+            vo.setChildId(t.getMemberId()); vo.setExecutorType(t.getExecutorType());
             vo.setTaskType(t.getTaskType()); vo.setSourceType(t.getSourceType());
             vo.setTaskType(t.getTaskType()); vo.setSourceType(t.getSourceType());
             vo.setCreatedAt(t.getCreatedAt()); vo.setCompletedAt(t.getCompletedAt());
             vo.setCreatedAt(t.getCreatedAt()); vo.setCompletedAt(t.getCompletedAt());
             out.getRecords().add(vo);
             out.getRecords().add(vo);