From c4e968254a4f1c5d538a9fd91284b4843ea08198 Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期五, 23 五月 2025 10:44:58 +0800
Subject: [PATCH] 内部联调,修复问题,添加取消任务功能

---
 core/WCSCore.cs |  286 ++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 190 insertions(+), 96 deletions(-)

diff --git a/core/WCSCore.cs b/core/WCSCore.cs
index c7fe69d..61e832b 100644
--- a/core/WCSCore.cs
+++ b/core/WCSCore.cs
@@ -74,6 +74,7 @@
                     if (TN_Task.S_TYPE == TaskName.浜у搧鍏ュ簱 || TN_Task.S_TYPE == TaskName.浜у搧閮ㄥ垎鍥炲簱) {
                         var captureTask = Task.Run(() => {
                             CapturePic(TN_Task);
+                            LogHelper.Info($"{TN_Task}锛氭媿鐓ask缁撴潫");
                         });
                     }
 
@@ -81,6 +82,14 @@
                         var setEndLocTask = Task.Run(() => {
                             // 鍙浠诲姟涓轰骇鍝佸叆搴�PDA)锛屽氨闇�閲嶆柊鎸囧畾缁堢偣锛堥粯璁ndLoc涓�"锛�                             SetEndLoc(TN_Task);
+                            LogHelper.Info("璁剧疆缁堢偣Task缁撴潫");
+                        });
+                    }
+
+                    if (TN_Task.S_TYPE == TaskName.浜у搧閮ㄥ垎鍥炲簱) {
+                        var weightTask = Task.Run(() => {
+                            UpdateWeight(TN_Task);
+                            LogHelper.Info("绉伴噸Task缁撴潫");
                         });
                     }
 
@@ -111,47 +120,192 @@
         public static void CapturePic(TN_Task model) {
             var db = new SqlHelper<object>().GetInstance();
 
-            var filepath = SnapManager.GetCapturePicturePath();
-            if (string.IsNullOrEmpty(filepath)) {
-                LogHelper.Info("鍥剧墖鍦板潃涓虹┖");
-                return;
+            try {
+                var filepath = SnapManager.GetCapturePicturePath();
+                if (string.IsNullOrEmpty(filepath)) {
+                    LogHelper.Info("鍥剧墖鍦板潃涓虹┖");
+                    return;
+                }
+
+                if (db.Updateable<TN_Loc_Container>()
+                    .SetColumns(d => d.S_IMG_URL == filepath)
+                    .Where(d => d.S_CNTR_CODE == model.S_CNTR_CODE).ExecuteCommand() <= 0) {
+
+                    LogHelper.Info($"鍥剧墖URL '{filepath}' 鍐欏叆鏁版嵁搴撳け璐�);
+                    return;
+                }
             }
-
-            if (db.Updateable<TN_CG_Detail>()
-                .SetColumns(d => d.S_IMG_URL == filepath)
-                .Where(d => d.S_CNTR_CODE == model.S_CNTR_CODE).ExecuteCommand() <= 0) {
-
-                LogHelper.Info($"鍥剧墖URL '{filepath}' 鍐欏叆鏁版嵁搴撳け璐�);
-                return;
+            catch (Exception ex) {
+                LogHelper.Info($"鍙戠敓浜嗛敊璇細{ex.Message}");
             }
         }
 
         public static void SetEndLoc(TN_Task tn_task) {
             var db = new SqlHelper<object>().GetInstance();
-            var endLoc = db.Queryable<TN_Location>()
-                .First(a => a.S_CODE == tn_task.S_END_LOC);
+            var info = "";
+            try {
+                var endLoc = db.Queryable<TN_Location>()
+                        .First(a => a.S_CODE == tn_task.S_END_LOC);
 
-            // 濡傛灉宸茬粡璁剧疆鐨勭粓鐐硅揣浣嶏紝灏变笉瑕佸啀杩涘叆杩欎釜娴佺▼
-            if (endLoc != null) {
-                LogHelper.Info("宸茬粡璁剧疆浜嗙粓鐐硅揣浣嶏細" + JsonConvert.SerializeObject(endLoc));
-                return;
+                // 濡傛灉宸茬粡璁剧疆鐨勭粓鐐硅揣浣嶏紝灏变笉瑕佸啀杩涘叆杩欎釜娴佺▼
+                if (endLoc != null) {
+                    LogHelper.Info("宸茬粡璁剧疆浜嗙粓鐐硅揣浣嶏細" + JsonConvert.SerializeObject(endLoc));
+                    return;
+                }
+
+                var cgDetail = db.Queryable<TN_CG_Detail>()
+                    .Where(d => d.S_CNTR_CODE == tn_task.S_CNTR_CODE).First();
+
+                if (cgDetail == null) {
+                    LogHelper.Info("璁剧疆缁堢偣璐т綅澶辫触锛氬綋鍓嶄换鍔$殑鎵樼洏鍙峰湪鐗╂枡琛ㄤ腑涓嶅瓨鍦�);
+                    return;
+                }
+
+                var data = GZRobot.CustomBuf();
+
+                if (data.Count == 0) {
+                    LogHelper.Info("璁剧疆缁堢偣璐т綅澶辫触锛氭病鏈夋帴鍙楀埌鏉ヨ嚜鍥借嚜AGV鐨勯噸閲忎俊鎭�);
+                    //return; // TODO 姝e紡杩愯鏈夊浗鑷狝GV鐨勬椂鍊欐仮澶�+                }
+                else {
+                    var weight = float.Parse(data[0].parameter_varchar200_up);
+                    cgDetail.F_QTY = weight;
+                    tn_task.F_WEIGHT = weight;
+
+                    using (var tran = db.Ado.UseTran()) {
+                        if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => it.F_QTY).ExecuteCommand() <= 0) {
+                            tran.RollbackTran();
+                            LogHelper.Info("淇敼鐗╂枡琛ㄩ噸閲忓け璐�);
+                            return;
+                        }
+
+                        if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => it.F_WEIGHT).ExecuteCommand() <= 0) {
+                            tran.RollbackTran();
+                            LogHelper.Info("淇敼浠诲姟琛ㄩ噸閲忓け璐�);
+                            return;
+                        }
+
+                        tran.CommitTran();
+                    }
+
+                    LogHelper.Info($"淇敼浠诲姟鍙穥tn_task.S_CODE}鐗╂枡閲嶉噺涓簕weight}", "HosttoagvTask");
+                    if (weight > 2000) {
+                        LogHelper.Info($"鐗╂枡閲嶉噺瓒呰繃2t", "HosttoagvTask");
+                    }
+                }
+
+                // 缁堢偣璐ф灦涓虹┖鏃讹紝涓嶅垽鏂紝浜ょ粰浜哄伐澶勭悊
+                if (tn_task.S_END_LOC == "0") {
+                    LogHelper.Info("缁堢偣璐ф灦涓虹┖锛屼笉澶勭悊");
+                    return;
+                }
+
+                if (!int.TryParse(tn_task.S_END_LOC.Trim(), out int row)) {
+                    LogHelper.Info($"缁堢偣璐ф灦鍙�'{tn_task.S_END_LOC}' 鏃犳硶杞垚鏁板瓧");
+                    return;
+                }
+
+                // 鍙綋涔嬪墠鎸囧畾缁堢偣璐ф灦鍚庯紝鎵嶅皾璇曡绠楃粓鐐硅揣浣�+                if (cgDetail.F_QTY > 2000) {
+                    // 閲嶉噺瓒呰繃 2t 
+                    endLoc = null;
+                    LogHelper.Info("閲嶉噺瓒呰繃2t锛屼笉鍏佽鍏ュ簱");
+                    return;
+                }
+                else if (cgDetail.F_QTY > 1500) {
+                    // 閲嶉噺瓒呰繃1.5t锛岄渶瑕侀�鎷�-2灞傝揣鏋�+                    endLoc = db.Queryable<TN_Location>()
+                        .First(a => a.N_ROW == row && a.N_LAYER <= 2
+                        && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y");
+                }
+                else if (cgDetail.F_QTY > 0) {
+                    // 閲嶉噺鏈秴杩�.5t锛屽湪鎸囧畾璐ф灦闅忎究閫夋嫨1涓�+                    endLoc = db.Queryable<TN_Location>().Where(a => a.N_ROW == row
+                        && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y")
+                        .OrderBy(a => a.N_LAYER > 2 ? 0 : 1).First(); // 浼樺厛閫夊眰绾ч珮鐨�+                }
+                else {
+                    // 娌℃湁鎺ユ敹鍒伴噸閲忥紝鎴栭噸閲忓嚭閿�+                    endLoc = null;
+                    LogHelper.Info($"閿欒鐨勯噸閲忎俊鎭細{cgDetail.F_QTY}");
+                    return;
+                }
+
+                // 濡傛灉娌℃湁绗﹀悎鏉′欢鐨勮揣浣嶏紝缃┖锛岀瓑寰匬DA閲嶆柊纭畾
+                if (endLoc == null) {
+                    tn_task.S_END_AREA = Settings.Areas[1][0]; // HJQ
+                    tn_task.S_END_LOC = "0";
+
+                    // 涓嶉渶瑕佸啀缁橤Z AGV浼犵┖鍊硷紝涓�紑濮嬪氨娌$粰鍏蜂綋璐т綅锛屽彧缁欎簡Area
+
+                    //var request = new UpdateInteractInfo {
+                    //    interaction_info_id = 3, // 鏇存敼缁堢偣淇℃伅
+                    //    info_status = "active",
+                    //    return_value = "",
+                    //};
+
+                    //GZRobot.UpdateInteractInfo(request);
+                    if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC })
+                            .ExecuteCommand() > 0) {
+                        //LocationHelper.LockLoc(endLoc.S_CODE, 1);//缁堢偣鍏ュ簱閿�+                        LogHelper.Info($"閲嶆柊璁$畻鍚庢病鏈夊悎閫傝揣浣嶏紝浠诲姟 {tn_task.S_CODE} 淇敼鎴愬姛锛屼慨鏀圭粓鐐硅揣浣嶄负 0绌�);
+                    }
+                    else {
+                        LogHelper.Info($"閲嶆柊璁$畻鍚庢病鏈夊悎閫傝揣浣嶏紝浠诲姟 {tn_task.S_CODE} 淇敼澶辫触锛屼慨鏀圭粓鐐硅揣浣嶄负 0绌�);
+                    }
+                }
+                else {
+                    // 鎵惧埌鍚堥�鐨勮揣浣嶏紝鎺ㄩ�
+                    tn_task.S_END_LOC = endLoc.S_CODE;
+
+                    LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿�+
+                    using (var tran = db.Ado.UseTran()) {
+                        if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC })
+                            .ExecuteCommand() <= 0) {
+                            tran.RollbackTran();
+                            LogHelper.Info($"璁$畻璐т綅鎴愬姛锛屼换鍔�{tn_task.S_CODE}'淇敼澶辫触锛岀粓鐐硅揣鏋朵负{endLoc.N_ROW}锛屼慨鏀圭粓鐐逛綅缃负 {endLoc.S_CODE}");
+                        }
+                        if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new {
+                            it.N_LOCK_STATE,
+                            it.S_LOCK_STATE,
+                            it.S_LOCK_OP,
+                            it.T_MODIFY
+                        }).ExecuteCommand() <= 0) {
+                            tran.RollbackTran();
+                            info = $"鏇存柊缁堢偣璐т綅閿佺姸鎬佸け璐ワ細璧风偣璐т綅{endLoc.S_CODE}";
+                            LogHelper.Info(info);
+                        }
+
+                        tran.CommitTran();
+                    }
+                }
             }
-
-            var cgDetail = db.Queryable<TN_CG_Detail>()
-                .Where(d => d.S_CNTR_CODE == tn_task.S_CNTR_CODE).First();
-
-            if (cgDetail == null) {
-                LogHelper.Info("璁剧疆缁堢偣璐т綅澶辫触锛氬綋鍓嶄换鍔$殑鎵樼洏鍙峰湪鐗╂枡琛ㄤ腑涓嶅瓨鍦�);
-                return;
+            catch (Exception ex) {
+                LogHelper.Info($"鍙戠敓浜嗛敊璇細{ex.Message}");
             }
+        }
 
-            var data = GZRobot.CustomBuf();
+        public static void UpdateWeight(TN_Task tn_task) {
+            var db = new SqlHelper<object>().GetInstance();
 
-            if (data.Count == 0) {
-                LogHelper.Info("璁剧疆缁堢偣璐т綅澶辫触锛氭病鏈夋帴鍙楀埌鏉ヨ嚜鍥借嚜AGV鐨勯噸閲忎俊鎭�);
-                //return; // TODO 姝e紡杩愯鏈夊浗鑷狝GV鐨勬椂鍊欐仮澶�-            }
-            else {
+            try {
+
+                var cgDetail = db.Queryable<TN_CG_Detail>()
+                    .Where(d => d.S_CNTR_CODE == tn_task.S_CNTR_CODE).First();
+
+                if (cgDetail == null) {
+                    LogHelper.Info("鏇存柊鐗╂枡閲嶉噺澶辫触锛氬綋鍓嶄换鍔$殑鎵樼洏鍙峰湪鐗╂枡琛ㄤ腑涓嶅瓨鍦�);
+                    return;
+                }
+
+                var data = GZRobot.CustomBuf();
+
+                if (data.Count == 0) {
+                    LogHelper.Info("鏇存柊鐗╂枡閲嶉噺澶辫触锛氭病鏈夋帴鍙楀埌鏉ヨ嚜鍥借嚜AGV鐨勯噸閲忎俊鎭�);
+                    return;
+                }
+
                 var weight = float.Parse(data[0].parameter_varchar200_up);
                 cgDetail.F_QTY = weight;
 
@@ -159,74 +313,14 @@
                     LogHelper.Info("淇敼鐗╂枡琛ㄩ噸閲忓け璐�);
                     return;
                 }
+
+                LogHelper.Info($"淇敼浠诲姟鍙穥tn_task.S_CODE}鐗╂枡閲嶉噺涓簕weight}", "HosttoagvTask");
+
+            }
+            catch (Exception ex) {
+                LogHelper.Info($"鍙戠敓浜嗛敊璇細{ex.Message}");
             }
 
-            // 缁堢偣璐ф灦涓虹┖鏃讹紝涓嶅垽鏂紝浜ょ粰浜哄伐澶勭悊
-            if (tn_task.S_END_LOC == "0") {
-                LogHelper.Info("缁堢偣璐ф灦涓虹┖锛屼笉澶勭悊");
-                return;
-            }
-
-            if (!int.TryParse(tn_task.S_END_LOC.Trim(), out int row)) {
-                LogHelper.Info($"缁堢偣璐ф灦鍙�'{tn_task.S_END_LOC}' 鏃犳硶杞垚鏁板瓧");
-                return;
-            }
-
-            // 鍙綋涔嬪墠鎸囧畾缁堢偣璐ф灦鍚庯紝鎵嶅皾璇曡绠楃粓鐐硅揣浣�-            if (cgDetail.F_QTY > 1500) {
-                // 閲嶉噺瓒呰繃1.5t锛岄渶瑕侀�鎷�-3灞傝揣鏋�-                endLoc = db.Queryable<TN_Location>()
-                    .First(a => a.N_ROW == row && a.N_LAYER <= 3
-                    && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y");
-            }
-            else if (cgDetail.F_QTY > 0) {
-                // 閲嶉噺鏈秴杩�.5t锛屽湪鎸囧畾璐ф灦闅忎究閫夋嫨1涓�-                endLoc = db.Queryable<TN_Location>().First(a => a.N_ROW == row
-                    && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y");
-            }
-            else {
-                // 娌℃湁鎺ユ敹鍒伴噸閲忥紝鎴栭噸閲忓嚭閿�-                endLoc = null;
-                LogHelper.Info($"閿欒鐨勯噸閲忎俊鎭細{cgDetail.F_QTY}");
-                return;
-            }
-
-            // 濡傛灉娌℃湁绗﹀悎鏉′欢鐨勮揣浣嶏紝缃┖锛岀瓑寰匬DA閲嶆柊纭畾
-            if (endLoc == null) {
-                tn_task.S_END_AREA = "HJQ";
-                tn_task.S_END_LOC = "0";
-
-                // 涓嶉渶瑕佸啀缁橤Z AGV浼犵┖鍊硷紝涓�紑濮嬪氨娌$粰鍏蜂綋璐т綅锛屽彧缁欎簡Area
-
-                //var request = new UpdateInteractInfo {
-                //    interaction_info_id = 3, // 鏇存敼缁堢偣淇℃伅
-                //    info_status = "active",
-                //    return_value = "",
-                //};
-
-                //GZRobot.UpdateInteractInfo(request);
-                if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC })
-                        .ExecuteCommand() > 0) {
-                    //LocationHelper.LockLoc(endLoc.S_CODE, 1);//缁堢偣鍏ュ簱閿�-                    LogHelper.Info($"閲嶆柊璁$畻鍚庢病鏈夊悎閫傝揣浣嶏紝浠诲姟 {tn_task.S_CODE} 淇敼鎴愬姛锛屼慨鏀圭粓鐐硅揣浣嶄负 0绌�);
-                }
-                else {
-                    LogHelper.Info($"閲嶆柊璁$畻鍚庢病鏈夊悎閫傝揣浣嶏紝浠诲姟 {tn_task.S_CODE} 淇敼澶辫触锛屼慨鏀圭粓鐐硅揣浣嶄负 0绌�);
-                }
-            }
-            else {
-                // 鎵惧埌鍚堥�鐨勮揣浣嶏紝鎺ㄩ�
-                tn_task.S_END_LOC = endLoc.S_CODE;
-
-                if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC })
-                        .ExecuteCommand() > 0) {
-                    LocationHelper.LockLoc(endLoc.S_CODE, 1);//缁堢偣鍏ュ簱閿�-                    LogHelper.Info($"璁$畻璐т綅鎴愬姛锛屼换鍔�{tn_task.S_CODE} 淇敼鎴愬姛锛岀粓鐐硅揣鏋朵负 {endLoc.N_ROW}锛屼慨鏀圭粓鐐逛綅缃负 {endLoc.S_CODE}");
-                }
-                else {
-                    LogHelper.Info($"璁$畻璐т綅鎴愬姛锛屼换鍔�{tn_task.S_CODE} 淇敼澶辫触锛岀粓鐐硅揣鏋朵负 {endLoc.N_ROW}锛屼慨鏀圭粓鐐逛綅缃负 {endLoc.S_CODE}");
-                }
-            }
         }
 
         /// <summary>

--
Gitblit v1.9.1