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; } /// /// AGV状态上报 /// /// /// [HttpPost, Route("AGVStatusReport"), AllowAnonymous] public WebResponseContent AGVStatusReport(AGVReceiveDTO receiveDTO) => SignalInteraction(receiveDTO); #region AGV与设备信号交互 /// /// AGV--设备交互 /// /// 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); } } /// /// 放货完成 /// /// /// 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; } /// /// 取货完成 /// /// /// 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; } /// /// 请求取货 /// /// /// 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.TwoLayerAllowPickUp); else AllowPickUp = commonConveyorLine.GetValue(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.OneLayerAllowPickUp); content = AllowPickUp == 1 ? content.OK() : content.Error("设备不允许取货"); } else { throw new Exception("任务状态异常"); } } catch (Exception ex) { content.Error(ex.Message); } return content; } /// /// 请求放货 /// /// /// 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.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.TwoLayerAllowPut); else AllowPickUp = commonConveyorLine.GetValue(ConveyorLineDBName.AllowPut, "101"); content = AllowPickUp == 1 ? content.OK() : content.Error("设备不允许放货"); } else { throw new Exception("任务状态异常"); } } catch (Exception ex) { content.Error(ex.Message); } return content; } #endregion } }