chore: src/modules/task/service/info.ts
This commit is contained in:
@@ -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<TaskInfoEntity>;
|
||||
|
||||
@InjectEntityModel(TaskLogEntity)
|
||||
taskLogEntity: Repository<TaskLogEntity>;
|
||||
|
||||
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<any> {
|
||||
this.type === 'bull'
|
||||
? this.taskBullService.info(id)
|
||||
: this.taskLocalService.info(id);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user