chain-client/src/service/task.service.ts
2023-07-24 13:16:42 +08:00

49 lines
1.7 KiB
TypeScript

import { BlockChain } from 'chain/BlockChain'
import { singleton } from 'decorators/singleton'
import logger from 'logger/logger'
import { ChainTask, ChainTaskClass } from 'models/ChainTask'
import { DocumentType } from '@typegoose/typegoose'
import { ReqTaskStatus, RequestTask } from 'models/RequestTask'
import { ChainQueue } from 'queue/chain.queue'
import { ExecQueue } from 'queue/exec.queue'
import { WechatWorkService } from './wechatwork.service'
import { ChainCache } from 'cache/ChainCache'
@singleton
export class TaskSvr {
public async parseOneTask(spNo: string) {
let data = await new WechatWorkService().parseOneTask(spNo)
let subTasks = await ChainTask.parseWxApprovalInfo(data)
for (let subTask of subTasks) {
let { scheduleId } = new ChainCache().getWallet(data.chain).genOperation(subTask)
subTask.scheduleId = scheduleId
await subTask.save()
new ChainQueue().addTaskToQueue(subTask)
}
}
public async parseOneSchedule(scheduleId: string, force = false) {
let record = await RequestTask.findOne({ scheduleId })
if (!record) {
return
}
if (record.status !== ReqTaskStatus.WAIT_EXEC) {
logger.info(`want exec schedule: ${scheduleId}, but status is ${record.status}`)
return
}
await record.save()
new ExecQueue().addTaskToQueue(record, force)
}
public async sendResultNotify(task: DocumentType<ChainTaskClass>, desc: string) {
let userid = task.starter
let timeStr = new Date(task.endTime).format('yyyy-MM-dd HH:mm:ss')
return new WechatWorkService().beginApproval({
userid,
title: `${task.starterName}-${task.name}`,
desc,
info: timeStr,
})
}
}