From cecd24d89c4c9d629d0576b65cc21f63d4f6010a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=B8=85?= <2944435683> Date: Mon, 30 Mar 2026 19:56:11 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=89=A7=E6=9C=AC?= =?UTF-8?q?=E6=8F=90=E5=8F=96=E8=B5=84=E4=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/routes/script/extractAssets.ts | 33 +++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/routes/script/extractAssets.ts b/src/routes/script/extractAssets.ts index 16868a7..8aa7d4d 100644 --- a/src/routes/script/extractAssets.ts +++ b/src/routes/script/extractAssets.ts @@ -63,19 +63,34 @@ export default router.post( if (!scriptIds.length) return res.status(400).send(error("请先选择剧本")); const scripts = await u.db("o_script").whereIn("id", scriptIds); const intansce = u.Ai.Text("universalAi"); - const novelData = await u.db("o_novel").where("projectId", projectId).select("chapterData"); - if (!novelData || novelData.length === 0) return res.status(400).send(error("请先上传小说")); - await u.db("o_script").whereIn("id", scriptIds).update({ - extractState: 0, - }); + + // 查询已有的剧本-资产关联,找出已经提取过资产的剧本 + const existingScriptAssets = await u.db("o_scriptAssets").whereIn("scriptId", scriptIds).select("scriptId"); + const scriptIdsWithAssets = new Set(existingScriptAssets.map((sa: any) => sa.scriptId)); + // 构建 scriptId -> script 内容的映射 const scriptMap = new Map(scripts.map((s: o_script) => [s.id, s])); + // 过滤掉已成功提取过资产的剧本(extractState === 1 且有关联资产) + const filteredScriptIds = scriptIds.filter((id: number) => { + const script = scriptMap.get(id); + return !(script?.extractState === 1 && scriptIdsWithAssets.has(id)); + }); + const skippedCount = scriptIds.length - filteredScriptIds.length; + + if (!filteredScriptIds.length) { + return res.send(success("所有剧本已提取过资产,无需重复提取")); + } + + await u.db("o_script").whereIn("id", filteredScriptIds).update({ + extractState: 0, + }); + const errors: { scriptId: number; error: string }[] = []; let successCount = 0; - // 将 scriptIds 按 groupSize(默认5)分组,每组一起发给 AI - const scriptGroups = chunkArray(scriptIds, groupSize); + // 将过滤后的 scriptIds 按 groupSize(默认5)分组,每组一起发给 AI + const scriptGroups = chunkArray(filteredScriptIds, groupSize); /** 一组剧本提取完成后统一入库并建立关联 */ async function persistGroupResult(result: GroupResult) { @@ -159,9 +174,7 @@ export default router.post( // 查询当前项目已有的资产列表,提供给 AI 参考 const existingAssets = await u.db("o_assets").where("projectId", projectId).select("name", "type"); - console.log("%c Line:162 🍔 existingAssets", "background:#ea7e5c", existingAssets); const existingAssetsList = existingAssets.map((a) => `${a.name}(${a.type})`).join("、"); - console.log("%c Line:164 🍫 existingAssetsList", "background:#33a5ff", existingAssetsList); // 拼接多集剧本内容,每集用分隔标记 const scriptsContent = validScripts @@ -248,6 +261,6 @@ export default router.post( }); } - return res.send(success("开始提取资产")); + return res.send(success(skippedCount > 0 ? `开始提取资产,跳过 ${skippedCount} 个已提取的剧本` : "开始提取资产")); }, ); From 796947cef173e7fe2f96e21fa8aeae23ff0fdf4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E5=B8=85?= <2944435683> Date: Mon, 30 Mar 2026 21:14:57 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E6=95=85=E4=BA=8B=E9=AA=A8=E5=B9=B2=E5=92=8C=E6=94=B9=E7=BC=96?= =?UTF-8?q?=E7=AD=96=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router.ts | 128 ++++++++++--------- src/routes/scriptAgent/getPlanData.ts | 2 +- src/routes/scriptAgent/updateData.ts | 27 ++++ src/routes/setting/vendorConfig/modelTest.ts | 1 + src/types/database.d.ts | 61 +-------- 5 files changed, 100 insertions(+), 119 deletions(-) create mode 100644 src/routes/scriptAgent/updateData.ts diff --git a/src/router.ts b/src/router.ts index 5182519..efdce9e 100644 --- a/src/router.ts +++ b/src/router.ts @@ -1,4 +1,4 @@ -// @routes-hash 845d6aff66aab1f458a9f08f4f2eed34 +// @routes-hash fc02af7340ae26f567792eda4cde50a6 import { Express } from "express"; import route1 from "./routes/agents/clearMemory"; @@ -88,37 +88,38 @@ import route84 from "./routes/script/pollScriptAssets"; import route85 from "./routes/script/updateScript"; import route86 from "./routes/scriptAgent/getPlanData"; import route87 from "./routes/scriptAgent/setPlanData"; -import route88 from "./routes/setting/about/checkUpdate"; -import route89 from "./routes/setting/about/downloadApp"; -import route90 from "./routes/setting/agentDeploy/agentSetKey"; -import route91 from "./routes/setting/agentDeploy/deployAgentModel"; -import route92 from "./routes/setting/agentDeploy/getAgentDeploy"; -import route93 from "./routes/setting/dbConfig/clearData"; -import route94 from "./routes/setting/dev/getSwitchAiDevTool"; -import route95 from "./routes/setting/dev/updateSwitchAiDevTool"; -import route96 from "./routes/setting/fileManagement/openFolder"; -import route97 from "./routes/setting/getTextModel"; -import route98 from "./routes/setting/loginConfig/getUser"; -import route99 from "./routes/setting/loginConfig/updateUserPwd"; -import route100 from "./routes/setting/memoryConfig/delAllMemory"; -import route101 from "./routes/setting/memoryConfig/getMemory"; -import route102 from "./routes/setting/memoryConfig/sureMemory"; -import route103 from "./routes/setting/promptManage/getPrompt"; -import route104 from "./routes/setting/promptManage/updatePrompt"; -import route105 from "./routes/setting/skillManagement/getSkillContent"; -import route106 from "./routes/setting/skillManagement/getSkillList"; -import route107 from "./routes/setting/skillManagement/saveSkillContent"; -import route108 from "./routes/setting/vendorConfig/addVendor"; -import route109 from "./routes/setting/vendorConfig/deleteVendor"; -import route110 from "./routes/setting/vendorConfig/getVendorList"; -import route111 from "./routes/setting/vendorConfig/modelTest"; -import route112 from "./routes/setting/vendorConfig/updateCode"; -import route113 from "./routes/setting/vendorConfig/updateVendor"; -import route114 from "./routes/task/getProject"; -import route115 from "./routes/task/getTaskApi"; -import route116 from "./routes/task/getTaskCategories"; -import route117 from "./routes/task/taskDetails"; -import route118 from "./routes/test/test"; +import route88 from "./routes/scriptAgent/updateData"; +import route89 from "./routes/setting/about/checkUpdate"; +import route90 from "./routes/setting/about/downloadApp"; +import route91 from "./routes/setting/agentDeploy/agentSetKey"; +import route92 from "./routes/setting/agentDeploy/deployAgentModel"; +import route93 from "./routes/setting/agentDeploy/getAgentDeploy"; +import route94 from "./routes/setting/dbConfig/clearData"; +import route95 from "./routes/setting/dev/getSwitchAiDevTool"; +import route96 from "./routes/setting/dev/updateSwitchAiDevTool"; +import route97 from "./routes/setting/fileManagement/openFolder"; +import route98 from "./routes/setting/getTextModel"; +import route99 from "./routes/setting/loginConfig/getUser"; +import route100 from "./routes/setting/loginConfig/updateUserPwd"; +import route101 from "./routes/setting/memoryConfig/delAllMemory"; +import route102 from "./routes/setting/memoryConfig/getMemory"; +import route103 from "./routes/setting/memoryConfig/sureMemory"; +import route104 from "./routes/setting/promptManage/getPrompt"; +import route105 from "./routes/setting/promptManage/updatePrompt"; +import route106 from "./routes/setting/skillManagement/getSkillContent"; +import route107 from "./routes/setting/skillManagement/getSkillList"; +import route108 from "./routes/setting/skillManagement/saveSkillContent"; +import route109 from "./routes/setting/vendorConfig/addVendor"; +import route110 from "./routes/setting/vendorConfig/deleteVendor"; +import route111 from "./routes/setting/vendorConfig/getVendorList"; +import route112 from "./routes/setting/vendorConfig/modelTest"; +import route113 from "./routes/setting/vendorConfig/updateCode"; +import route114 from "./routes/setting/vendorConfig/updateVendor"; +import route115 from "./routes/task/getProject"; +import route116 from "./routes/task/getTaskApi"; +import route117 from "./routes/task/getTaskCategories"; +import route118 from "./routes/task/taskDetails"; +import route119 from "./routes/test/test"; export default async (app: Express) => { app.use("/api/agents/clearMemory", route1); @@ -208,35 +209,36 @@ export default async (app: Express) => { app.use("/api/script/updateScript", route85); app.use("/api/scriptAgent/getPlanData", route86); app.use("/api/scriptAgent/setPlanData", route87); - app.use("/api/setting/about/checkUpdate", route88); - app.use("/api/setting/about/downloadApp", route89); - app.use("/api/setting/agentDeploy/agentSetKey", route90); - app.use("/api/setting/agentDeploy/deployAgentModel", route91); - app.use("/api/setting/agentDeploy/getAgentDeploy", route92); - app.use("/api/setting/dbConfig/clearData", route93); - app.use("/api/setting/dev/getSwitchAiDevTool", route94); - app.use("/api/setting/dev/updateSwitchAiDevTool", route95); - app.use("/api/setting/fileManagement/openFolder", route96); - app.use("/api/setting/getTextModel", route97); - app.use("/api/setting/loginConfig/getUser", route98); - app.use("/api/setting/loginConfig/updateUserPwd", route99); - app.use("/api/setting/memoryConfig/delAllMemory", route100); - app.use("/api/setting/memoryConfig/getMemory", route101); - app.use("/api/setting/memoryConfig/sureMemory", route102); - app.use("/api/setting/promptManage/getPrompt", route103); - app.use("/api/setting/promptManage/updatePrompt", route104); - app.use("/api/setting/skillManagement/getSkillContent", route105); - app.use("/api/setting/skillManagement/getSkillList", route106); - app.use("/api/setting/skillManagement/saveSkillContent", route107); - app.use("/api/setting/vendorConfig/addVendor", route108); - app.use("/api/setting/vendorConfig/deleteVendor", route109); - app.use("/api/setting/vendorConfig/getVendorList", route110); - app.use("/api/setting/vendorConfig/modelTest", route111); - app.use("/api/setting/vendorConfig/updateCode", route112); - app.use("/api/setting/vendorConfig/updateVendor", route113); - app.use("/api/task/getProject", route114); - app.use("/api/task/getTaskApi", route115); - app.use("/api/task/getTaskCategories", route116); - app.use("/api/task/taskDetails", route117); - app.use("/api/test/test", route118); + app.use("/api/scriptAgent/updateData", route88); + app.use("/api/setting/about/checkUpdate", route89); + app.use("/api/setting/about/downloadApp", route90); + app.use("/api/setting/agentDeploy/agentSetKey", route91); + app.use("/api/setting/agentDeploy/deployAgentModel", route92); + app.use("/api/setting/agentDeploy/getAgentDeploy", route93); + app.use("/api/setting/dbConfig/clearData", route94); + app.use("/api/setting/dev/getSwitchAiDevTool", route95); + app.use("/api/setting/dev/updateSwitchAiDevTool", route96); + app.use("/api/setting/fileManagement/openFolder", route97); + app.use("/api/setting/getTextModel", route98); + app.use("/api/setting/loginConfig/getUser", route99); + app.use("/api/setting/loginConfig/updateUserPwd", route100); + app.use("/api/setting/memoryConfig/delAllMemory", route101); + app.use("/api/setting/memoryConfig/getMemory", route102); + app.use("/api/setting/memoryConfig/sureMemory", route103); + app.use("/api/setting/promptManage/getPrompt", route104); + app.use("/api/setting/promptManage/updatePrompt", route105); + app.use("/api/setting/skillManagement/getSkillContent", route106); + app.use("/api/setting/skillManagement/getSkillList", route107); + app.use("/api/setting/skillManagement/saveSkillContent", route108); + app.use("/api/setting/vendorConfig/addVendor", route109); + app.use("/api/setting/vendorConfig/deleteVendor", route110); + app.use("/api/setting/vendorConfig/getVendorList", route111); + app.use("/api/setting/vendorConfig/modelTest", route112); + app.use("/api/setting/vendorConfig/updateCode", route113); + app.use("/api/setting/vendorConfig/updateVendor", route114); + app.use("/api/task/getProject", route115); + app.use("/api/task/getTaskApi", route116); + app.use("/api/task/getTaskCategories", route117); + app.use("/api/task/taskDetails", route118); + app.use("/api/test/test", route119); } diff --git a/src/routes/scriptAgent/getPlanData.ts b/src/routes/scriptAgent/getPlanData.ts index 7f612ff..608af9b 100644 --- a/src/routes/scriptAgent/getPlanData.ts +++ b/src/routes/scriptAgent/getPlanData.ts @@ -34,6 +34,6 @@ export default router.post( const data = JSON.parse(row.data ?? "{}"); data.script = await u.db("o_script").where({ projectId }).select("id", "name", "content"); - res.status(200).send(success(data)); + res.status(200).send(success({ data, id: row.id })); }, ); diff --git a/src/routes/scriptAgent/updateData.ts b/src/routes/scriptAgent/updateData.ts new file mode 100644 index 0000000..5e5d3f5 --- /dev/null +++ b/src/routes/scriptAgent/updateData.ts @@ -0,0 +1,27 @@ +import express from "express"; +import { success } from "@/lib/responseFormat"; +import u from "@/utils"; +import { z } from "zod"; +import { validateFields } from "@/middleware/middleware"; +const router = express.Router(); + +export default router.post( + "/", + validateFields({ + id: z.number(), + data: z.object({ + storySkeleton: z.string(), + adaptationStrategy: z.string(), + }), + }), + async (req, res) => { + const { id, data } = req.body; + await u + .db("o_agentWorkData") + .where({ id: id }) + .update({ + data: JSON.stringify(data), + }); + res.status(200).send(success("更新成功")); + }, +); diff --git a/src/routes/setting/vendorConfig/modelTest.ts b/src/routes/setting/vendorConfig/modelTest.ts index 495a24e..cc8749e 100644 --- a/src/routes/setting/vendorConfig/modelTest.ts +++ b/src/routes/setting/vendorConfig/modelTest.ts @@ -78,6 +78,7 @@ export default router.post( } res.status(200).send(success(fullResponse)); } else { + console.log("%c Line:83 🥔", "background:#e41a6a"); const aiTypeFn = { image: "Image", video: "Video", diff --git a/src/types/database.d.ts b/src/types/database.d.ts index 9accb03..ab3e7f9 100644 --- a/src/types/database.d.ts +++ b/src/types/database.d.ts @@ -1,62 +1,13 @@ -// @db-hash ea0c51ccb8c93a2f019139db9621721e +// @db-hash 24748d4ef971381a79c720c846f83847 //该文件由脚本自动生成,请勿手动修改 -export interface _o_project_old_20260330 { - 'artStyle'?: string | null; - 'createTime'?: number | null; - 'id'?: number | null; - 'intro'?: string | null; - 'name'?: string | null; - 'projectType'?: string | null; - 'type'?: string | null; - 'userId'?: number | null; - 'videoRatio'?: string | null; -} -export interface _o_storyboard_old_20260325 { - 'camera'?: string | null; - 'createTime'?: number | null; - 'description'?: string | null; - 'duration'?: string | null; - 'filePath'?: string | null; - 'frameMode'?: string | null; - 'id'?: number; - 'lines'?: string | null; - 'mode'?: string | null; - 'model'?: string | null; - 'prompt'?: string | null; - 'reason'?: string | null; - 'resolution'?: string | null; - 'scriptId'?: number | null; - 'sound'?: string | null; - 'state'?: string | null; - 'title'?: string | null; -} -export interface _o_storyboard_old_20260330 { - 'camera'?: string | null; - 'createTime'?: number | null; - 'description'?: string | null; - 'duration'?: string | null; - 'filePath'?: string | null; - 'frameMode'?: string | null; - 'id'?: number; - 'index'?: string | null; - 'lines'?: string | null; - 'mode'?: string | null; - 'model'?: string | null; - 'prompt'?: string | null; - 'reason'?: string | null; - 'resolution'?: string | null; - 'scriptId'?: number | null; - 'sound'?: string | null; - 'state'?: string | null; - 'title'?: string | null; -} export interface memories { 'content': string; 'createTime': number; 'embedding'?: string | null; 'id'?: string; 'isolationKey': string; + 'name'?: string | null; 'relatedMessageIds'?: string | null; 'role'?: string | null; 'summarized'?: number | null; @@ -96,6 +47,7 @@ export interface o_assets { 'name'?: string | null; 'projectId'?: number | null; 'prompt'?: string | null; + 'promptState'?: string | null; 'remark'?: string | null; 'scriptId'?: number | null; 'startTime'?: number | null; @@ -177,6 +129,8 @@ export interface o_prompt { export interface o_script { 'content'?: string | null; 'createTime'?: number | null; + 'errorReason'?: string | null; + 'extractState'?: number | null; 'id'?: number; 'name'?: string | null; 'projectId'?: number | null; @@ -213,7 +167,7 @@ export interface o_storyboard { 'filePath'?: string | null; 'frameMode'?: string | null; 'id'?: number; - 'index'?: string | null; + 'index'?: number | null; 'lines'?: string | null; 'mode'?: string | null; 'model'?: string | null; @@ -279,9 +233,6 @@ export interface o_videoConfig { } export interface DB { - "_o_project_old_20260330": _o_project_old_20260330; - "_o_storyboard_old_20260325": _o_storyboard_old_20260325; - "_o_storyboard_old_20260330": _o_storyboard_old_20260330; "memories": memories; "o_agentDeploy": o_agentDeploy; "o_agentWorkData": o_agentWorkData;