using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Ropin.Inspection.Api.Common; using Ropin.Inspection.Common.Accessor.Interface; using Ropin.Inspection.Model.Common; using Ropin.Inspection.Model.Entities; using Ropin.Inspection.Repository.Interface; using Ropin.Inspection.Service; using Ropin.Inspection.Service.Interface; using Ropin.Inspection.Tasks.QuartzNet; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Threading.Tasks; namespace Ropin.Inspection.Api.Controllers { /// /// 任务管理 /// public class TasksQzController : BaseController { private readonly ILogger _logger; private readonly ITasksQzServices _service; private readonly ISchedulerCenter _schedulerCenter; private readonly IUnitOfWork _unitOfWork; private readonly IClaimsAccessor _claims; /// /// 构造函数 /// /// /// /// /// /// public TasksQzController(ITasksQzServices service, ISchedulerCenter schedulerCenter, ILogger logger, IUnitOfWork unitOfWork, IClaimsAccessor claims) { _service = service; _logger = logger; _schedulerCenter = schedulerCenter; _unitOfWork = unitOfWork; _claims = claims; } /// /// 获取所有的任务 /// /// [HttpGet("GetTasksQzsAsync")] public async Task GetTasksQzsAsync() { try { var data = await _service.GetAllAsync(); var dataList = data.ToList(); if (dataList.Count > 0) { foreach (var item in dataList) { item.Triggers = await _schedulerCenter.GetTaskStaus(item); } } return new ApiResult>(data); } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } } /// /// 查询网点下所有的任务 /// /// [HttpGet("GetTasksQzsByStoreAsync")] public async Task GetTasksQzsByStoreAsync(string storeCode, string name) { if (string.IsNullOrEmpty(storeCode)) { return new ApiResult(ReturnCode.ArgsError, "网点Code"); } try { var data = await _service.GetAllAsync(); var dataList = data.Where(i=>i.C_StoreCode == storeCode).OrderByDescending(t=>t.CreateTime).ToList(); if (dataList.Count > 0) { foreach (var item in dataList) { item.Triggers = await _schedulerCenter.GetTaskStaus(item); } } if (string.IsNullOrWhiteSpace(name)) return new ApiResult>(dataList); else return new ApiResult>(dataList.Where(x => x.Name.Contains(name))); } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } } /// /// 创建任务 /// /// /// [Route("CreateTasksQzAsync")] [HttpPost] public async Task CreateTasksQzAsync(TasksQz tasksQz) { var data = new ApiResult(); if (tasksQz == null) { data.Code = ReturnCode.ArgsError; return data; } _unitOfWork.BeginTransaction(); try { //await _service.CreateOneAsync(tasksQz); tasksQz.Id = Guid.NewGuid(); tasksQz.CreateTime = DateTime.Now; tasksQz.CreateBy = _claims.ApiUserId; bool bResult = await _unitOfWork.RegisterNew(tasksQz); if (bResult) { data.Message = "添加成功"; if (tasksQz.IsStart) { //如果是启动自动 var ResuleModel = await _schedulerCenter.AddScheduleJobAsync(tasksQz); data.Code = ReturnCode.Success; if (ResuleModel.success) { data.Message = $"{data.Message}=>启动成功=>{ResuleModel.msg}"; } else { data.Message = $"{data.Message}=>启动失败=>{ResuleModel.msg}"; } } } } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } finally { if (data.Code == ReturnCode.Success) await _unitOfWork.CommitAsync(); else _unitOfWork.Rollback(); } return new ApiResult(ReturnCode.Success); } /// /// 通过ID获取计划任务信息 /// /// /// [HttpGet("GetByIdAsync/{id}")] public async Task GetByIdAsync(Guid id) { if (Guid.Empty == id) { return new ApiResult(ReturnCode.GeneralError); } try { var tasksQz = await _service.GetByIdAsync(id); return new ApiResult(tasksQz); } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } } ///// ///// 删除任务 ///// ///// ///// //[HttpDelete("DeleteTasksQzAsync/{id}")] //public async Task DeleteTasksQzAsync(Guid id) //{ // if (Guid.Empty == id) // { // return new ApiResult(ReturnCode.GeneralError); // } // try // { // await _service.DeleteAsync(id); // } // catch (Exception ex) // { // return new ApiResult(ReturnCode.GeneralError, ex.Message); // } // return new ApiResult(ReturnCode.Success); //} /// /// 修改计划任务 /// /// /// [HttpPut] public async Task Put(TasksQz tasksQz) { var data = new ApiResult(); if (tasksQz == null) { data.Code = ReturnCode.ArgsError; return data; } if (tasksQz == null || Guid.Empty == tasksQz.Id) { return new ApiResult(ReturnCode.GeneralError); } else { _unitOfWork.BeginTransaction(); bool bResult = await _unitOfWork.RegisterDirty(tasksQz); try { if (bResult) { data.Message = "修改成功"; if (tasksQz.IsStart) { var ResuleModelStop = await _schedulerCenter.StopScheduleJobAsync(tasksQz); data.Message = $"{data.Message}=>停止:{ResuleModelStop.msg}"; var ResuleModelStar = await _schedulerCenter.AddScheduleJobAsync(tasksQz); data.Code = ReturnCode.ProcedureSuccess; data.Message = $"{data.Message}=>启动:{ResuleModelStar.msg}"; } else { var ResuleModelStop = await _schedulerCenter.StopScheduleJobAsync(tasksQz); data.Message = $"{data.Message}=>停止:{ResuleModelStop.msg}"; } } else { data.Message = "修改失败"; } } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } finally { if (data.Code == ReturnCode.ProcedureSuccess) await _unitOfWork.CommitAsync(); else _unitOfWork.Rollback(); data.Code = ReturnCode.Success; } } return data; } /// /// 删除一个任务 /// /// /// [HttpDelete] public async Task Delete(Guid jobId) { var data = new ApiResult(); _unitOfWork.BeginTransaction(); try { var model = await _service.GetByIdAsync(jobId); bool bResult = await _unitOfWork.RegisterDeleted(model); if (bResult) { data.Message = "删除成功"; var ResuleModel = await _schedulerCenter.StopScheduleJobAsync(model); data.Message = $"{data.Message}=>任务状态=>{ResuleModel.msg}"; data.Code = ReturnCode.ProcedureSuccess; } else { data.Message = "删除失败"; } } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } finally { if (data.Code == ReturnCode.ProcedureSuccess) await _unitOfWork.CommitAsync(); else _unitOfWork.Rollback(); data.Code = ReturnCode.Success; } return data; } /// /// 启动计划任务 /// /// /// [HttpGet("StartJob/{jobId}")] public async Task StartJob(Guid jobId) { var data = new ApiResult(); var model = await _service.GetByIdAsync(jobId); if (model != null) { _unitOfWork.BeginTransaction(); try { model.IsStart = true; bool bResult = await _unitOfWork.RegisterDirty(model); if (bResult) { data.Message = "更新成功"; var ResuleModel = await _schedulerCenter.AddScheduleJobAsync(model); data.Code = ReturnCode.Success; if (ResuleModel.success) { data.Message = $"{data.Message}=>启动成功=>{ResuleModel.msg}"; } else { data.Message = $"{data.Message}=>启动失败=>{ResuleModel.msg}"; } data.Code = ReturnCode.ProcedureSuccess; } else { data.Message = "更新失败"; } } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } finally { if (data.Code == ReturnCode.ProcedureSuccess) await _unitOfWork.CommitAsync(); else _unitOfWork.Rollback(); data.Code = ReturnCode.Success; } } else { data.Message = "任务不存在"; } return data; } /// /// 停止一个计划任务 /// /// /// [HttpGet("StopJob/{jobId}")] public async Task StopJob(Guid jobId) { var data = new ApiResult(); try { var model = await _service.GetByIdAsync(jobId); if (model != null) { model.IsStart = false; bool bResult = await _unitOfWork.RegisterDirty(model); if (bResult) { data.Message = "更新成功"; var ResuleModel = await _schedulerCenter.StopScheduleJobAsync(model); if (ResuleModel.success) { data.Message = $"{data.Message}=>停止成功=>{ResuleModel.msg}"; } else { data.Message = $"{data.Message}=>停止失败=>{ResuleModel.msg}"; } data.Code = ReturnCode.ProcedureSuccess; } else { data.Message = "更新失败"; } } else { data.Message = "任务不存在"; } } catch(Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } finally { if (data.Code == ReturnCode.ProcedureSuccess) await _unitOfWork.CommitAsync(); else _unitOfWork.Rollback(); data.Code = ReturnCode.Success; } return data; } /// /// 暂停一个计划任务 /// /// /// [HttpGet("PauseJob/{jobId}")] public async Task PauseJob(Guid jobId) { var data = new ApiResult(); var model = await _service.GetByIdAsync(jobId); if (model != null) { _unitOfWork.BeginTransaction(); try { model.IsStart = false; bool bResult = await _unitOfWork.RegisterDirty(model); if (bResult) { data.Message = "更新成功"; var ResuleModel = await _schedulerCenter.PauseJob(model); if (ResuleModel.success) { data.Message = $"{data.Message}=>暂停成功=>{ResuleModel.msg}"; } else { data.Message = $"{data.Message}=>暂停失败=>{ResuleModel.msg}"; } data.Code = ReturnCode.ProcedureSuccess; } else { data.Message = "更新失败"; } } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } finally { if (data.Code == ReturnCode.ProcedureSuccess) await _unitOfWork.CommitAsync(); else _unitOfWork.Rollback(); data.Code = ReturnCode.Success; } } else { data.Message = "任务不存在"; } return data; } /// /// 恢复一个计划任务 /// /// /// [HttpGet("ResumeJob/{jobId}")] public async Task ResumeJob(Guid jobId) { var data = new ApiResult(); var model = await _service.GetByIdAsync(jobId); if (model != null) { _unitOfWork.BeginTransaction(); try { model.IsStart = true; bool bResult = await _unitOfWork.RegisterDirty(model); if (bResult) { data.Message = "更新成功"; var ResuleModel = await _schedulerCenter.ResumeJob(model); if (ResuleModel.success) { data.Message = $"{data.Message}=>恢复成功=>{ResuleModel.msg}"; } else { data.Message = $"{data.Message}=>恢复失败=>{ResuleModel.msg}"; } data.Code = ReturnCode.ProcedureSuccess; } else { data.Message = "更新失败"; } } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } finally { if (data.Code == ReturnCode.ProcedureSuccess) await _unitOfWork.CommitAsync(); else _unitOfWork.Rollback(); data.Code = ReturnCode.Success; } } else { data.Message = "任务不存在"; } return data; } /// /// 重启一个计划任务 /// /// /// [HttpGet("ReCovery/{jobId}")] public async Task ReCovery(Guid jobId) { var data = new ApiResult(); var model = await _service.GetByIdAsync(jobId); if (model != null) { _unitOfWork.BeginTransaction(); try { model.IsStart = true; bool bResult = await _unitOfWork.RegisterDirty(model); if (bResult) { data.Message = "更新成功"; var ResuleModelStop = await _schedulerCenter.StopScheduleJobAsync(model); var ResuleModelStar = await _schedulerCenter.AddScheduleJobAsync(model); if (ResuleModelStar.success) { data.Message = $"{data.Message}=>停止:{ResuleModelStop.msg}=>启动:{ResuleModelStar.msg}"; } else { data.Message = $"{data.Message}=>停止:{ResuleModelStop.msg}=>启动:{ResuleModelStar.msg}"; } data.Code = ReturnCode.ProcedureSuccess; } else { data.Message = "更新失败"; } } catch (Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } finally { if (data.Code == ReturnCode.ProcedureSuccess) await _unitOfWork.CommitAsync(); else _unitOfWork.Rollback(); data.Code = ReturnCode.Success; } } else { data.Message = "任务不存在"; } return data; } /// /// 立即执行任务 /// /// /// [HttpGet("ExecuteJob/{jobId}")] public async Task ExecuteJob(Guid jobId) { var data = new ApiResult(); try { var model = await _service.GetByIdAsync(jobId); if (model != null) { var ResuleModel = await _schedulerCenter.ExecuteJobAsync(model); if (ResuleModel.success) { data.Message = $"{data.Message}=>执行成功=>{ResuleModel.msg}"; } else { data.Message = $"{data.Message}=>执行失败=>{ResuleModel.msg}"; } data.Code = ReturnCode.Success; } else { data.Message = "任务不存在"; } } catch(Exception ex) { return new ApiResult(ReturnCode.GeneralError, ex.Message); } finally { if (data.Code == ReturnCode.ProcedureSuccess) await _unitOfWork.CommitAsync(); else _unitOfWork.Rollback(); data.Code = ReturnCode.Success; } return data; } } }