From 802fc04c2d744d08c3e577dd4d91d60a3071e3d7 Mon Sep 17 00:00:00 2001 From: user <user@DESKTOP-SM1UI64> Date: 星期二, 15 七月 2025 23:08:35 +0800 Subject: [PATCH] 111 --- HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs | 247 ++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 211 insertions(+), 36 deletions(-) diff --git a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs index 97110a5..4f5c61f 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,15 +1112,27 @@ Extend2 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_END_LOC).First().S_AGV_SITE; if (mst.N_START_LAYER > 1) { - 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; + 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; + } + } if (mst.N_END_LAYER > 1) { 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(); + } + + if(mst.S_TYPE == "鎺ラ┏浣嶅叆搴�) + { + if(mst.S_CNTR_CODE.Split(',').ToList().Count != 2) + { + Extend1 = db.Queryable<LocationExt>().Where(a => a.S_LOC_CODE == mst.S_START_LOC && a.N_LAYER == 1).First().S_AGV_SITE; + } } Extend3 = "0"; @@ -1125,28 +1144,28 @@ //Extend4 = db.Queryable<LinjiangBCPWorkOrder>().Where(a => a.S_WorkNo == workNo).First().S_UsingNow == "N" ? "2" : "1"; //鐡跺澂娉ㄥ鏈虹珯鐐规牴鎹厤缃枃浠惰幏鍙�- if (taskType.Contains("娉ㄥ") && taskType.Contains("鐡跺澂")) - { - var devInfo = Settings.deviceInfos.Where(a => (a.TN_Location.Contains(mst.S_START_LOC) || a.TN_Location.Contains(mst.S_END_LOC)) && a.enable == 1).FirstOrDefault(); - string machine = (devInfo.TN_Location[0] == mst.S_START_LOC || devInfo.TN_Location[0] == mst.S_END_LOC) ? "A" : "B"; - string machineTwo = devInfo.deviceName.Split('-')[1] + machine; - LogHelper.Info($"鏈哄彴锛歿machineTwo}"); - var siteInfo = Settings.pPZSJSites.Where(a => a.siteName == machineTwo && a.enable == 1).FirstOrDefault(); - if (siteInfo != null) - { - if (taskType.Contains("绌烘墭涓婄嚎")) - { - //鏀瑰彉缁堢偣绔欑偣 - Extend2 = siteInfo.site[1]; - } - else - { - //鏀瑰彉璧风偣绔欑偣 - Extend1 = siteInfo.site[0]; - } - } - else LogHelper.Info("閰嶇疆鏂囦欢鏈厤缃摱鍧敞濉戞満绔欑偣"); - } + //if (taskType.Contains("娉ㄥ") && taskType.Contains("鐡跺澂")) + //{ + // var devInfo = Settings.deviceInfos.Where(a => (a.TN_Location.Contains(mst.S_START_LOC) || a.TN_Location.Contains(mst.S_END_LOC)) && a.enable == 1).FirstOrDefault(); + // string machine = (devInfo.TN_Location[0] == mst.S_START_LOC || devInfo.TN_Location[0] == mst.S_END_LOC) ? "A" : "B"; + // string machineTwo = devInfo.deviceName.Split('-')[1] + machine; + // LogHelper.Info($"鏈哄彴锛歿machineTwo}"); + // var siteInfo = Settings.pPZSJSites.Where(a => a.siteName == machineTwo && a.enable == 1).FirstOrDefault(); + // if (siteInfo != null) + // { + // if (taskType.Contains("绌烘墭涓婄嚎")) + // { + // //鏀瑰彉缁堢偣绔欑偣 + // Extend2 = siteInfo.site[1]; + // } + // else + // { + // //鏀瑰彉璧风偣绔欑偣 + // Extend1 = siteInfo.site[0]; + // } + // } + // else LogHelper.Info("閰嶇疆鏂囦欢鏈厤缃摱鍧敞濉戞満绔欑偣"); + //} } Console.WriteLine($"[SendTask]:TaskNo={mst.S_CODE.Trim()},start={Extend1},end={Extend2}"); @@ -1306,6 +1325,11 @@ .ToList(); if (locInfo.Count > 0) { + if(areaName == "鐡跺澂鍗充骇婊℃缂撳瓨") + { + locInfo = locInfo.Where(a => a.N_ROW == 1 || a.N_ROW == 2).ToList(); + } + LogHelper.Info($"鍏ュ簱绠楁硶02:鏌ヨ鍒板彲鍏ヨ揣浣嶇殑鏁伴噺涓猴細{locInfo.Count}"); foreach (var a in locInfo) { @@ -1320,7 +1344,7 @@ var endItemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == endCntrInfo.S_CNTR_CODE).First(); if (endItemInfo != null) { - endItemCode = endItemInfo.S_ITEM_CODE; + endItemCode = endItemInfo.S_ITEM_CODE + endItemInfo.S_BATCH_NO; } } else @@ -1341,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.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) { @@ -1437,6 +1461,10 @@ 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) { + if(areaName == "鐡跺澂鍗充骇婊℃缂撳瓨" && string.IsNullOrEmpty(itemCode)) + { + locList = locList.Where(a => a.N_ROW == 3).ToList(); + } LogHelper.Info($"鍑哄簱绠楁硶02:鏌ヨ鍒板彲鍑鸿揣浣嶆暟閲忥細{locList.Count}"); foreach (var a in locList) { @@ -1550,7 +1578,7 @@ LogHelper.Info($"鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱被鍨嬶細{taskName}锛岀墿鏂欑紪鐮侊細{itemCode}"); if (taskName.Contains("鍗充骇")) { - //娉ㄥ鏈烘�浜у嵆鐢ㄤ笅绾匡紝棣栧厛涓嬬嚎鍒板嵆浜у嵆鐢ㄦ弧妗嗙嚎杈癸紝婊$湺绾胯竟婊′簡锛屼笅鍒板嵆浜у嵆鐢ㄦ弧妗嗙紦瀛樺尯锛屾弧妗嗙紦瀛樺尯婊′簡锛屼笅鍒板叆搴撴帴椹冲爢鍙犱綅 + //娉ㄥ鏈哄嵆浜у嵆鐢ㄤ笅绾匡紝棣栧厛涓嬬嚎鍒板嵆浜у嵆鐢ㄦ弧妗嗙嚎杈癸紝婊$湺绾胯竟婊′簡锛屼笅鍒板嵆浜у嵆鐢ㄦ弧妗嗙紦瀛樺尯锛屾弧妗嗙紦瀛樺尯婊′簡锛屼笅鍒板叆搴撴帴椹冲爢鍙犱綅 var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃" && a.enable == 1).FirstOrDefault(); if(areaInfo != null) { @@ -1629,7 +1657,60 @@ { LogHelper.Info($"{endAreaName}鏈厤缃�); } - + if(result == null) + { + if(endAreaName == "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡跺澂锛�) + { + //鐡跺澂闈炲嵆浜х┖鎵樹笅绾�濡傛灉闈炲嵆浜х┖妗嗗簱鍖烘棤娉曞叆搴擄紝鍒欎笅绾垮埌鐡跺澂鍗充骇婊℃缂撳瓨 4 5 鎺�+ areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃缂撳瓨" && a.enable == 1).FirstOrDefault(); + if (areaInfo != null) + { + var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && (a.N_ROW == 4 || a.N_ROW == 5) && a.N_CURRENT_NUM == 0).OrderBy(a => a.N_ROW).OrderBy(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList(); + if (locList.Count > 0) + { + 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 && a.S_LOCK_STATE == "鏃�).First(); + if (rowInfo != null && a.S_LOCK_STATE == "鏃�) + { + result = a; + break; + } + + } + } + } + else + { + LogHelper.Info("鐡跺澂鍗充骇婊℃缂撳瓨鏈厤缃�); + } + } + if(endAreaName == "缈绘枟鏈哄嵆浜х┖鎵樹笅绾匡紙鐡跺澂锛�) + { + //鐡跺澂鍗充骇绌烘墭涓嬬嚎 濡傛灉鍗充骇绌烘搴撳尯鏃犳硶鍏ュ簱锛屽垯涓嬬嚎鍒扮摱鍧嵆浜ф弧妗嗙紦瀛�3 鎺�+ areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃缂撳瓨" && a.enable == 1).FirstOrDefault(); + if (areaInfo != null) + { + var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_ROW == 3 && a.N_CURRENT_NUM == 0).OrderBy(a => a.N_COL).First(); + if (locInfo != null ) + { + var rowInfo = db.Queryable<RowLock>().Where(b => b.S_AREA_CODE == locInfo.S_AREA_CODE && b.S_ROW == locInfo.S_ROW && locInfo.S_LOCK_STATE == "鏃�).First(); + if (rowInfo != null && locInfo.S_LOCK_STATE == "鏃�) + { + result = locInfo; + } + } + } + else + { + LogHelper.Info("鐡跺澂鍗充骇婊℃缂撳瓨鏈厤缃�); + } + if(result == null) + { + BCPEmptyOut(db, "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡跺澂锛�); + } + } + } return result; } @@ -1849,7 +1930,7 @@ /// </summary> /// <param name="cntr"></param> /// <returns></returns> - internal static bool BindLocCntr(string loc, string cntr, string itemCode, string batchNo, string deviceName = "", string itemlayer = "") + internal static bool BindLocCntr(string loc, string cntr, string itemCode, string batchNo, string deviceName = "", string itemlayer = "",string itemName = "") { LogHelper.Info($"缁戝畾璐т綅瀹瑰櫒琛�loc:{loc},cntr:{cntr}"); bool result = true; @@ -1868,11 +1949,16 @@ var Con = db.Queryable<Container>().Where(a => a.S_CODE == cntrCode).First(); if(Con == null) { + int detallCount = 0; + if (!string.IsNullOrEmpty(itemCode)) + { + detallCount = 1; + } if(db.Insertable<Container>(new Container { S_CODE = cntrCode, N_TYPE = 1, - N_DETAIL_COUNT = 1 + N_DETAIL_COUNT = detallCount }).ExecuteCommand() > 0) { LogHelper.Info($"瀹瑰櫒琛ㄧ粦瀹氭垚鍔燂紝鎵樼洏鍙凤細{cntrCode}"); @@ -1880,7 +1966,7 @@ } if (!string.IsNullOrEmpty(itemCode)) { - BindCntrItem(cntrCode, itemCode, batchNo, itemlayer); + BindCntrItem(cntrCode, itemCode, batchNo, itemlayer, itemName); } } } @@ -1896,7 +1982,7 @@ /// <param name="batchNo"></param> /// <param name="qty"></param> /// <returns></returns> - internal static bool BindCntrItem(string trayCode, string itemCode, string batchNo, string itemlayer = "") + internal static bool BindCntrItem(string trayCode, string itemCode, string batchNo, string itemlayer = "",string itemName = "") { LogHelper.Info($"缁戝畾瀹瑰櫒鐗╂枡琛�trayCode:{trayCode}"); var res = false; @@ -1911,8 +1997,8 @@ var info = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE.Trim() == trayCode.Trim()).First(); if (info == null) { - var cir = new CntrItemRel { S_CNTR_CODE = trayCode, S_BATCH_NO = batchNo, S_ITEM_CODE = itemCode, S_ITEM_MODEL = itemlayer }; - if (db.Insertable<CntrItemRel>(cir).ExecuteCommand() > 0) LogHelper.Info($"瀹瑰櫒鐗╂枡琛ㄧ粦瀹氭垚鍔燂紝鎵樼洏鍙凤細{trayCode},鐗╂枡缂栫爜锛歿itemCode},鐗╂枡灞傛暟锛歿itemlayer}"); + var cir = new CntrItemRel { S_CNTR_CODE = trayCode, S_BATCH_NO = batchNo, S_ITEM_CODE = itemCode, S_ITEM_MODEL = itemlayer,S_ITEM_NAME = itemName }; + if (db.Insertable<CntrItemRel>(cir).ExecuteCommand() > 0) LogHelper.Info($"瀹瑰櫒鐗╂枡琛ㄧ粦瀹氭垚鍔燂紝鎵樼洏鍙凤細{trayCode},鐗╂枡缂栫爜锛歿itemCode},鐗╂枡灞傛暟锛歿itemlayer},鐗╂枡鍚嶇О锛歿itemName}"); } @@ -2394,6 +2480,95 @@ } } + /// <summary> + /// 璁$畻鐡跺澂闈炲嵆浜х┖鎵樿捣鐐�+ /// </summary> + /// <returns></returns> + internal static Location FJCKTLoc() + { + var db = new SqlHelper<object>().GetInstance(); + Location result = null; + //鍦ㄧ摱鍧嵆浜ф弧妗�鏌ヨ 4 5涓ゆ帓鐨勭┖妗�+ var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃缂撳瓨" && a.enable == 1).FirstOrDefault(); + if(areaInfo != null) + { + var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && (a.N_ROW == 4 || a.N_ROW == 5) && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList(); + if(locList.Count > 0) + { + foreach (var a in locList) + { + var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First(); + if(cntrInfo != null) + { + 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; + } + } + } + } + } + } + if(result == null) + { + result = TaskProcess.BCPInOrOut(db, false, "鐡跺澂搴撳尯", ""); + } + + 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) + { + if (op.N_B_STATE == 0) + { + //绛夊緟鐩存帴淇敼鐘舵�涓哄彇娑�+ op.N_B_STATE = 3; + } + else if (op.N_B_STATE == 1) + { + if (WCSHelper.CheckActionRecordExist(TN_Task.S_CODE, 4)) + { + op.N_B_STATE = 2; + } + else + { + op.N_B_STATE = 3; + } + } + + WMSHelper.UpdateTaskState(op); + } + NDCApi.CancelOrder(TN_Task.S_CODE.Trim()); + OperateStatus(TN_Task, 7); + } } } -- Gitblit v1.9.1