xiongzhu há 2 anos atrás
pai
commit
1fb1e63ed0

+ 1 - 1
src/accounts/accounts.service.ts

@@ -44,7 +44,7 @@ export class AccountsService {
         return account
     }
 
-    // @Cron('0/30 * * * * *')
+    @Cron('* 1/30 * * * *')
     async handleCron() {
         for (let account of await this.findAll()) {
             try {

+ 6 - 1
src/task/task.controller.ts

@@ -1,4 +1,4 @@
-import { Body, Controller, Get, Post, Put, Req } from '@nestjs/common'
+import { Body, Controller, Delete, Get, Param, Post, Put, Req } from '@nestjs/common'
 import { CreateTaskDto } from './dto/create-task.dto'
 import { TaskService } from './task.service'
 import { PageRequest } from 'src/common/dto/page-request'
@@ -23,4 +23,9 @@ export class TaskController {
     public async logs(@Body() page: PageRequest<TaskLog>, @Req() req) {
         return await this.taskService.findAllLogs(page)
     }
+
+    @Delete('/:id')
+    public async delete(@Param('id') id: string) {
+        return await this.taskService.delete(Number(id))
+    }
 }

+ 22 - 4
src/task/task.service.ts

@@ -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 + '')
+        }
+    }
 }