From 7d3d28d2c62c755a2df1fd5e468dcae3330914fb Mon Sep 17 00:00:00 2001 From: zhl Date: Mon, 17 Apr 2023 11:19:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BB=BB=E5=8A=A1=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E5=90=8E=E7=9A=84=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/models/ChainTask.ts | 15 ++++++++++++--- src/models/ScheduleConfirmEvent.ts | 1 + src/models/ScheduleExecutedEvent.ts | 5 ++++- src/monitor.ts | 2 ++ src/service/task.service.ts | 14 +++++++++++++- 5 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/models/ChainTask.ts b/src/models/ChainTask.ts index f4629c2..b79192c 100644 --- a/src/models/ChainTask.ts +++ b/src/models/ChainTask.ts @@ -3,6 +3,7 @@ import { BlockChain } from 'chain/BlockChain' import { MAX_BATCH_REQ_COUNT, ZERO_BYTES32 } from 'common/Constants' import { dbconn } from 'decorators/dbconn' import { MailQueue } from 'queue/mail.queue' +import { TaskSvr } from 'service/task.service' import { generateRandomBytes32 } from 'utils/wallet.util' import { BaseModule } from './Base' @@ -66,6 +67,9 @@ export class ChainTaskClass extends BaseModule { @prop({ type: String, required: true, default: [] }) public tasks!: Array + @prop({ type: mongoose.Schema.Types.Mixed }) + public notify: any + /** * 检查是否所有的任务都已完成(成功或重试次数达到上限) * 调用时机 @@ -103,11 +107,16 @@ export class ChainTaskClass extends BaseModule { } } if (record.allEnd) { - setImmediate(async function () { - // TODO:: 通知前端 - }) + record.endTime = Date.now() } await record.save() + if (record.allEnd) { + setImmediate(async function () { + let result = new TaskSvr().sendResultNotify(record) + record.notify = result + await record.save() + }) + } } public static async checkScheduleStatus(chainTaskId: string) { diff --git a/src/models/ScheduleConfirmEvent.ts b/src/models/ScheduleConfirmEvent.ts index 4680ad0..8922f0c 100644 --- a/src/models/ScheduleConfirmEvent.ts +++ b/src/models/ScheduleConfirmEvent.ts @@ -55,6 +55,7 @@ export class ScheduleConfirmEventClass extends BaseModule { await new TaskSvr().parseOneSchedule(id) } } + return record } } diff --git a/src/models/ScheduleExecutedEvent.ts b/src/models/ScheduleExecutedEvent.ts index f3882ad..71b2105 100644 --- a/src/models/ScheduleExecutedEvent.ts +++ b/src/models/ScheduleExecutedEvent.ts @@ -44,10 +44,13 @@ export class ScheduleExecutedEventClass extends BaseModule { $inc: { version: 1 }, } - return ScheduleExecutedEvent.insertOrUpdate( + let record = await ScheduleExecutedEvent.insertOrUpdate( { transactionHash: event.transactionHash, scheduleId: event.returnValues.id }, data, ) + if (record.version === 1) { + } + return record } } diff --git a/src/monitor.ts b/src/monitor.ts index a0b3b6f..226ad42 100644 --- a/src/monitor.ts +++ b/src/monitor.ts @@ -7,6 +7,7 @@ import { EventSyncSvr } from 'service/event.sync.service' import { NftTransferEvent } from 'models/NftTransferEvent' import { FtTransferEvent } from 'models/FtTransferEvent' import { ScheduleConfirmEvent } from 'models/ScheduleConfirmEvent' +import { ScheduleExecutedEvent } from 'models/ScheduleExecutedEvent' import 'common/Extend' @@ -17,6 +18,7 @@ let eventProcessers = { NftTransferEvent: NftTransferEvent, FtTransferEvent: FtTransferEvent, ScheduleConfirmEvent: ScheduleConfirmEvent, + ScheduleExecutedEvent: ScheduleExecutedEvent, } const events = require('config/events.json') diff --git a/src/service/task.service.ts b/src/service/task.service.ts index a46d6be..ec424de 100644 --- a/src/service/task.service.ts +++ b/src/service/task.service.ts @@ -1,7 +1,8 @@ import { BlockChain } from 'chain/BlockChain' import { singleton } from 'decorators/singleton' import logger from 'logger/logger' -import { ChainTask } from 'models/ChainTask' +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' @@ -32,4 +33,15 @@ export class TaskSvr { await record.save() new ExecQueue().addTaskToQueue(record) } + + public async sendResultNotify(task: DocumentType) { + 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: task.desc, + info: timeStr, + }) + } }