From 60b881fb54b7ab50a23e42603deaa71d58995cef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A1=9C=E8=8F=AF?= Date: Tue, 14 Feb 2023 01:31:09 +0800 Subject: [PATCH] =?UTF-8?q?bot=20=E7=AD=9B=E5=8F=96=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/api/drawing.ts | 44 ++++++++++++++++---------------------- server/api/drawing/[id].ts | 20 +++++++++++++++++ 2 files changed, 39 insertions(+), 25 deletions(-) create mode 100644 server/api/drawing/[id].ts diff --git a/server/api/drawing.ts b/server/api/drawing.ts index 58fae05..a0c524e 100644 --- a/server/api/drawing.ts +++ b/server/api/drawing.ts @@ -3,42 +3,36 @@ export default defineEventHandler(async event => { // 获取任务列表的状态进度(普通用户只能看到自己的) if (event.node.req.method === 'GET') { - let tasks = await useStorage().getItem(`task:${event.context.query.tid}`) - return { 'tasks': tasks } + const task = await useStorage().getKeys().then((keys: any[]) => keys.filter(key => key.startsWith('task:'))) + return task } - // 保存任务列表的状态进度(只允许BOT写入) - if (event.node.req.method === 'PUT') { - await useStorage().setItem(`task:${event.context.query.tid}`, event.context.query.tid) - return { 'message': 'ok' } - } - - // 抽取一组任务(优先队列里最多的模型) + // 抽取一组任务(优先排队最前的任务的同model的任务) if (event.node.req.method === 'PATCH') { // 筛选出所有的任务(并打印) let tasks = await useStorage().getKeys().then((keys: any[]) => keys.filter(key => key.startsWith('task:'))) console.log(tasks) - // 按照任务的model字段分组 - let groups = tasks.reduce((groups: any, task: any) => { - let model = task.model - if (!groups[model]) { - groups[model] = [] - } - groups[model].push(task) - return groups - }) - // 按照任务数量排序 - let sorted = Object.keys(groups).sort((a, b) => groups[b].length - groups[a].length) - console.log(sorted) + tasks = await Promise.all(tasks.map(async (key: any) => await useStorage().getItem(key))) // 读取所有任务的数据 + tasks = tasks.filter((task: any) => task.status === 'waiting') // 筛选出等待状态的任务 + tasks = tasks.sort((a: any, b: any) => a.createdAt - b.createdAt) // 按照创建时间排序 + console.log(tasks) + if (tasks.length === 0) { + return { 'tasks': [] } + } + + // 筛选出第一个任务的model + let model = tasks[0].model + // 筛选出所有model相同的任务 + tasks = tasks.filter((task: any) => task.model === model) + console.log(tasks) // 将抽取到的任务从队列中改变状态 - for (let task of groups[sorted[0]]) { + for (let task of tasks) { task.status = 'processing' await useStorage().setItem(`task:${task.tid}`, task) } - - // 返回数量最多的任务 - return { 'task': groups[sorted[0]][0] } + // 返回排队的任务 + return { 'tasks': tasks } } // 添加任务到队列(生成一个32位随机字符串作为任务ID) diff --git a/server/api/drawing/[id].ts b/server/api/drawing/[id].ts new file mode 100644 index 0000000..0f7577b --- /dev/null +++ b/server/api/drawing/[id].ts @@ -0,0 +1,20 @@ +export default defineEventHandler(async event => { + + // 获取任务(普通用户只能看到自己的) + if (event.node.req.method === 'GET') { + return await useStorage().getItem(`task:${event.context.params.id}`) + } + + // 修改任务(只允许BOT写入) + if (event.node.req.method === 'PUT') { + event.context.body = await readBody(event) + await useStorage().setItem(`task:${event.context.params.id}`, event.context.body) + return { 'message': 'ok' } + } + + // 删除任务(普通用户只能删除自己的) + if (event.node.req.method === 'DELETE') { + await useStorage().removeItem(`task:${event.context.params.tid}`) + return { 'message': 'ok' } + } +})