using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Mvc;
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
|
using System.Reflection;
|
using WIDESEAWCS_Common.TaskEnum;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_DTO.AGV;
|
using WIDESEAWCS_ITaskInfoRepository;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_QuartzJob;
|
using WIDESEAWCS_Tasks;
|
using WIDESEAWCS_Tasks.ConveyorLineJob;
|
using WIDESEAWCS_Tasks.ElevatorJob;
|
|
namespace WIDESEAWCS_Server.Controllers.AGV
|
{
|
[Route("api/AGV")]
|
[ApiController]
|
public class AGVController : ControllerBase
|
{
|
private readonly ITaskRepository _taskRepository;
|
|
public AGVController(ITaskRepository taskRepository)
|
{
|
_taskRepository = taskRepository;
|
}
|
|
/// <summary>
|
/// AGV状态上报
|
/// </summary>
|
/// <param name="receiveDTO"></param>
|
/// <returns></returns>
|
[HttpPost, Route("AGVStatusReport"), AllowAnonymous]
|
public WebResponseContent AGVStatusReport(AGVReceiveDTO receiveDTO) => SignalInteraction(receiveDTO);
|
|
#region AGV与设备信号交互
|
|
/// <summary>
|
/// AGV--设备交互
|
/// </summary>
|
/// <returns></returns>
|
public WebResponseContent SignalInteraction(AGVReceiveDTO receiveDTO)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
var task = _taskRepository.QueryFirst(t => t.TaskNum == receiveDTO.TaskNum);
|
if (task == null)
|
{
|
return content.Error("未找到任务");
|
}
|
MethodInfo? method = GetType().GetMethod(receiveDTO.Status);
|
if (method != null)
|
{
|
CommonConveyorLine? commonConveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceCode == task.DeviceCode) as CommonConveyorLine;
|
CommonElevator? elevator = Storage.Devices.FirstOrDefault(x => x.DeviceCode == task.DeviceCode) as CommonElevator;
|
if (elevator == null && commonConveyorLine == null)
|
return content.Error("未找到设备");
|
else
|
return content = (WebResponseContent)method.Invoke(this, new object[] { task, commonConveyorLine, elevator });
|
|
}
|
else
|
{
|
throw new Exception($"未找到该状态{receiveDTO.Status}定义");
|
}
|
}
|
catch (Exception ex)
|
{
|
return content.Error(ex.Message);
|
}
|
}
|
|
/// <summary>
|
/// 放货完成
|
/// </summary>
|
/// <param name="task"></param>
|
/// <returns></returns>
|
public WebResponseContent PutFinish(Dt_Task task, CommonConveyorLine commonConveyorLine, CommonElevator elevator)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
|
{
|
elevator.SetValue(ElevatorDBName.OneLayerPutFinish, 1);
|
elevator.SetValue(ElevatorDBName.StartCommand, 1);
|
content.OK();
|
}
|
else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
|
{
|
if (task.DeviceCode.Contains("TSJ"))
|
{
|
elevator.SetValue(ElevatorDBName.TwoLayerPutFinish, 1);
|
elevator.SetValue(ElevatorDBName.StartCommand, 1);
|
content.OK();
|
}
|
else
|
{
|
commonConveyorLine.SetValue(ConveyorLineDBName.PutFinish, 1, "101");
|
commonConveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTaskNum, 9990, "101");
|
}
|
}
|
else
|
{
|
throw new Exception("任务状态异常");
|
}
|
}
|
catch (Exception ex)
|
{
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
|
/// <summary>
|
/// 取货完成
|
/// </summary>
|
/// <param name="task"></param>
|
/// <returns></returns>
|
public WebResponseContent PickUpFinish(Dt_Task task, CommonConveyorLine commonConveyorLine, CommonElevator elevator)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
|
{
|
if (task.DeviceCode.Contains("TSJ"))
|
{
|
elevator.SetValue(ElevatorDBName.TwoLayerPutFinish, 1);
|
elevator.SetValue(ElevatorDBName.StartCommand, 1);
|
content.OK();
|
}
|
else
|
{
|
commonConveyorLine.SetValue(ConveyorLineDBName.PutFinish, 1, "101");
|
content.OK();
|
}
|
|
}
|
else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
|
{
|
if (task.DeviceCode.Contains("TSJ"))
|
{
|
elevator.SetValue(ElevatorDBName.OneLayerPutFinish, 1);
|
elevator.SetValue(ElevatorDBName.StartCommand, 1);
|
content.OK();
|
}
|
}
|
else
|
{
|
throw new Exception("任务状态异常");
|
}
|
}
|
catch (Exception ex)
|
{
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
|
/// <summary>
|
/// 请求取货
|
/// </summary>
|
/// <param name="task"></param>
|
/// <returns></returns>
|
public WebResponseContent RequestPickUp(Dt_Task task, CommonConveyorLine commonConveyorLine, CommonElevator elevator)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
|
{
|
int AllowPickUp = 0;
|
if (task.DeviceCode.Contains("TSJ"))
|
AllowPickUp = elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.TwoLayerAllowPickUp);
|
else
|
AllowPickUp = commonConveyorLine.GetValue<ConveyorLineDBName, short>(ConveyorLineDBName.AllowPickUp, "101");
|
|
content = AllowPickUp == 1 ? content.OK() : content.Error("设备不允许取货");
|
|
}
|
else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
|
{
|
int AllowPickUp = 0;
|
if (task.DeviceCode.Contains("TSJ"))
|
AllowPickUp = elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.OneLayerAllowPickUp);
|
|
content = AllowPickUp == 1 ? content.OK() : content.Error("设备不允许取货");
|
}
|
else
|
{
|
throw new Exception("任务状态异常");
|
}
|
}
|
catch (Exception ex)
|
{
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
|
/// <summary>
|
/// 请求放货
|
/// </summary>
|
/// <param name="task"></param>
|
/// <returns></returns>
|
public WebResponseContent RequestPut(Dt_Task task, CommonConveyorLine commonConveyorLine, CommonElevator elevator)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
|
{
|
int AllowPickUp = 0;
|
if (task.DeviceCode.Contains("TSJ"))
|
AllowPickUp = elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.OneLayerAllowPut);
|
|
content = AllowPickUp == 1 ? content.OK() : content.Error("设备不允许放货");
|
|
}
|
else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
|
{
|
int AllowPickUp = 0;
|
if (task.DeviceCode.Contains("TSJ"))
|
AllowPickUp = elevator.GetValue<ElevatorDBName, short>(ElevatorDBName.TwoLayerAllowPut);
|
else
|
AllowPickUp = commonConveyorLine.GetValue<ConveyorLineDBName, short>(ConveyorLineDBName.AllowPut, "101");
|
|
content = AllowPickUp == 1 ? content.OK() : content.Error("设备不允许放货");
|
}
|
else
|
{
|
throw new Exception("任务状态异常");
|
}
|
}
|
catch (Exception ex)
|
{
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
|
#endregion
|
}
|
}
|