using AutoMapper; using LogLibrary.Log; using Newtonsoft.Json; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_DTO.AGV; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_IBasicInfoRepository; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_Tasks.ConveyorLineJob; using WIDESEAWCS_Tasks.ElevatorJob; namespace WIDESEAWCS_Tasks.AGV { public class AGVSignal:IAGVSignal { private readonly ITaskRepository _taskRepository; private readonly ITask_HtyRepository _taskhtyRepository; private readonly ITaskService _taskService; private readonly IDt_StationManagerRepository _stationManagerRepository; private readonly IMapper _mapper; public AGVSignal(ITaskRepository taskRepository, ITaskService taskService,IDt_StationManagerRepository stationManagerRepository,ITask_HtyRepository taskhtyRepository, IMapper mapper) { _taskRepository = taskRepository; _taskService = taskService; _stationManagerRepository = stationManagerRepository; _taskhtyRepository = taskhtyRepository; _mapper = mapper; } #region AGV与设备信号交互 /// /// AGV--设备交互 /// /// public WebResponseContent SignalInteraction(AGVReceiveDTO receiveDTO) { WebResponseContent content = new WebResponseContent(); try { LogFactory.WriteInfo($"AGV状态上报", $"参数【{JsonConvert.SerializeObject(receiveDTO)}】{Environment.NewLine}{Environment.NewLine}"); var task = _taskRepository.QueryFirst(t => t.AGVTaskNum == receiveDTO.orderId); if (task == null) { return content.Error("未找到任务"); } CommonConveyorLine? commonConveyorLine = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "1001") as CommonConveyorLine; CommonElevator? elevator = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ1") as CommonElevator; switch (receiveDTO.status) { case 20: content = RequestPickUp(task, commonConveyorLine, elevator); break; case 21: content = PickUpFinish(task, commonConveyorLine, elevator); break; case 22: content = RequestPut(task, commonConveyorLine, elevator); break; case 8: content = PutFinish(task, commonConveyorLine, elevator); break; default: content.Error("未知状态"); break; } LogFactory.WriteInfo($"AGV状态上报", $"返回参数【{JsonConvert.SerializeObject(content)}】{Environment.NewLine}{Environment.NewLine}"); return content; } 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.TaskState == (int)TaskAcrossFloorStatusEnum.FirstCarry) { if (task.Floor == "1F") { elevator.SetValue(ElevatorDBName.OneLayerPutFinish, 1); } else { elevator.SetValue(ElevatorDBName.TwoLayerPutFinish, 1); } _taskService.UpdateTaskStatusToNext(task.TaskNum); content.OK(); } else if (task.TaskState == (int)TaskAcrossFloorStatusEnum.EndAddressExecuting) { _taskService.UpdateTaskStatusToNext(task.TaskNum); content.OK(); } if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.CarryGroup) { _taskService.UpdateTaskStatusToNext(task.TaskNum); } if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.OutbondGroup) { if (task.TaskState == (int)TaskOutStatusEnum.AGV_OutExecuting) { _taskService.UpdateTaskStatusToNext(task.TaskNum); } } else if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.InboundGroup) { commonConveyorLine.Communicator.WriteNoRead("DB100.0", Convert.ToInt32(9990)); commonConveyorLine.SetValue(ConveyorLineDBName.PutFinish, 1, "LK001"); Thread.Sleep(1000); commonConveyorLine.Communicator.WriteNoRead("DB100.0", Convert.ToInt32(9990)); commonConveyorLine.Communicator.WriteNoRead("DB100.4", Convert.ToInt16(task.TaskNum)); task.TaskState = (int)TaskInStatusEnum.AGV_InFinish; _taskRepository.UpdateData(task); _taskService.UpdateTaskStatusToNext(task.TaskNum); content.OK(); } } 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.TaskState == (int)TaskAcrossFloorStatusEnum.SecondCarry) { if (task.Floor == "1F") { elevator.SetValue(ElevatorDBName.OneLayerPickUpFinish, 1); } else { elevator.SetValue(ElevatorDBName.TwoLayerPickUpFinish, 1); } //task.TaskState = (int)TaskAcrossFloorStatusEnum.EndAddressExecuting; //_taskRepository.UpdateData(task); _taskService.UpdateTaskStatusToNext(task.TaskNum); } if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.OutbondGroup) { commonConveyorLine.SetValue(ConveyorLineDBName.PickUpFinish, 1, "LK001"); //task.TaskState = (int)TaskOutStatusEnum.AGV_OutExecuting; //_taskRepository.UpdateData(task); _taskService.UpdateTaskStatusToNext(task.TaskNum); content.OK(); } } 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.TaskState == (int)TaskAcrossFloorStatusEnum.SecondCarry) { if (task.Floor == "1F") { if (elevator.GetValue(ElevatorDBName.OneLayerAllowPickUp) == 1) { _taskService.ContinueAgvTask(task.AGVTaskNum); content.OK(); } else { task.AGVSign = "RequestPickUp"; _taskRepository.UpdateData(task); content.Error("设备不允许取货"); } } else { if (elevator.GetValue(ElevatorDBName.TwoLayerAllowPickUp) == 1) { _taskService.ContinueAgvTask(task.AGVTaskNum); content.OK(); } else { task.AGVSign = "RequestPickUp"; _taskRepository.UpdateData(task); content.Error("设备不允许取货"); } } } if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.OutbondGroup) { if (commonConveyorLine.GetValue(ConveyorLineDBName.AllowPickUp, "LK001") == 1) { _taskService.ContinueAgvTask(task.AGVTaskNum); //task.TaskState = (int)TaskOutStatusEnum.Line_OutFinish; //_taskRepository.UpdateData(task); _taskService.UpdateTaskStatusToNext(task.TaskNum); content.OK(); } else { task.AGVSign = "RequestPickUp"; _taskRepository.UpdateData(task); content.Error("设备不允许取货"); } } } catch (Exception ex) { task.AGVSign = "RequestPickUp"; _taskRepository.UpdateData(task); content.Error(ex.Message); } return content; } /// /// 请求放货 /// /// /// public WebResponseContent RequestPut(Dt_Task task, CommonConveyorLine commonConveyorLine, CommonElevator elevator) { WebResponseContent content = new WebResponseContent(); try { if (task.TaskState == (int)TaskAcrossFloorStatusEnum.FirstCarry) { if (task.Floor == "1F") { if (elevator.GetValue(ElevatorDBName.OneLayerAllowPut) == 1) { _taskService.ContinueAgvTask(task.AGVTaskNum); content.OK(); } else { task.AGVSign = "RequestPut"; _taskRepository.UpdateData(task); content.Error("设备不允许放货"); } } else { if (elevator.GetValue(ElevatorDBName.TwoLayerAllowPut) == 1) { _taskService.ContinueAgvTask(task.AGVTaskNum); content.OK(); } else { task.AGVSign = "RequestPut"; _taskRepository.UpdateData(task); content.Error("设备不允许放货"); } } } if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.InboundGroup) { if (commonConveyorLine.GetValue(ConveyorLineDBName.AllowPut, "LK001") == 1) { _taskService.ContinueAgvTask(task.AGVTaskNum); content.OK(); } else { task.AGVSign = "RequestPut"; _taskRepository.UpdateData(task); content.Error("设备不允许取货"); } } } catch (Exception ex) { task.AGVSign = "RequestPut"; _taskRepository.UpdateData(task); content.Error(ex.Message); } return content; } #endregion } }