using DevExpress.Utils.Extensions; using System; using System.Collections.Generic; using System.Configuration; using System.IO; using System.Linq; using System.Web.Http; using XdCxRhDW.Dto; using XdCxRhDW.WebApi; using XdCxRhDW.X2D1TaskServer.Service; using XdCxRhDW.X2D1TaskServer.Tasks; namespace XdCxRhDW.X2D1TaskServer.Controllers { /// ///离线任务处理接口 /// public class HistoryTaskProcessingController : BaseController { /******************* * !!!不要在Controller中放业务逻辑的全局变量 * !!!不要在Controller写太复杂的业务逻辑 * Controller主要就是调用Service层的东西。Service层执行业务逻辑和调用Repository层操作数据库 * ********************/ private readonly HistoryTaskService _service; public HistoryTaskProcessingController(HistoryTaskService service) { _service = service; } /// /// 执行离线任务 /// /// 离线任务信息 /// [HttpPost] public AjaxResult Run(HistoryTaskProcessingDto dto) { try { _service.allTask.RemoveAll(a => a.IsRuning == false); LogHelper.Info($"接收到开始执行任务[{dto.TaskName}],ID={dto.ID}"); if (!Directory.Exists(dto.CapDir)) { LogHelper.Error($"文件路径[{dto.CapDir}]不存在"); return Error($"文件路径[{dto.CapDir}]不存在"); } if (dto.PosType == EnumPosTypeDto.X2D1) { X2D1Task x2D1 = new X2D1Task(); x2D1.Start(dto); _service.allTask.Add(x2D1); } else { return Error($"【任务{dto.ID}】执行异常,暂不支持{dto.PosType.GetEnumDisplayName()}"); } return Success(); } catch (Exception ex) { Serilog.Log.Error(ex, $"【任务{dto.ID}】开始执行异常!"); return Error($"【任务{dto.ID}】开始执行异常!"); } } /// /// 历史任务停止 /// /// /// [HttpPost] public AjaxResult Stop(HistoryTaskStopDto dto) { try { LogHelper.Info($"接收到停止执行任务,ID={dto.ID}"); var historys = _service.allTask.Where(t => t.TaskDto.ID == dto.ID); foreach (var item in historys) { item.Stop(); } _service.allTask.Remove(t => t.TaskDto.ID == dto.ID); return Success(); } catch (Exception ex) { Serilog.Log.Error(ex, $"【任务{dto.ID}】停止执行异常!"); return Error($"【任务{dto.ID}】停止执行异常!"); } } } }