diff --git a/src/routes/assets/pollingImageAssets.ts b/src/routes/assets/pollingImageAssets.ts index df8a83a..428cb6a 100644 --- a/src/routes/assets/pollingImageAssets.ts +++ b/src/routes/assets/pollingImageAssets.ts @@ -14,8 +14,9 @@ export default router.post( const { ids } = req.body; const data = await u .db("o_assets") - .leftJoin("o_image", "o_assets.id", "o_image.assetsId") + .leftJoin("o_image", "o_assets.imageId", "o_image.id") .whereIn("o_assets.id", ids) + .whereNot("o_image.state", "生成中") .select("o_image.state", "o_assets.id", "o_image.filePath"); const result = await Promise.all( data.map(async (item: any) => ({ diff --git a/src/routes/assets/pollingPromptAssets.ts b/src/routes/assets/pollingPromptAssets.ts index 40a285a..61efdd1 100644 --- a/src/routes/assets/pollingPromptAssets.ts +++ b/src/routes/assets/pollingPromptAssets.ts @@ -12,7 +12,7 @@ export default router.post( }), async (req, res) => { const { ids } = req.body; - const data = await u.db("o_assets").whereIn("id", ids).select("*"); + const data = await u.db("o_assets").whereIn("id", ids).whereNot("promptState", "生成中").select("*"); res.status(200).send(success(data)); }, ); diff --git a/src/routes/assetsGenerate/batchGenerateImageAssets.ts b/src/routes/assetsGenerate/batchGenerateImageAssets.ts index 16fc998..1fce062 100644 --- a/src/routes/assetsGenerate/batchGenerateImageAssets.ts +++ b/src/routes/assetsGenerate/batchGenerateImageAssets.ts @@ -88,21 +88,18 @@ export default router.post("/", validateFields(requestSchema), async (req, res) state: "生成中", assetsId: item.id, }); + await u.db("o_assets").where("id", item.id).update({ imageId }); totalNovelId.push(imageId); } - // 3. 按并发数限制并发生成 + // 3. 后台异步并发生成,不阻塞响应 const limit = pLimit(concurrentCount ?? 1); - const results: { assetsId: number; success: boolean; path?: string; message?: string }[] = []; const tasks = items.map((item: { id: number; type: string; name: string; prompt: string; base64: string | null | undefined }, index: number) => limit(async () => { const imageId = totalNovelId[index]; const cfg = assetTypeConfig[item.type as AssetType]; - if (!cfg) { - results.push({ assetsId: item.id, success: false, message: `不支持的类型: ${item.type}` }); - return; - } + if (!cfg) return; await u.db("o_assets").where("id", item.id).update({ imageId }); @@ -126,10 +123,7 @@ export default router.post("/", validateFields(requestSchema), async (req, res) aiImage.save(imagePath); const imageData = await u.db("o_image").where("id", imageId).select("*").first(); - if (!imageData) { - results.push({ assetsId: item.id, success: false, message: "资产已被删除" }); - return; - } + if (!imageData) return; await u .db("o_image") @@ -142,28 +136,15 @@ export default router.post("/", validateFields(requestSchema), async (req, res) resolution, }); - const path = await u.oss.getFileUrl(imagePath); await u.db("o_assets").where("id", item.id).update({ imageId }); - - results.push({ assetsId: item.id, success: true, path }); } catch (e: any) { await u.db("o_image").where("id", imageId).update({ state: "生成失败" }); - results.push({ assetsId: item.id, success: false, message: u.error(e).message || "图片生成失败" }); } }), ); - await Promise.all(tasks); + // 后台执行,不等待结果 + Promise.all(tasks).catch(() => {}); - const successCount = results.filter((r) => r.success).length; - const failCount = results.filter((r) => !r.success).length; - - return res.status(200).send( - success({ - total: items.length, - successCount, - failCount, - results, - }), - ); + return res.status(200).send(success({ total: items.length })); }); diff --git a/src/routes/assetsGenerate/batchPolishAssetsPrompt.ts b/src/routes/assetsGenerate/batchPolishAssetsPrompt.ts index adaef73..422bb43 100644 --- a/src/routes/assetsGenerate/batchPolishAssetsPrompt.ts +++ b/src/routes/assetsGenerate/batchPolishAssetsPrompt.ts @@ -99,17 +99,13 @@ export default router.post( const assetsIds = items.map((item: { assetsId: number }) => item.assetsId); await u.db("o_assets").whereIn("id", assetsIds).update({ promptState: "生成中" }); - // 按并发数限制并发生成 + // 后台异步并发生成,不阻塞响应 const limit = pLimit(concurrentCount ?? 1); - const results: { assetsId: number; success: boolean; prompt?: string; message?: string }[] = []; const tasks = items.map((item: { assetsId: number; type: string; name: string; describe: string }) => limit(async () => { const config = typeConfig[item.type]; - if (!config) { - results.push({ assetsId: item.assetsId, success: false, message: "不支持的类型" }); - return; - } + if (!config) return; findItemByName(result, item.name, config.itemType); @@ -137,25 +133,20 @@ export default router.post( })) as any; if (!_output) { - results.push({ assetsId: item.assetsId, success: false, message: "生成结果为空" }); await u.db("o_assets").where("id", item.assetsId).update({ promptState: "生成失败" }); return; } await u.db("o_assets").where("id", item.assetsId).update({ prompt: _output, promptState: "已完成" }); - results.push({ assetsId: item.assetsId, success: true, prompt: _output }); } catch (e: any) { await u.db("o_assets").where("id", item.assetsId).update({ promptState: "生成失败" }); - results.push({ assetsId: item.assetsId, success: false, message: e?.data?.error?.message ?? e?.message ?? "生成失败" }); } }), ); - await Promise.all(tasks); + // 后台执行,不等待结果 + Promise.all(tasks).catch(() => {}); - const successCount = results.filter((r) => r.success).length; - const failCount = results.filter((r) => !r.success).length; - - return res.status(200).send(success({ total: items.length, successCount, failCount, results })); + return res.status(200).send(success({ total: items.length })); }, ); diff --git a/src/types/database.d.ts b/src/types/database.d.ts index eed488e..eea92c2 100644 --- a/src/types/database.d.ts +++ b/src/types/database.d.ts @@ -1,4 +1,4 @@ -// @db-hash 8e5f2b7a28d4494b291d802b055b6399 +// @db-hash 05ecfd675f848d88631c1a546996caea //该文件由脚本自动生成,请勿手动修改 export interface memories { @@ -7,7 +7,6 @@ export interface memories { 'embedding'?: string | null; 'id'?: string; 'isolationKey': string; - 'name'?: string | null; 'relatedMessageIds'?: string | null; 'role'?: string | null; 'summarized'?: number | null; @@ -47,6 +46,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; @@ -121,11 +121,13 @@ export interface o_project { export interface o_prompt { 'id'?: number; 'name'?: string | null; - 'rompt'?: string | null; + 'prompt'?: string | null; } export interface o_script { 'content'?: string | null; 'createTime'?: number | null; + 'errorReason'?: string | null; + 'extractState'?: number | null; 'id'?: number; 'name'?: string | null; 'projectId'?: number | null;