using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_TaskInfoRepository;
using WIDESEAWCS_TaskInfoService;
using WIDESEAWCS_Tasks.ElevatorJob;
namespace WIDESEAWCS_Server.Controllers.Task
{
[Route("/api/Elevator")]
[ApiController]
public class ElevatorController : ControllerBase
{
private readonly ITaskService _taskService;
private readonly ITaskRepository _taskRepository;
public ElevatorController(ITaskService taskService, ITaskRepository taskRepository)
{
_taskService = taskService;
_taskRepository = taskRepository;
}
///
/// 停止
///
///
[HttpPost, HttpGet, Route("stopElevator"), AllowAnonymous]
public WebResponseContent StopElevator()
{
WebResponseContent content = new WebResponseContent();
try
{
CommonElevator? commonElevator = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ1") as CommonElevator;
if (commonElevator != null)
{
commonElevator.SetValue(ElevatorDBName.StopElevator, 1);
Thread.Sleep(1000);
commonElevator.SetValue(ElevatorDBName.StopElevator, 0);
return content.OK("提升机停止成功");
}
return content.Error("失败");
}
catch (Exception ex)
{
return content.Error(ex.Message);
}
}
///
/// 初始化提升机
///
///
[HttpPost, HttpGet, Route("initialization"), AllowAnonymous]
public WebResponseContent initialzationElevator()
{
WebResponseContent content = new WebResponseContent();
try
{
CommonElevator? elevator = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ1") as CommonElevator;
if (elevator != null)
{
elevator.SetValue(ElevatorDBName.StopElevator, 1);
Thread.Sleep(1000);
elevator.SetValue(ElevatorDBName.StopElevator, 0);
Thread.Sleep(1000);
//获取提升机状态的显示 =0无状态;=1运行中;=2待机;=3报警
if (elevator.GetValue(ElevatorDBName.ElevatorStatus) == 2)
{
//获取提升机手动/自动切换开关状态
if (elevator.GetValue(ElevatorDBName.ManualAutoSwitch) == 1)
{
//获取提升机是否能允许初始化
if (elevator.GetValue(ElevatorDBName.AllowInitialization) == 1)
{
if (elevator.GetValue(ElevatorDBName.InitializationFlag) == 0)
{
if (elevator.GetValue(ElevatorDBName.InitializationFlag) == 0)
{
elevator.SetValue(ElevatorDBName.InitializationTrigger, 1);
Thread.Sleep(1000);
elevator.SetValue(ElevatorDBName.InitializationTrigger, 0);
}
}
Thread.Sleep(1000);
if (elevator.GetValue(ElevatorDBName.InitializationFlag) == 1)
{
Thread.Sleep(5000);
if (elevator.GetValue(ElevatorDBName.InitializationFlag) == 0)
{
var TaskDouble = _taskRepository.QueryData(x => x.TaskState > (int)TaskAcrossFloorStatusEnum.CarryNew && x.TaskState < (int)TaskAcrossFloorStatusEnum.EndAddressExecuting && x.DoubleTray == 1);
var task = _taskRepository.QueryFirst(x => x.TaskState > (int)TaskAcrossFloorStatusEnum.CarryNew && x.TaskState < (int)TaskAcrossFloorStatusEnum.EndAddressExecuting);
if (TaskDouble.Count() > 0)
{
if (TaskDouble.First().Floor == "2F")
{
elevator.SetValue(ElevatorDBName.TaskNum, Convert.ToInt16(TaskDouble.First().TaskNum));
elevator.SetValue(ElevatorDBName.FlagBit, Convert.ToInt16(2));
elevator.SetValue(ElevatorDBName.StartFloor, Convert.ToInt16(1));
elevator.SetValue(ElevatorDBName.EdnFloor, Convert.ToInt16(2));
Thread.Sleep(1000);
elevator.SetValue(ElevatorDBName.StartCommand, Convert.ToInt16(1));
_taskService.SendAgvTask("AAA", TaskDouble.First().TaskNum);
_taskService.UpdateTaskStatusToNext(TaskDouble.First().TaskNum);
}
else
{
elevator.SetValue(ElevatorDBName.TaskNum, Convert.ToInt16(TaskDouble.First().TaskNum));
elevator.SetValue(ElevatorDBName.FlagBit, Convert.ToInt16(2));
elevator.SetValue(ElevatorDBName.StartFloor, Convert.ToInt16(2));
elevator.SetValue(ElevatorDBName.EdnFloor, Convert.ToInt16(1));
Thread.Sleep(1000);
elevator.SetValue(ElevatorDBName.StartCommand, Convert.ToInt16(1));
_taskService.SendAgvTask("DDD", TaskDouble.First().TaskNum);
_taskService.UpdateTaskStatusToNext(TaskDouble.First().TaskNum);
}
}
if (task != null)
{
if (task.Floor == "2F")
{
elevator.SetValue(ElevatorDBName.TaskNum, Convert.ToInt16(task.TaskNum));
elevator.SetValue(ElevatorDBName.FlagBit, Convert.ToInt16(2));
elevator.SetValue(ElevatorDBName.StartFloor, Convert.ToInt16(1));
elevator.SetValue(ElevatorDBName.EdnFloor, Convert.ToInt16(2));
Thread.Sleep(1000);
elevator.SetValue(ElevatorDBName.StartCommand, Convert.ToInt16(1));
_taskService.SendAgvTask("AAA", task.TaskNum);
_taskService.UpdateTaskStatusToNext(task.TaskNum);
}
else
{
elevator.SetValue(ElevatorDBName.TaskNum, Convert.ToInt16(task.TaskNum));
elevator.SetValue(ElevatorDBName.FlagBit, Convert.ToInt16(2));
elevator.SetValue(ElevatorDBName.StartFloor, Convert.ToInt16(2));
elevator.SetValue(ElevatorDBName.EdnFloor, Convert.ToInt16(1));
Thread.Sleep(1000);
elevator.SetValue(ElevatorDBName.StartCommand, Convert.ToInt16(1));
_taskService.SendAgvTask("DDD", task.TaskNum);
_taskService.UpdateTaskStatusToNext(task.TaskNum);
}
}
if (elevator.GetValue(ElevatorDBName.InitializationFlag) == 0)
{
elevator.SetValue(ElevatorDBName.StartElevator, 1);
Thread.Sleep(2000);
elevator.SetValue(ElevatorDBName.StartElevator, 0);
}
}
}
}
}
}
return content.OK("提升机初始化成功");
}
return content.Error("失败");
}
catch (Exception ex)
{
return content.Error(ex.Message);
}
}
///
/// 启动
///
///
[HttpPost, HttpGet, Route("startElevator"), AllowAnonymous]
public WebResponseContent StartElevator()
{
WebResponseContent content = new WebResponseContent();
try
{
CommonElevator? commonElevator = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ1") as CommonElevator;
if (commonElevator != null)
{
if(commonElevator.GetValue(ElevatorDBName.AllowDeviceStartup) == 1)
{
commonElevator.SetValue(ElevatorDBName.StartElevator, 1);
Thread.Sleep(1000);
commonElevator.SetValue(ElevatorDBName.StartElevator, 0);
return content.OK("提升机启动成功");
}
else
{
return content.Error("提升机当前状态不允许启动");
}
}
return content.Error("失败");
}
catch (Exception ex)
{
return content.Error(ex.Message);
}
}
///
/// 复位
///
///
[HttpPost, HttpGet, Route("resetElevator"), AllowAnonymous]
public WebResponseContent ResetElevator()
{
WebResponseContent content = new WebResponseContent();
try
{
CommonElevator? commonElevator = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ1") as CommonElevator;
if (commonElevator != null)
{
commonElevator.SetValue(ElevatorDBName.ResetElevator, 1);
Thread.Sleep(1000);
commonElevator.SetValue(ElevatorDBName.ResetElevator, 0);
return content.OK("提升机启动成功");
}
return content.Error("失败");
}
catch (Exception ex)
{
return content.Error(ex.Message);
}
}
}
}