From 06747ef981873358950982e7a53c6d221ef93ac3 Mon Sep 17 00:00:00 2001 From: cjs <2216046164@qq.com> Date: 星期四, 17 七月 2025 17:19:24 +0800 Subject: [PATCH] 11 --- HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs | 174 +++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 148 insertions(+), 26 deletions(-) diff --git a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs index 4ec4f6b..b587da0 100644 --- a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs +++ b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs @@ -11,6 +11,7 @@ using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; +using System.Threading.Tasks; using System.Xml.Linq; using static HH.WCS.Mobox3.NFLZ.api.OtherModel; using static HH.WCS.Mobox3.NFLZ.dispatch.NDCApi; @@ -42,6 +43,12 @@ Console.WriteLine($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_END_LOC}鍗歌揣瀹屾垚锛岀粓鐐圭粦瀹氬鍣▄mst.S_CNTR_CODE}"); LogHelper.Info($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_END_LOC}鍗歌揣瀹屾垚锛岀粓鐐圭粦瀹氬鍣▄mst.S_CNTR_CODE}"); LocationHelper.BindingLoc(mst.S_END_LOC, mst.S_CNTR_CODE.Split(',').ToList(),mst.S_TYPE); + if (mst.S_TYPE.Contains("婊℃墭涓婄嚎")) + { + //瑙g粦鐗╂枡 + new SqlHelper<object>().GetInstance().Deleteable<CntrItemRel>().Where(a => mst.S_CNTR_CODE.Contains(a.S_CNTR_CODE)).ExecuteCommand(); + new SqlHelper<object>().GetInstance().Updateable<Container>().SetColumns(a => a.N_DETAIL_COUNT == 0).Where(a => mst.S_CNTR_CODE.Contains(a.S_CODE)).ExecuteCommand(); + } } } @@ -65,7 +72,7 @@ //璧风偣缁堢偣瑙i攣 LocationHelper.UnLockLoc(mst.S_START_LOC); LocationHelper.UnLockLoc(mst.S_END_LOC); - + } } @@ -677,7 +684,7 @@ /// <exception cref="NotImplementedException"></exception> public static void EmptyTask(WCSTask mst) { - //鐡剁洊娉ㄥ鏈虹┖鎵樹笂绾匡紝鑻ユ�浜ф�鐢ㄥ簱鍖烘病鏈夊浣欑殑绌烘墭锛屽垯鍦ㄩ潪鎬ヤ骇鎬ョ敤绌烘墭鍖烘嬁绌烘墭 + //鐡剁洊娉ㄥ鏈虹┖鎵樹笂绾匡紝鑻ュ嵆浜ф�鐢ㄥ簱鍖烘病鏈夊浣欑殑绌烘墭锛屽垯鍦ㄩ潪鍗充骇鎬ョ敤绌烘墭鍖烘嬁绌烘墭 var db = new SqlHelper<object>().GetInstance(); Location startLoca = null; @@ -1105,7 +1112,7 @@ Extend2 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_END_LOC).First().S_AGV_SITE; if (mst.N_START_LAYER > 1) { - if(mst.S_TYPE != "鐡跺澂闈炴�浜х┖妗嗗叆搴� && mst.S_TYPE != "鐡跺澂鎺ラ┏浣嶅叆搴� && mst.S_TYPE != "鐡剁洊绌烘墭鍏ュ簱") + if(mst.S_TYPE != "鐡跺澂闈炲嵆浜х┖妗嗗叆搴� && mst.S_TYPE != "鐡跺澂鎺ラ┏浣嶅叆搴� && mst.S_TYPE != "鐡剁洊绌烘墭鍏ュ簱") { Extend1 = db.Queryable<LocationExt>().Where(a => a.S_LOC_CODE == mst.S_START_LOC && a.N_LAYER == mst.N_START_LAYER).First().S_AGV_SITE; } @@ -1115,7 +1122,7 @@ { Extend2 = db.Queryable<LocationExt>().Where(a => a.S_LOC_CODE == mst.S_END_LOC && a.N_LAYER == mst.N_END_LAYER).First().S_AGV_SITE; } - if(mst.S_TYPE == "鐡跺澂闈炴�浜цˉ婊℃" || mst.S_TYPE == "鐡剁洊闈炴�浜цˉ婊℃澶у寘瑁� || mst.S_TYPE == "鐡跺澂闈炴�浜цˉ绌烘" || mst.S_TYPE == "鐡剁洊闈炴�浜цˉ绌烘" || mst.S_TYPE == "娉ㄥ鍗充骇婊℃墭涓嬬嚎锛堢摱鍧級") + if(mst.S_TYPE == "鐡跺澂闈炲嵆浜цˉ婊℃" || mst.S_TYPE == "鐡剁洊闈炲嵆浜цˉ婊℃澶у寘瑁� || mst.S_TYPE == "鐡跺澂闈炲嵆浜цˉ绌烘" || mst.S_TYPE == "鐡剁洊闈炲嵆浜цˉ绌烘" || mst.S_TYPE == "娉ㄥ鍗充骇婊℃墭涓嬬嚎锛堢摱鍧級") { Extend2 = Settings.dXSites.Where(it => it.loc == mst.S_END_LOC).First().site.ToString(); } @@ -1358,7 +1365,7 @@ else { //鏌ヨ鍚庨潰褰撳墠璐т綅鍚庝竴涓�- result = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW == a.N_ROW && b.N_COL > a.N_COL && b.S_LOCK_STATE == "鏃�).OrderBy(b => b.N_COL).First(); + result = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW == a.N_ROW && b.N_COL > a.N_COL && b.N_CURRENT_NUM < b.N_CAPACITY && b.S_LOCK_STATE == "鏃�).OrderBy(b => b.N_COL).First(); } if (result != null) { @@ -1470,7 +1477,7 @@ LogHelper.Info($"鍑哄簱绠楁硶04:褰撳墠璐т綅缁戝畾鐨勬墭鐩樼爜涓猴細{cntrInfo.S_CNTR_CODE}"); string endItemCode = ""; var itemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First(); - if (itemInfo != null && itemInfo.S_ITEM_CODE == itemCode) + if (itemInfo != null) { endItemCode = itemInfo.S_ITEM_CODE; } @@ -1564,14 +1571,14 @@ /// <param name="taskName"></param> /// <returns></returns> /// <exception cref="NotImplementedException"></exception> - internal static Location BCPFullOut(SqlSugarClient db, string taskName, string itemCode) + internal static Location BCPFullOut(SqlSugarClient db, string taskName, string itemCode,string batch) { Location result = null; - LogHelper.Info($"鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱被鍨嬶細{taskName}锛岀墿鏂欑紪鐮侊細{itemCode}"); + LogHelper.Info($"鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱被鍨嬶細{taskName}锛岀墿鏂欑紪鐮侊細{itemCode},鎵规鍙凤細{batch}"); if (taskName.Contains("鍗充骇")) { - //娉ㄥ鏈烘�浜у嵆鐢ㄤ笅绾匡紝棣栧厛涓嬬嚎鍒板嵆浜у嵆鐢ㄦ弧妗嗙嚎杈癸紝婊$湺绾胯竟婊′簡锛屼笅鍒板嵆浜у嵆鐢ㄦ弧妗嗙紦瀛樺尯锛屾弧妗嗙紦瀛樺尯婊′簡锛屼笅鍒板叆搴撴帴椹冲爢鍙犱綅 + //娉ㄥ鏈哄嵆浜у嵆鐢ㄤ笅绾匡紝棣栧厛涓嬬嚎鍒板嵆浜у嵆鐢ㄦ弧妗嗙嚎杈癸紝婊$湺绾胯竟婊′簡锛屼笅鍒板嵆浜у嵆鐢ㄦ弧妗嗙紦瀛樺尯锛屾弧妗嗙紦瀛樺尯婊′簡锛屼笅鍒板叆搴撴帴椹冲爢鍙犱綅 var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃" && a.enable == 1).FirstOrDefault(); if(areaInfo != null) { @@ -1939,19 +1946,7 @@ { var cir = new LocCntrRel { S_LOC_CODE = loc, S_CNTR_CODE = cntrCode, S_SRC = deviceName }; if (db.Insertable<LocCntrRel>(cir).ExecuteCommand() > 0) LogHelper.Info($"璐т綅瀹瑰櫒琛ㄧ粦瀹氭垚鍔燂紝璐т綅鍙凤細{loc}锛屾墭鐩樺彿锛歿cntrCode}"); - var Con = db.Queryable<Container>().Where(a => a.S_CODE == cntrCode).First(); - if(Con == null) - { - if(db.Insertable<Container>(new Container - { - S_CODE = cntrCode, - N_TYPE = 1, - N_DETAIL_COUNT = 1 - }).ExecuteCommand() > 0) - { - LogHelper.Info($"瀹瑰櫒琛ㄧ粦瀹氭垚鍔燂紝鎵樼洏鍙凤細{cntrCode}"); - } - } + if (!string.IsNullOrEmpty(itemCode)) { BindCntrItem(cntrCode, itemCode, batchNo, itemlayer, itemName); @@ -1978,6 +1973,26 @@ try { db.BeginTran(); + + var Con = db.Queryable<Container>().Where(a => a.S_CODE == trayCode).First(); + if (Con == null) + { + int detallCount = 1; + if (db.Insertable<Container>(new Container + { + S_CODE = trayCode, + N_TYPE = 1, + N_DETAIL_COUNT = detallCount + }).ExecuteCommand() > 0) + { + LogHelper.Info($"瀹瑰櫒琛ㄧ粦瀹氭垚鍔燂紝鎵樼洏鍙凤細{trayCode}"); + } + } + else + { + Con.N_DETAIL_COUNT = 1; + db.Updateable(Con).UpdateColumns(a => new { a.N_DETAIL_COUNT }).ExecuteCommand(); + } //db.Updateable(cntr).UpdateColumns(it => new { it.S_DEST }).ExecuteCommand(); //1.灏嗗師鏈夊鍣ㄧ墿鏂欎俊鎭垹闄� //db.Deleteable<CntrItemRel>().Where(it => it.S_CNTR_CODE == cntr.S_CNTR_CODE.Trim()).ExecuteCommand(); @@ -2485,11 +2500,20 @@ { foreach (var a in locList) { - var rowInfo = db.Queryable<RowLock>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.S_ROW == a.S_ROW && b.S_LOCK_STATE == "鏃�).First(); - if(rowInfo != null && a.S_LOCK_STATE == "鏃�) + var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First(); + if(cntrInfo != null) { - result = a; - break; + var itemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First(); + if(itemInfo == null) + { + var rowInfo = db.Queryable<RowLock>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.S_ROW == a.S_ROW && b.S_LOCK_STATE == "鏃�).First(); + if (rowInfo != null && a.S_LOCK_STATE == "鏃�) + { + result = a; + break; + } + } + } } } @@ -2501,5 +2525,103 @@ return result; } + + /// <summary> + /// 鍙栨秷浠诲姟 + /// </summary> + /// <param name="tN_Task"></param> + /// <exception cref="NotImplementedException"></exception> + internal static void cancelTask(WCSTask TN_Task) + { + if(!WCSHelper.CheckActionRecordExist(TN_Task.S_CODE, 4)) + { + //鍙栨秷浠诲姟 + WCSHelper.UpdateStatus(TN_Task.S_CODE, 4); + if (TN_Task.S_TYPE == "鎺ラ┏浣嶅叆搴�) + { + new SqlHelper<object>().GetInstance().Deleteable<CntrItemRel>().Where(a => TN_Task.S_CNTR_CODE.Contains(a.S_CNTR_CODE)).ExecuteCommand(); + new SqlHelper<object>().GetInstance().Deleteable<LocCntrRel>().Where(a => TN_Task.S_CNTR_CODE.Contains(a.S_CNTR_CODE)).ExecuteCommand(); + } + } + else + { + WCSHelper.UpdateStatus(TN_Task.S_CODE, 3); + } + + var op = WMSHelper.GetWmsTask(TN_Task.S_OP_CODE); + if (op != null) + { + //绛夊緟鐩存帴淇敼鐘舵�涓哄彇娑�+ op.N_B_STATE = 2; + WMSHelper.UpdateTaskState(op); + } + NDCApi.CancelOrder(TN_Task.S_CODE.Trim()); + OperateStatus(TN_Task, 7); + } + + internal static Location BCPInOrOutTwo(SqlSugarClient db, string areaName, string itemCode) + { + Location result = null; + var areaInfo = Settings.areaInfos.Where(a => a.areaName.Contains(areaName) && a.enable == 1).OrderByDescending(a => a.pri).ToList(); + if (areaInfo.Count > 0) + { + foreach (var it in areaInfo) + { + LogHelper.Info($"鐡跺澂闈炲嵆浜ф弧妗嗚浆杩�area锛歿it.areaName},itemCode:{itemCode}"); + var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == it.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).Includes(a => a.LocCntrRel).ToList(); + if (locList.Count > 0) + { + LogHelper.Info($"鐡跺澂闈炲嵆浜ф弧妗嗚浆杩�鏌ヨ鍒板彲鍑鸿揣浣嶆暟閲忥細{locList.Count}"); + foreach (var a in locList) + { + LogHelper.Info($"鐡跺澂闈炲嵆浜ф弧妗嗚浆杩�鏌ヨ璐т綅锛歿a.S_CODE},閿佺姸鎬侊細{a.S_LOCK_STATE}"); + if (a.S_LOCK_STATE == "鏃�) + { + var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First(); + if (cntrInfo != null) + { + LogHelper.Info($"鐡跺澂闈炲嵆浜ф弧妗嗚浆杩�褰撳墠璐т綅缁戝畾鐨勬墭鐩樼爜涓猴細{cntrInfo.S_CNTR_CODE}"); + string endItemCode = ""; + var itemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First(); + if (itemInfo != null) + { + endItemCode = itemInfo.S_ITEM_CODE; + } + if (endItemCode == itemCode) + { + LogHelper.Info($"鐡跺澂闈炲嵆浜ф弧妗嗚浆杩�褰撳墠璐т綅缁戝畾鐨勭墿鏂欑紪鐮佷负锛歿endItemCode}锛岀墿鏂欑被鍨嬩负锛歿itemInfo.S_BATCH_NO},缁戝畾鏃堕棿涓猴細{itemInfo.T_CREATE}"); + if ((itemInfo.S_BATCH_NO == "闈炲嵆浜� && itemInfo.T_CREATE.AddHours(Settings.lQHours) <= DateTime.Now) || itemInfo.S_BATCH_NO == "鍗充骇") + { + //闈炲嵆浜х摱鍧渶瑕佸垽鏂喎鍗存椂闂存槸鍚﹀ぇ浜庝竴瀹氭椂闂�+ //鍒ゆ柇褰撳墠鎺掓湁鏃犻攣 + var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == it.areaCode && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First(); + if (lockInfo == null) + { + result = a; + break; + } + else + { + LogHelper.Info($"鐡跺澂闈炲嵆浜ф弧妗嗚浆杩�褰撳墠鎺掓湁閿侊紝璐т綅鍙凤細{lockInfo.S_CODE}"); + } + } + } + } + } + } + } + if (result != null) + { + break; + } + } + + } + else + { + LogHelper.Info($"鐡跺澂闈炲嵆浜ф弧妗嗚浆杩愶細{areaName}鏈厤缃�); + } + return result; + } } } -- Gitblit v1.9.1