From 969aafa8bd335025da4caf5939a1626bad4f4236 Mon Sep 17 00:00:00 2001 From: chengsc <11752@DESKTOP-DS49RCP> Date: 星期四, 19 六月 2025 16:54:03 +0800 Subject: [PATCH] Merge branch 'csc' --- Admin.NET/WCS.Application/Util/FourWayCarUtil.cs | 217 ++++++++++------------------------------------------- 1 files changed, 43 insertions(+), 174 deletions(-) diff --git a/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs b/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs index a86c60e..0a8fe55 100644 --- a/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs +++ b/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs @@ -26,6 +26,10 @@ /// <returns></returns> public static List<CarModel> GetCarPathUp(List<CarModel> list, int moveType) { + if (list == null) + { + return null; + } for (int i = 0; i < list.Count; i++) { if (i >= 0 && i < list.Count - 1) @@ -163,6 +167,15 @@ } + /// <summary> + /// + /// </summary> + /// <param name="data">褰撳墠浠诲姟鎬昏矾寰�</param> + /// <param name="kXCarList">鎵�鏈夊皬杞�</param> + /// <param name="assignCar">褰撳墠鍒嗛厤灏忚溅</param> + /// <param name="waitTask">褰撳墠鎬讳换鍔�</param> + /// <param name="moveType">0鍘诲彇璐т换鍔� 1鍘绘斁璐�</param> + /// <returns></returns> public static bool AddCarTask(List<CarModel> data, List<CarInfo> kXCarList, CarInfo assignCar, WcsTask waitTask,int moveType) { #region 鑾峰彇閫傚悎鎵ц褰撳墠浠诲姟鐨勫皬杞� 鐢熸垚璺緞锛堥渶鑰冭檻灏忚溅闃婚樆鎸★級 @@ -197,13 +210,13 @@ executionPath1 += pathXYZQian + ";"; } executionPath2 += pathXYZQian + ";"; - //鍒ゆ柇娣诲姞鍓嶇疆浠诲姟Id - if (!preId1.Contains(item + "")) - { - preId1 += item + ";"; - } + } - + //鍒ゆ柇娣诲姞鍓嶇疆浠诲姟Id + if (!preId1.Contains(item + "")) + { + preId1 += item + ";"; + } isOk = "2"; } @@ -278,7 +291,8 @@ PalletNo = "", Status = TaskStatusEnum.Wait, Levels = 999, - Origin = "WCS" + Origin = "WCS", + CarIp = item.CarPlcIp }; _db.Insertable(modTask).ExecuteCommand(); HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); @@ -302,7 +316,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 = "";//鎵�鏈夊凡鍒嗛厤鎴栨墽琛岀殑浠诲姟鍏ㄨ矾寰勪箣鍜� @@ -311,16 +326,22 @@ 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); - //濡傛灉姝ゆ鍒嗛厤璺緞鍖呭惈閱夎垶涓渶缁堣妭鐐硅矾寰勶紝娣诲姞绉昏蛋灏忚溅 + //濡傛灉姝ゆ鍒嗛厤璺緞鍖呭惈浠诲姟涓渶缁堣妭鐐硅矾寰勶紝娣诲姞绉昏蛋灏忚溅 if (path.Contains(lastPath2)) { + var endLocate = ""; var executionPath4 = ""; var path4 = ""; @@ -328,7 +349,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); } @@ -352,7 +373,8 @@ PalletNo = "", Status = TaskStatusEnum.Wait, Levels = 999, - Origin = "WCS" + Origin = "WCS", + CarIp = lastTask.CarNo }; _db.Insertable(modTask).ExecuteCommand(); HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); @@ -363,7 +385,7 @@ PreId = "", ExecutionPath = executionPath4, Path = path4, - CarNo = item.CarNo, + CarNo = lastTask.CarNo, Status = TaskStatusEnum.Wait }; var idLong = _db.Insertable(carTaskYC).ExecuteReturnSnowflakeId(); @@ -392,7 +414,7 @@ var carTask2 = new WcsCarTasks() { TaskNo = waitTask.TaskNo, - PreId = preId1, + PreId = "", ExecutionPath = executionPath2, Path = path, CarNo = assignCar.CarPlcIp, @@ -400,19 +422,19 @@ }; _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 } - /// <summary> @@ -482,7 +504,7 @@ if (current.Equals(end)) { - Log.Error(ReconstructPath(cameFrom, current).ToString()); + Log.Error("灏忚溅璺緞鍒嗛厤锛�" +ReconstructPath(cameFrom, current).ToString()); return ReconstructPath(cameFrom, current); } @@ -599,159 +621,6 @@ } return null; - } - - /// <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> -- Gitblit v1.8.0