From 2d3ee03961d6cfbde70342e8a97bc7b05d0b0dc3 Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期一, 21 七月 2025 17:27:34 +0800 Subject: [PATCH] 优化代码, 封装货位锁和创建任务流程, 数据库事务等 --- core/Monitor.cs | 281 ++++++++++++++++++++++++-------------------------------- 1 files changed, 121 insertions(+), 160 deletions(-) diff --git a/core/Monitor.cs b/core/Monitor.cs index 65bcc53..da491d5 100644 --- a/core/Monitor.cs +++ b/core/Monitor.cs @@ -22,8 +22,6 @@ public static void CheckInbound() { var db = new SqlHelper<object>().GetInstance(); - var info = ""; - try { // 鏌ヤ骇绾挎槸鍚︽湁鐗╂枡淇℃伅 foreach (var prod in Settings.ProductionLines) { @@ -36,8 +34,7 @@ // TCPClient浼犻�淇℃伅鐨勬椂鍊�涓嶈鐢ㄦ柇鐐归樆濉炵▼搴� // {"item_code":"CG1001","batch_no":"BN1001","cntr_code":"CN2505111"} if (!TcpClientHelper.TryReadProductionLine(out byte[] read)) { - info = $"娴嬭瘯{prod.Id}鍙蜂骇绾縶prod.PlcIp}:{prod.PlcPort}:璇诲彇浜х嚎淇℃伅澶辫触"; - LogHelper.Info(info); + LogHelper.Info($"娴嬭瘯{prod.Id}鍙蜂骇绾縶prod.PlcIp}:{prod.PlcPort}:璇诲彇浜х嚎淇℃伅澶辫触"); continue; } @@ -145,15 +142,12 @@ var cntId = detail.S_CNTR_CODE; - var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); + var task = WCSHelper.BuildTaskWithLocLock(startLoc, endLoc, cntId, taskName); task.S_OP_CODE = detail.S_OO_NO; if (string.IsNullOrEmpty(detail.S_BS_NO)) { task.S_BS_NO = detail.S_BS_NO; task.S_BS_TYPE = "ERP"; } - - WCSHelper.LockStartLoc(ref startLoc); // 璧风偣鍑哄簱閿�- WCSHelper.LockEndLoc(ref endLoc); // 缁堢偣鍏ュ簱閿� using (var tran = db.Ado.UseTran()) { if (db.Updateable(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { @@ -199,8 +193,6 @@ public static void CheckCheckOrder() { var db = new SqlHelper<object>().GetInstance(); - var info = ""; - var taskInfo = Settings.GetTaskInfo(ETask.C鎶芥鍑哄簱); var taskName = taskInfo.TaskName; const string preLog = "杞:鎶芥:"; @@ -208,7 +200,7 @@ try { var orderList = db.Queryable<TN_Spot_Check>().Where(c => c.N_B_STATE == 1).OrderBy(c => c.T_CREATE).ToList(); if (orderList.Count == 0) { - LogHelper.Debug($"杞:{taskName}:鏆傛棤寰呮墽琛岀殑{taskName}鍗�); + LogHelper.Debug(preLog + $"鏆傛棤寰呮墽琛岀殑{taskName}鍗�); return; } @@ -229,7 +221,7 @@ .ToList(); if (checkDetailList.Count == 0) { - LogHelper.Info($"杞:{taskName}:浠嶆湁浠诲姟鏈墽琛屽畬鎴�浣嗗綋鍓嶆病鏈夊凡涓嬪彂鐨勪换鍔�); + LogHelper.Info(preLog + $"浠嶆湁浠诲姟鏈墽琛屽畬鎴�浣嗗綋鍓嶆病鏈夊凡涓嬪彂鐨勪换鍔�); continue; } @@ -243,7 +235,7 @@ .Where((l, c) => c.S_CNTR_CODE == detail.S_CNTR_CODE).First(); if (startLoc == null) { - LogHelper.Info($"杞:{taskName}:娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�"); + LogHelper.Info(preLog + $"娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�"); continue; } @@ -253,18 +245,125 @@ .Where(a => a.N_CURRENT_NUM == 0).First(); if (endLoc == null) { - LogHelper.Info($"杞:{taskName}:娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�"); + LogHelper.Info(preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�"); continue; } detail.N_B_STATE = 2; var cntId = detail.S_CNTR_CODE; - var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); + var task = WCSHelper.BuildTaskWithLocLock(startLoc, endLoc, cntId, taskName); task.S_OP_CODE = detail.S_OO_NO; - WCSHelper.LockStartLoc(ref startLoc); - WCSHelper.LockEndLoc(ref endLoc); + using (var tran = db.Ado.UseTran()) { + if (db.Updateable(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { + tran.RollbackTran(); + LogHelper.Info(preLog + $"淇敼{taskName}鍗曟槑缁嗚〃鐘舵�涓哄畬鎴�-澶辫触!"); + continue; + } + + if (db.Updateable(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM, }).ExecuteCommand() <= 0) { + tran.RollbackTran(); + LogHelper.Info(preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触!璧风偣='{startLoc.S_CODE}',閿佺姸鎬�>'鍑哄簱閿�"); + continue; + } + + if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { + tran.RollbackTran(); + LogHelper.Info(preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触!缁堢偣='{endLoc.S_CODE}',閿佺姸鎬�>'鍏ュ簱閿�"); + continue; + } + + if (db.Insertable(task).ExecuteCommand() <= 0) { + tran.RollbackTran(); + LogHelper.Info(preLog + $"鐢熸垚浠诲姟'{taskName}'澶辫触,浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{cntId},璧风偣={startLoc.S_CODE},缁堢偣={endLoc.S_CODE}"); + continue; + } + + tran.CommitTran(); + LogHelper.Info(preLog + $"鐢熸垚浠诲姟'{taskName}'鎴愬姛,浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{cntId},璧风偣={startLoc.S_CODE},缁堢偣={endLoc.S_CODE}"); + continue; + } + } + } + catch (Exception ex) { + LogHelper.InfoEx(ex, preLog); + } + } + + public static void CheckShiftOrder() { + var db = new SqlHelper<object>().GetInstance(); + var taskInfo = Settings.GetTaskInfo(ETask.Y绉诲簱); + var taskName = taskInfo.TaskName; + const string preLog = "杞:绉诲簱:"; + + try { + var orderList = db.Queryable<TN_Relocation_List>() + .Where(c => c.N_B_STATE == 1) + .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc) + .ToList(); + + if (orderList.Count == 0) { + LogHelper.Debug(preLog + $"鏆傛棤寰呮墽琛岀殑{taskName}鍗�); + return; + } + + var detailList = new List<TN_RelocationList_Detail>(); + foreach (var order in orderList) { + var doingCount = db.Queryable<TN_RelocationList_Detail>() + .Count(d => d.S_OO_NO == order.S_NO && d.N_B_STATE >= 2); // 鎵ц涓�+ var allCount = db.Queryable<TN_RelocationList_Detail>() + .Count(d => d.S_OO_NO == order.S_NO); + LogHelper.Info(preLog + $"缁熻{taskName}鍗�{order.S_NO}浠诲姟宸蹭笅鍙�{doingCount}/{allCount}"); + + if (doingCount == allCount) { + order.N_B_STATE = 2; // 鎵�湁浠诲姟閮藉凡鎵ц + db.Updateable(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); + continue; + } + + var checkDetailList = db.Queryable<TN_RelocationList_Detail>() + .Where(a => a.S_OO_NO == order.S_NO && a.N_B_STATE == 1) // 宸蹭笅鍙�+ .ToList(); + + if (checkDetailList.Count == 0) { + LogHelper.Info(preLog + $"浠嶆湁浠诲姟鏈墽琛屽畬鎴�浣嗗綋鍓嶆病鏈夊凡涓嬪彂鐨勪换鍔�); + continue; + } + + foreach (var checkDetail in checkDetailList) { + detailList.Add(checkDetail); + } + } + + foreach (var detail in detailList) { + var startLoc = db.Queryable<TN_Location>() + .LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE) + .Where((l, c) => c.S_CNTR_CODE == detail.S_CNTR_CODE) + .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�:鏈笂閿�+ .Where(l => l.N_CURRENT_NUM == 1) + .First(); + + if (startLoc == null) { + LogHelper.Info(preLog + $"娌℃湁鎵惧埌缁堢偣璐т綅={detail.S_END_AREA}鐨勭粓鐐硅揣浣�闇�婊¤冻:鏈笂閿�褰撳墠瀹瑰櫒鏁伴噺=0"); + continue; + } + + var endLoc = db.Queryable<TN_Location>() + .Where(l => l.S_AREA_CODE == detail.S_END_AREA) + .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�:鏈笂閿�+ .Where(a => a.N_CURRENT_NUM == 0).First(); + + if (endLoc == null) { + LogHelper.Info(preLog + $"娌℃湁鎵惧埌缁堢偣璐т綅={detail.S_END_AREA}鐨勭粓鐐硅揣浣�闇�婊¤冻:鏈笂閿�褰撳墠瀹瑰櫒鏁伴噺=0"); + continue; + } + + detail.N_B_STATE = 2; + + var cntId = detail.S_CNTR_CODE; + var task = WCSHelper.BuildTaskWithLocLock(startLoc, endLoc, cntId, taskName); + task.S_OP_CODE = detail.S_OO_NO; using (var tran = db.Ado.UseTran()) { if (db.Updateable(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { @@ -287,146 +386,12 @@ if (db.Insertable(task).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触,浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{cntId},璧风偣={startLoc.S_CODE},缁堢偣={endLoc.S_CODE}"; - LogHelper.Info(info); + LogHelper.Info(preLog + $"鐢熸垚浠诲姟'{taskName}'澶辫触,浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{cntId},璧风偣={startLoc.S_CODE},缁堢偣={endLoc.S_CODE}"); continue; } tran.CommitTran(); - info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛,浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{cntId},璧风偣={startLoc.S_CODE},缁堢偣={endLoc.S_CODE}"; - LogHelper.Info(info); - continue; - } - } - } - catch (Exception ex) { - LogHelper.InfoEx(ex, preLog); - } - } - - public static void CheckShiftOrder() { - var db = new SqlHelper<object>().GetInstance(); - var info = ""; - - var taskInfo = Settings.GetTaskInfo(ETask.Y绉诲簱); - var taskName = taskInfo.TaskName; - const string preLog = "杞:绉诲簱:"; - - try { - var orderList = db.Queryable<TN_Relocation_List>() - .Where(c => c.N_B_STATE == 1) - .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc) - .ToList(); - - if (orderList.Count == 0) { - LogHelper.Debug($"杞:{taskName}:鏆傛棤寰呮墽琛岀殑{taskName}鍗�); - return; - } - - var detailList = new List<TN_RelocationList_Detail>(); - foreach (var order in orderList) { - var doingCount = db.Queryable<TN_RelocationList_Detail>() - .Count(d => d.S_OO_NO == order.S_NO && d.N_B_STATE >= 2); // 鎵ц涓�- var allCount = db.Queryable<TN_RelocationList_Detail>() - .Count(d => d.S_OO_NO == order.S_NO); - LogHelper.Info($"杞:{taskName}:缁熻{taskName}鍗�{order.S_NO}浠诲姟宸蹭笅鍙�{doingCount}/{allCount}"); - - if (doingCount == allCount) { - order.N_B_STATE = 2; // 鎵�湁浠诲姟閮藉凡鎵ц - db.Updateable(order).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand(); - continue; - } - - var checkDetailList = db.Queryable<TN_RelocationList_Detail>() - .Where(a => a.S_OO_NO == order.S_NO && a.N_B_STATE == 1) // 宸蹭笅鍙�- .ToList(); - - if (checkDetailList.Count == 0) { - LogHelper.Info($"杞:{taskName}:浠嶆湁浠诲姟鏈墽琛屽畬鎴�浣嗗綋鍓嶆病鏈夊凡涓嬪彂鐨勪换鍔�); - continue; - } - - foreach (var checkDetail in checkDetailList) { - detailList.Add(checkDetail); - } - } - - foreach (var detail in detailList) { - var startLoc = db.Queryable<TN_Location>() - .LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE) - .Where((l, c) => c.S_CNTR_CODE == detail.S_CNTR_CODE) - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�:鏈笂閿�- .Where(l => l.N_CURRENT_NUM == 1) - .First(); - - if (startLoc == null) { - info = $"杞:{taskName}:娌℃湁鎵惧埌瀹瑰櫒鍙�{detail.S_CNTR_CODE}鐨勮捣鐐硅揣浣�闇�婊¤冻:鏈笂閿�褰撳墠瀹瑰櫒鏁伴噺=1"; - LogHelper.Info(info); - continue; - } - - var endLoc = db.Queryable<TN_Location>() - .Where(l => l.S_AREA_CODE == detail.S_END_AREA) - .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�:鏈笂閿�- .Where(a => a.N_CURRENT_NUM == 0).First(); - - if (endLoc == null) { - info = $"杞:{taskName}:娌℃湁鎵惧埌缁堢偣璐т綅={detail.S_END_AREA}鐨勭粓鐐硅揣浣�闇�婊¤冻:鏈笂閿�褰撳墠瀹瑰櫒鏁伴噺=0"; - LogHelper.Info(info); - continue; - } - - detail.N_B_STATE = 2; - - var cntId = detail.S_CNTR_CODE; - var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); - task.S_OP_CODE = detail.S_OO_NO; - - WCSHelper.LockStartLoc(ref startLoc); // 璧风偣鍑哄簱閿�- WCSHelper.LockEndLoc(ref endLoc); // 缁堢偣鍏ュ簱閿�- - using (var tran = db.Ado.UseTran()) { - if (db.Updateable(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { - tran.RollbackTran(); - LogHelper.Info($"杞:{taskName}:淇敼{taskName}鍗曟槑缁嗚〃鐘舵�涓哄畬鎴�-澶辫触!"); - continue; - } - - if (db.Updateable(startLoc).UpdateColumns(it => new { - it.N_LOCK_STATE, - it.S_LOCK_STATE, - it.S_LOCK_OP, - it.T_MODIFY, - it.N_CURRENT_NUM, // 璧风偣璐т綅缁戝畾鍚�灏嗚揣浣嶇姸鎬佹洿鏂�- }).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触:鏇存柊璧风偣璐т綅{startLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - continue; - } - - if (db.Updateable(endLoc).UpdateColumns(it => new { - it.N_LOCK_STATE, - it.S_LOCK_STATE, - it.S_LOCK_OP, - it.T_MODIFY, - }).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触:鏇存柊缁堢偣璐т綅{endLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - continue; - } - - if (db.Insertable(task).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触,浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{cntId},璧风偣={startLoc.S_CODE},缁堢偣={endLoc.S_CODE}"; - LogHelper.Info(info); - continue; - } - - tran.CommitTran(); - info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛,浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{cntId},璧风偣={startLoc.S_CODE},缁堢偣={endLoc.S_CODE}"; - LogHelper.Info(info); + LogHelper.Info(preLog + $"鐢熸垚浠诲姟'{taskName}'鎴愬姛,浠诲姟鍙�{task.S_CODE},瀹瑰櫒鍙�{cntId},璧风偣={startLoc.S_CODE},缁堢偣={endLoc.S_CODE}"); continue; } } @@ -438,7 +403,6 @@ public static void CreateTaskReturnErp(TN_Task task) { var db = new SqlHelper<object>().GetInstance(); - var info = ""; var httpH = new HttpHelper(); try { @@ -447,8 +411,7 @@ .First(); if (plan == null) { - info = $"璁″垝鍗曞彿{task.S_BS_NO}涓嶅瓨鍦�"; - LogHelper.Info(info); + LogHelper.Info($"璁″垝鍗曞彿{task.S_BS_NO}涓嶅瓨鍦�"); } var cgDetail = db.Queryable<TN_CG_Detail>() @@ -456,8 +419,7 @@ .First(); if (cgDetail == null) { - info = $"鐗╂枡缂栫爜涓嶅瓨鍦�"; - LogHelper.Info(info); + LogHelper.Info($"璁″垝鍗曞彿{task.S_BS_NO}涓嶅瓨鍦�"); } var model = new OtherModel.CreateTaskReturnErpInfo { @@ -527,8 +489,7 @@ plan.HWZT = model.hwzt; plan.PH = model.ph; var success = db.Updateable(plan).UpdateColumns(p => new { p.HW, p.HWZT, p.PH }).ExecuteCommand() > 0; - info = "鏇存柊鍑哄簱璁″垝鍗曡褰曡〃" + (success ? "鎴愬姛" : "澶辫触"); - LogHelper.Info(info); + LogHelper.Info("鏇存柊鍑哄簱璁″垝鍗曡褰曡〃" + (success ? "鎴愬姛" : "澶辫触")); } catch (Exception ex) { LogHelper.InfoEx(ex); -- Gitblit v1.9.1