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