From 94a1a7574f7ce3c61148742cb6f8e6c60a4ed3aa Mon Sep 17 00:00:00 2001 From: chengsc <11752@DESKTOP-DS49RCP> Date: 星期一, 28 四月 2025 17:19:53 +0800 Subject: [PATCH] 解决冲突 --- Admin.NET/WCS.Application/Util/FourWayCarUtil.cs | 222 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 204 insertions(+), 18 deletions(-) diff --git a/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs b/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs index c4bc14f..b8aa592 100644 --- a/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs +++ b/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs @@ -7,6 +7,7 @@ using System.Text; using System.Threading.Tasks; using WCS.Application.Entity; +using static Elastic.Clients.Elasticsearch.JoinField; using static SKIT.FlurlHttpClient.Wechat.Api.Models.CustomServiceKfSessionGetWaitCaseResponse.Types; namespace WCS.Application.Util; @@ -196,13 +197,13 @@ executionPath1 += pathXYZQian + ";"; } executionPath2 += pathXYZQian + ";"; - //鍒ゆ柇娣诲姞鍓嶇疆浠诲姟Id - if (!preId1.Contains(item + "")) - { - preId1 += item + ";"; - } + } - + //鍒ゆ柇娣诲姞鍓嶇疆浠诲姟Id + if (!preId1.Contains(item + "")) + { + preId1 += item + ";"; + } isOk = "2"; } @@ -277,7 +278,8 @@ PalletNo = "", Status = TaskStatusEnum.Wait, Levels = 999, - Origin = "WCS" + Origin = "WCS", + CarIp = item.CarPlcIp }; _db.Insertable(modTask).ExecuteCommand(); HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); @@ -301,7 +303,8 @@ #region 鍒ゆ柇鐜版湁浠诲姟涓渶缁堣妭鐐规槸鍚﹀湪褰撳墠鍒嗛厤璺緞涓紝濡傛湁 娣诲姞绉昏蛋灏忚溅浠诲姟骞跺姞鍏ュ墠缃换鍔� 4 //鑾峰彇绛夊緟鎴栨鍦ㄦ墽琛岀殑浠诲姟涓寘鍚綋鍓嶈妭鐐圭殑灏忚溅浠诲姟锛屼笉浼氭湁澶浠诲姟锛屽悓灞傛湁鍑犱釜灏忚溅鏈�澶氭湁鍑犱釜浠诲姟 - var taskList4 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.CarNo!=assignCar.CarPlcIp).ToList(); + var taskListTask4 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.CarNo!=assignCar.CarPlcIp).GroupBy(m=>m.TaskNo).Select(m=>m.TaskNo).ToList(); + var taskList4 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.CarNo != assignCar.CarPlcIp).ToList(); var preId4 = "";//鍓嶇疆浠诲姟Id var str4 = "";//鎵�鏈夊凡鍒嗛厤鎴栨墽琛岀殑浠诲姟鍏ㄨ矾寰勪箣鍜� @@ -310,9 +313,14 @@ str4 += item.Path; } //鍒ゆ柇鐜版湁浠诲姟涓渶缁堣妭鐐规槸鍚﹀湪褰撳墠鍒嗛厤璺緞涓紝濡傛湁 娣诲姞绉昏蛋灏忚溅浠诲姟骞跺姞鍏ュ墠缃换鍔� - foreach (var item in taskList4) + foreach (var item in taskListTask4) { - var lastPathList = item.ExecutionPath.Split(';'); + var lastTask = taskList4.Where(m => m.TaskNo == item ).OrderBy(m=>m.CreateTime).LastOrDefault(); + if (lastTask == null) + { + continue; + } + var lastPathList = lastTask.ExecutionPath.Split(';'); // a;b;c; 鏈�鍚庝竴涓綅鏄�溾�濓紝鎵�浠astPathList.Length - 2 var lastPath = lastPathList[lastPathList.Length - 2]; var lastPath2 = lastPath.Substring(0,6); @@ -320,6 +328,7 @@ //濡傛灉姝ゆ鍒嗛厤璺緞鍖呭惈閱夎垶涓渶缁堣妭鐐硅矾寰勶紝娣诲姞绉昏蛋灏忚溅 if (path.Contains(lastPath2)) { + var endLocate = ""; var executionPath4 = ""; var path4 = ""; @@ -327,7 +336,7 @@ //鏌ユ壘鐩爣浣嶇疆 while (endLocate == "" || datas4.Count == 0 || datas4 == null) { - endLocate = FourWayCarUtil.GetCarEndLocation(lastPath, str4); + endLocate = FourWayCarUtil.GetCarEndLocation(lastPath, str4+path); var data4 = FourWayCarUtil.GetCarPath(lastPath, endLocate); datas4 = FourWayCarUtil.GetCarPathUp(data4, 0); } @@ -351,7 +360,8 @@ PalletNo = "", Status = TaskStatusEnum.Wait, Levels = 999, - Origin = "WCS" + Origin = "WCS", + CarIp = lastTask.CarNo }; _db.Insertable(modTask).ExecuteCommand(); HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); @@ -362,7 +372,7 @@ PreId = "", ExecutionPath = executionPath4, Path = path4, - CarNo = item.CarNo, + CarNo = lastTask.CarNo, Status = TaskStatusEnum.Wait }; var idLong = _db.Insertable(carTaskYC).ExecuteReturnSnowflakeId(); @@ -391,7 +401,7 @@ var carTask2 = new WcsCarTasks() { TaskNo = waitTask.TaskNo, - PreId = preId1, + PreId = "", ExecutionPath = executionPath2, Path = path, CarNo = assignCar.CarPlcIp, @@ -399,15 +409,16 @@ }; _db.Insertable(carTask2).ExecuteCommand(); } + waitTask.CarIp = assignCar.CarPlcIp; if (moveType == 1) { // 鏀瑰彉鎬讳换鍔¤〃鐘舵�� waitTask.Status = TaskStatusEnum.Doing; - waitTask.UpdateTime = DateTime.Now; - _db.Updateable(waitTask).ExecuteCommand(); - HubUtil.PublicTask(waitTask.Adapt<WcsTaskOutput>()); + waitTask.UpdateTime = DateTime.Now; } - + _db.Updateable(waitTask).ExecuteCommand(); + HubUtil.PublicTask(waitTask.Adapt<WcsTaskOutput>()); + return true; #endregion } @@ -601,6 +612,181 @@ } /// <summary> + /// 鑾峰彇灏忚溅绉诲姩鐨勭洰鏍囦綅缃� + /// </summary> + /// <param name="startLocation">璧峰浣嶇疆</param> + /// <param name="noPathStr">涓嶈兘瀛樻斁鐨勫偍浣嶅瓧绗︿覆</param> + /// <returns></returns> + public static string GetCarEndLocation(string startLocation,string noPathStr) + { + if (string.IsNullOrEmpty(startLocation)) + { + return null; + } + + // 璧峰浣嶇疆 + CarModel start = new CarModel() + { + X = int.Parse(startLocation.Substring(0, 2)), + Y = int.Parse(startLocation.Substring(2, 2)), + Z = int.Parse(startLocation.Substring(4, 2)), + NodeCom = 0 + }; + + // 鑾峰彇鍌ㄤ綅琛ㄤ俊鎭瓨鍌ㄥ埌闆嗗悎閲� + var layer = int.Parse(startLocation.Substring(4, 2)); + + // 鑾峰彇褰撳墠灞傚偍浣嶄俊鎭� + var locationModels = _db.Queryable<WcsStorageLocat>() + .Where(m => m.WareHouseNo == "W01" && m.Layer == layer && m.IsDelete == false) + .ToList(); + + #region MyRegion + + var list = locationModels.Where(m => !noPathStr.Contains(m.LocatNo)).OrderBy(m=> Math.Abs(start.X - m.Row) + Math.Abs(start.Y - m.Column)).ToList(); + var locateStr = ""; + foreach (var item in list) + { + // 鍌ㄤ綅鐘舵�佷负鎹熷潖涓嶅彲閫氳 鍌ㄤ綅鐘舵�佷负灞忚斀涓哄彲閫氳涓嶅彲瀛樺偍鎵樼洏 + if (item.Flag == "2") + { + continue; + } + locateStr = item.LocatNo; + break; + } + return locateStr; + #endregion + + #region 浣跨敤绠楁硶璁$畻灏忚溅鍙Щ鍔ㄧ殑鐩爣璺緞 + //try + //{ + + // // 瀹氫箟鍏抽棴鑺傜偣瀛楀吀 + // var closeSet = new Dictionary<CarModel, CarModel>(); + + // // 瀛樺偍灏忚溅鍙繍琛岀殑鏂瑰悜 + // var validDirections = new List<CarModel>(); + // var currentLocation = locationModels.FirstOrDefault(m => m.Row == start.X && m.Column == start.Y); + // if (currentLocation.Make == "0") + // { + // // 涓婚�氶亾 + // validDirections.Add(new CarModel() { X = 1, Y = 0 }); // 鍙� + // validDirections.Add(new CarModel() { X = -1, Y = 0 }); // 宸� + // validDirections.Add(new CarModel() { X = 0, Y = 1 }); // 涓� + // validDirections.Add(new CarModel() { X = 0, Y = -1 }); // 涓� + // } + + // if (currentLocation.Make == "1") + // { + // // 瀛愰�氶亾 + // // 鍏堟媶鍒嗗嚭鍙� + // var outNode = currentLocation.AisleOne; + // if (string.IsNullOrEmpty(outNode)) + // { + // throw new Exception("褰撳墠浣嶇疆娌℃湁缁存姢鍑哄彛锛�"); + // } + // int outX = int.Parse(outNode.Substring(0, 2)); + // int outY = int.Parse(outNode.Substring(2, 2)); + // if (start.X == outX) + // { + // validDirections.Add(new CarModel() { X = 0, Y = 1 }); // 涓� + // validDirections.Add(new CarModel() { X = 0, Y = -1 }); // 涓� + + // } + // else + // { + // validDirections.Add(new CarModel() { X = 1, Y = 0 }); // 鍙� + // validDirections.Add(new CarModel() { X = -1, Y = 0 }); // 宸� + // } + // } + + // foreach (var dir in validDirections) + // { + // CarModel neighbor = new CarModel() { X = start.X + dir.X, Y = start.Y + dir.Y, Z = layer }; + + // // 楠岃瘉涓嬩竴鑺傜偣浣嶇疆鏄惁鍙�氳骞朵笖鍒ゆ柇鏄惁琚叾浠栧皬杞﹀崰鐢� + + + // // 鍒ゆ柇涓嬩竴鑺傜偣鏄惁鍏抽棴 + // if (closeSet.ContainsKey(neighbor)) + // { + // closeSet[neighbor] = neighbor; + // } + + // // 褰撳墠鑺傜偣 + // var currentModel = locationModels.FirstOrDefault(it => it.Row == start.X && it.Column == start.Y); + // // 涓嬩竴鑺傜偣 + // var locationModel = locationModels.FirstOrDefault(it => it.Row == neighbor.X && it.Column == neighbor.Y); + + // // 涓嶅瓨鍦ㄦ浣嶇疆淇℃伅 + // if (locationModel == null) + // { + // closeSet[neighbor] = neighbor; + // continue; + // } + // // 鍌ㄤ綅鐘舵�佷负鎹熷潖涓嶅彲閫氳 鍌ㄤ綅鐘舵�佷负灞忚斀涓哄彲閫氳涓嶅彲瀛樺偍鎵樼洏 + // if (locationModel.Flag == "2") + // { + // closeSet[neighbor] = neighbor; + // continue; + // } + + // } + + + + //} + //catch (Exception) + //{ + // throw; + //} + + //return null; + #endregion + } + + public static int GetTaskNo() + { + var list = _db.Queryable<WcsCarTasks>().ToList(); + var maxNo = list.Max(m => m.CarTaskNo); + + if (maxNo!=null && maxNo > 0) + { + if (maxNo++ > 65535) + { + return 1; + } + + return (int)maxNo++; + } + return 1; + + } + + /// <summary> + /// 鑾峰彇鎬讳换鍔¤〃涓嬪彂ID涓婚敭 + /// </summary> + /// <returns></returns> + public static int GetTaskId() + { + var list = _db.Queryable<WcsTask>().ToList(); + var maxNo = list.Max(m => m.TaskId); + + if (maxNo != null && maxNo > 0) + { + if (maxNo++ > 99999999) + { + return 1; + } + + return (int)maxNo++; + } + + return 1; + } + + /// <summary> /// 璁$畻鏇煎搱椤胯窛绂� /// </summary> /// <param name="start">璧峰浣嶇疆</param> -- Gitblit v1.8.0