修正获取skill

This commit is contained in:
ACT丶流星雨 2026-03-26 22:41:26 +08:00
parent b32017d669
commit 78f085709b
2 changed files with 58 additions and 39 deletions

View File

@ -28,43 +28,55 @@ export default router.post(
if (search) {
const searchPattern = `%${search}%`;
const whereBuilder = (builder: any) => {
builder.where("name", "like", searchPattern).orWhere("path", "like", searchPattern).orWhere("description", "like", searchPattern);
builder
.where("name", "like", searchPattern)
.orWhere("path", "like", searchPattern)
.orWhere("description", "like", searchPattern);
};
query = query.where(whereBuilder);
countQuery = countQuery.where(whereBuilder);
}
// 查询总数
const [{ count }]: any = await countQuery.count("* as count");
// 查询列表
// type 筛选条件
if (type) {
query = query.where("type", type);
countQuery = countQuery.where("type", type);
}
// attributions 筛选条件
if (attributions && attributions.length > 0) {
query = query.whereIn("id", function () {
this.select("skillId").from("o_skillAttribution").whereIn("attribution", attributions);
});
countQuery = countQuery.whereIn("id", function () {
this.select("skillId").from("o_skillAttribution").whereIn("attribution", attributions);
});
const attributionSubQuery = function (this: any) {
this.select("skillId")
.from("o_skillAttribution")
.whereIn("attribution", attributions);
};
query = query.whereIn("id", attributionSubQuery);
countQuery = countQuery.whereIn("id", attributionSubQuery);
}
// 查询总数(在所有筛选条件应用后)
const [{ count }]: any = await countQuery.count("* as count");
// 查询列表
const list = await query
.select("*")
.orderByRaw(`
.orderByRaw(
`
CASE type WHEN 'main' THEN 1 ELSE 0 END ASC,
CASE WHEN id NOT IN (SELECT skillId FROM o_skillAttribution) THEN 0 ELSE 1 END ASC,
CASE WHEN state = 1 THEN 1 ELSE 0 END ASC,
updateTime DESC
`)
`
)
.limit(limit)
.offset(offset);
// 查询每个技能的归属
const skillIds = list.map((item: any) => item.id);
const attributionsList = await u.db("o_skillAttribution").whereIn("skillId", skillIds).select("skillId", "attribution");
const attributionsList = await u
.db("o_skillAttribution")
.whereIn("skillId", skillIds)
.select("skillId", "attribution");
// 将归属信息合并到列表中
const attributionMap = new Map<string, string[]>();
@ -75,6 +87,9 @@ export default router.post(
attributionMap.get(attr.skillId!)!.push(attr.attribution!);
}
// 记录需要更新state的技能id
const missingFileIds: string[] = [];
const listWithAttributions = list.map((item: any) => {
const normalizedPath = (item.path || "").replace(/\\/g, "/");
const isPrefixedReferencePath = normalizedPath.startsWith("references/");
@ -83,19 +98,41 @@ export default router.post(
? path.join(u.getPath(["skills", "references"]), item.path!)
: path.join(u.getPath("skills"), item.path!);
let content = "";
let state = item.state;
// 检查文件是否存在
if (fs.existsSync(skillFilePath)) {
content = fs.readFileSync(skillFilePath, "utf-8");
} else {
state = -1;
if (item.state !== -1) {
missingFileIds.push(item.id);
}
}
return {
...item,
state,
attributions: attributionMap.get(item.id) || [],
content: fs.readFileSync(skillFilePath, "utf-8"),
content,
embedding: item.embedding ? true : false,
};
});
// 批量更新文件不存在的技能状态
if (missingFileIds.length > 0) {
await u
.db("o_skillList")
.whereIn("id", missingFileIds)
.update({ state: -1 });
}
res.status(200).send(
success({
list: listWithAttributions,
total: Number(count),
}),
})
);
},
);
}
);

View File

@ -1,25 +1,6 @@
// @db-hash ce28b6d566911952421c2661e14bfde5
// @db-hash d807205fbb27fc5ddb04cae060fb4430
//该文件由脚本自动生成,请勿手动修改
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 memories {
'content': string;
'createTime': number;
@ -127,11 +108,13 @@ export interface o_project {
'artStyle'?: string | null;
'createTime'?: number | null;
'id'?: number | null;
'imageModel'?: string | null;
'intro'?: string | null;
'name'?: string | null;
'projectType'?: string | null;
'type'?: string | null;
'userId'?: number | null;
'videoModel'?: string | null;
'videoRatio'?: string | null;
}
export interface o_script {
@ -237,7 +220,6 @@ export interface o_videoConfig {
}
export interface DB {
"_o_storyboard_old_20260325": _o_storyboard_old_20260325;
"memories": memories;
"o_agentDeploy": o_agentDeploy;
"o_agentWorkData": o_agentWorkData;