From 6d2faa6e299bdfe545ee339269e64f2900229147 Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期三, 16 七月 2025 17:29:26 +0800
Subject: [PATCH] 添加AGV实时状态反馈接口、看板获取AGV状态接口

---
 api/AgvController.cs |   54 +++++++++++++----
 api/ApiModel.cs      |   28 +++++++++
 core/WCSCore.cs      |   35 ++++++++---
 api/WmsController.cs |   33 ++++++++++-
 4 files changed, 124 insertions(+), 26 deletions(-)

diff --git a/api/AgvController.cs b/api/AgvController.cs
index 8ea7831..62bd5cd 100644
--- a/api/AgvController.cs
+++ b/api/AgvController.cs
@@ -1,18 +1,23 @@
-锘縰sing HH.WCS.Mobox3.AnGang.core;
-using HH.WCS.Mobox3.AnGang.dispatch;
-using HH.WCS.Mobox3.AnGang.process;
-using HH.WCS.Mobox3.AnGang.wms;
-using Newtonsoft.Json;
-using System.Collections.Generic;
-using System.Reflection;
-using System.Web.Http;
-using static HH.WCS.Mobox3.AnGang.dispatch.NDC;
+锘縰sing System.Collections.Generic;
 using System.Linq;
-using HH.WCS.Mobox3.AnGang.util;
-
-using static HH.WCS.Mobox3.AnGang.api.ApiModel;
+using System.Net;
+using System.Reflection;
 using System.Text;
 using System.Web;
+using System.Web.Http;
+
+using HH.WCS.Mobox3.AnGang.core;
+using HH.WCS.Mobox3.AnGang.dispatch;
+using HH.WCS.Mobox3.AnGang.process;
+using HH.WCS.Mobox3.AnGang.util;
+using HH.WCS.Mobox3.AnGang.wms;
+
+using NetSDKCS;
+
+using Newtonsoft.Json;
+
+using static HH.WCS.Mobox3.AnGang.api.ApiModel;
+using static HH.WCS.Mobox3.AnGang.dispatch.NDC;
 
 namespace HH.WCS.Mobox3.AnGang.api
 {
@@ -33,7 +38,30 @@
             //LogRequestHeaders();
             return GZRobot.orderStatusReport(model);
         }
-        
+
+        [HttpPost]
+        [Route("agvRealtimeStateReport")]
+        public IHttpActionResult agvRealtimeStateReport(agvRealtimeStateReportInfo model) {
+            LogHelper.Info("agvRealtimeStateReport锛歊CS鍥借嚜AGV瀹炴椂鐘舵�鍥炴姤锛� + JsonConvert.SerializeObject(model), "HosttoagvTask");
+
+            var res = WCSCore.agvRealtimeStateReport(model);
+            //if (res == "offline") {
+            //    //return NotFound(new EmptyGzResult());
+            //    return NotFound();
+            //}
+            //else {
+            //    //return Ok(new EmptyGzResult());
+            //    return Ok();
+            //}
+            if (model == null) return NotFound();
+            if (string.IsNullOrEmpty(res)) {
+                return BadRequest();
+            }
+            else {
+                return Ok();
+            }
+        }
+
         /// <summary>
         /// AGV 涓庝骇绾胯繘琛屽畨鍏ㄤ氦浜�         /// </summary>
diff --git a/api/ApiModel.cs b/api/ApiModel.cs
index ec2f874..464de7c 100644
--- a/api/ApiModel.cs
+++ b/api/ApiModel.cs
@@ -139,6 +139,30 @@
             public string msg { get; set; }
             public int orderID { get; set; }
         }
+
+        public class EmptyGzResult {
+
+        }
+
+        public class agvRealtimeStateReportInfo {
+            public int agvID { get; set; }
+            public int agvStatusID { get; set; }
+            public bool netConnected { get; set; }
+            public string agv_speed { get; set; }
+            public object node_information_of_traffic { get; set; }
+            public int dispatchTaskActive { get; set; }
+            public double position_x { get; set; }
+            public double position_y { get; set; }
+            public double angle {  get; set; }
+            public double battery_percentage { get; set; }
+            public double safetyTriggered { get; set; }
+            public bool isBlocked { get; set; }
+            public bool faultHappened { get; set; }
+            public bool isCharging { get; set; }
+            public bool hang_agv { get; set; }
+            public string extroInfo1 { get; set; }
+            public string extroInfo2 { get; set; }
+        }
     }
 
     public class OtherModel {
@@ -520,5 +544,9 @@
             /// </summary>
             public string ext5 { get; set; }
         }
+
+        public class KanbanAgvState {
+            public string AgvState {  get; set; }
+        }
     }
 }
diff --git a/api/WmsController.cs b/api/WmsController.cs
index f36005b..9b13ddf 100644
--- a/api/WmsController.cs
+++ b/api/WmsController.cs
@@ -1,9 +1,15 @@
 锘�-using HH.WCS.Mobox3.AnGang.util;
-using Newtonsoft.Json;
 using System.Collections.Generic;
 using System.Web.Http;
+
+using HH.WCS.Mobox3.AnGang.core;
+using HH.WCS.Mobox3.AnGang.util;
+
+using Newtonsoft.Json;
+
 using static HH.WCS.Mobox3.AnGang.api.ApiModel;
+using static HH.WCS.Mobox3.AnGang.api.OtherModel;
+using static HH.WCS.Mobox3.AnGang.dispatch.NDC;
 
 namespace HH.WCS.Mobox3.AnGang.api
 {
@@ -13,6 +19,27 @@
     [RoutePrefix("api")]
     public class WmsController : System.Web.Http.ApiController
     {
-        
+        [HttpGet]
+        [Route("GetKanbanAgvState")]
+        public KanbanAgvState GetKanbanAgvState() {
+            LogHelper.Info("瑙﹀彂API锛欸etKanbanAgvState锛氱湅鏉胯幏鍙朅GV鐘舵�", "API");
+
+            var res = WCSCore.AgvState;
+            var resName = string.Empty;
+            switch (res) {
+                case "in_system": resName = "绯荤粺鍐�; break;
+                case "out_system": resName = "绯荤粺澶�; break;
+                case "online": resName = "鍦ㄧ嚎"; break;
+                case "offline": resName = "绂荤嚎"; break;
+                case "ready": resName = "灏辩华"; break;
+                case "not_ready": resName = "鏈氨缁�; break;
+                case "in_dispatc": resName = "璋冨害涓�; break;
+                case "out_dispatch": resName = "璋冨害澶�; break;
+                case "running": resName = "杩愯涓�; break;
+                case "not_running": resName = "鏈繍琛�; break;
+                default: resName = "鏈煡鐘舵�"; break;
+            }
+            return new KanbanAgvState { AgvState = resName };
+        }
     }
 }
diff --git a/core/WCSCore.cs b/core/WCSCore.cs
index dbc691f..9ca3c44 100644
--- a/core/WCSCore.cs
+++ b/core/WCSCore.cs
@@ -14,8 +14,9 @@
 
 namespace HH.WCS.Mobox3.AnGang.core
 {
-    internal class WCSCore
-    {
+    internal class WCSCore {
+        public static string AgvState = string.Empty;
+
         public static ReturnResult OperateAgvTaskStatus(AgvTaskState model) {
             var result = new ReturnResult();
             try {
@@ -368,22 +369,18 @@
         /// <summary>
         /// 浠诲姟鍒嗗彂锛屾牴鎹皟搴︾被鍨嬪彂缁欎笉鍚岀殑璋冨害绯荤粺
         /// </summary>
-        internal static void Dispatch()
-        {
+        internal static void Dispatch() {
             //鏌ヨ浠诲姟
             //鑾峰彇鎵�湁绛夊緟鐨勪换鍔�             var list = WCSHelper.GetWaitingTaskList();
             LogHelper.Info("绛夊緟浠诲姟淇℃伅" + JsonConvert.SerializeObject(list), "API");
-            if (list.Count > 0)
-            {
-                list.ForEach(task =>
-                {
+            if (list.Count > 0) {
+                list.ForEach(task => {
                     //浣跨敤鑷畾涔変换鍔℃帹閫�                     TaskProcess.SendTask(task);//璋冨害NDC鎴栨澀濂ユ垨鍥借嚜璁惧
                 });
             }
-            else
-            {
+            else {
                 LogHelper.Info("鏆傛棤浠诲姟");
             }
         }
@@ -397,5 +394,23 @@
             // 鐩墠璇ラ」鐩病鏈夌珯鍙板畨鍏ㄤ氦浜掔殑鍔熻兘
             return gzResult;
         }
+
+        public static string agvRealtimeStateReport(agvRealtimeStateReportInfo model) {
+            var res = string.Empty;
+            switch (model.agvStatusID) {
+                case 1: res = "in_system"; break;
+                case 2: res = "out_system"; break;
+                case 3: res = "online"; break;
+                case 4: res = "offline"; break;
+                case 5: res = "ready"; break;
+                case 6: res = "not_ready"; break;
+                case 7: res = "in_dispatch"; break;
+                case 8: res = "out_dispatch"; break;
+                case 9: res = "running"; break;
+                case 10: res = "not_running"; break;
+            }
+            AgvState = res;
+            return res;
+        }
     }
 }

--
Gitblit v1.9.1