修复资产轮询
This commit is contained in:
parent
a947ce5824
commit
6c39194964
@ -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) => ({
|
||||
|
||||
@ -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));
|
||||
},
|
||||
);
|
||||
|
||||
@ -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 }));
|
||||
});
|
||||
|
||||
@ -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 }));
|
||||
},
|
||||
);
|
||||
|
||||
8
src/types/database.d.ts
vendored
8
src/types/database.d.ts
vendored
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user