huangxiaoqiang
6 小时以前 16749e23b489ee24f993fe9e87346680b7bcf63a
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs
@@ -6,9 +6,11 @@
using WIDESEAWCS_Core;
using WIDESEAWCS_DTO.AGV;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_Tasks;
using WIDESEAWCS_Tasks.AGV;
using WIDESEAWCS_Tasks.ConveyorLineJob;
using WIDESEAWCS_Tasks.ElevatorJob;
@@ -19,10 +21,14 @@
    public class AGVController : ControllerBase
    {
        private readonly ITaskRepository _taskRepository;
        private readonly ITaskService _taskService;
        private readonly IAGVSignal _signal;
        public AGVController(ITaskRepository taskRepository)
        public AGVController(ITaskRepository taskRepository,ITaskService taskService,IAGVSignal signal)
        {
            _taskRepository = taskRepository;
            _taskService = taskService;
            _signal = signal;
        }
        /// <summary>
@@ -30,217 +36,12 @@
        /// </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)
        [HttpPost, HttpGet,Route("AGVStatusReport"), AllowAnonymous]
        public WebResponseContent AGVStatusReport([FromBody] 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);
            }
            return _signal.SignalInteraction(receiveDTO);
        }
        /// <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
    }
}