49 lines
1.7 KiB
TypeScript
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,
|
|
})
|
|
}
|
|
}
|