From a8627a98b82d2364cbe849ca746e72fbab9916e5 Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期三, 21 五月 2025 17:31:14 +0800
Subject: [PATCH] 重构代码修复事务问题,测试完善后台盘点功能

---
 core/WCSCore.cs |  160 ++++++++++++++++++++++++++--------------------------
 1 files changed, 80 insertions(+), 80 deletions(-)

diff --git a/Services/AgvService.cs b/core/WCSCore.cs
similarity index 67%
rename from Services/AgvService.cs
rename to core/WCSCore.cs
index 5a2cd96..c7fe69d 100644
--- a/Services/AgvService.cs
+++ b/core/WCSCore.cs
@@ -1,47 +1,34 @@
-锘縰sing HH.WCS.Mobox3.AnGang.Helpers;
-using HH.WCS.Mobox3.AnGang.Models;
+锘縰sing HH.WCS.Mobox3.AnGang.device;
+using HH.WCS.Mobox3.AnGang.dispatch;
+using HH.WCS.Mobox3.AnGang.models;
 using HH.WCS.Mobox3.AnGang.process;
 using HH.WCS.Mobox3.AnGang.config;
-using HH.WCS.Mobox3.AnGang.Helper;
 using Newtonsoft.Json;
+using SqlSugar;
 using System;
 using System.Collections.Generic;
 using System.Linq;
-using System.Text;
 using System.Threading.Tasks;
+using static HH.WCS.Mobox3.AnGang.api.ApiModel;
+using HH.WCS.Mobox3.AnGang.wms;
+using HH.WCS.Mobox3.AnGang.util;
 
-using static HH.WCS.Mobox3.AnGang.Dtos.Request.AgvRequest;
-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 {
+namespace HH.WCS.Mobox3.AnGang.core
+{
+    internal class WCSCore
+    {
         public static ReturnResult OperateAgvTaskStatus(AgvTaskState model) {
             var result = new ReturnResult();
             try {
-                switch (model.state) {
-                    case 1023:
-                        break;
-                    case 1025:
-                        break;
-                    case 1012:
-                        break;
-                    case 1004:
-                        break;
-                    case 1103:
-                        break;
-                    default:
-                        // AGV 鎵ц浠诲姟鐨勯�杈戝鐞�-                        if (!AgvTaskProcessOk(model)) {
-                            // 鎵ц涓峅K锛岃鏄庢病鏈夋壘鍒颁换鍔�-                            result.ResultCode = 1;
-                            result.ResultMsg = $"鏍规嵁Model.No鏈壘鍒板搴旂殑浠诲姟锛寋model.task_no}";
-                            LogHelper.Info(result.ResultMsg, "API");
-                            return result;
-                        }
-                        break;
+                if (model.state > 0 && model.state < 1000) {
+                    // AGV 鎵ц浠诲姟鐨勯�杈戝鐞�+                    if (!AgvTaskProcessOk(model)) {
+                        // 鎵ц涓峅K锛岃鏄庢病鏈夋壘鍒颁换鍔�+                        result.ResultCode = 1;
+                        result.ResultMsg = $"鏍规嵁Model.No鏈壘鍒板搴旂殑浠诲姟锛寋model.task_no}";
+                        LogHelper.Info(result.ResultMsg, "API");
+                        return result;
+                    }
                 }
 
                 result.ResultCode = 0;
@@ -69,48 +56,48 @@
 
             if (model.state > 7) {
                 //瀹夊叏璇锋眰绛�-                TaskHelper.OperateReq(model.task_no, model.state, model.forklift_no, model.ext_data);
+                TaskProcess.OperateReq(model.task_no, model.state, model.forklift_no, model.ext_data);
                 return true;
             }
 
             // AGV 浠诲姟 134562(7) 鐘舵�澶勭悊
             switch (model.state) {
-                case AgvStateCode.鎵ц:
+                case 1: // 鎵ц
                     WCSHelper.Begin(TN_Task, model.forklift_no); // 宸叉帹閫佺殑浠诲姟鐨勭姸鎬佹敼鎴愭墽琛�                     break;
-                case AgvStateCode.寮�鍙栬揣:
+                case 3: // 寮�鍙栬揣
                     WCSHelper.UpdateStatus(TN_Task, "寮�鍙栬揣"); // 浠诲姟鐘舵�鏀规垚寮�鍙栬揣
                     break;
-                case AgvStateCode.鍙栬揣瀹屾垚:
+                case 4: // 鍙栬揣瀹屾垚
                     WCSHelper.UpdateStatus(TN_Task, "鍙栬揣瀹屾垚"); // 浠诲姟鐘舵�鏀规垚鍙栬揣瀹屾垚
 
-                    var captureTask = Task.Run(() => {
-                        if (TN_Task.S_TYPE == TaskName.浜у搧鍏ュ簱 || TN_Task.S_TYPE == TaskName.浜у搧閮ㄥ垎鍥炲簱) {
+                    if (TN_Task.S_TYPE == TaskName.浜у搧鍏ュ簱 || TN_Task.S_TYPE == TaskName.浜у搧閮ㄥ垎鍥炲簱) {
+                        var captureTask = Task.Run(() => {
                             CapturePic(TN_Task);
-                        }
-                    });
+                        });
+                    }
 
-                    var setEndLocTask = Task.Run(() => {
-                        // 鍙浠诲姟涓轰骇鍝佸叆搴�PDA)锛屽氨闇�閲嶆柊鎸囧畾缁堢偣锛堥粯璁ndLoc涓�"锛�-                        if (TN_Task.S_TYPE == TaskName.浜у搧鍏ュ簱) {
+                    if (TN_Task.S_TYPE == TaskName.浜у搧鍏ュ簱) {
+                        var setEndLocTask = Task.Run(() => {
+                            // 鍙浠诲姟涓轰骇鍝佸叆搴�PDA)锛屽氨闇�閲嶆柊鎸囧畾缁堢偣锛堥粯璁ndLoc涓�"锛�                             SetEndLoc(TN_Task);
-                        }
-                    });
+                        });
+                    }
 
-                    TaskHelper.OperateStatus(TN_Task, 4); // 璧风偣瀹瑰櫒璐т綅瑙g粦,瑙i攣璧风偣
+                    TaskProcess.OperateStatus(TN_Task, 4); // 璧风偣瀹瑰櫒璐т綅瑙g粦,瑙i攣璧风偣
                     break;
-                case AgvStateCode.寮�鍗歌揣:
+                case 5: // 寮�鍗歌揣
                     WCSHelper.UpdateStatus(TN_Task, "寮�鍗歌揣"); // 浠诲姟鐘舵�鏀规垚寮�鍗歌揣
                     break;
-                case AgvStateCode.鍗歌揣瀹屾垚:
+                case 6: // 鍗歌揣瀹屾垚
                     WCSHelper.UpdateStatus(TN_Task, "鍗歌揣瀹屾垚"); // 浠诲姟鐘舵�鏀规垚鍗歌揣瀹屾垚
-                    TaskHelper.OperateStatus(TN_Task, 6); // 缁堢偣瀹瑰櫒璐т綅缁戝畾,瑙i攣缁堢偣
+                    TaskProcess.OperateStatus(TN_Task, 6); // 缁堢偣瀹瑰櫒璐т綅缁戝畾,瑙i攣缁堢偣
                     break;
-                case AgvStateCode.瀹屾垚:
+                case 2: // 瀹屾垚
                     WCSHelper.End(TN_Task); // 浠诲姟鐘舵�鏀规垚缁撴潫
                     break;
-                case AgvStateCode.寮傚父:
-                    TaskHelper.OperateStatus(TN_Task, 7); // 寮傚父澶勭悊
+                case 7: // 寮傚父
+                    TaskProcess.OperateStatus(TN_Task, 7); // 寮傚父澶勭悊
                     WCSHelper.Fail(TN_Task); // 浠诲姟鐘舵�鏀规垚閿欒
                     break;
             }
@@ -122,7 +109,7 @@
         }
 
         public static void CapturePic(TN_Task model) {
-            var db = DbHelper.GetDbClient();
+            var db = new SqlHelper<object>().GetInstance();
 
             var filepath = SnapManager.GetCapturePicturePath();
             if (string.IsNullOrEmpty(filepath)) {
@@ -140,7 +127,7 @@
         }
 
         public static void SetEndLoc(TN_Task tn_task) {
-            var db = DbHelper.GetDbClient();
+            var db = new SqlHelper<object>().GetInstance();
             var endLoc = db.Queryable<TN_Location>()
                 .First(a => a.S_CODE == tn_task.S_END_LOC);
 
@@ -218,45 +205,58 @@
                 //};
 
                 //GZRobot.UpdateInteractInfo(request);
-
-                using (var trans = db.Ado.UseTran()) {
-                    if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC })
+                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 {
-                        trans.RollbackTran();
-                        LogHelper.Info($"閲嶆柊璁$畻鍚庢病鏈夊悎閫傝揣浣嶏紝浠诲姟 {tn_task.S_CODE} 淇敼澶辫触锛屼慨鏀圭粓鐐硅揣浣嶄负 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;
 
-                using (var trans = db.Ado.UseTran()) {
-                    if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC })
+                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} 淇敼鎴愬姛锛岀粓鐐硅揣鏋朵负 {endLoc.N_ROW}锛屼慨鏀圭粓鐐逛綅缃负 {endLoc.S_CODE}");
-                    }
-                    else {
-                        trans.RollbackTran();
-
-                        LogHelper.Info($"璁$畻璐т綅鎴愬姛锛屼换鍔�{tn_task.S_CODE} 淇敼澶辫触锛岀粓鐐硅揣鏋朵负 {endLoc.N_ROW}锛屼慨鏀圭粓鐐逛綅缃负 {endLoc.S_CODE}");
-                    }
+                    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>
+        /// 浠诲姟鍒嗗彂锛屾牴鎹皟搴︾被鍨嬪彂缁欎笉鍚岀殑璋冨害绯荤粺
+        /// </summary>
+        internal static void Dispatch()
+        {
+            //鏌ヨ浠诲姟
+            //鑾峰彇鎵�湁绛夊緟鐨勪换鍔�+            var list = WCSHelper.GetWaitingTaskList();
+            LogHelper.Info("绛夊緟浠诲姟淇℃伅" + JsonConvert.SerializeObject(list), "API");
+            if (list.Count > 0)
+            {
+                list.ForEach(task =>
+                {
+                    //浣跨敤鑷畾涔変换鍔℃帹閫�+                    TaskProcess.SendTask(task);//璋冨害NDC鎴栨澀濂ユ垨鍥借嚜璁惧
+                    //TaskProcess.SendGZTask(task);///璋冨害鍥借嚜璁惧
+
+                });
+            }
+            else
+            {
+                LogHelper.Info("鏆傛棤浠诲姟");
             }
         }
 
         public static ReturnResult SafetyInteraction(SafetyInteractionInfo model) {
             var gzResult = new ReturnResult();
-            //var db = DbHelper.GetDbClient();
+            //var db = new SqlHelper<object>().GetInstance();
             //ModbusHelper.Relink();
 
             //var productionLineInfo = Settings.ProductionLines[0];

--
Gitblit v1.9.1