using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Threading.Tasks; using Admin.Core.Common; using Admin.Core.Common.Resource; using Admin.Core.IService.ISys; using Admin.Core.Model; using Admin.Core.Model.Sys; using Admin.Core.Repository; using Admin.Core.Tasks; using AutoMapper; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Quartz; namespace Admin.Core.Api { /// <summary> /// 任务调度 /// </summary> [Route("api/[controller]/[action]")] [ApiController] [Authorize(Permissions.Name)] public class SysJobLogController : BaseApiUserController { private readonly ISysJobLogService _sysJobLogService; private readonly ISysTasksQzService _tasksQzService; private readonly IMapper _mapper; /// <summary> /// 构造函数 /// </summary> /// <param name="sysJobLogService"></param> /// <param name="tasksQzService"></param> /// <param name="mapper"></param> /// <param name="sysUserService"></param> public SysJobLogController(ISysJobLogService sysJobLogService, ISysTasksQzService tasksQzService, IMapper mapper, ISysUserService sysUserService) : base(sysUserService) { _sysJobLogService = sysJobLogService; _sysUserService = sysUserService; _mapper = mapper; _tasksQzService = tasksQzService; } /// <summary> /// 分页查询 /// </summary> /// <param name="pageQuery"></param> /// <returns></returns> [HttpPost] public async Task<MessageModel<PageModel<JobLogView>>> GetByPage([FromBody] PageQuery<JobLogView> pageQuery) { Expression<Func<SysTasksQz, bool>> whereExpression = x => x.DelFlag == false; if (pageQuery.Query.TasksQz.ID != 0) { whereExpression = whereExpression.And(x => x.ID == pageQuery.Query.TasksQz.ID); } if (pageQuery.Query.TasksQz.Name.IsNotEmptyOrNull()) { whereExpression = whereExpression.And(x => x.Name.Contains(pageQuery.Query.TasksQz.Name)); } if (pageQuery.Query.TasksQz.JobGroup.IsNotEmptyOrNull()) { whereExpression = whereExpression.And(x => x.JobGroup == pageQuery.Query.TasksQz.JobGroup); } var taskQzs = await _tasksQzService.QueryAsync(whereExpression); var taskIds = taskQzs.Select(x => x.ID).ToList(); Expression<Func<SysJobLog, bool>> whereExpressionLog = x => true; whereExpressionLog = whereExpressionLog.And(x => taskIds.Contains((int)x.JobID)); if (pageQuery.Query.Status.IsNotEmptyOrNull()) { whereExpressionLog = whereExpressionLog.And(x => x.Status == pageQuery.Query.Status); } if (pageQuery.DateRange.IsNotEmptyOrNull() && pageQuery.DateRange.Count > 0) { if (pageQuery.DateRange[0].IsNotEmptyOrNull()) { whereExpressionLog = whereExpressionLog.And(x => x.RunTimeStart >= pageQuery.DateRange[0]); } if (pageQuery.DateRange.Count > 1 && pageQuery.DateRange[1].IsNotEmptyOrNull()) { whereExpressionLog = whereExpressionLog.And(x => x.RunTimeEnd <= pageQuery.DateRange[1]); } } var orderBy = (pageQuery.OrderBy ?? "ID") + " " + (pageQuery.IsAsc ? "asc" : "desc"); var log = await _sysJobLogService.QueryPageAsync(whereExpressionLog, pageQuery.Page, pageQuery.PageSize, orderBy); var data = _mapper.Map<PageModel<JobLogView>>(log); data.data.ForEach(x => x.TasksQz = taskQzs.Find(m => m.ID == x.JobID)); return Success(data); } /// <summary> /// 删除日志 /// </summary> /// <param name="jobId"></param> /// <returns></returns> [HttpPost] public async Task<MessageModel<bool>> Del(List<int> jobId) { return Success(await _sysJobLogService.DeleteByIdAsync(jobId)); } /// <summary> /// 清空日志 /// </summary> /// <returns></returns> [HttpGet] public async Task<MessageModel<bool>> Clear() { return Success(await _sysJobLogService.Clear()); } } }