web-定时任务

This commit is contained in:
2025-10-25 18:47:00 +08:00
parent 485e1b8be4
commit 4e6b1b87be
6 changed files with 2127 additions and 0 deletions

View File

@@ -0,0 +1,196 @@
/**
* @description 定时任务相关API
* @author yslg
* @since 2025-10-25
*/
import { api } from '@/apis/index';
import type { CrontabTask, CrontabLog, ResultDomain, PageParam } from '@/types';
/**
* 定时任务API服务
*/
export const crontabApi = {
baseUrl: '/crontab',
// ==================== 定时任务管理 ====================
/**
* 创建定时任务
* @param task 任务对象
* @returns Promise<ResultDomain<CrontabTask>>
*/
async createTask(task: CrontabTask): Promise<ResultDomain<CrontabTask>> {
const response = await api.post<CrontabTask>(`${this.baseUrl}/task`, task);
return response.data;
},
/**
* 更新定时任务
* @param task 任务对象
* @returns Promise<ResultDomain<CrontabTask>>
*/
async updateTask(task: CrontabTask): Promise<ResultDomain<CrontabTask>> {
const response = await api.put<CrontabTask>(`${this.baseUrl}/task`, task);
return response.data;
},
/**
* 删除定时任务
* @param task 任务对象
* @returns Promise<ResultDomain<CrontabTask>>
*/
async deleteTask(task: CrontabTask): Promise<ResultDomain<CrontabTask>> {
const response = await api.delete<CrontabTask>(`${this.baseUrl}/task`, task);
return response.data;
},
/**
* 根据ID查询任务
* @param taskId 任务ID
* @returns Promise<ResultDomain<CrontabTask>>
*/
async getTaskById(taskId: string): Promise<ResultDomain<CrontabTask>> {
const response = await api.get<CrontabTask>(`${this.baseUrl}/task/${taskId}`);
return response.data;
},
/**
* 查询任务列表
* @param filter 过滤条件
* @returns Promise<ResultDomain<CrontabTask>>
*/
async getTaskList(filter?: Partial<CrontabTask>): Promise<ResultDomain<CrontabTask>> {
const response = await api.post<CrontabTask>(`${this.baseUrl}/task/list`, filter);
return response.data;
},
/**
* 分页查询任务列表
* @param filter 过滤条件
* @param pageParam 分页参数
* @returns Promise<ResultDomain<CrontabTask>>
*/
async getTaskPage(filter?: Partial<CrontabTask>, pageParam?: PageParam): Promise<ResultDomain<CrontabTask>> {
const response = await api.post<CrontabTask>(`${this.baseUrl}/task/page`, {
filter,
pageParam: {
pageNumber: pageParam?.page || 1,
pageSize: pageParam?.size || 10
}
});
return response.data;
},
/**
* 启动定时任务
* @param taskId 任务ID
* @returns Promise<ResultDomain<CrontabTask>>
*/
async startTask(taskId: string): Promise<ResultDomain<CrontabTask>> {
const response = await api.post<CrontabTask>(`${this.baseUrl}/task/start/${taskId}`);
return response.data;
},
/**
* 暂停定时任务
* @param taskId 任务ID
* @returns Promise<ResultDomain<CrontabTask>>
*/
async pauseTask(taskId: string): Promise<ResultDomain<CrontabTask>> {
const response = await api.post<CrontabTask>(`${this.baseUrl}/task/pause/${taskId}`);
return response.data;
},
/**
* 立即执行一次任务
* @param taskId 任务ID
* @returns Promise<ResultDomain<CrontabTask>>
*/
async executeTaskOnce(taskId: string): Promise<ResultDomain<CrontabTask>> {
const response = await api.post<CrontabTask>(`${this.baseUrl}/task/execute/${taskId}`);
return response.data;
},
/**
* 验证Cron表达式
* @param cronExpression Cron表达式
* @returns Promise<ResultDomain<string>>
*/
async validateCronExpression(cronExpression: string): Promise<ResultDomain<string>> {
const response = await api.get<string>(`${this.baseUrl}/task/validate`, {
cronExpression
});
return response.data;
},
// ==================== 定时任务日志 ====================
/**
* 根据任务ID查询日志
* @param taskId 任务ID
* @returns Promise<ResultDomain<CrontabLog>>
*/
async getLogsByTaskId(taskId: string): Promise<ResultDomain<CrontabLog>> {
const response = await api.get<CrontabLog>(`${this.baseUrl}/log/task/${taskId}`);
return response.data;
},
/**
* 查询日志列表
* @param filter 过滤条件
* @returns Promise<ResultDomain<CrontabLog>>
*/
async getLogList(filter?: Partial<CrontabLog>): Promise<ResultDomain<CrontabLog>> {
const response = await api.post<CrontabLog>(`${this.baseUrl}/log/list`, filter);
return response.data;
},
/**
* 分页查询日志列表
* @param filter 过滤条件
* @param pageParam 分页参数
* @returns Promise<ResultDomain<CrontabLog>>
*/
async getLogPage(filter?: Partial<CrontabLog>, pageParam?: PageParam): Promise<ResultDomain<CrontabLog>> {
const response = await api.post<CrontabLog>(`${this.baseUrl}/log/page`, {
filter,
pageParam: {
pageNumber: pageParam?.page || 1,
pageSize: pageParam?.size || 10
}
});
return response.data;
},
/**
* 根据ID查询日志详情
* @param logId 日志ID
* @returns Promise<ResultDomain<CrontabLog>>
*/
async getLogById(logId: string): Promise<ResultDomain<CrontabLog>> {
const response = await api.get<CrontabLog>(`${this.baseUrl}/log/${logId}`);
return response.data;
},
/**
* 清理指定天数之前的日志
* @param days 天数
* @returns Promise<ResultDomain<number>>
*/
async cleanLogs(days: number): Promise<ResultDomain<number>> {
const response = await api.delete<number>(`${this.baseUrl}/log/clean/${days}`);
return response.data;
},
/**
* 删除日志
* @param log 日志对象
* @returns Promise<ResultDomain<CrontabLog>>
*/
async deleteLog(log: CrontabLog): Promise<ResultDomain<CrontabLog>> {
const response = await api.delete<CrontabLog>(`${this.baseUrl}/log`, log);
return response.data;
}
};