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' @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 BlockChain().walletReactor.genOperation(subTask) subTask.scheduleId = scheduleId await subTask.save() new ChainQueue().addTaskToQueue(subTask) } } public async parseOneSchedule(scheduleId: string) { 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) } public async sendResultNotify(task: DocumentType, 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, }) } }