| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- const { PrismaClient } = require('@prisma/client');
- const prisma = new PrismaClient();
- async function testStatus() {
- console.log('=== 测试双阶段状态管理 ===\n');
- // 查询最新的书籍
- const book = await prisma.book.findFirst({
- orderBy: { id: 'desc' },
- include: {
- chapters: {
- orderBy: [{ level: 'asc' }, { number: 'asc' }]
- }
- }
- });
- if (!book) {
- console.log('❌ 未找到测试书籍');
- return;
- }
- console.log(`📖 书籍: ${book.title} (id=${book.id})`);
- console.log(`状态: ${book.status}\n`);
- // 统计各级节点
- const level1Chapters = book.chapters.filter(c => c.level === 1);
- const level2Chapters = book.chapters.filter(c => c.level === 2);
- const level3Chapters = book.chapters.filter(c => c.level === 3);
- console.log(`📊 统计:`);
- console.log(` 章(level=1): ${level1Chapters.length} 个`);
- console.log(` 节(level=2): ${level2Chapters.length} 个`);
- console.log(` 小节(level=3): ${level3Chapters.length} 个\n`);
- // 检查status字段(大纲状态)
- console.log(`📝 大纲状态 (status):`);
- const statusStats = {
- pending: book.chapters.filter(c => c.status === 'pending').length,
- completed: book.chapters.filter(c => c.status === 'completed').length,
- failed: book.chapters.filter(c => c.status === 'failed').length,
- };
- console.log(` completed: ${statusStats.completed}`);
- console.log(` pending: ${statusStats.pending}`);
- console.log(` failed: ${statusStats.failed}\n`);
- // 检查contentStatus字段(内容状态)
- console.log(`📄 内容状态 (contentStatus):`);
- const contentStats = {
- null: book.chapters.filter(c => c.contentStatus === null).length,
- pending: book.chapters.filter(c => c.contentStatus === 'pending').length,
- generating: book.chapters.filter(c => c.contentStatus === 'generating').length,
- completed: book.chapters.filter(c => c.contentStatus === 'completed').length,
- failed: book.chapters.filter(c => c.contentStatus === 'failed').length,
- };
- console.log(` null (未开始): ${contentStats['null']}`);
- console.log(` pending: ${contentStats.pending}`);
- console.log(` generating: ${contentStats.generating}`);
- console.log(` completed: ${contentStats.completed}`);
- console.log(` failed: ${contentStats.failed}\n`);
- // 显示前2个小节的详细信息
- if (level3Chapters.length > 0) {
- console.log(`🔍 示例小节 (前2个):`);
- level3Chapters.slice(0, 2).forEach((c, i) => {
- console.log(`\n ${i + 1}. ${c.title}`);
- console.log(` level: ${c.level}`);
- console.log(` status (大纲): ${c.status}`);
- console.log(` contentStatus (内容): ${c.contentStatus || 'null'}`);
- console.log(` content: ${c.content ? `有 (${c.wordCount}字)` : '无'}`);
- });
- }
- // 验证断点续传逻辑
- console.log(`\n✅ 断点续传验证:`);
- const leafNodes = level3Chapters;
- const completedLeafNodes = leafNodes.filter(c => c.contentStatus === 'completed');
- const pendingLeafNodes = leafNodes.filter(c => c.contentStatus !== 'completed');
-
- console.log(` 叶节点总数: ${leafNodes.length}`);
- console.log(` 已完成内容: ${completedLeafNodes.length} (应跳过)`);
- console.log(` 待生成内容: ${pendingLeafNodes.length} (应生成)`);
-
- if (completedLeafNodes.length > 0 && pendingLeafNodes.length > 0) {
- console.log(` ✅ 断点续传逻辑正确:能区分已完成和待生成`);
- } else if (completedLeafNodes.length === 0 && pendingLeafNodes.length > 0) {
- console.log(` ℹ️ 内容还未开始生成`);
- }
- await prisma.$disconnect();
- }
- testStatus().catch(console.error);
|