import { PrismaClient } from '@prisma/client' const prisma = new PrismaClient() async function fixWangGenerations() { try { // 1. 找到 wang@example.com 用户 const user = await prisma.user.findUnique({ where: { email: 'wang@example.com' } }) if (!user) { console.log('❌ 用户 wang@example.com 不存在') return } console.log(`✅ 找到用户: ${user.name || user.email} (ID: ${user.id})`) // 2. 获取该用户的所有家族树 const trees = await prisma.familyTree.findMany({ where: { ownerId: user.id }, include: { members: { orderBy: [ { generation: 'asc' }, { createdAt: 'asc' } ] } } }) if (trees.length === 0) { console.log('❌ 该用户没有家族树') return } for (const tree of trees) { console.log(`\n📌 家族树: ${tree.name} (ID: ${tree.id})`) console.log(` 成员数量: ${tree.members.length}`) console.log(` 当前 rootMemberId: ${tree.rootMemberId}`) // 显示当前成员的代数分布 console.log('\n 当前成员代数分布:') const generationMap = new Map() for (const member of tree.members) { if (!generationMap.has(member.generation)) { generationMap.set(member.generation, []) } generationMap.get(member.generation)!.push(member) } for (const [gen, members] of Array.from(generationMap.entries()).sort((a, b) => a[0] - b[0])) { console.log(` 第${gen}世: ${members.map(m => m.fullName).join(', ')}`) } // 3. 计算需要调整的偏移量 const minGeneration = Math.min(...tree.members.map(m => m.generation)) if (minGeneration > 1) { const offset = minGeneration - 1 console.log(`\n ⚠️ 最小代数为 ${minGeneration},需要减少 ${offset} 代`) // 4. 修复代数 console.log(' 正在修复代数...') for (const member of tree.members) { const newGeneration = member.generation - offset await prisma.familyMember.update({ where: { id: member.id }, data: { generation: newGeneration } }) console.log(` - ${member.fullName}: 第${member.generation}世 → 第${newGeneration}世`) } // 5. 更新 rootMemberId 为第1代成员 const newRootMember = tree.members.find(m => m.generation === minGeneration) if (newRootMember && tree.rootMemberId !== newRootMember.id) { await prisma.familyTree.update({ where: { id: tree.id }, data: { rootMemberId: newRootMember.id } }) console.log(` ✅ 更新 rootMemberId 为: ${newRootMember.fullName} (${newRootMember.id})`) } console.log(` ✅ 家族树 "${tree.name}" 代数修复完成`) } else { console.log(` ✅ 代数正常,无需修复`) } } console.log('\n🎉 所有数据修复完成!') } catch (error) { console.error('❌ 修复失败:', error) } finally { await prisma.$disconnect() } } fixWangGenerations()