// 轮询 book 43 状态直到完成或失败 const { PrismaClient } = require('@prisma/client'); const p = new PrismaClient(); const POLL_INTERVAL = 30 * 1000; // 30s const MAX_WAIT = 30 * 60 * 1000; // 30 分钟 (async () => { const start = Date.now(); let lastSnapshot = ''; while (Date.now() - start < MAX_WAIT) { await new Promise(r => setTimeout(r, POLL_INTERVAL)); const elapsed = Math.round((Date.now() - start) / 1000); const b = await p.book.findUnique({ where: { id: 43 }, select: { id: true, genStage: true, failedStage: true, errorMsg: true, progress: true, totalChapters: true, updatedAt: true }, }); const chapters = await p.bookChapter.count({ where: { bookId: 43 } }); const completedChapters = await p.bookChapter.count({ where: { bookId: 43, genStage: { in: ['content_completed', 'audio_completed', 'video_completed'] } }, }); const snapshot = `${b.genStage}|${b.progress}|${chapters}|${completedChapters}|${b.failedStage || ''}|${b.errorMsg || ''}`; if (snapshot !== lastSnapshot) { console.log(`[${elapsed}s] ${snapshot}`); lastSnapshot = snapshot; } if (b.genStage === 'content_completed' || b.genStage === 'audio_completed' || b.genStage === 'video_completed') { console.log(`\n✅ 成功完成!genStage=${b.genStage}, progress=${b.progress}, chapters=${chapters}/${completedChapters} 已完成`); break; } if (b.genStage === 'failed') { console.log(`\n❌ 生成失败`); console.log('failedStage:', b.failedStage); console.log('errorMsg:', b.errorMsg); break; } } await p.$disconnect(); process.exit(0); })();