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/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} 个已提取的剧本` : "开始提取资产")); }, ); 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 2a3bc57..9b42b68 100644 --- a/src/types/database.d.ts +++ b/src/types/database.d.ts @@ -1,4 +1,8 @@ +<<<<<<< HEAD // @db-hash 93b2462070c45c2b449e9a18c4e88763 +======= +// @db-hash 24748d4ef971381a79c720c846f83847 +>>>>>>> 796947cef173e7fe2f96e21fa8aeae23ff0fdf4a //该文件由脚本自动生成,请勿手动修改 export interface memories {