From b079910e5de15863c26e479ffab15cc45d706f1a Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期一, 19 五月 2025 16:25:22 +0800 Subject: [PATCH] 测试修复轮询出库、抽检流程的问题 --- ServiceCore/CheckCore.cs | 129 +++++++++++++++++++++++++++--------------- 1 files changed, 83 insertions(+), 46 deletions(-) diff --git a/ServiceCore/CheckCore.cs b/ServiceCore/CheckCore.cs index 9eee55a..eae3ca4 100644 --- a/ServiceCore/CheckCore.cs +++ b/ServiceCore/CheckCore.cs @@ -1,70 +1,107 @@ 锘縰sing System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using HH.WCS.Mobox3.DSZSH.Consts; using HH.WCS.Mobox3.DSZSH.Helpers; -using HH.WCS.Mobox3.DSZSH.Helpers.Model; using HH.WCS.Mobox3.DSZSH.Models; namespace HH.WCS.Mobox3.DSZSH.ServiceCore { - /// <summary> - /// 瀹氭椂杞浠诲姟锛氭娊妫�笟鍔℃牳蹇�- /// </summary> public class CheckCore { - /// <summary> - /// 杞鏌ョ湅鎶芥鍗曟槸鍚︽湁鎵ц涓殑椤圭洰 - /// </summary> - public void CheckOrderState() { + public static void CheckOrderState() { + var db = DbHelper.GetDbClient(); try { - var orderList = db.Queryable<TN_Check_Order>() - .Where(c => c.N_B_STATE == 0) - .OrderBy(c => c.T_CREATE).ToList(); + var order = db.Queryable<TN_Check_Detail>() + .Where(c => c.N_B_STATE == SpotStateCode.宸叉墽琛屽緟鐢熸垚浠诲姟) + .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc).First(); - using (var tran = db.Ado.UseTran()) { - foreach (var order in orderList) { - var startLocList = db.Queryable<TN_Location, TN_Loc_Container, TN_CG_Detail> - ((l, c, d) => l.S_CODE == c.S_LOC_CODE && c.S_CNTR_CODE == d.S_CNTR_CODE) - .Where((l, c, d) => d.S_CG_ID == order.S_CG_ID && d.S_BATCH_NO == order.S_BATCH_NO) - .Select((l, c) => new { Location = l, Container = c }) - .Take(order.N_QTY).ToList(); // 鑾峰彇鎸囧畾鏁伴噺鐨勮揣浣嶆暟锛岄殢鏈烘娊鍙栨晠鏃犻渶鎺掑簭 + if (order == null) { + LogHelper.Info("杞--鎶芥--鏆傛棤寰呮墽琛岀殑Order"); + return; + } - if (startLocList.Count < order.N_QTY) { - LogHelper.Info($"杞 | 褰撳墠鍙娊妫�殑鐗╂枡鏁伴噺 {startLocList.Count} 鏃犳硶婊¤冻鎶芥鍗曟暟閲�{order.N_QTY} 瑕佹眰"); - return; + var detailList = db.Queryable<TN_Check_Detail>() + .Where(d => d.S_NO == order.S_NO && d.N_B_STATE == SpotStateCode.宸叉墽琛屽緟鐢熸垚浠诲姟).ToList(); + + if (detailList.Count == 0) { + order.N_B_STATE = SpotStateCode.浠诲姟鎵ц涓� + db.Updateable<TN_Check_Order>(order).UpdateColumns(it => it.N_B_STATE).ExecuteCommand(); + return; + } + + foreach (var detail in detailList) { + + var endLoc = db.Queryable<TN_Location>() + .Where(l => l.S_AREA_CODE == detail.S_END_AREA) + .Where(ExprHelper.LocIsFree) + .Where(ExprHelper.LocIsEmpty).First(); + + if (endLoc == null) { + LogHelper.Info("杞--鎶芥锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅锛�); + continue; + } + + using (var tran = db.Ado.UseTran()) { + detail.N_B_STATE = SpotStateCode.浠诲姟鎵ц涓� + if (db.Updateable<TN_Check_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { + tran.RollbackTran(); + LogHelper.Info($"杞--鎶芥锛氫慨鏀规娊妫�崟鏄庣粏琛ㄧ姸鎬佷负瀹屾垚--澶辫触锛�); } - var endLocList = db.Queryable<TN_Location>() - .Where(l => l.S_AREA_CODE == order.S_END_AREA) - .Where(ExprHelper.LocIsFree) - .Where(ExprHelper.LocIsEmpty) - .Take(order.N_QTY).ToList(); // 鑾峰彇鎸囧畾鏁伴噺鐨勮揣浣嶆暟 - - if (endLocList.Count < order.N_QTY) { - LogHelper.Info($"杞 | 缁堢偣鍖哄煙鍙敤璐т綅 {startLocList.Count} 鏃犳硶婊¤冻鎶芥鍗曟暟閲�{order.N_QTY} 瑕佹眰"); - return; + if (TaskHelper.LogCreateTask(detail.S_LOC_CODE, detail.S_CNTR_CODE, + endLoc.S_CODE, TaskName.鎶芥_鍑哄簱)) { + tran.CommitTran(); } - - // TODO 鍙傝�鍑哄簱锛屽鏋滆姹備换鍔¢『搴忎篃瑕佹柊鍒涘缓琛ㄥ瓨鍌紝鏈夐渶姹傚啀鏇存柊 - for (var i = 0; i < order.N_QTY; i++) { - if (!TaskHelper.LogCreateTask(startLocList[i].Location.S_CODE, startLocList[i].Container.S_CNTR_CODE, - endLocList[i].S_CODE, TaskName.鎶芥)) { - tran.RollbackTran(); - } + else { + tran.RollbackTran(); } - - order.N_B_STATE = 1; - db.Updateable<TN_Check_Order>(endLocList).UpdateColumns(c => c.N_B_STATE); - tran.CommitTran(); - } + } } } catch (Exception ex) { LogHelper.InfoEx(ex); } } + + public static void UpdateTaskState(int spotStateCode) { + + var db = DbHelper.GetDbClient(); + + var detail = db.Queryable<TN_Check_Detail>() + .First(d => d.N_B_STATE == SpotStateCode.浠诲姟鎵ц涓�; + + if (detail == null) { + LogHelper.Info("鎶芥--AGV浠诲姟瀹屾垚--鏌ヨDetail锛氬綋鍓嶆病鏈�鎵ц涓�鐨凞etail琛紒"); + return; + } + + using (var tran = db.Ado.UseTran()) { + detail.N_B_STATE = spotStateCode; + if (db.Updateable<TN_Check_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { + tran.RollbackTran(); + LogHelper.Info("鎶芥--AGV浠诲姟瀹屾垚锛氫慨鏀笵etail鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�); + return; + } + + var finishedCount = db.Queryable<TN_Check_Detail>().Count(d => d.S_NO == detail.S_NO && d.N_B_STATE == 3); + var allCount = db.Queryable<TN_Check_Detail>().Count(d => d.S_NO == detail.S_NO); + + LogHelper.Info($"鎶芥--AGV浠诲姟瀹屾垚锛氱粺璁′换鍔″凡瀹屾垚锛歿finishedCount} / {allCount}"); + + if (finishedCount == allCount) { // 褰撳墠order涓嬬殑detail锛屼换鍔¢兘宸茬粡瀹屾垚 + + if (db.Updateable<TN_Check_Order>().SetColumns(it => it.N_B_STATE == SpotStateCode.浠诲姟鎵ц瀹屾垚) + .Where(it => it.S_NO == detail.S_NO) + .ExecuteCommand() <= 0) { + + tran.RollbackTran(); + LogHelper.Info("鎶芥--AGV浠诲姟瀹屾垚--鎵�湁浠诲姟瀹屾垚鏃讹細淇敼Order鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�); + return; + } + } + + tran.CommitTran(); + } + } + } } -- Gitblit v1.9.1