/** * 全量族重算(一次性维护脚本): * 逐族调用 FamilyRecomputeService.recomputeFamily,刷新物化字段 * (并集尺码表/包装规则 + 五维价格矩阵,含选项组词表序排序)。 * autoManaged=false 的族内部只置 stale,不会覆盖人工物化字段。 * * 运行:pnpm --filter @inkreach/api recompute:families */ import { PrismaService } from '../src/prisma/prisma.service'; import { FamilyRecomputeService } from '../src/product-families/family-recompute.service'; async function main() { const prisma = new PrismaService(); await prisma.onModuleInit(); const recompute = new FamilyRecomputeService(prisma); const families = await prisma.productFamily.findMany({ select: { id: true }, orderBy: { id: 'asc' }, }); let ok = 0; let failed = 0; for (const { id } of families) { try { await recompute.recomputeFamily(id); ok++; } catch (error) { failed++; console.error(`family ${id} recompute failed: ${String(error)}`); } } console.log(`[recompute:families] total=${families.length} ok=${ok} failed=${failed}`); await prisma.onModuleDestroy(); if (failed > 0) process.exit(1); } main().catch((error) => { console.error(error); process.exit(1); });