From c2cdf0b95d4c9214646c860609b8c838d6ffa779 Mon Sep 17 00:00:00 2001 From: wangxinhui <wangxinhui@hnkhzn.com> Date: 星期五, 15 八月 2025 13:42:10 +0800 Subject: [PATCH] AGV,成品库代码更新上传 --- 项目代码/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs | 259 ++++++++++++++++++++++++++++++++------------------- 1 files changed, 162 insertions(+), 97 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs" index d8d1275..d4daa32 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs" @@ -1,17 +1,23 @@ 锘縰sing Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using System.Text; using WIDESEA_DTO.Agv; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Enums; using WIDESEAWCS_Core.Helper; +using WIDESEAWCS_Core.LogHelper; +using WIDESEAWCS_DTO.Agv; using WIDESEAWCS_IBasicInfoRepository; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; +using WIDESEAWCS_QuartzJob.DTO; using WIDESEAWCS_Tasks; +using WIDESEAWCS_Tasks.ConveyorLineJob; +using WIDESEAWCS_Tasks.DBNames; namespace WIDESEAWCS_Server.Controllers { @@ -38,42 +44,146 @@ /// <param name="secureApplyModel"></param> /// <returns></returns> [HttpPost, HttpGet, Route("AgvSecureApply"), AllowAnonymous] - public AgvResponseContent AgvSecureApply([FromBody] AgvSecureApplyDTO secureApplyModel) + public AgvResponse AgvSecureApply([FromBody] AgvSecureApplyDTO secureApplyModel) { - AgvResponseContent agvResponseContent = new AgvResponseContent(); - agvResponseContent.ReqCode = secureApplyModel.ReqCode; + AgvResponse agvResponse = new AgvResponse(); try { - var task = _taskRepository.QueryFirst(x => secureApplyModel.TaskCode == x.AgvTaskNum); + var task = _taskRepository.QueryFirst(x => secureApplyModel.ReceiveTaskID.ObjToInt() == x.TaskNum); if (task == null) throw new Exception("鏈壘鍒颁换鍔�"); if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt()) { var content = TakeRequest(task.CurrentAddress); - //if (!content.Status) - //{ - // throw new Exception(content.Message); - //} + if (!content.Status) + { + throw new Exception(content.Message); + } } else { var content = PutRequest(task.NextAddress, task.PalletType); - //if (!content.Status) - //{ - // throw new Exception(content.Message); - //} + if (!content.Status) + { + throw new Exception(content.Message); + } } - task.TaskState = TaskStatusEnum.AGV_WaitToExecute.ObjToInt(); + task.TaskState = TaskStatusEnum.AGV_Puting.ObjToInt(); var up = _taskRepository.UpdateData(task); - agvResponseContent.Code = up ? "0" : "1"; - agvResponseContent.Message = up ? "鎴愬姛" : "澶辫触"; + agvResponse.OK("鎴愬姛","0"); } catch (Exception ex) { - agvResponseContent.Code = "1"; - agvResponseContent.Message = ex.Message; + agvResponse.Error(ex.Message); } - return agvResponseContent; - //return _taskService.AgvSecureApply(secureApplyModel); + return agvResponse; + } + /// <summary> + /// 鎻愬崌鏈虹敵璇� AGV-WCS + /// </summary> + /// <param name="secureApplyModel"></param> + /// <returns></returns> + [HttpPost, HttpGet, Route("AgvHoisterApply"), AllowAnonymous] + public AgvResponse AgvHoisterApply([FromBody] AgvHoisterApplyDTO agvHoisterApplyDTO) + { + AgvResponse agvResponse = new AgvResponse(); + try + { + IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == agvHoisterApplyDTO.HoisterCode); + if (device == null) + { + return agvResponse.Error($"鏈壘鍒板搴旇澶噞agvHoisterApplyDTO.HoisterCode}"); + } + OtherDevice otherDevice = (OtherDevice)device; + //鑾峰彇璁惧鍗忚 + DeviceProDTO? deviceProRead = otherDevice.DeviceProDTOs.Where(x => x.DeviceChildCode == device.DeviceCode && x.DeviceProParamType == nameof(R_HoisterDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); + DeviceProDTO? deviceProWrite = otherDevice.DeviceProDTOs.Where(x => x.DeviceChildCode == device.DeviceCode && x.DeviceProParamType == nameof(W_HoisterDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); + if (deviceProRead == null || deviceProWrite == null) + { + return agvResponse.Error($"鏈壘鍒拌澶噞device.DeviceCode}鍗忚"); + } + //鑾峰彇璇诲彇鍜屽啓鍏� + R_HoisterInfo r_HoisterInfo = otherDevice.Communicator.ReadCustomer<R_HoisterInfo>(deviceProRead.DeviceProAddress); + W_HoisterInfo w_HoisterInfo = otherDevice.Communicator.ReadCustomer<W_HoisterInfo>(deviceProWrite.DeviceProAddress); + if (r_HoisterInfo == null || w_HoisterInfo == null) + { + return agvResponse.Error($"鏈鍙栧埌璁惧{device.DeviceCode}淇″彿"); + } + if (r_HoisterInfo.R_HoisterSysStatus!=3) + { + return agvResponse.Error($"璁惧鐘舵�佷笉涓鸿嚜鍔�"); + } + QuartzLogger.WriteLogToFile("Info_" + device.DeviceCode, $"r_HoisterInfo:{r_HoisterInfo.Serialize()}{Environment.NewLine}w_HoisterInfo:{w_HoisterInfo.Serialize()}{Environment.NewLine}"); + bool IsSuccess = false; + switch (agvHoisterApplyDTO.Request) + { + case "1": + //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀湪褰撳墠灞� 濡傛灉褰撳墠灞傦紝鍏抽棬鐘舵�侊紝鏃犺揣寰呭懡鐩存帴鍐欏叆寮�闂ㄤ俊鍙� + if (r_HoisterInfo.R_HoisterCurrent == agvHoisterApplyDTO.CurrentLayer && r_HoisterInfo.R_HoisterLoadStatus == 2 && r_HoisterInfo.R_HoisterDoorStatus == 2) + { + otherDevice.SetValue(W_HoisterDB.W_HoisterDoorStatus, 1); + IsSuccess = true; + } + else if (r_HoisterInfo.R_HoisterCurrent == agvHoisterApplyDTO.CurrentLayer && r_HoisterInfo.R_HoisterLoadStatus == 2 && r_HoisterInfo.R_HoisterDoorStatus == 1) + { + IsSuccess = true; + } + else if (r_HoisterInfo.R_HoisterCurrent != agvHoisterApplyDTO.CurrentLayer && r_HoisterInfo.R_HoisterLoadStatus == 2 && r_HoisterInfo.R_HoisterDoorStatus == 1) + { + otherDevice.SetValue(W_HoisterDB.W_HoisterDoorStatus, 2); + } + //鍒ゆ柇鎻愬崌鏈轰笉鍦ㄥ綋鍓嶅眰 濡傛灉涓嶅湪褰撳墠灞傦紝鍏抽棬鐘舵�侊紝鏃犺揣寰呭懡鐩存帴鍐欏叆绉诲姩寮�闂ㄤ俊鍙�(褰撳墠) + else if (r_HoisterInfo.R_HoisterCurrent != agvHoisterApplyDTO.CurrentLayer && r_HoisterInfo.R_HoisterLoadStatus == 2 && r_HoisterInfo.R_HoisterDoorStatus == 2) + { + otherDevice.SetValue(W_HoisterDB.W_HoisterTarget, agvHoisterApplyDTO.CurrentLayer); + otherDevice.SetValue(W_HoisterDB.W_HoisterTask, 99); + } + return IsSuccess ? agvResponse.OK($"璇锋眰{agvHoisterApplyDTO.Request}鎴愬姛,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}","1"): agvResponse.Error($"璇锋眰{agvHoisterApplyDTO.Request}澶辫触,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}"); + case "2": + //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀湪褰撳墠灞� 濡傛灉褰撳墠灞傦紝寮�闂ㄧ姸鎬侊紝鏃犺揣寰呭懡 鏀捐 + if (r_HoisterInfo.R_HoisterCurrent == agvHoisterApplyDTO.CurrentLayer && r_HoisterInfo.R_HoisterLoadStatus == 2 && r_HoisterInfo.R_HoisterDoorStatus == 1) + { + IsSuccess = true; + } + return IsSuccess ? agvResponse.OK($"璇锋眰{agvHoisterApplyDTO.Request}鎴愬姛,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}", "2") : agvResponse.Error($"璇锋眰{agvHoisterApplyDTO.Request}澶辫触,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}"); + case "3": + //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀湪褰撳墠灞� 濡傛灉褰撳墠灞傦紝寮�闂ㄧ姸鎬侊紝鏈夎揣寰呭懡鍐欏叆鍏抽棬淇″彿 + if (r_HoisterInfo.R_HoisterCurrent == agvHoisterApplyDTO.CurrentLayer && r_HoisterInfo.R_HoisterLoadStatus == 1 && r_HoisterInfo.R_HoisterDoorStatus == 1 && w_HoisterInfo.W_HoisterDoorStatus!=2) + { + otherDevice.SetValue(W_HoisterDB.W_HoisterDoorStatus, 2); + } + //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀湪褰撳墠灞� 濡傛灉褰撳墠灞傦紝鍏抽棬鐘舵�侊紝鏈夎揣寰呭懡鍐欏叆绉诲姩寮�闂ㄤ俊鍙�(鐩殑) + if (r_HoisterInfo.R_HoisterCurrent == agvHoisterApplyDTO.CurrentLayer && r_HoisterInfo.R_HoisterLoadStatus == 1 && r_HoisterInfo.R_HoisterDoorStatus == 2) + { + otherDevice.SetValue(W_HoisterDB.W_HoisterTarget, agvHoisterApplyDTO.TargetLayer); + otherDevice.SetValue(W_HoisterDB.W_HoisterDoorStatus, 1); + otherDevice.SetValue(W_HoisterDB.W_HoisterTask, 99); + IsSuccess = true; + } + return IsSuccess ? agvResponse.OK($"璇锋眰{agvHoisterApplyDTO.Request}鎴愬姛,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}", "3") : agvResponse.Error($"璇锋眰{agvHoisterApplyDTO.Request}澶辫触,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}"); + case "4": + //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀湪鐩殑灞� 濡傛灉鐩殑灞傦紝寮�闂ㄧ姸鎬侊紝鏈夎揣寰呭懡 鏀捐 + if (r_HoisterInfo.R_HoisterCurrent == agvHoisterApplyDTO.TargetLayer && r_HoisterInfo.R_HoisterLoadStatus == 1 && r_HoisterInfo.R_HoisterDoorStatus == 1) + { + IsSuccess = true; + } + return IsSuccess ? agvResponse.OK($"璇锋眰{agvHoisterApplyDTO.Request}鎴愬姛,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}", "4") : agvResponse.Error($"璇锋眰{agvHoisterApplyDTO.Request}澶辫触,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}"); + case "5": + //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀湪鐩殑灞� 濡傛灉鐩殑灞傦紝寮�闂ㄧ姸鎬侊紝鏃犺揣寰呭懡鍐欏叆鍏抽棬淇″彿 + if (r_HoisterInfo.R_HoisterCurrent == agvHoisterApplyDTO.TargetLayer && r_HoisterInfo.R_HoisterLoadStatus == 2 && r_HoisterInfo.R_HoisterDoorStatus == 1) + { + otherDevice.SetValue(W_HoisterDB.W_HoisterDoorStatus, 2); + IsSuccess = true; + } + return IsSuccess ? agvResponse.OK($"璇锋眰{agvHoisterApplyDTO.Request}鎴愬姛,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}", "5") : agvResponse.Error($"璇锋眰{agvHoisterApplyDTO.Request}澶辫触,浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}"); + default: + return agvResponse.Error($"鏈壘鍒板搴旇姹�,Request:{agvHoisterApplyDTO.Request}"); + } + } + catch (Exception ex) + { + agvResponse.Error($"璇锋眰{agvHoisterApplyDTO.Request}澶辫触,閿欒{ex.Message},浠诲姟{agvHoisterApplyDTO.ReceiveTaskID}"); + } + return agvResponse; } /// <summary> /// AGV浠诲姟鏇存柊/瀹屾垚 @@ -81,56 +191,29 @@ /// <param name="agvUpdateModel"></param> /// <returns></returns> [HttpPost, HttpGet, Route("AgvCallback"), AllowAnonymous] - public AgvResponseContent AgvUpdateTask([FromBody] AgvUpdateDTO agvUpdateModel) + public AgvResponse AgvCallback([FromBody] AgvUpdateDTO agvUpdateModel) { - AgvResponseContent agvResponseContent = new AgvResponseContent(); + AgvResponse agvResponse = new AgvResponse(); try { - if (agvUpdateModel == null) throw new Exception("鏈幏鍙栧埌璇锋眰鍙傛暟"); - agvResponseContent.ReqCode = agvUpdateModel.ReqCode; - var task = _taskRepository.QueryFirst(x => agvUpdateModel.TaskCode == x.AgvTaskNum); - if (task == null) throw new Exception($"鏈壘鍒颁换鍔�,浠诲姟鍙枫�恵agvUpdateModel.TaskCode}銆�"); - switch (agvUpdateModel.Method) + var task = _taskRepository.QueryFirst(x => agvUpdateModel.ReceiveTaskID == x.TaskNum.ToString()); + if (task == null) throw new Exception($"鏈壘鍒颁换鍔�,浠诲姟鍙枫�恵agvUpdateModel.ReceiveTaskID}銆�"); + switch (agvUpdateModel.GoodsState) { - case "start": - break; - case "outbin"://鍑哄簱鏍规嵁杩欎釜淇″彿鍒ゆ柇鍙栬揣瀹屾垚 - if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt()) + //case 1://鍑哄簱鏍规嵁杩欎釜淇″彿鍒ゆ柇鍙栬揣瀹屾垚 + // if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt()) + // { + // var content = TakeFinish(task.CurrentAddress); + // if (!content.Status) throw new Exception(content.Message); + // task.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt(); + // var up = _taskRepository.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚); + // _taskService.TaskCompleted(task.TaskNum); + // } + // break; + case 2://鍏ュ簱鏍规嵁杩欎釜淇″彿鍒ゆ柇鏀捐揣瀹屾垚 + if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) { - var content = TakeFinish(task.CurrentAddress); - if (!content.Status) throw new Exception(content.Message); - task.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt(); - var up = _taskRepository.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚); - _taskService.TaskCompleted(task.TaskNum); - agvResponseContent.Code = up ? "0" : "1"; - agvResponseContent.Message = up ? "鎴愬姛" : "澶辫触"; - return agvResponseContent; - } - break; - case "getSafetySignal"://瀹夊叏淇″彿鐢宠 - { - if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt()) - { - var content = TakeRequest(task.CurrentAddress); - //if (!content.Status) throw new Exception(content.Message); - } - else - { - var content = PutRequest(task.NextAddress, task.PalletType); - //if (!content.Status) throw new Exception(content.Message); - } - task.TaskState = TaskStatusEnum.AGV_WaitToExecute.ObjToInt(); - var up = _taskRepository.UpdateData(task); - agvResponseContent.Code = up ? "0" : "1"; - agvResponseContent.Message = up ? "鎴愬姛" : "澶辫触"; - return agvResponseContent; - } - case "end"://鍏ュ簱鏍规嵁杩欎釜淇″彿鍒ゆ柇鏀捐揣瀹屾垚 - if (task.TaskType != TaskTypeEnum.Outbound.ObjToInt()) - { - var content = PutFinish(task.NextAddress); - if (!content.Status) throw new Exception(content.Message); - Dt_StationManger dt_Station = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == task.NextAddress); + Dt_StationManger dt_Station = _stationMangerRepository.QueryFirst(x => x.StationCode == task.NextAddress); if (dt_Station == null) { throw new Exception($"{task.NextAddress}AGV绔欏彴鏈畾涔�"); @@ -138,29 +221,20 @@ task.CurrentAddress = dt_Station.StationCode; task.NextAddress = ""; task.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt(); - task.DeviceCode = "SC01_CSJ"; + task.DeviceCode = dt_Station.StationDeviceCode; var up = _taskRepository.UpdateData(task); - agvResponseContent.Code = up ? "0" : "1"; - agvResponseContent.Message = up ? "鎴愬姛" : "澶辫触"; - return agvResponseContent; + return agvResponse.OK("鎴愬姛","0"); } break; - case "cancel": - task.TaskState = TaskStatusEnum.Cancel.ObjToInt(); - _taskRepository.UpdateData(task); - break; default: - throw new Exception($"鏈畾涔夋柟娉曞悕銆恵agvUpdateModel.Method}銆�"); + throw new Exception($"鏈畾涔夋柟娉曞悕銆恵agvUpdateModel.TaskState}銆�"); } - agvResponseContent.Code = "0"; - agvResponseContent.Message = "鎴愬姛"; } catch (Exception ex) { - agvResponseContent.Code = "1"; - agvResponseContent.Message = ex.Message; + agvResponse.Error(ex.Message); } - return agvResponseContent; + return agvResponse; //return _taskService.AgvUpdateTask(agvUpdateModel); } @@ -173,45 +247,36 @@ [HttpPost, HttpGet, Route("PutRequest"), AllowAnonymous] public WebResponseContent PutRequest(string code, int palletType) { + WebResponseContent content = new WebResponseContent(); try { - Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == code); + Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == code); if (stationManger == null) { - return WebResponseContent.Instance.Error($"鏈壘鍒扮珯鍙伴厤缃�"); + return content.Error($"鏈壘鍒扮珯鍙伴厤缃�"); } IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode); if (device == null) { - return WebResponseContent.Instance.Error($"鏈壘鍒板搴旇澶�"); + return content.Error($"鏈壘鍒板搴旇澶�"); } OtherDevice otherDevice = (OtherDevice)device; - bool canPut = otherDevice.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanPut, stationManger.StationCode); - if (canPut) + short Command = otherDevice.GetValue<R_ConveyorLineCPDB, short>(R_ConveyorLineCPDB.Command, stationManger.StationCode); + if (Command == 3) { - otherDevice.SetValue(GroundStationDBName.W_PutRequest, true, stationManger.StationCode); - return WebResponseContent.Instance.OK(); + content.OK("鍏佽鏀炬枡"); } else { - otherDevice.SetValue(GroundStationDBName.W_PutRequest, true, stationManger.StationCode); - Thread.Sleep(1000); - canPut = otherDevice.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanPut, stationManger.StationCode); - if (canPut) - { - return WebResponseContent.Instance.OK(); - } - else - { - return WebResponseContent.Instance.Error($"鏀捐揣鐢宠涓�"); - } + return content.Error("绂佹鏀炬枡"); } + return content; } catch (Exception ex) { - return WebResponseContent.Instance.Error(ex.Message); + return content.Error(ex.Message); } } -- Gitblit v1.9.3