From 25cb7cd50d12f48e93d6cde47420ca3458e9c47a Mon Sep 17 00:00:00 2001 From: helongyang <647556386@qq.com> Date: 星期四, 12 六月 2025 21:39:43 +0800 Subject: [PATCH] 1 --- 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/成品仓/AGV_CPExtend.cs | 239 ++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 200 insertions(+), 39 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPExtend.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPExtend.cs" index ce8099a..8909902 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPExtend.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPExtend.cs" @@ -1,4 +1,5 @@ -锘縰sing System; +锘縰sing OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -8,7 +9,9 @@ using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Helper; +using WIDESEAWCS_DTO.Agv; using WIDESEAWCS_Model.Models; +using WIDESEAWCS_QuartzJob; namespace WIDESEAWCS_Tasks { @@ -18,52 +21,210 @@ { try { - var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskStatusEnum.New.ObjToInt() && nameof(AGV_FLJob).Contains(x.DeviceCode) && !string.IsNullOrEmpty(x.DeviceCode)).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList(); - foreach (var task in newTasks) + var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => (x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt()|| x.TaskState == TaskStatusEnum.New.ObjToInt()) && nameof(AGV_CPJob).Contains(x.DeviceCode) && !string.IsNullOrEmpty(x.DeviceCode) && x.TaskType!=999).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList(); + + if (newTasks.Count>0) { - try + foreach (var task in newTasks) { - if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt()) - task.CurrentAddress = GetAGVAddress(task.CurrentAddress); - else - task.NextAddress = GetAGVAddress(task.NextAddress); - AgvTaskDTO taskDTO = new AgvTaskDTO() + try { - TaskCode = task.AgvTaskNum, - ReqCode = DateTime.Now.ToString("yyyyMMddHHmmss") + task.AgvTaskNum, - TaskTyp = task.TaskType < TaskTypeEnum.Inbound.ObjToInt() ? "FLC" : "FLR", - ctnrCode = task.PalletCode, - PositionCodePath = new List<CodePath>() - { - new CodePath() + if (task.TaskType == TaskTypeEnum.OutProduct.ObjToInt()) + task.CurrentAddress = GetAGVAddress(task.CurrentAddress); + else + task.NextAddress = GetAGVAddress(task.NextAddress); + AgvTaskDTO taskDTO = new AgvTaskDTO() { - type="05", - positionCode=task.CurrentAddress - }, - new CodePath() + TaskCode = task.AgvTaskNum, + ReqCode = DateTime.Now.ToString("yyyyMMdd") + task.AgvTaskNum, + TaskTyp = task.TaskType < TaskTypeEnum.Inbound.ObjToInt() ? "CPC" : "CPR", + ctnrCode = task.PalletCode, + PositionCodePath = new List<CodePath>() + { + new CodePath() + { + type = "05", + positionCode = task.CurrentAddress + }, + new CodePath() + { + type = "05", + positionCode = task.NextAddress + } + } + }; + if (taskDTO.TaskTyp== "CPC") { - type="05", - positionCode=task.NextAddress + taskDTO.Priority = task.Grade.ToString(); } - }, - }; - WebResponseContent content = _taskService.AgvSendTask(taskDTO, APIEnum.Agv_FLSendTask); - if (!content.Status) throw new Exception(content.Message); - - task.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt(); - + if (task.GroupId.IsNotEmptyOrNull()) + { + taskDTO.GroupId=task.GroupId; + } + //鍙戦�丄GV浠诲姟 + WebResponseContent content = _taskService.AgvSendTask(taskDTO, APIEnum.Agv_CPSendTask); + if (!content.Status) + throw new Exception(content.Message); + if (taskDTO.TaskTyp == "CPC") + { + task.Dispatchertime = DateTime.Now; + _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing); + } + else + { + task.Dispatchertime = DateTime.Now; + _taskService.UpdateTask(task, TaskStatusEnum.AGV_Takeing); + } + Thread.Sleep(500); + } + catch (Exception ex) + { + task.TaskState = TaskStatusEnum.Exception.ObjToInt(); + task.ExceptionMessage = ex.Message; + } } - catch (Exception ex) + if (newTasks.Count > 0) { - task.TaskState = TaskStatusEnum.Exception.ObjToInt(); - task.ExceptionMessage = ex.Message; + _taskService.UpdateData(newTasks); } } - _taskService.UpdateData(newTasks); + var newTasksLocations = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskStatusEnum.New.ObjToInt() && nameof(AGV_CPJob).Contains(x.DeviceCode) && !string.IsNullOrEmpty(x.DeviceCode) && x.Remark == "娴嬭瘯绌烘").ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList(); + if (newTasksLocations.Count>0) + { + foreach (var task in newTasksLocations) + { + try + { + string CurrentAddress = GetAGVAddress(task.CurrentAddress); + string NextAddress = GetAGVAddress(task.NextAddress); + AgvTaskDTO taskDTO = new AgvTaskDTO() + { + TaskCode = task.AgvTaskNum, + ReqCode = DateTime.Now.ToString("yyyyMMdd") + task.AgvTaskNum, + TaskTyp = "CP", + ctnrCode = task.PalletCode, + PositionCodePath = new List<CodePath>() + { + new CodePath() + { + type="05", + positionCode=CurrentAddress + }, + new CodePath() + { + type="05", + positionCode=NextAddress + } + }, + }; + //鍙戦�丄GV浠诲姟 + WebResponseContent content = _taskService.AgvSendTask(taskDTO, APIEnum.Agv_CPSendTask); + if (!content.Status) + throw new Exception(content.Message); + task.TaskState = TaskStatusEnum.AGV_Takeing.ObjToInt(); + task.CurrentAddress = CurrentAddress; + task.NextAddress = NextAddress; + _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing); + } + catch (Exception ex) + { + task.TaskState = TaskStatusEnum.Exception.ObjToInt(); + task.ExceptionMessage = ex.Message; + } + } + } } catch (Exception ex) { - WriteError(nameof(AGV_FLJob), ex.Message, ex); + WriteError(nameof(AGV_CPJob), ex.Message, ex); + } + } + /// <summary> + /// AGV鍙栨斁璐у洖璋� + /// </summary> + public void ContinueAGVTask() + { + try + { + //鑾峰彇鏄惁鏈夊畨鍏ㄧ敵璇蜂腑鐨勪换鍔� + var continueTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => (x.TaskState == TaskStatusEnum.AGV_WaitToExecute.ObjToInt()) && nameof(AGV_CPJob).Contains(x.DeviceCode) && !string.IsNullOrEmpty(x.DeviceCode)).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList(); + foreach (var continueTask in continueTasks) + { + //鍙栬揣鍥炶皟 + if (continueTask.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) + { + Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == continueTask.CurrentAddress || x.StationCode == continueTask.CurrentAddress); + if (stationManger == null) + { + continue; + } + IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode); + if (device == null) + { + continue; + } + OtherDevice otherDevice = (OtherDevice)device; + short canTake = otherDevice.GetValue<GroundStationDBName, short>(GroundStationDBName.R_IsCanTake, stationManger.StationCode); + if (canTake != 1) + { + continue; + } + } + else//鏀捐揣鍥炶皟 + { + Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == continueTask.NextAddress); + if (stationManger == null) + { + continue; + } + IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode); + if (device == null) + { + continue; + } + OtherDevice otherDevice = (OtherDevice)device; + short canPut = otherDevice.GetValue<GroundStationDBName, short>(GroundStationDBName.R_IsCanPut, stationManger.StationCode); + if (canPut != 1) + { + continue; + } + } + //鑾峰彇璋冨叆鍙傛暟 + AGVBoxApplyPassDTO boxApplyPassDTO = new AGVBoxApplyPassDTO() + { + ReqCode = Guid.NewGuid().ToString().Replace("-", ""), + ReqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + TaskCode = continueTask.AgvTaskNum + }; + if (continueTask.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) + { + boxApplyPassDTO.Type = "1"; + } + else + { + boxApplyPassDTO.Type = "2"; + } + //璇锋眰鏂欑鍥炶皟鎺ュ彛 + WebResponseContent content = _taskService.AgvBoxApplyPass(boxApplyPassDTO); + if (content.Status && continueTask.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && boxApplyPassDTO.TaskCode == continueTask.AgvTaskNum) + { + _taskService.UpdateTask(continueTask, TaskStatusEnum.AGV_Executing); + } + else if (content.Status && continueTask.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && boxApplyPassDTO.TaskCode== continueTask.AgvTaskNum) + { + _taskService.UpdateTask(continueTask, TaskStatusEnum.AGV_Puting); + } + else + { + continueTask.ExceptionMessage = content.Message; + _taskService.UpdateTask(continueTask, TaskStatusEnum.Exception); + } + } + + } + catch (Exception ex) + { + WriteError(nameof(AGV_CPJob), ex.Message, ex); } } /// <summary> @@ -81,11 +242,11 @@ var Layer = Convert.ToInt16(targetCodes[3]); var a = Row switch { - 1 => "A1", - 2 => "B1", - 3 => "C1", - 4 => "D1", - 5 => "E1", + 1 => "A", + 2 => "B", + 3 => "C", + 4 => "D", + 5 => "E", _ => throw new Exception($"鏈畾涔夌殑鎺�,鍦板潃:銆恵Address}銆�"), }; var b = Layer > 9 ? "" + Layer : "0" + Layer; -- Gitblit v1.9.3