From 3909fbf77ad4ebc0dde600ff82710d959f74b5f4 Mon Sep 17 00:00:00 2001
From: 杨张扬 <634643841@qq.com>
Date: 星期四, 10 七月 2025 17:49:20 +0800
Subject: [PATCH] AGV会换车,删除库存操作改成收到4执行,去线边的货位自动解绑

---
 wms/WCSHelper.cs         |   16 ++---
 device/ScanCodeHelper.cs |   13 +++-
 device/TcpServer.cs      |    6 -
 wms/SpecHelper.cs        |  103 ++++++++++++++++++++++++++++++++-
 core/Monitor.cs          |   10 ---
 api/ApiHelper.cs         |   12 ----
 core/WCSCore.cs          |   14 ++++
 7 files changed, 127 insertions(+), 47 deletions(-)

diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs
index 7122e40..39fb574 100644
--- a/api/ApiHelper.cs
+++ b/api/ApiHelper.cs
@@ -1092,11 +1092,6 @@
                         };
                         SpecHelper.InsertComponentDetail(target);
                     });
-
-                    Task task27 = Task.Run(() =>
-                    {
-                        SpecHelper.DeleteInventoryM(cgInfo.S_ID);
-                    });
                 }
                 else
                 {
@@ -1938,13 +1933,6 @@
                                     SHIFT = model.shift,
                                 };
                                 SpecHelper.InsertInventoryM(target);
-                            }
-                        });
-                        Task task26 = Task.Run(() =>
-                        {
-                            if (startLoc.S_AREA_CODE == Settings.Areas[1] && cginfo != null)
-                            {
-                                SpecHelper.DeleteInventoryM(cginfo.S_ID);
                             }
                         });
 
diff --git a/core/Monitor.cs b/core/Monitor.cs
index f79b8a9..2714a0e 100644
--- a/core/Monitor.cs
+++ b/core/Monitor.cs
@@ -462,11 +462,6 @@
                             LocationHelper.LockLoc(startLoc_1.S_CODE, 2);//璧风偣鍑哄簱閿侊紝
                             LocationHelper.LockLoc(endLoc_1.S_CODE, 1);//缁堢偣鍏ュ簱閿�                             LogHelper.Info($"鐢熸垚婊℃墭杩囨湡鍑哄簱浠诲姟鎴愬姛锛屽鍣ㄥ彿{outTimeCg.S_CNTR_CODE}锛岃捣鐐箋startLoc_1.S_CODE}锛岀粓鐐箋endLoc_1.S_CODE}");
-
-                            Task task27 = Task.Run(() =>
-                            {
-                                SpecHelper.DeleteInventoryM(outTimeCg.S_ID);
-                            });
                         }
                     }
                 }
@@ -943,11 +938,6 @@
                     LocationHelper.LockLoc(endLoc.S_CODE, 1);//缁堢偣鍏ュ簱閿� 
                     LogHelper.Info($"鐢熸垚婊℃墭鍑哄簱澶嶆浠诲姟鎴愬姛锛屽鍣細{cntId.S_CNTR_CODE}锛岃捣鐐癸細{startLoc.S_CODE}锛岀粓鐐癸細{endLoc.S_CODE}");
-
-                    Task task27 = Task.Run(() =>
-                    {
-                         SpecHelper.DeleteInventoryM(cgInfo.S_ID);
-                    });
                 }
                 else
                 {
diff --git a/core/WCSCore.cs b/core/WCSCore.cs
index 364926e..0d76837 100644
--- a/core/WCSCore.cs
+++ b/core/WCSCore.cs
@@ -35,8 +35,9 @@
                 }
                 else if (model.state == 1012)
                 {
-                    Task task5 = Task.Run(() =>
+                    Task task5 = Task.Run(async () =>
                     {
+                        await Task.Delay(3000);//寤舵椂3绉�                         PostScanCode(model.task_no, model.forklift_no);//鍙嶉鎵爜缁撴灉
                     });
                 }
@@ -86,6 +87,11 @@
                                     Task task1 = Task.Run(() =>
                                     {
                                         returnS7Ok(tN_Task);
+                                    });
+
+                                    Task task27 = Task.Run(() =>
+                                    {
+                                        SpecHelper.DeleteInventoryM(tN_Task);
                                     });
 
                                     break;
@@ -157,6 +163,11 @@
                                     break;
                                 case 2:
                                     WCSHelper.End(tN_Task);//浠诲姟鐘舵�鏀规垚缁撴潫
+
+                                    Task task16 = Task.Run(() =>
+                                    {
+                                        SpecHelper.RestEndLoc(tN_Task);
+                                    });
 
                                     break;
                                 case 7:
@@ -473,7 +484,6 @@
                 {
                     //鎺ㄩ�鎴愬姛
                     LogHelper.Info($"NDC鍙嶉鎵爜缁撴灉鎴愬姛锛屾壂鐮佺粨鏋滐細{TcpServer.saoMa[agv.ScanAddress].ToString()}");
-                   
                 }
                 else
                 {
diff --git a/device/ScanCodeHelper.cs b/device/ScanCodeHelper.cs
index 415ed2b..4c0f05f 100644
--- a/device/ScanCodeHelper.cs
+++ b/device/ScanCodeHelper.cs
@@ -53,15 +53,20 @@
         {
             var db = new SqlHelper<TN_Task>().GetInstance();
             var task = new TN_Task();
-            task = db.Queryable<TN_Task>().Where(a => a.S_EQ_NO == agvCode && a.N_B_STATE == 2).OrderByDescending(b => b.T_CREATE).First();
-            if (task != null && RFID.Contains(task.S_CNTR_CODE))
+            task = db.Queryable<TN_Task>().Where(a => a.S_EQ_NO == agvCode).OrderByDescending(b => b.T_START_TIME).First();
+            if (task != null &&
+                (
+                RFID == task.S_CNTR_CODE
+                || RFID.Contains(task.S_CNTR_CODE)
+                || task.S_CNTR_CODE.Contains(RFID)
+                ))
             {
-                LogHelper.Info($"鏍¢獙鎴愬姛Agv锛歿agvCode}瀹瑰櫒鍙凤細{RFID}");
+                LogHelper.Info($"鏍¢獙鎴愬姛Agv锛歿agvCode}锛岃鍗″櫒鐨勫鍣ㄥ彿锛歿RFID}锛屼换鍔$殑瀹瑰櫒鍙凤細{ task.S_CNTR_CODE}");
                 return true;
             }
             else
             {
-                LogHelper.Info($"鏍¢獙澶辫触Agv锛歿agvCode}瀹瑰櫒鍙凤細{RFID}");
+                LogHelper.Info($"鏍¢獙澶辫触Agv锛歿agvCode}锛岃鍗″櫒鐨勫鍣ㄥ彿锛歿RFID}锛屼换鍔$殑瀹瑰櫒鍙凤細{ task?.S_CNTR_CODE ?? "浠诲姟鏈壘鍒�}");
 
                 //鏍¢獙澶辫触灏卞彇娑堜换鍔�                 //var task1 = Task.Run(() => 
diff --git a/device/TcpServer.cs b/device/TcpServer.cs
index 2f79907..d72eef8 100644
--- a/device/TcpServer.cs
+++ b/device/TcpServer.cs
@@ -100,8 +100,6 @@
                     clients.Remove(remote_ip);
                     buffers.Remove(remote_ip);
                     isSend.Remove(remote_ip);
-                    isCheck.Remove(remote_ip);
-                    saoMa.Remove(remote_ip);
                     return;
                 }
                 else
@@ -183,7 +181,7 @@
                     {
                         //鍗峰笜闂ㄥ紑鍏�                         var plc = Settings.SafeDoorDevices.FirstOrDefault(a => a.IPAddress == remote_ip);
-                        var log = string.Join(",", messageBytes.Select(x => x.ToString()));
+                        var log = BitConverter.ToString(messageBytes);
                         if (plc != null &&
                             messageBytes[0] == 0x3F &&
                             messageBytes[1] == 0x00 &&
@@ -229,7 +227,7 @@
             }
             catch (Exception ex)
             {
-               
+               LogHelper.Error(ex.Message, ex);
             }
         }
 
diff --git a/wms/SpecHelper.cs b/wms/SpecHelper.cs
index 257bb58..afce956 100644
--- a/wms/SpecHelper.cs
+++ b/wms/SpecHelper.cs
@@ -280,6 +280,90 @@
         }
 
         /// <summary>
+        /// 閲嶇疆缁堢偣璐т綅锛屽彧閽堝鍘荤嚎杈圭殑璐у搧
+        /// </summary>
+        /// <param name="tN_Task"></param>
+        internal static void RestEndLoc(TN_Task tN_Task)
+        {
+            try
+            {
+                if (tN_Task.S_END_AREA == Settings.Areas[2] || tN_Task.S_TYPE.Contains("婊℃墭鍑哄簱涓婄嚎"))
+                {
+                    var db = new SqlHelper<object>().GetInstance();
+
+                    using (var tran = db.Ado.UseTran())
+                    {
+                        var endLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == tN_Task.S_END_LOC);
+                        if (endLoc != null)
+                        {
+                            endLoc.N_CURRENT_NUM = 0;
+                            endLoc.N_LOCK_STATE = 0;
+                            endLoc.S_LOCK_STATE = "鏃�;
+
+                            if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new { it.N_CURRENT_NUM, it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand() > 0)
+                            {
+                                LogHelper.Info($"鏇存柊缁堢偣璐т綅鎴愬姛锛寋JsonConvert.SerializeObject(endLoc)}");
+                            }
+                            else
+                            {
+                                LogHelper.Info($"鏇存柊缁堢偣璐т綅澶辫触锛寋JsonConvert.SerializeObject(endLoc)}");
+                                tran.RollbackTran();
+                                return;
+                            }
+
+                            var locCnt = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == endLoc.S_CODE);
+
+                            if (locCnt != null)
+                            {
+                                var cgInfo = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == locCnt.S_CNTR_CODE);
+
+                                if (db.Deleteable<TN_Loc_Container>(locCnt).ExecuteCommand() > 0)
+                                {
+                                    LogHelper.Info($"鍒犻櫎璐т綅瀹瑰櫒缁戝畾鍏崇郴鎴愬姛锛寋JsonConvert.SerializeObject(locCnt)}");
+                                }
+                                else
+                                {
+                                    LogHelper.Info($"鍒犻櫎璐т綅瀹瑰櫒缁戝畾鍏崇郴澶辫触锛寋JsonConvert.SerializeObject(locCnt)}");
+                                    tran.RollbackTran();
+                                    return;
+                                }
+
+                                if (cgInfo != null)
+                                {
+                                    if (db.Deleteable<TN_CG_Detail>(cgInfo).ExecuteCommand() > 0)
+                                    {
+                                        LogHelper.Info($"鍒犻櫎瀹瑰櫒璐у搧鏄庣粏鎴愬姛锛寋JsonConvert.SerializeObject(cgInfo)}");
+                                    }
+                                    else
+                                    {
+                                        LogHelper.Info($"鍒犻櫎瀹瑰櫒璐у搧鏄庣粏澶辫触锛寋JsonConvert.SerializeObject(cgInfo)}");
+                                        tran.RollbackTran();
+                                        return;
+                                    }
+                                }
+                            }
+                        }
+
+                        tran.CommitTran();
+                        LogHelper.Info($"閲嶇疆缁堢偣璐т綅锛屾垚鍔燂紝{JsonConvert.SerializeObject(tN_Task)}");
+                        return;
+                    }
+                }
+                else
+                {
+                    LogHelper.Info($"褰撳墠浠诲姟缁堢偣璐т綅涓嶆槸鍘荤嚎杈癸紝涓嶉渶瑕侀噸缃粓鐐硅揣浣嶏紝{JsonConvert.SerializeObject(tN_Task)}");
+                    return;
+                }
+
+              
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Error("閲嶇疆缁堢偣璐т綅锛屽彧閽堝鍘荤嚎杈圭殑璐у搧 澶辫触", ex);
+            }
+        }
+
+        /// <summary>
         /// 鏇存柊浣欐枡鍥炲簱鏄庣粏
         /// </summary>
         public static void UpdateSurplusDetail(string taskNo,float weight)
@@ -387,18 +471,27 @@
         /// <summary>
         /// 鍒犻櫎WMS搴撳瓨鏄庣粏
         /// </summary>
-        public static void DeleteInventoryM(string cg_SID)
+        public static void DeleteInventoryM(TN_Task taskTn)
         {
             try
             {
-                var db = new SqlHelper<object>().GetInstance();
-                if(db.Deleteable<TN_InventoryM>().Where(it => it.S_ID == cg_SID).ExecuteCommand() > 0)
+                if (taskTn.S_START_AREA == Settings.Areas[1] || taskTn.S_TYPE.Contains("婊℃墭鍑哄簱涓婄嚎")) //涓嶆槸浠庢弧鎵樼紦瀛樺簱鍖虹Щ鍑哄氨涓嶅垹闄�                 {
-                    LogHelper.Info($"鍒犻櫎WMS搴撳瓨鏄庣粏锛屾垚鍔燂紝鐗╂枡涓婚敭锛歿cg_SID}");
+                    var db = new SqlHelper<object>().GetInstance();
+
+                    if (db.Deleteable<TN_InventoryM>().Where(it => it.S_ID == taskTn.S_ID || it.RFID == taskTn.S_CNTR_CODE).ExecuteCommand() > 0)
+                    {
+                        LogHelper.Info($"鍒犻櫎WMS搴撳瓨鏄庣粏锛屾垚鍔燂紝鐗╂枡涓婚敭锛歿taskTn.S_ID}锛屽鍣ㄥ彿锛歿taskTn.S_CNTR_CODE}");
+                    }
+                    else
+                    {
+                        LogHelper.Info($"鍒犻櫎WMS搴撳瓨鏄庣粏锛屽け璐ワ紝鐗╂枡涓婚敭锛歿taskTn.S_ID}锛屽鍣ㄥ彿锛歿taskTn.S_CNTR_CODE}");
+                    }
                 }
                 else
                 {
-                    LogHelper.Info($"鍒犻櫎WMS搴撳瓨鏄庣粏锛屽け璐ワ紝鐗╂枡涓婚敭锛歿cg_SID}");
+                    LogHelper.Info($"涓嶆槸浠庢弧鎵樼紦瀛樺簱鍖烘惉鍑虹殑璐т綅锛屼笉闇�鍒犻櫎搴撳瓨鏄庣粏锛岀墿鏂欎富閿細{taskTn.S_ID}锛屽鍣ㄥ彿锛歿taskTn.S_CNTR_CODE}");
+                    return;
                 }
             }
             catch (Exception ex)
diff --git a/wms/WCSHelper.cs b/wms/WCSHelper.cs
index 8ce42cb..665d4cf 100644
--- a/wms/WCSHelper.cs
+++ b/wms/WCSHelper.cs
@@ -187,15 +187,11 @@
             var db = new SqlHelper<TN_Task>().GetInstance();
             if (task != null)
             {
-                if (task.N_B_STATE == 1)
-                {
-                    task.N_B_STATE = 2;
-                    task.S_B_STATE = TN_Task.GetStateStr(task.N_B_STATE);
-                    task.T_START_TIME = System.DateTime.Now;
-                    task.S_EQ_NO = forklift_no;
-                    db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_START_TIME, it.S_EQ_NO }).ExecuteCommand();
-                }
-
+                task.N_B_STATE = 2;
+                task.S_B_STATE = TN_Task.GetStateStr(task.N_B_STATE);
+                task.T_START_TIME = System.DateTime.Now;
+                task.S_EQ_NO = forklift_no;
+                db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_START_TIME, it.S_EQ_NO }).ExecuteCommand();
             }
         }
         internal static void End(TN_Task task) {
@@ -244,7 +240,7 @@
             {
                 LogHelper.Info($"鍙栨秷浠诲姟: {tN_Task.S_CODE} 缁堢偣鏄弧鎵樼紦瀛樺簱鍖� {tN_Task.S_END_AREA}");
 
-                TaskProcess.OperateStatus(tN_Task, 7);//寮傚父澶勭悊
+                TaskProcess.CacheBitCancelUpdate(tN_Task);//寮傚父澶勭悊
             }
             else if (tN_Task.S_START_AREA == HJ || tN_Task.S_TYPE.Contains("婊℃墭鍑哄簱涓婄嚎"))//璧风偣鏄弧鎵樼紦瀛樺簱鍖�             {

--
Gitblit v1.9.1