From 968d603a08117e7e6707ffe07c6da9c325e36c08 Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期一, 12 五月 2025 17:04:17 +0800 Subject: [PATCH] 完成并测试抽检出库的逻辑,修复相关问题 --- ServiceCore/CheckCore.cs | 123 +++++++++++++++++++++++++++------------- 1 files changed, 82 insertions(+), 41 deletions(-) diff --git a/ServiceCore/CheckCore.cs b/ServiceCore/CheckCore.cs index 9eee55a..4fdf160 100644 --- a/ServiceCore/CheckCore.cs +++ b/ServiceCore/CheckCore.cs @@ -9,62 +9,103 @@ using HH.WCS.Mobox3.DSZSH.Helpers.Model; using HH.WCS.Mobox3.DSZSH.Models; +using Org.BouncyCastle.Asn1.X509; + 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_Order>() + .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("鏆傛棤寰呮墽琛岀殑鎶芥鍗�); + 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 startLocCntrRel = 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 == detail.S_CG_ID && d.S_BATCH_NO == detail.S_BATCH_NO) + .Select((l, c) => c) // 閫夋嫨 LocCntrRel + .First(); // 闅忔満鎶芥锛屼笉鎺掑簭 + + if (startLocCntrRel == null) { + LogHelper.Info("娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�); + continue; + } + + 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(startLocCntrRel.S_LOC_CODE, startLocCntrRel.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("褰撳墠娌℃湁鎵ц涓殑鎶芥鍗曟槑缁嗛」鐩�); + return; + } + + using (var tran = db.Ado.UseTran()) { + detail.N_B_STATE = spotStateCode; + db.Updateable<TN_Check_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand(); + + if (db.Queryable<TN_Check_Detail>().Count(d => d.S_NO == detail.S_NO && d.N_B_STATE == 2) == + db.Queryable<TN_Check_Detail>().Count(d => d.S_NO == detail.S_NO)) { + + 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("淇敼Order鐘舵�閿欒"); + } + } + + tran.CommitTran(); + } + } } } -- Gitblit v1.9.1