From 413194b8c6a71fea8cb7a567800b11703c6c7d5a Mon Sep 17 00:00:00 2001 From: chengsc <11752@DESKTOP-DS49RCP> Date: 星期三, 11 六月 2025 14:40:05 +0800 Subject: [PATCH] 添加叠托机业务 --- Admin.NET/WCS.Application/OpenApi/OpenApi.cs | 311 +++++++++++++++++++++++++-------------------------- 1 files changed, 152 insertions(+), 159 deletions(-) diff --git a/Admin.NET/WCS.Application/OpenApi/OpenApi.cs b/Admin.NET/WCS.Application/OpenApi/OpenApi.cs index 91917e5..c6a068c 100644 --- a/Admin.NET/WCS.Application/OpenApi/OpenApi.cs +++ b/Admin.NET/WCS.Application/OpenApi/OpenApi.cs @@ -3,6 +3,7 @@ using Furion.Logging; using WCS.Application.Entity; using WCS.Application.Util; +using static SKIT.FlurlHttpClient.Wechat.Api.Models.ComponentTCBBatchCreateContainerServiceVersionRequest.Types; namespace WCS.Application; @@ -34,46 +35,51 @@ /// <param name="models">浠诲姟淇℃伅</param> /// <returns>鍙嶉淇℃伅</returns> [AllowAnonymous] - public async Task AddAssignTasks(ResponseTasksModel models) + public async Task<ResponseAgvDto> AddAssignTasks(AgvTaskSend models) { - // 楠岃瘉浠诲姟鏄惁宸插瓨鍦� - var taskInfo = await _db.Queryable<WcsTask>().FirstAsync(w => w.TaskNo == models.TaskNo); - if (taskInfo == null) - { - throw Oops.Bah("浠诲姟:" + models.TaskNo + ";涓嶅瓨鍦�!"); - } - var data1 = FourWayCarUtil.GetCarPath(taskInfo.StartLocate, taskInfo.EndLocate); - if (data1 == null) //|| data1.Count == 0 - { - throw Oops.Bah("鍒嗛厤璺緞涓嶅瓨鍦�!"); - } - // 鏍规嵁浠诲姟鐘舵�� 琛ュ厖璧峰缁撴潫鑺傜偣鐘舵�� - var data2 = FourWayCarUtil.GetCarPathUp(data1, 1); - var path = ""; - var executionPath1 = ""; - foreach (var item in data1) - { - //璺緞鑺傜偣 - var pathXYZ = item.X.ToString().PadLeft(2, '0') + item.Y.ToString().PadLeft(2, '0') + item.Z.ToString().PadLeft(2, '0') + item.NodeCom.ToString(); - path += pathXYZ + ";"; - if (item.IsSendPlc) - { - executionPath1 += pathXYZ + ";"; - } - } - // 鎻掑叆鍥涘悜杞︿换鍔¤〃 - var carTask1 = new WcsCarTasks() - { - TaskNo = taskInfo.TaskNo, - PreId = "", - ExecutionPath = executionPath1, - Path = path, - CarNo = "", - Status = TaskStatusEnum.Wait - }; - var i = _db.Insertable(carTask1).ExecuteCommand(); - Console.WriteLine(""+i); + var response = await new HttpService().GenAgvSendTask(models); + //var response2 = await new HttpService().GenAgvContinueTask("Tk20250503000001"); + //var response3 = await new HttpService().GenAgvUnbind("models", "B010101"); + return response; + // 楠岃瘉浠诲姟鏄惁宸插瓨鍦� + //var taskInfo = await _db.Queryable<WcsTask>().FirstAsync(w => w.TaskNo == models.TaskNo); + //if (taskInfo == null) + //{ + // throw Oops.Bah("浠诲姟:" + models.TaskNo + ";涓嶅瓨鍦�!"); + //} + //var data1 = FourWayCarUtil.GetCarPath("091501", "091601","0"); + //if (data1 == null) //|| data1.Count == 0 + //{ + // throw Oops.Bah("鍒嗛厤璺緞涓嶅瓨鍦�!"); + //} + + //// 鏍规嵁浠诲姟鐘舵�� 琛ュ厖璧峰缁撴潫鑺傜偣鐘舵�� + //var data2 = FourWayCarUtil.GetCarPathUp(data1, 0); + //var path = ""; + //var executionPath1 = ""; + //foreach (var item in data1) + //{ + // //璺緞鑺傜偣 + // var pathXYZ = item.X.ToString().PadLeft(2, '0') + item.Y.ToString().PadLeft(2, '0') + item.Z.ToString().PadLeft(2, '0') + item.NodeCom.ToString(); + // path += pathXYZ + ";"; + // if (item.IsSendPlc) + // { + // executionPath1 += pathXYZ + ";"; + // } + //} + //// 鎻掑叆鍥涘悜杞︿换鍔¤〃 + //var carTask1 = new WcsCarTasks() + //{ + // TaskNo = taskInfo.TaskNo, + // PreId = "", + // ExecutionPath = executionPath1, + // Path = path, + // CarNo = "", + // Status = TaskStatusEnum.Wait + //}; + //var i = _db.Insertable(carTask1).ExecuteCommand(); + //Console.WriteLine(""+i); } /// WCS鎺ュ彈WMS涓嬪彂鐨勪换鍔�(澶� @@ -93,7 +99,8 @@ throw Oops.Bah("浠诲姟宸插瓨鍦�!"); } var listTask = new List<WcsTask>(); - foreach (var models in modelList) + var list = modelList.OrderBy(m => m.Order).ThenBy(m => m.TaskNo).ToList(); + foreach (var models in list) { if (models.TaskType == "0") { @@ -112,11 +119,15 @@ Status = TaskStatusEnum.Wait, Levels = 999, Origin = "WMS", + SkuNo = models.SkuNo, + SkuName=models.SkuName, + LotNo=models.LotNo, StartRoadway = models.StartRoadway, StartLocate = models.StartLocate, EndLocate = models.EndLocate, EndRoadway = models.EndRoadway, PalletNo = models.PalletNo, + CreateTime = DateTime.Now }; // 鑻ラ潪AGV浠诲姟澧炲姞浠诲姟ID @@ -125,9 +136,9 @@ taskAdd.TaskId = FourWayCarUtil.GetTaskId(); } - listTask.Add(taskAdd); + await _db.Insertable(taskAdd).ExecuteCommandAsync(); } - await _db.Insertable(listTask).ExecuteCommandAsync(); + } /// <summary> /// WCS鎺ュ彈WMS涓嬪彂鐨勪换鍔�(鍗曟潯浠诲姟) @@ -160,6 +171,9 @@ Type = models.Type, Levels = 999, Origin = "WMS", + SkuNo = models.SkuNo, + SkuName = models.SkuName, + LotNo = models.LotNo, StartRoadway = models.StartRoadway, StartLocate = models.StartLocate, EndLocate = models.EndLocate, @@ -407,53 +421,29 @@ [UnitOfWork] public async Task<dynamic> agvCallback(AGVCallBackInput input) { + Log.Information("AGV鍙嶉浠诲姟" + input.ToJson()); AGVCallBackResponse result = new AGVCallBackResponse() { ReqCode = input.ReqCode, Message = "鎴愬姛", Code = "0" }; - if (input.TaskCode.Substring(0, 3) != "WCS" && input.TaskCode.Substring(0, 2) != "TK") + if (input.robotTaskCode.Substring(0, 3) != "WCS" && input.robotTaskCode.Substring(0, 2) != "TK") + { + result.Message = "鍙嶉鐨勪换鍔′笉鏄疻CS鐨勪换鍔�"; + result.Code = "1"; return result; + } PLCUtil modUtil = null; try { - var modTask = await _db.Queryable<WcsTask>().FirstAsync(s => s.TaskNo == input.TaskCode); + var modTask = await _db.Queryable<WcsTask>().FirstAsync(s => s.TaskNo == input.robotTaskCode); if (modTask != null) { - switch (input.Method) + switch (input.Extra.Values.Method) { case "end"://浠诲姟瀹屾垚 { - - //璐у搧鎷夊埌瀵嗛泦搴撳叆搴撳彛闇�瑕佸悜杈撻�佺嚎鍐欏叆鍊� - if (modTask.EndLocate == AGVStaionEnum.A1.ToString()) - { - var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == "杈撻�佺嚎"); - var modConn = new PLCUtil(modPlc); - var modDevice = PLCTaskAction.plcDevices.First(s => s.Text == "C鍙�"); - var modStation = PLCTaskAction.plcPositions.First(s => s.Text == "C鍙g敵璇峰叆搴�"); - var plcResult = modConn.SetPlcDBValue(modStation.PosType, modDevice.DbNumber, modStation.PlcPos, "100"); - if (plcResult.IsSucceed) - { - WcsTaskMonitor modTaskMonitorPLC = new WcsTaskMonitor() - { - TaskNo = modTask.TaskNo, - PlcId = modDevice.PlcId, - PlcName = modStation.PlcPos, - StartLocat = modTask.StartLocate, - EndLocat = modTask.EndLocate, - Status = TaskStatusEnum.Doing, - InteractiveMsg = $"鍚憑modStation.Text}鍐欏叆鎸囦护100锛岀粨鏋渰plcResult.IsSucceed}", - }; - _db.Insertable(modTaskMonitorPLC).ExecuteCommand(); - HubUtil.PublicTaskMonitor(modTaskMonitorPLC.Adapt<WcsTaskMonitorOutput>()); - } - else - { - Log.Error("C鍙g敵璇峰叆搴撳啓鍏ュ��100澶辫触"); - } - } modTask.Status = TaskStatusEnum.Complete; modTask.FinishDate = DateTime.Now; await _db.Updateable(modTask).ExecuteCommandAsync(); @@ -477,7 +467,7 @@ var inputs = new TaskRequestWMS(); inputs.TaskNo = modTask.TaskNo; inputs.PalletNo = modTask.PalletNo; - inputs.TaskType = "2"; + inputs.TaskType = ((int)modTask.TaskType).ToString(); inputs.TaskStatus = "2"; var modResponseTask = httpService.RequestTask(inputs).Result; } @@ -486,6 +476,17 @@ break; case "outbin"://璧板嚭鍌ㄤ綅 { + WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor() + { + TaskNo = modTask.TaskNo, + //PlcId = modDevice.PlcId, + PlcName = "AGV", + StartLocat = modTask.StartLocate, + EndLocat = modTask.EndLocate, + Status = TaskStatusEnum.Complete, + InteractiveMsg = $"AGV灏忚溅鍙嶉浠诲姟鍙栬揣瀹屾垚锛岃蛋鍑哄偍浣�", + }; + await _db.Insertable(modTaskMonitor).ExecuteCommandAsync(); //鍙嶉WMS浠诲姟鍙栬揣瀹屾垚銆乄MS鍒ゆ柇鏄钩搴撳偍浣嶅氨鏇存柊鍌ㄤ綅鐘舵�� if (modTask.Origin == "WMS") { @@ -493,74 +494,67 @@ var inputs = new TaskRequestWMS(); inputs.TaskNo = modTask.TaskNo; inputs.PalletNo = modTask.PalletNo; - inputs.TaskType = "2"; + inputs.TaskType = ((int)modTask.TaskType).ToString(); inputs.TaskStatus = "2"; var modResponseTask = httpService.RequestTaskQh(inputs).Result; } } break; - case "apply"://鏀捐揣鐢宠 + case "release"://鏀捐揣鐢宠 { - //todo:鍘荤爜鍨涘伐浣嶅彇璐э紝闇�瑕佸啓PLC淇″彿鍏抽棴鍏夊箷 - if ((modTask.StartLocate == AGVStaionEnum.B1.ToString() || modTask.StartLocate == AGVStaionEnum.B2.ToString()) - && (modTask.EndLocate == AGVStaionEnum.C1.ToString() || modTask.EndLocate == AGVStaionEnum.C2.ToString())) + if (modTask.EndLocate != "B040101")//9鍙峰伐浣嶅湴鍧� { - var no = modTask.StartLocate.Substring(1, 1); - var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Type == PLCTypeEnum.RobotPalletizer && s.WareHouseNo == no); - var modConn = new PLCUtil(modPlc); - var modDevice = PLCTaskAction.plcDevices.FirstOrDefault(s => s.PlcId == modPlc.Id && s.Level == DeviceLevelEnum.DB); - var modPos = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDevice.Id && s.Text == "鍏抽棴鍏夊箷"); - var res = modConn.SetPlcDBValue(modPos.PosType, modDevice.DbNumber, modPos.PlcPos, "1"); - var modTaskMonitor = new WcsTaskMonitor() - { - TaskNo = modTask.TaskNo, - PlcId = modDevice.PlcId, - PlcName = modPos.PlcPos, - Status = TaskStatusEnum.Doing, - InteractiveMsg = $"鍚憑modDevice.Text}鍐欏叆鍏抽棴鍏夊箷1锛岀粨鏋渰res.IsSucceed}", - }; - _db.Insertable(modTaskMonitor).ExecuteCommand(); - HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); - Task.Run(() => - { - Thread.Sleep(1000); - modConn.SetPlcDBValue(modPos.PosType, modDevice.DbNumber, modPos.PlcPos, "0"); - var modTaskMonitor = new WcsTaskMonitor() - { - TaskNo = modTask.TaskNo, - PlcId = modDevice.PlcId, - PlcName = modPos.PlcPos, - Status = TaskStatusEnum.Doing, - InteractiveMsg = $"鍚憑modDevice.Text}鍐欏叆寮�鍚厜骞�0锛岀粨鏋渰res.IsSucceed}", - }; - _db.Insertable(modTaskMonitor).ExecuteCommand(); - HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); - }); - modConn.Close(); + result.Code = "1"; + result.Message = "鎵句笉鍒拌浠诲姟"; + return result; + } + //modTask.Status = TaskStatusEnum.Complete; + modTask.IsComple = "1"; + await _db.Updateable(modTask).ExecuteCommandAsync(); + WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor() + { + TaskNo = modTask.TaskNo, + //PlcId = modDevice.PlcId, + PlcName = "AGV", + StartLocat = modTask.StartLocate, + EndLocat = modTask.EndLocate, + Status = TaskStatusEnum.Complete, + InteractiveMsg = $"AGV灏忚溅鍙嶉浠诲姟鍒拌揪9宸ヤ綅", + }; + await _db.Insertable(modTaskMonitor).ExecuteCommandAsync(); + HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); + HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + if (modTask.Origin == "WMS") + { + HttpService httpService = new HttpService(); + var inputs = new TaskRequestWMS(); + inputs.TaskNo = modTask.TaskNo; + inputs.PalletNo = modTask.PalletNo; + inputs.TaskType = ((int)modTask.TaskType).ToString(); + inputs.TaskStatus = "2"; + var modResponseTask = httpService.RequestTaskQh(inputs).Result; } } break; - case "start"://浠诲姟寮�濮� + case "notifyFullSite": { - //寮�濮嬪悜鎷嗘墭鏈烘斁鍏ユ墭鐩樹换鍔� - if (modTask.EndLocate == AGVStaionEnum.D1.ToString()) + var palletNo = input.Extra.Values.carrierCode; + var count = input.Extra.Values.pileCount; + if (string.IsNullOrWhiteSpace(palletNo) || count <= 0) { - var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Type == PLCTypeEnum.PalletMachine); - var modConn = new PLCUtil(modPlc); - var modDevice = PLCTaskAction.plcDevices.FirstOrDefault(s => s.Text == "鎷嗘墭鏈�"); - var res = modConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "1"); - modConn.Close(); + throw new Exception("鍙傛暟锛氭墭鐩樺彿/鏁伴噺楠岃瘉澶辫触"); } + //鍚慦MS鐢宠绌烘墭鍏ュ簱 + HttpService httpService = new HttpService(); + var inputs = new NullPallInRequest(); + + inputs.PalletNo = modTask.PalletNo; + inputs.PallNum = count; + inputs.Locate = "B100101";//鍙犳墭鐩樻満浣嶇疆 + inputs.HouseNo = "W02"; + var modResponseTask = httpService.RequestLiKuPallet(inputs); - var taskMonitor = new WcsTaskMonitor() - { - TaskNo = modTask.TaskNo, - PlcName = input.Method, - InteractiveMsg = $"AGV灏忚溅鍙嶉浠诲姟寮�濮�" - }; - await _db.Insertable(taskMonitor).ExecuteCommandAsync(); - HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>()); } break; case "cancel"://浠诲姟鍙栨秷 @@ -609,11 +603,10 @@ modUtil?.Close(); } - + Log.Information("AGV鍙嶉浠诲姟杩斿洖" + result.ToJson()); return result; } - - + /// <summary> /// 鑾峰彇鍘熸潗鏂欎粨鐘舵�� /// </summary> @@ -673,35 +666,35 @@ /// </summary> /// <param name="input"></param> /// <returns></returns> - [HttpPost] - [UnitOfWork] - public async Task ProductStorage(RequestStorage input) - { - var intProduct = AGVStorageUtil.ProductCount(); - var intTask = await _db.Queryable<WcsTask>().Where(s => s.TaskType == TaskTypeEnum.Move - && s.Type == PLCTypeEnum.AGV && s.Status <= TaskStatusEnum.Doing - && s.StartLocate.StartsWith("Z") && s.EndLocate == AGVStaionEnum.A1.ToString()).CountAsync(); - if (input.Qty > intProduct) - throw Oops.Bah($"杈撳叆鏁伴噺澶т簬鍙嚭鏁伴噺{intProduct}"); - var listTask = new List<WcsTask>(); - var TaskNo = GetTaskCode("WCS"); - for (int i = 0; i < input.Qty; i++) - { - listTask.Add(new WcsTask() - { - TaskNo = "WCS" + DateTime.Now.ToString("yyyyMMdd") + (TaskNo++).ToString().PadLeft(4, '0'), - TaskType = TaskTypeEnum.Move, - Type = PLCTypeEnum.AGV, - StartLocate = AGVStaionEnum.Z11.ToString(), - EndLocate = AGVStaionEnum.A1.ToString(), - PalletNo = "", - Status = TaskStatusEnum.Wait, - Levels = 10, - Origin = "PDA" - }); - } - await _db.Insertable(listTask).ExecuteCommandAsync(); - } + //[HttpPost] + //[UnitOfWork] + //public async Task ProductStorage(RequestStorage input) + //{ + // var intProduct = AGVStorageUtil.ProductCount(); + // var intTask = await _db.Queryable<WcsTask>().Where(s => s.TaskType == TaskTypeEnum.Move + // && s.Type == PLCTypeEnum.AGV && s.Status <= TaskStatusEnum.Doing + // && s.StartLocate.StartsWith("Z") && s.EndLocate == AGVStaionEnum.A1.ToString()).CountAsync(); + // if (input.Qty > intProduct) + // throw Oops.Bah($"杈撳叆鏁伴噺澶т簬鍙嚭鏁伴噺{intProduct}"); + // var listTask = new List<WcsTask>(); + // var TaskNo = GetTaskCode("WCS"); + // for (int i = 0; i < input.Qty; i++) + // { + // listTask.Add(new WcsTask() + // { + // TaskNo = "WCS" + DateTime.Now.ToString("yyyyMMdd") + (TaskNo++).ToString().PadLeft(4, '0'), + // TaskType = TaskTypeEnum.Move, + // Type = PLCTypeEnum.AGV, + // StartLocate = AGVStaionEnum.Z11.ToString(), + // EndLocate = AGVStaionEnum.A1.ToString(), + // PalletNo = "", + // Status = TaskStatusEnum.Wait, + // Levels = 10, + // Origin = "PDA" + // }); + // } + // await _db.Insertable(listTask).ExecuteCommandAsync(); + //} /// <summary> /// 鑷姩鐢熸垚浠诲姟鍙� /// </summary> -- Gitblit v1.8.0