From ef839d119eec2c28fac5f5ba175d71f926afae44 Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期二, 20 五月 2025 11:49:22 +0800
Subject: [PATCH] 修复数据库表字段不匹配、读取重量错误处理等逻辑

---
 Services/AgvService.cs |  193 +++++++++++++++++++++++++++++++----------------
 1 files changed, 127 insertions(+), 66 deletions(-)

diff --git a/Services/AgvService.cs b/Services/AgvService.cs
index 50d342f..5a2cd96 100644
--- a/Services/AgvService.cs
+++ b/Services/AgvService.cs
@@ -14,6 +14,7 @@
 using static HH.WCS.Mobox3.AnGang.Dtos.Response.AgvResponse;
 using HH.WCS.Mobox3.AnGang.Consts;
 using HH.WCS.Mobox3.AnGang.Dispatch;
+using HH.WCS.Mobox3.AnGang.Devices;
 
 namespace HH.WCS.Mobox3.AnGang.Services {
     public class AgvService {
@@ -22,8 +23,8 @@
             try {
                 switch (model.state) {
                     case 1023:
+                        break;
                     case 1025:
-
                         break;
                     case 1012:
                         break;
@@ -45,7 +46,7 @@
 
                 result.ResultCode = 0;
                 result.ResultMsg = "success";
-                LogHelper.Info(result.ResultMsg, "API");
+                LogHelper.Info(result.ResultMsg + $": state {model.state}", "API");
                 return result;
             }
             catch (Exception ex) {
@@ -83,10 +84,17 @@
                 case AgvStateCode.鍙栬揣瀹屾垚:
                     WCSHelper.UpdateStatus(TN_Task, "鍙栬揣瀹屾垚"); // 浠诲姟鐘舵�鏀规垚鍙栬揣瀹屾垚
 
-                    // TODO 鎷嶇収
+                    var captureTask = Task.Run(() => {
+                        if (TN_Task.S_TYPE == TaskName.浜у搧鍏ュ簱 || TN_Task.S_TYPE == TaskName.浜у搧閮ㄥ垎鍥炲簱) {
+                            CapturePic(TN_Task);
+                        }
+                    });
 
                     var setEndLocTask = Task.Run(() => {
-                        SetEndLoc(TN_Task);
+                        // 鍙浠诲姟涓轰骇鍝佸叆搴�PDA)锛屽氨闇�閲嶆柊鎸囧畾缁堢偣锛堥粯璁ndLoc涓�"锛�+                        if (TN_Task.S_TYPE == TaskName.浜у搧鍏ュ簱) {
+                            SetEndLoc(TN_Task);
+                        }
                     });
 
                     TaskHelper.OperateStatus(TN_Task, 4); // 璧风偣瀹瑰櫒璐т綅瑙g粦,瑙i攣璧风偣
@@ -113,81 +121,134 @@
             return true;
         }
 
+        public static void CapturePic(TN_Task model) {
+            var db = DbHelper.GetDbClient();
+
+            var filepath = SnapManager.GetCapturePicturePath();
+            if (string.IsNullOrEmpty(filepath)) {
+                LogHelper.Info("鍥剧墖鍦板潃涓虹┖");
+                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;
+            }
+        }
+
         public static void SetEndLoc(TN_Task tn_task) {
-            // 鍙浠诲姟涓轰骇鍝佸叆搴�PDA)锛屽氨闇�閲嶆柊鎸囧畾缁堢偣锛堥粯璁ndLoc涓�"锛�-            if (tn_task.S_TYPE == "浜у搧鍏ュ簱(PDA)") {
+            var db = DbHelper.GetDbClient();
+            var endLoc = db.Queryable<TN_Location>()
+                .First(a => a.S_CODE == tn_task.S_END_LOC);
 
-                var db = DbHelper.GetDbClient();
-                var endLoc = new TN_Location();
+            // 濡傛灉宸茬粡璁剧疆鐨勭粓鐐硅揣浣嶏紝灏变笉瑕佸啀杩涘叆杩欎釜娴佺▼
+            if (endLoc != null) {
+                LogHelper.Info("宸茬粡璁剧疆浜嗙粓鐐硅揣浣嶏細" + JsonConvert.SerializeObject(endLoc));
+                return;
+            }
 
-                var data = GZRobot.CustomBuf();
+            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);
-                tn_task.F_WEIGHT= weight;
+                cgDetail.F_QTY = weight;
 
-                // 鍙綋涔嬪墠鎸囧畾缁堢偣璐ф灦鍚庯紝鎵嶅皾璇曡绠楃粓鐐硅揣浣嶏紝鍚﹀垯浜ょ粰浜哄伐鍐冲畾
-                if (tn_task.S_END_AREA != "") {
-                    if (weight > 1500) {
-                        // 閲嶉噺瓒呰繃1.5t锛岄渶瑕侀�鎷�-3灞傝揣鏋�-                        endLoc = db.Queryable<TN_Location>().First(a => a.S_SHELF_CODE == tn_task.S_END_AREA && LocationHelper.IsFree(a) && a.N_CURRENT_NUM == 0 && a.N_HEIGHT <= 3);
-                    }
-                    else if (weight > 0) {
-                        // 閲嶉噺鏈秴杩�.5t锛屽湪鎸囧畾璐ф灦闅忎究閫夋嫨1涓�-                        endLoc = db.Queryable<TN_Location>().First(a => a.S_SHELF_CODE == tn_task.S_END_AREA && LocationHelper.IsFree(a) && a.N_CURRENT_NUM == 0);
+                if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => it.F_QTY).ExecuteCommand() <= 0) {
+                    LogHelper.Info("淇敼鐗╂枡琛ㄩ噸閲忓け璐�);
+                    return;
+                }
+            }
+
+            // 缁堢偣璐ф灦涓虹┖鏃讹紝涓嶅垽鏂紝浜ょ粰浜哄伐澶勭悊
+            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);
+
+                using (var trans = db.Ado.UseTran()) {
+                    if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC })
+                        .ExecuteCommand() > 0) {
+                        //LocationHelper.LockLoc(endLoc.S_CODE, 1);//缁堢偣鍏ュ簱閿�+
+                        trans.CommitTran();
+                        LogHelper.Info($"閲嶆柊璁$畻鍚庢病鏈夊悎閫傝揣浣嶏紝浠诲姟 {tn_task.S_CODE} 淇敼鎴愬姛锛屼慨鏀圭粓鐐硅揣浣嶄负 0绌�);
                     }
                     else {
-                        // 娌℃湁鎺ユ敹鍒伴噸閲忥紝鎴栭噸閲忓嚭閿�-                        endLoc = null;
-                        LogHelper.Info($"閿欒鐨勯噸閲忎俊鎭細{weight}");
-                        return;
+                        trans.RollbackTran();
+                        LogHelper.Info($"閲嶆柊璁$畻鍚庢病鏈夊悎閫傝揣浣嶏紝浠诲姟 {tn_task.S_CODE} 淇敼澶辫触锛屼慨鏀圭粓鐐硅揣浣嶄负 0绌�);
                     }
+                }
+            }
+            else {
+                // 鎵惧埌鍚堥�鐨勮揣浣嶏紝鎺ㄩ�
+                tn_task.S_END_LOC = endLoc.S_CODE;
 
-                    // 濡傛灉娌℃湁绗﹀悎鏉′欢鐨勮揣浣嶏紝缃┖锛岀瓑寰匬DA閲嶆柊纭畾
-                    if (endLoc == null) {
-                        tn_task.S_END_AREA = "";
-                        tn_task.S_END_LOC = "";
+                using (var trans = db.Ado.UseTran()) {
+                    if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC })
+                        .ExecuteCommand() > 0) {
+                        LocationHelper.LockLoc(endLoc.S_CODE, 1);//缁堢偣鍏ュ簱閿� 
-                        // 涓嶉渶瑕佸啀缁橤Z AGV浼犵┖鍊硷紝涓�紑濮嬪氨娌$粰鍏蜂綋璐т綅锛屽彧缁欎簡Area
-
-                        //var request = new UpdateInteractInfo {
-                        //    interaction_info_id = 3, // 鏇存敼缁堢偣淇℃伅
-                        //    info_status = "active",
-                        //    return_value = "",
-                        //};
-
-                        //GZRobot.UpdateInteractInfo(request);
-
-                        using (var trans = db.Ado.UseTran()) {
-                            if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC, it.F_WEIGHT })
-                                .ExecuteCommand() > 0) {
-                                //LocationHelper.LockLoc(endLoc.S_CODE, 1);//缁堢偣鍏ュ簱閿�-
-                                trans.CommitTran();
-                                LogHelper.Info($"閲嶆柊璁$畻鍚庢病鏈夊悎閫傝揣浣嶏紝浠诲姟 {tn_task.S_CODE} 淇敼鎴愬姛锛屼慨鏀圭粓鐐硅揣鏋跺拰璐т綅涓虹┖");
-                            }
-                            else {
-                                trans.RollbackTran();
-                                LogHelper.Info($"閲嶆柊璁$畻鍚庢病鏈夊悎閫傝揣浣嶏紝浠诲姟 {tn_task.S_CODE} 淇敼澶辫触锛屼慨鏀圭粓鐐硅揣鏋跺拰璐т綅涓虹┖");
-                            }
-                        }
+                        trans.CommitTran();
+                        LogHelper.Info($"璁$畻璐т綅鎴愬姛锛屼换鍔�{tn_task.S_CODE} 淇敼鎴愬姛锛岀粓鐐硅揣鏋朵负 {endLoc.N_ROW}锛屼慨鏀圭粓鐐逛綅缃负 {endLoc.S_CODE}");
                     }
                     else {
-                        // 鎵惧埌鍚堥�鐨勮揣浣嶏紝鎺ㄩ�
-                        tn_task.S_END_LOC = endLoc.S_CODE;
+                        trans.RollbackTran();
 
-                        using (var trans = db.Ado.UseTran()) {
-                            if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new {it.S_END_LOC, it.F_WEIGHT})
-                                .ExecuteCommand() > 0) {
-                                LocationHelper.LockLoc(endLoc.S_CODE, 1);//缁堢偣鍏ュ簱閿�-
-                                trans.CommitTran();
-                                LogHelper.Info($"璁$畻璐т綅鎴愬姛锛屼换鍔�{tn_task.S_CODE} 淇敼鎴愬姛锛岀粓鐐硅揣鏋朵负 {endLoc.S_SHELF_CODE}锛屼慨鏀圭粓鐐逛綅缃负 {endLoc.S_CODE}");
-                            }
-                            else {
-                                trans.RollbackTran();
-
-                                LogHelper.Info($"璁$畻璐т綅鎴愬姛锛屼换鍔�{tn_task.S_CODE} 淇敼澶辫触锛岀粓鐐硅揣鏋朵负 {endLoc.S_SHELF_CODE}锛屼慨鏀圭粓鐐逛綅缃负 {endLoc.S_CODE}");
-                            }
-                        }
+                        LogHelper.Info($"璁$畻璐т綅鎴愬姛锛屼换鍔�{tn_task.S_CODE} 淇敼澶辫触锛岀粓鐐硅揣鏋朵负 {endLoc.N_ROW}锛屼慨鏀圭粓鐐逛綅缃负 {endLoc.S_CODE}");
                     }
                 }
             }

--
Gitblit v1.9.1