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}】停止执行异常!");
}
}
}
}