diff --git a/src/modules/task/service/info.ts b/src/modules/task/service/info.ts new file mode 100644 index 0000000..d11cf0c --- /dev/null +++ b/src/modules/task/service/info.ts @@ -0,0 +1,153 @@ +import { App, Init, Inject, Provide, Scope, ScopeEnum } from '@midwayjs/core'; +import { BaseService } from '@cool-midway/core'; +import { InjectEntityModel } from '@midwayjs/typeorm'; +import { Repository } from 'typeorm'; +import { TaskInfoEntity } from '../entity/info'; +import * as _ from 'lodash'; +import { IMidwayApplication } from '@midwayjs/core'; +import { CoolQueueHandle } from '@cool-midway/task'; +import { TaskBullService } from './bull'; +import { TaskLocalService } from './local'; +import { TaskLogEntity } from '../entity/log'; +/** + * 任务 + */ +@Provide() +@Scope(ScopeEnum.Request, { allowDowngrade: true }) +export class TaskInfoService extends BaseService { + @InjectEntityModel(TaskInfoEntity) + taskInfoEntity: Repository; + + @InjectEntityModel(TaskLogEntity) + taskLogEntity: Repository; + + type: 'local' | 'bull' = 'local'; + + @App() + app: IMidwayApplication; + + @Inject() + taskBullService: TaskBullService; + + @Inject() + taskLocalService: TaskLocalService; + + @Init() + async init() { + await super.init(); + await this.initType(); + this.setEntity(this.taskInfoEntity); + } + + /** + * 初始化任务类型 + */ + async initType() { + try { + const check = await this.app + .getApplicationContext() + .getAsync(CoolQueueHandle); + if (check) { + this.type = 'bull'; + } else { + this.type = 'local'; + } + } catch (e) { + this.type = 'local'; + } + return this.type; + } + + /** + * 停止任务 + * @param id + */ + async stop(id) { + this.type === 'bull' + ? await this.taskBullService.stop(id) + : await this.taskLocalService.stop(id); + } + + /** + * 开始任务 + * @param id + * @param type + */ + async start(id, type?) { + this.type === 'bull' + ? await this.taskBullService.start(id) + : await this.taskLocalService.start(id, type); + } + /** + * 手动执行一次 + * @param id + */ + async once(id) { + this.type === 'bull' + ? this.taskBullService.once(id) + : this.taskLocalService.once(id); + } + /** + * 检查任务是否存在 + * @param jobId + */ + async exist(jobId) { + this.type === 'bull' + ? this.taskBullService.exist(jobId) + : this.taskLocalService.exist(jobId); + } + /** + * 新增或修改 + * @param params + */ + async addOrUpdate(params) { + this.type === 'bull' + ? this.taskBullService.addOrUpdate(params) + : this.taskLocalService.addOrUpdate(params); + } + /** + * 删除 + * @param ids + */ + async delete(ids) { + this.type === 'bull' + ? this.taskBullService.delete(ids) + : this.taskLocalService.delete(ids); + } + /** + * 任务日志 + * @param query + */ + async log(query) { + const { id, status } = query; + const find = await this.taskLogEntity + .createQueryBuilder('a') + .select(['a.*', 'b.name as taskName']) + .leftJoin(TaskInfoEntity, 'b', 'a.taskId = b.id') + .where('a.taskId = :id', { id }); + if (status || status == 0) { + find.andWhere('a.status = :status', { status }); + } + return await this.entityRenderPage(find, query); + } + + /** + * 初始化任务 + */ + async initTask() { + this.type === 'bull' + ? this.taskBullService.initTask() + : this.taskLocalService.initTask(); + } + + /** + * 详情 + * @param id + * @returns + */ + async info(id: any): Promise { + this.type === 'bull' + ? this.taskBullService.info(id) + : this.taskLocalService.info(id); + } +}