|
|
@@ -1,4 +1,4 @@
|
|
|
-import { Injectable, Logger, OnModuleInit } from '@nestjs/common'
|
|
|
+import { BadRequestException, Injectable, Logger, OnModuleInit } from '@nestjs/common'
|
|
|
import { InjectRepository } from '@nestjs/typeorm'
|
|
|
import { Web3Service } from 'src/web3/web3.service'
|
|
|
import { Task } from './entities/task.entity'
|
|
|
@@ -16,6 +16,8 @@ import { randomAmount } from 'src/utils/common'
|
|
|
import { EventEmitter2 } from '@nestjs/event-emitter'
|
|
|
import { setTimeout } from 'timers/promises'
|
|
|
import schedule from 'node-schedule'
|
|
|
+import { SchedulerRegistry } from '@nestjs/schedule'
|
|
|
+import { CronJob } from 'cron'
|
|
|
@Injectable()
|
|
|
export class TaskService implements OnModuleInit {
|
|
|
constructor(
|
|
|
@@ -25,7 +27,8 @@ export class TaskService implements OnModuleInit {
|
|
|
private readonly taskRepository: Repository<Task>,
|
|
|
@InjectRepository(TaskLog)
|
|
|
private readonly taskLogRepository: Repository<TaskLog>,
|
|
|
- private eventEmitter: EventEmitter2
|
|
|
+ private eventEmitter: EventEmitter2,
|
|
|
+ private schedulerRegistry: SchedulerRegistry
|
|
|
) {}
|
|
|
|
|
|
async onModuleInit() {
|
|
|
@@ -38,11 +41,12 @@ export class TaskService implements OnModuleInit {
|
|
|
this.runTask(task)
|
|
|
} catch (error) {}
|
|
|
} else {
|
|
|
- schedule.scheduleJob(task.startTime, () => {
|
|
|
+ const job = new CronJob(task.startTime, () => {
|
|
|
try {
|
|
|
this.runTask(task)
|
|
|
} catch (error) {}
|
|
|
})
|
|
|
+ this.schedulerRegistry.addCronJob(task.id + '', job)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -65,11 +69,12 @@ export class TaskService implements OnModuleInit {
|
|
|
this.runTask(task)
|
|
|
} catch (error) {}
|
|
|
} else {
|
|
|
- schedule.scheduleJob(createTask.startTime, () => {
|
|
|
+ const job = new CronJob(task.startTime, () => {
|
|
|
try {
|
|
|
this.runTask(task)
|
|
|
} catch (error) {}
|
|
|
})
|
|
|
+ this.schedulerRegistry.addCronJob(task.id + '', job)
|
|
|
}
|
|
|
return task
|
|
|
}
|
|
|
@@ -160,4 +165,17 @@ export class TaskService implements OnModuleInit {
|
|
|
task.status = TaskStatus.Done
|
|
|
await this.taskRepository.save(task)
|
|
|
}
|
|
|
+
|
|
|
+ async delete(id: number) {
|
|
|
+ const task = await this.taskRepository.findOneBy({ id })
|
|
|
+ if (task.status !== TaskStatus.Pending) {
|
|
|
+ throw new BadRequestException('只能删除未执行任务')
|
|
|
+ }
|
|
|
+ await this.taskRepository.delete(id)
|
|
|
+ const job = this.schedulerRegistry.getCronJob(id + '')
|
|
|
+ if (job) {
|
|
|
+ job.stop()
|
|
|
+ this.schedulerRegistry.deleteCronJob(id + '')
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|