bot 筛取任务
This commit is contained in:
		@@ -3,42 +3,36 @@ export default defineEventHandler(async event => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // 获取任务列表的状态进度(普通用户只能看到自己的)
 | 
					    // 获取任务列表的状态进度(普通用户只能看到自己的)
 | 
				
			||||||
    if (event.node.req.method === 'GET') {
 | 
					    if (event.node.req.method === 'GET') {
 | 
				
			||||||
        let tasks = await useStorage().getItem(`task:${event.context.query.tid}`)
 | 
					        const task = await useStorage().getKeys().then((keys: any[]) => keys.filter(key => key.startsWith('task:')))
 | 
				
			||||||
        return { 'tasks': tasks }
 | 
					        return task
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // 保存任务列表的状态进度(只允许BOT写入)
 | 
					    // 抽取一组任务(优先排队最前的任务的同model的任务)
 | 
				
			||||||
    if (event.node.req.method === 'PUT') {
 | 
					 | 
				
			||||||
        await useStorage().setItem(`task:${event.context.query.tid}`, event.context.query.tid)
 | 
					 | 
				
			||||||
        return { 'message': 'ok' }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // 抽取一组任务(优先队列里最多的模型)
 | 
					 | 
				
			||||||
    if (event.node.req.method === 'PATCH') {
 | 
					    if (event.node.req.method === 'PATCH') {
 | 
				
			||||||
        // 筛选出所有的任务(并打印)
 | 
					        // 筛选出所有的任务(并打印)
 | 
				
			||||||
        let tasks = await useStorage().getKeys().then((keys: any[]) => keys.filter(key => key.startsWith('task:')))
 | 
					        let tasks = await useStorage().getKeys().then((keys: any[]) => keys.filter(key => key.startsWith('task:')))
 | 
				
			||||||
        console.log(tasks)
 | 
					        console.log(tasks)
 | 
				
			||||||
        // 按照任务的model字段分组
 | 
					        tasks = await Promise.all(tasks.map(async (key: any) => await useStorage().getItem(key))) // 读取所有任务的数据
 | 
				
			||||||
        let groups = tasks.reduce((groups: any, task: any) => {
 | 
					        tasks = tasks.filter((task: any) => task.status === 'waiting') // 筛选出等待状态的任务
 | 
				
			||||||
            let model = task.model
 | 
					        tasks = tasks.sort((a: any, b: any) => a.createdAt - b.createdAt) // 按照创建时间排序
 | 
				
			||||||
            if (!groups[model]) {
 | 
					        console.log(tasks)
 | 
				
			||||||
                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)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        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'
 | 
					            task.status = 'processing'
 | 
				
			||||||
            await useStorage().setItem(`task:${task.tid}`, task)
 | 
					            await useStorage().setItem(`task:${task.tid}`, task)
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        // 返回排队的任务
 | 
				
			||||||
        // 返回数量最多的任务
 | 
					        return { 'tasks': tasks }
 | 
				
			||||||
        return { 'task': groups[sorted[0]][0] }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // 添加任务到队列(生成一个32位随机字符串作为任务ID)
 | 
					    // 添加任务到队列(生成一个32位随机字符串作为任务ID)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										20
									
								
								server/api/drawing/[id].ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								server/api/drawing/[id].ts
									
									
									
									
									
										Normal file
									
								
							@@ -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' }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
		Reference in New Issue
	
	Block a user