|
@@ -0,0 +1,92 @@
|
|
|
|
|
+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);
|