video-flow-toon/src/utils/taskRecord.ts
2026-03-19 20:00:24 +08:00

61 lines
1.4 KiB
TypeScript

import db from "@/utils/db";
const taskStateMap = {
"0": "进行中",
"1": "已完成",
"-1": "生成失败",
};
/**
* 记录任务并返回结束函数
* @param projectId 项目 ID
* @param taskClass 任务分类
* @param modelName 模型名称
* @param opts 可选项:关联对象、任务描
*/
export default async function taskRecord(
projectId: number,
taskClass: string,
modelName: string,
opts: {
describe?: string;
content?: any;
} = {},
) {
const { content, describe = "" } = opts;
let opteorContent: string | undefined;
if (content === undefined || content === null) {
opteorContent = undefined;
} else if (typeof content === "string") {
opteorContent = content;
} else if (typeof content === "function") {
throw new Error("不支持的类型");
} else {
try {
opteorContent = JSON.stringify(content);
} catch (e) {
opteorContent = content.toString();
}
}
const [id] = await db("o_tasks").insert({
projectId,
taskClass,
relatedObjects: opteorContent,
model: modelName,
describe,
state: taskStateMap[0],
startTime: Date.now(),
});
/** 任务成功时调用 done(1),失败时调用 done(-1, '原因') */
return async function done(state: 1 | -1, reason?: string) {
await db("o_tasks")
.where("id", id)
.update({
state: taskStateMap[state],
reason: state === -1 ? (reason ?? "") : null,
});
};
}