From ff24fa06ba2d3a5e271789b8f81f3a3131d19470 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期一, 20 四月 2026 09:29:14 +0800
Subject: [PATCH] 更新代码

---
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_Core/DB/Models/IBaseHistoryEntity.cs                  |   37 +
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_Model/Models/BasicInfo/Dt_ApiInfo.cs                  |   50 +
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_TaskInfoService/TaskService.cs                        |  178 ++++-
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/AgvResponseContent.cs                         |   31 +
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs           |  100 --
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs                     |   65 -
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs                   |   85 ++
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_BasicInfoRepository/ApiInfoRepository.cs              |   18 
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs                       |   85 --
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_ITaskInfoService/ITaskExecuteDetailService.cs         |    2 
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs |  197 ------
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_IBasicInfoRepository/IDt_StationManagerRepository.cs  |   22 
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_ITaskInfoService/ITaskService.cs                      |   56 -
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs                     |  308 +--------
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/AgvTaskSendDTO.cs                             |  154 ++++
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/AgvStatusUpdateDTO.cs                         |   51 +
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_Common/APIEnum/APIEnum.cs                             |   33 +
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_Core/BaseRepository/RepositoryBase.cs                 |  101 +++
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_Core/BaseRepository/IRepository.cs                    |    5 
 /dev/null                                                                               |   45 -
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs               |   74 ++
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_Tasks/AGV/CommonAGVJob.cs                             |   79 ++
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_Core/Enums/OperateTypeEnum.cs                         |   20 
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_IBasicInfoRepository/IApiInfoRepository.cs            |   14 
 项目代码/WIDESEA_WCSServer/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj                       |    6 
 25 files changed, 976 insertions(+), 840 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_BasicInfoRepository/ApiInfoRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_BasicInfoRepository/ApiInfoRepository.cs"
new file mode 100644
index 0000000..9566b7a
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_BasicInfoRepository/ApiInfoRepository.cs"
@@ -0,0 +1,18 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Core.BaseRepository;
+using WIDESEAWCS_IBasicInfoRepository;
+using WIDESEAWCS_Model.Models;
+
+namespace WIDESEAWCS_BasicInfoRepository
+{
+    public class ApiInfoRepository : RepositoryBase<Dt_ApiInfo>, IApiInfoRepository
+    {
+        public ApiInfoRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
+        {
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Common/APIEnum/APIEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Common/APIEnum/APIEnum.cs"
new file mode 100644
index 0000000..31c8df2
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Common/APIEnum/APIEnum.cs"
@@ -0,0 +1,33 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_Common.APIEnum
+{
+    public enum APIEnum
+    {
+        /// <summary>
+        /// AGV鍙戦�佷换鍔℃帴鍙�
+        /// </summary>
+        [Description("AGV鍙戦�佷换鍔℃帴鍙�")]
+        AgvSendTask,
+        /// <summary>
+        /// AGV浠诲姟鏀捐鎺ュ彛
+        /// </summary>
+        [Description("AGV浠诲姟鏀捐鎺ュ彛")]
+        AgvTaskFlow,
+        /// <summary>
+        /// AGV鐘舵�佹煡璇㈡帴鍙�
+        /// </summary>
+        [Description("AGV鐘舵�佹煡璇㈡帴鍙�")]
+        AgvSearchStatus,
+        /// <summary>
+        /// AGV浠诲姟鍙栨秷
+        /// </summary>
+        [Description("AGV浠诲姟鍙栨秷")]
+        AgvTaskCancel
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs"
index e83e71f..6aec555 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs"
@@ -18,29 +18,9 @@
 
         public static TaskTypeGroup GetTaskTypeGroup(this int taskType)
         {
-            if (!int.TryParse(Enum.Parse<TaskOutboundTypeEnum>(taskType.ToString()).ToString(), out int result))
-            {
-                return TaskTypeGroup.OutbondGroup;
-            }
-            else if (!int.TryParse(Enum.Parse<TaskInboundTypeEnum>(taskType.ToString()).ToString(), out result))
-            {
-                return TaskTypeGroup.InboundGroup;
-            }
-            else if (!int.TryParse(Enum.Parse<TaskRelocationTypeEnum>(taskType.ToString()).ToString(), out result))
-            {
-                return TaskTypeGroup.RelocationGroup;
-            }
-            else if (!int.TryParse(Enum.Parse<TaskOtherTypeEnum>(taskType.ToString()).ToString(), out result))
-            {
-                return TaskTypeGroup.OtherGroup;
-            }
-            else if (!int.TryParse(Enum.Parse<TaskAGVCarryTypeEnum>(taskType.ToString()).ToString(), out result))
+            if (!int.TryParse(Enum.Parse<TaskAGVCarryTypeEnum>(taskType.ToString()).ToString(), out int result))
             {
                 return TaskTypeGroup.CarryGroup;
-            }
-            else if (!int.TryParse(Enum.Parse<TaskAcrossFloorTypeEnum>(taskType.ToString()).ToString(), out result))
-            {
-                return TaskTypeGroup.AcrossFloorGroup;
             }
             else
             {
@@ -50,29 +30,9 @@
 
         public static TaskStateGroup GetTaskStateGroup(this int taskState)
         {
-            if (!int.TryParse(Enum.Parse<TaskOutStatusEnum>(taskState.ToString()).ToString(), out int result))
-            {
-                return TaskStateGroup.OutbondGroup;
-            }
-            else if (!int.TryParse(Enum.Parse<TaskInStatusEnum>(taskState.ToString()).ToString(), out result))
-            {
-                return TaskStateGroup.InboundGroup;
-            }
-            else if (!int.TryParse(Enum.Parse<TaskRelocationStatusEnum>(taskState.ToString()).ToString(), out result))
-            {
-                return TaskStateGroup.RelocationGroup;
-            }
-            else if (!int.TryParse(Enum.Parse<TaskOtherStateEnum>(taskState.ToString()).ToString(), out result))
-            {
-                return TaskStateGroup.OtherGroup;
-            }
-            else if (!int.TryParse(Enum.Parse<TaskAGVCarryStatusEnum>(taskState.ToString()).ToString(), out result))
+            if (!int.TryParse(Enum.Parse<TaskAGVCarryStatusEnum>(taskState.ToString()).ToString(), out int result))
             {
                 return TaskStateGroup.CarryGroup;
-            }
-            else if (!int.TryParse(Enum.Parse<TaskAcrossFloorStatusEnum>(taskState.ToString()).ToString(), out result))
-            {
-                return TaskStateGroup.AcrossFloorGroup;
             }
             else
             {
@@ -85,26 +45,9 @@
             Type type = typeof(T);
             if (type is null) throw new ArgumentNullException();
             if (!type.IsEnum) return 0;
-            if (type == typeof(TaskInStatusEnum))
+            if (type == typeof(TaskAGVCarryStatusEnum))
             {
-                List<int> taskInboundTypes = type.GetEnumIndexList();
-                return taskInboundTypes.Where(x => x > currentStatus && x < (int)TaskInStatusEnum.InFinish).OrderBy(x => x).FirstOrDefault();
-            }
-            else if (type == typeof(TaskOutStatusEnum))
-            {
-                return type.GetEnumIndexList().Where(x => x > currentStatus && x < (int)TaskOutStatusEnum.OutFinish).OrderBy(x => x).FirstOrDefault();
-            }
-            else if (type == typeof(TaskRelocationStatusEnum))
-            {
-                return type.GetEnumIndexList().Where(x => x > currentStatus && x < (int)TaskRelocationStatusEnum.RelocationFinish).OrderBy(x => x).FirstOrDefault();
-            }
-            else if (type == typeof(TaskAGVCarryStatusEnum))
-            {
-                return type.GetEnumIndexList().Where(x => x > currentStatus && x < (int)TaskAGVCarryStatusEnum.CarryFinish).OrderBy(x => x).FirstOrDefault();
-            }
-            else if (type == typeof(TaskAcrossFloorStatusEnum))
-            {
-                return type.GetEnumIndexList().Where(x => x > currentStatus && x < (int)TaskAcrossFloorStatusEnum.CarryFinish).OrderBy(x => x).FirstOrDefault();
+                return type.GetEnumIndexList().Where(x => x > currentStatus && x < (int)TaskAGVCarryStatusEnum.AGV_CarryFinish).OrderBy(x => x).FirstOrDefault();
             }
             else
             {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
index 14b852e..39cefe1 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
@@ -7,315 +7,103 @@
 
 namespace WIDESEAWCS_Common.TaskEnum
 {
-    public enum TaskInStatusEnum
-    {
-        /// <summary>
-        /// 鏂板缓鍏ュ簱浠诲姟
-        /// </summary>
-        [Description("鏂板缓鍏ュ簱浠诲姟")]
-        InNew = 200,
-
-        /// <summary>
-        /// AGV鍏ュ簱鎵ц涓�
-        /// </summary>
-        [Description("AGV鍏ュ簱鎵ц涓�")]
-        AGV_InExecuting = 210,
-
-        /// <summary>
-        /// AGV鍏ュ簱瀹屾垚
-        /// </summary>
-        [Description("AGV鎼繍瀹屾垚")]
-        AGV_InFinish = 215,
-
-        /// <summary>
-        /// 杈撻�佺嚎鍏ュ簱鎵ц涓�
-        /// </summary>
-        [Description("杈撻�佺嚎鍏ュ簱鎵ц涓�")]
-        Line_InExecuting = 220,
-
-        /// <summary>
-        /// 杈撻�佺嚎鍏ュ簱瀹屾垚
-        /// </summary>
-        [Description("杈撻�佺嚎鍏ュ簱瀹屾垚")]
-        Line_InFinish = 225,
-
-        /// <summary>
-        /// 鍫嗗灈鏈哄叆搴撴墽琛屼腑
-        /// </summary>
-        [Description("鍫嗗灈鏈哄叆搴撴墽琛屼腑")]
-        SC_InExecuting = 230,
-
-        /// <summary>
-        /// 鍫嗗灈鏈哄叆搴撳畬鎴�
-        /// </summary>
-        [Description("鍫嗗灈鏈哄叆搴撳畬鎴�")]
-        SC_InFinish = 235,
-
-        /// <summary>
-        /// 鍏ュ簱浠诲姟瀹屾垚
-        /// </summary>
-        [Description("鍏ュ簱浠诲姟瀹屾垚")]
-        InFinish = 290,
-
-        /// <summary>
-        /// 鍏ュ簱浠诲姟鎸傝捣
-        /// </summary>
-        [Description("鍏ュ簱浠诲姟鎸傝捣")]
-        InPending = 297,
-
-        /// <summary>
-        /// 鍏ュ簱浠诲姟鍙栨秷
-        /// </summary>
-        [Description("鍏ュ簱浠诲姟鍙栨秷")]
-        InCancel = 298,
-
-        /// <summary>
-        /// 鍏ュ簱浠诲姟寮傚父
-        /// </summary>
-        [Description("鍏ュ簱浠诲姟寮傚父")]
-        InException = 299,
-    }
-
-    public enum TaskOutStatusEnum
-    {
-        /// <summary>
-        /// 鏂板缓鍑哄簱浠诲姟
-        /// </summary>
-        [Description("鏂板缓鍑哄簱浠诲姟")]
-        OutNew = 100,
-
-        /// <summary>
-        /// 鍫嗗灈鏈哄嚭搴撴墽琛屼腑
-        /// </summary>
-        [Description("鍫嗗灈鏈哄嚭搴撴墽琛屼腑")]
-        SC_OutExecuting = 110,
-
-        /// <summary>
-        /// 鍫嗗灈鏈哄嚭搴撳畬鎴�
-        /// </summary>
-        [Description("鍫嗗灈鏈哄嚭搴撳畬鎴�")]
-        SC_OutFinish = 115,
-
-        /// <summary>
-        /// 杈撻�佺嚎鍑哄簱鎵ц涓�
-        /// </summary>
-        [Description("杈撻�佺嚎鍑哄簱鎵ц涓�")]
-        Line_OutExecuting = 120,
-
-        /// <summary>
-        /// 杈撻�佺嚎鍑哄簱瀹屾垚
-        /// </summary>
-        [Description("杈撻�佺嚎鍑哄簱瀹屾垚")]
-        Line_OutFinish = 125,
-
-
-        /// <summary>
-        /// AGV鍑哄簱鎵ц涓�
-        /// </summary>
-        [Description("AGV鍑哄簱鎵ц涓�")]
-        AGV_OutExecuting = 130,
-
-        /// <summary>
-        /// AGV鍑哄簱瀹屾垚
-        /// </summary>
-        [Description("AGV鎼繍瀹屾垚")]
-        AGV_OutFinish = 135,
-
-        /// <summary>
-        /// 鍑哄簱浠诲姟瀹屾垚
-        /// </summary>
-        [Description("鍑哄簱浠诲姟瀹屾垚")]
-        OutFinish = 190,
-
-        /// <summary>
-        /// 鍑哄簱浠诲姟鎸傝捣
-        /// </summary>
-        [Description("鍑哄簱浠诲姟鎸傝捣")]
-        OutPending = 197,
-
-        /// <summary>
-        /// 鍑哄簱浠诲姟鍙栨秷
-        /// </summary>
-        [Description("鍑哄簱浠诲姟鍙栨秷")]
-        OutCancel = 198,
-
-        /// <summary>
-        /// 鍑哄簱浠诲姟寮傚父
-        /// </summary>
-        [Description("鍑哄簱浠诲姟寮傚父")]
-        OutException = 199,
-    }
-    public enum TaskOtherStateEnum
-    {
-
-    }
-    public enum TaskRelocationStatusEnum
-    {
-        /// <summary>
-        /// 鏂板缓绉诲簱浠诲姟
-        /// </summary>
-        [Description("鏂板缓绉诲簱浠诲姟")]
-        RelocationNew = 300,
-
-        /// <summary>
-        /// 鍫嗗灈鏈虹Щ搴撴墽琛屼腑
-        /// </summary>
-        [Description("鍫嗗灈鏈虹Щ搴撴墽琛屼腑")]
-        SC_RelocationExecuting = 310,
-
-        /// <summary>
-        /// 鍫嗗灈鏈虹Щ搴撳畬鎴�
-        /// </summary>
-        [Description("鍫嗗灈鏈虹Щ搴撳畬鎴�")]
-        SC_RelocationFinish = 315,
-
-        /// <summary>
-        /// 鏂板缓AGV绉诲簱浠诲姟
-        /// </summary>
-        [Description("鏂板缓AGV绉诲簱浠诲姟")]
-        RelocationNewAGV = 320,
-
-        /// <summary>
-        /// AGV绉诲簱鎵ц涓�
-        /// </summary>
-        [Description("AGV绉诲簱鎵ц涓�")]
-        AGV_RelocationExecuting = 325,
-
-        /// <summary>
-        /// AGV绉诲簱瀹屾垚
-        /// </summary>
-        [Description("AGV绉诲簱瀹屾垚")]
-        AGV_RelocationFinish = 330,
-
-        /// <summary>
-        /// 绉诲簱浠诲姟瀹屾垚
-        /// </summary>
-        [Description("绉诲簱浠诲姟瀹屾垚")]
-        RelocationFinish = 390,
-
-        /// <summary>
-        /// 绉诲簱浠诲姟鎸傝捣
-        /// </summary>
-        [Description("绉诲簱浠诲姟鎸傝捣")]
-        RelocationPending = 397,
-
-        /// <summary>
-        /// 绉诲簱浠诲姟鍙栨秷
-        /// </summary>
-        [Description("绉诲簱浠诲姟鍙栨秷")]
-        RelocationCancel = 398,
-
-        /// <summary>
-        /// 绉诲簱浠诲姟寮傚父
-        /// </summary>
-        [Description("绉诲簱浠诲姟寮傚父")]
-        RelocationException = 399,
-    }
-
     public enum TaskAGVCarryStatusEnum
     {
         /// <summary>
         /// 鏂板缓AGV鎼繍浠诲姟
         /// </summary>
         [Description("鏂板缓AGV鎼繍浠诲姟")]
-        CarryNew = 400,
+        AGV_CarryNew = 400,
 
         /// <summary>
         /// AGV鎼繍鎵ц涓�
         /// </summary>
         [Description("AGV鎼繍鎵ц涓�")]
-        AGV_CarryExecuting = 410,
+        AGV_CarryExecuting = 405,
+
+        /// <summary>
+        /// AGV鍙栬揣瀹屾垚
+        /// </summary>
+        [Description("AGV鎼繍鍙栬揣瀹屾垚")]
+        AGV_CarryTakeFinish = 410,
 
         /// <summary>
         /// AGV鎼繍瀹屾垚
         /// </summary>
-        [Description("AGV鎼繍瀹屾垚")]
-        AGV_CarryFinish = 415,
-
+        [Description("AGV鎼繍鏀捐揣瀹屾垚")]
+        AGV_CarryReleaseFinish = 415,
+        
         /// <summary>
         /// AGV鎼繍浠诲姟瀹屾垚
         /// </summary>
         [Description("AGV鎼繍浠诲姟瀹屾垚")]
-        CarryFinish = 490,
+        AGV_CarryFinish = 490,
 
         /// <summary>
         /// AGV鎼繍浠诲姟鎸傝捣
         /// </summary>
         [Description("AGV鎼繍浠诲姟鎸傝捣")]
-        CarryPending = 497,
+        AGV_CarryPending = 497,
 
         /// <summary>
         /// AGV鎼繍浠诲姟鍙栨秷
         /// </summary>
         [Description("AGV鎼繍浠诲姟鍙栨秷")]
-        CarryCancel = 498,
+        AGV_CarryCancel = 498,
 
         /// <summary>
         /// AGV鎼繍浠诲姟寮傚父
         /// </summary>
         [Description("AGV鎼繍浠诲姟寮傚父")]
-        CarryException = 499,
+        AGV_CarryException = 499,
     }
-    public enum TaskAcrossFloorStatusEnum
+
+    /// <summary>
+    ///浣滀笟褰撳墠鐘舵��<br/>
+    ///寮�濮嬬Щ鍔細MOVE_BEGIN<br/>
+    ///鏂� 绠� 鍙� 鏂� 瀹� 鎴�:PICKER_RECEIVE<br/>
+    ///鏂� 绠� 涓� 鏂� 瀹� 鎴�:PICKER_SEND<br/>
+    ///绛夊緟鏀捐锛歐AITFEEDBACK<br/>
+    ///浠诲姟瀹屾垚锛欳OMPLETED<br/>
+    ///浠诲姟鍙栨秷瀹屾垚锛欳ANCELED<br/>
+    ///鍛婅锛歐ARNING<br/>
+    /// </summary>
+    public enum AGVStatusEnum
     {
         /// <summary>
-        /// 鏂板缓璺ㄦゼ灞備换鍔�
+        /// 寮�濮嬬Щ鍔�
         /// </summary>
-        [Description("鏂板缓璺ㄦゼ灞備换鍔�")]
-        CarryNew = 500,
-
+        [Description("寮�濮嬬Щ鍔�")]
+        MOVE_BEGIN,
         /// <summary>
-        /// 璺ㄦゼ灞傛惉杩�1
+        /// 鏂� 绠� 鍙� 鏂� 瀹� 鎴�
         /// </summary>
-        [Description("璺ㄦゼ灞傛惉杩�1")]
-        FirstCarry = 510,
-
+        [Description("鏂� 绠� 鍙� 鏂� 瀹� 鎴�")]
+        PICKER_RECEIVE,
         /// <summary>
-        /// 涓�妤兼惉杩愬畬鎴�
+        /// 鏂� 绠� 涓� 鏂� 瀹� 鎴�
         /// </summary>
-        [Description("璺ㄦゼ灞傛惉杩�1瀹屾垚")]
-        FirstCarryFinish = 515,
-
+        [Description("鏂� 绠� 涓� 鏂� 瀹� 鎴�")]
+        PICKER_SEND,
         /// <summary>
-        /// 璺ㄦゼ灞傛惉杩�2
+        /// 浠诲姟瀹屾垚
         /// </summary>
-        [Description("璺ㄦゼ灞傛惉杩�2")]
-        SecondCarry = 520,
-
+        [Description("浠诲姟瀹屾垚")]
+        COMPLETED,
         /// <summary>
-        /// 璺ㄦゼ灞傜粓鐐规墽琛�
+        /// 绛夊緟鏀捐
         /// </summary>
-        [Description("璺ㄦゼ灞傜粓鐐规墽琛�")]
-        EndAddressExecuting = 525,
-
+        [Description("绛夊緟鏀捐")]
+        WAITFEEDBACK,
         /// <summary>
-        /// 璺ㄦゼ灞傛惉杩�2瀹屾垚
+        /// 浠诲姟鍙栨秷瀹屾垚
         /// </summary>
-        [Description("璺ㄦゼ灞傛惉杩�2瀹屾垚")]
-        SecondCarryFinish = 530,
-
+        [Description("浠诲姟鍙栨秷瀹屾垚")]
+        CANCELED,
         /// <summary>
-        /// 璺ㄦゼ灞備换鍔″畬鎴�
+        /// 鍛婅
         /// </summary>
-        [Description("璺ㄦゼ灞備换鍔″畬鎴�")]
-        CarryFinish = 590,
-
-        /// <summary>
-        /// 璺ㄦゼ灞備换鍔℃寕璧�
-        /// </summary>
-        [Description("璺ㄦゼ灞備换鍔℃寕璧�")]
-        CarryPending = 597,
-
-        /// <summary>
-        /// 璺ㄦゼ灞備换鍔″彇娑�
-        /// </summary>
-        [Description("璺ㄦゼ灞備换鍔″彇娑�")]
-        CarryCancel = 598,
-
-        /// <summary>
-        /// AGV鎼繍浠诲姟寮傚父
-        /// </summary>
-        [Description("AGV鎼繍浠诲姟寮傚父")]
-        CarryException = 599,
+        [Description("鍛婅")]
+        WARNING,
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
index c9f37b7..cd961c0 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
@@ -7,94 +7,19 @@
 
 namespace WIDESEAWCS_Common.TaskEnum
 {
-    public enum TaskInboundTypeEnum
-    {
-        /// <summary>
-        /// 鍏ュ簱
-        /// </summary>
-        [Description("鍏ュ簱")]
-        Inbound = 200,
-
-        /// <summary>
-        /// 鍏朵粬鍏ュ簱
-        /// </summary>
-        [Description("鍏朵粬鍏ュ簱")]
-        InOther = 205,
-    }
-
-    public enum TaskOutboundTypeEnum
-    {
-        /// <summary>
-        /// 鍑哄簱
-        /// </summary>
-        [Description("鍑哄簱")]
-        Outbound = 100,
-
-        /// <summary>
-        /// 璋冩嫧鍑哄簱
-        /// </summary>
-        [Description("璋冩嫧鍑哄簱")]
-        OutAllocate = 105,
-
-        /// <summary>
-        /// 鍏朵粬鍑哄簱
-        /// </summary>
-        [Description("鍏朵粬鍑哄簱")]
-        OutOther = 110,
-
-        /// <summary>
-        /// 鐢熶骇棰嗘枡鍑哄簱
-        /// </summary>
-        [Description("鐢熶骇棰嗘枡鍑哄簱")]
-        MaterialRequisition = 115,
-
-        /// <summary>
-        /// 鍘熸潗鏂欏嚭搴�
-        /// </summary>
-        [Description("鍘熸潗鏂欏嚭搴�")]
-        RawMaterials = 120,
-    }
-
-    public enum TaskRelocationTypeEnum
-    {
-        /// <summary>
-        /// 搴撳唴绉诲簱
-        /// </summary>
-        [Description("搴撳唴绉诲簱")]
-        Relocation = 300,
-
-        /// <summary>
-        /// 搴撳绉诲簱
-        /// </summary>
-        [Description("搴撳绉诲簱")]
-        RelocationIn = 301
-    }
-
-    public enum TaskOtherTypeEnum
-    {
-
-    }
 
     public enum TaskAGVCarryTypeEnum
     {
         /// <summary>
-        /// AGV鎼繍
+        /// AGV涓婃枡鎼繍
         /// </summary>
-        [Description("AGV鎼繍")]
+        [Description("AGV涓婃枡鎼繍")]
         Carry = 400,
 
         /// <summary>
-        /// AGV绉诲簱鎼繍
+        /// AGV绌鸿浇鍏锋惉杩�
         /// </summary>
-        [Description("AGV绉诲簱鎼繍")]
-        CarryReloction = 410
-    }
-    public enum TaskAcrossFloorTypeEnum
-    {
-        /// <summary>
-        /// 璺ㄦゼ灞傛惉杩�
-        /// </summary>
-        [Description("璺ㄦゼ灞傛惉杩�")]
-        AcrossFloorCarry = 500
+        [Description("AGV绌鸿浇鍏锋惉杩�")]
+        CarryEmpty = 410
     }
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj"
index 7db8830..84faaa8 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj"
@@ -7,11 +7,13 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
+    <Compile Remove="Http\**" />
+    <EmbeddedResource Remove="Http\**" />
+    <None Remove="Http\**" />
   </ItemGroup>
 
   <ItemGroup>
-    <Folder Include="Http\" />
+    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
   </ItemGroup>
 
 </Project>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Core/BaseRepository/IRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Core/BaseRepository/IRepository.cs"
index a2702d9..97637e5 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Core/BaseRepository/IRepository.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Core/BaseRepository/IRepository.cs"
@@ -7,6 +7,7 @@
 using System.Linq.Expressions;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEAWCS_Core.Enums;
 
 namespace WIDESEAWCS_Core.BaseRepository
 {
@@ -414,5 +415,9 @@
         //    Expression<Func<T, T2, T3, TResult>> selectExpression,
         //    Expression<Func<T, T2, T3, bool>> whereLambda = null) where T : class, new();
         //Task<PageModel<TEntity>> QueryPage(PaginationModel pagination);
+
+        bool DeleteAndMoveIntoHty(TEntity entity, OperateTypeEnum operateType);
+
+        bool DeleteAndMoveIntoHty(List<TEntity> entities, OperateTypeEnum operateType);
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Core/BaseRepository/RepositoryBase.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Core/BaseRepository/RepositoryBase.cs"
index 2bfd6fa..22448da 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Core/BaseRepository/RepositoryBase.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Core/BaseRepository/RepositoryBase.cs"
@@ -16,6 +16,9 @@
 using WIDESEAWCS_Core.Const;
 using WIDESEAWCS_Core.AOP;
 using OfficeOpenXml.FormulaParsing.ExpressionGraph;
+using WIDESEAWCS_Core.DB.Models;
+using WIDESEAWCS_Core.Utilities;
+using WIDESEAWCS_Core.Enums;
 
 namespace WIDESEAWCS_Core.BaseRepository
 {
@@ -852,5 +855,103 @@
         //    Expression<Func<T, T2, T3, TResult>> selectExpression,
         //    Expression<Func<T, T2, T3, bool>> whereLambda = null) where T : class, new(){throw new NotImplementedException();}
         //Task<PageModel<TEntity>> QueryPage(PaginationModel pagination){throw new NotImplementedException();}
+
+        public bool DeleteAndMoveIntoHty(TEntity entity, OperateTypeEnum operateType)
+        {
+            Type type = entity.GetType();
+            Assembly assembly = type.Assembly;
+            Type? htyType = assembly.GetType(type.FullName + "_Hty");
+            if (htyType != null)
+            {
+                object? obj = Activator.CreateInstance(htyType);
+                PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
+                PropertyInfo? operateTypePro = htyType.GetProperty(nameof(IBaseHistoryEntity.OperateType));
+                PropertyInfo? sourceIdPro = htyType.GetProperty(nameof(IBaseHistoryEntity.SourceId));
+                if (obj != null && keyPro != null && operateTypePro != null && sourceIdPro != null)
+                {
+                    operateTypePro.SetValue(obj, operateType.ToString());
+                    sourceIdPro.SetValue(obj, keyPro.GetValue(entity));
+
+                    List<PropertyInfo> propertyInfos = htyType.GetProperties().Where(x => x.Name != operateTypePro.Name && x.Name != sourceIdPro.Name && x.Name != keyPro.Name).ToList();
+
+                    for (int i = 0; i < propertyInfos.Count; i++)
+                    {
+                        PropertyInfo propertyInfo = propertyInfos[i];
+                        PropertyInfo? property = type.GetProperty(propertyInfo.Name);
+
+                        if (property != null)
+                        {
+                            if (propertyInfo.Name == nameof(BaseEntity.Modifier))
+                            {
+                                propertyInfo.SetValue(obj, App.User.UserId > 0 ? App.User.UserName : "System");
+                            }
+                            else if (propertyInfo.Name == nameof(BaseEntity.ModifyDate))
+                            {
+                                propertyInfo.SetValue(obj, DateTime.Now);
+                            }
+                            else
+                            {
+                                propertyInfo.SetValue(obj, property.GetValue(entity));
+                            }
+                        }
+                    }
+                    _db.InsertableByObject(obj).AS(type.Name + "_Hty").ExecuteCommand();
+                }
+            }
+            return DeleteData(entity);
+        }
+
+        public bool DeleteAndMoveIntoHty(List<TEntity> entities, OperateTypeEnum operateType)
+        {
+            Type type = typeof(TEntity);
+            Assembly assembly = type.Assembly;
+            Type? htyType = assembly.GetType(type.FullName + "_Hty");
+            if (htyType != null)
+            {
+                object? obj2 = Activator.CreateInstance(htyType);
+                PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
+                PropertyInfo? operateTypePro = htyType.GetProperty(nameof(IBaseHistoryEntity.OperateType));
+                PropertyInfo? sourceIdPro = htyType.GetProperty(nameof(IBaseHistoryEntity.SourceId));
+                if (obj2 != null && keyPro != null && operateTypePro != null && sourceIdPro != null)
+                {
+                    List<PropertyInfo> propertyInfos = htyType.GetProperties().Where(x => x.Name != operateTypePro.Name && x.Name != sourceIdPro.Name && x.Name != keyPro.Name).ToList();
+                    List<object> list = new List<object>();
+                    foreach (var item in entities)
+                    {
+                        object? obj = Activator.CreateInstance(htyType);
+                        if (obj != null)
+                        {
+                            operateTypePro.SetValue(obj, operateType.ToString());
+                            sourceIdPro.SetValue(obj, keyPro.GetValue(item));
+                            for (int i = 0; i < propertyInfos.Count; i++)
+                            {
+                                PropertyInfo propertyInfo = propertyInfos[i];
+                                PropertyInfo? property = type.GetProperty(propertyInfo.Name);
+
+                                if (property != null)
+                                {
+                                    if (propertyInfo.Name == nameof(BaseEntity.Modifier))
+                                    {
+                                        propertyInfo.SetValue(obj, App.User.UserId > 0 ? App.User.UserName : "System");
+                                    }
+                                    else if (propertyInfo.Name == nameof(BaseEntity.ModifyDate))
+                                    {
+                                        propertyInfo.SetValue(obj, DateTime.Now);
+                                    }
+                                    else
+                                    {
+                                        propertyInfo.SetValue(obj, property.GetValue(item));
+                                    }
+                                }
+                            }
+                            list.Add(obj);
+                        }
+                    }
+                    _db.InsertableByObject(list).AS(type.Name + "_Hty").ExecuteCommand();
+
+                }
+            }
+            return DeleteData(entities);
+        }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Core/DB/Models/IBaseHistoryEntity.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Core/DB/Models/IBaseHistoryEntity.cs"
new file mode 100644
index 0000000..534c60a
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Core/DB/Models/IBaseHistoryEntity.cs"
@@ -0,0 +1,37 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_Core.DB.Models
+{
+    public interface IBaseHistoryEntity
+    {
+        /// <summary>
+        /// 鍘熻〃涓婚敭
+        /// </summary>
+        [ImporterHeader(Name = "鍘熻〃涓婚敭")]
+        [ExporterHeader(DisplayName = "鍘熻〃涓婚敭")]
+        [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "鍘熻〃涓婚敭")]
+        public int SourceId { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔绫诲瀷
+        /// </summary>
+        [ImporterHeader(Name = "鎿嶄綔绫诲瀷")]
+        [ExporterHeader(DisplayName = "鎿嶄綔绫诲瀷")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎿嶄綔绫诲瀷")]
+        public string OperateType { get; set; }
+
+        /// <summary>
+        /// 绉诲叆鍘嗗彶鏃堕棿
+        /// </summary>
+        [ImporterHeader(Name = "绉诲叆鍘嗗彶鏃堕棿")]
+        [ExporterHeader(DisplayName = "绉诲叆鍘嗗彶鏃堕棿")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "绉诲叆鍘嗗彶鏃堕棿")]
+        public DateTime InsertTime { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Core/Enums/OperateTypeEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Core/Enums/OperateTypeEnum.cs"
new file mode 100644
index 0000000..55edce1
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Core/Enums/OperateTypeEnum.cs"
@@ -0,0 +1,20 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_Core.Enums
+{
+    public enum OperateTypeEnum
+    {
+        浜哄伐鍒犻櫎 = 1,
+        鑷姩鍒犻櫎 = 2,
+        浜哄伐鎭㈠ = 3,
+        鑷姩鎭㈠ = 4,
+        浜哄伐瀹屾垚 = 5,
+        鑷姩瀹屾垚 = 6,
+        鍏抽棴 = 7,
+        鍏朵粬 = 99
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/AGVReceiveDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/AGVReceiveDTO.cs"
deleted file mode 100644
index 8c08c2e..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/AGVReceiveDTO.cs"
+++ /dev/null
@@ -1,40 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace WIDESEAWCS_DTO.AGV
-{
-    public class AGVReceiveDTO
-    {
-        /// <summary>
-        /// 浠诲姟鍙�
-        /// </summary>
-        public string orderId { get; set; }
-
-        
-        public string subOrderId { get; set; }
-        public string qrContent { get; set; }
-        public string deviceNum { get; set; }
-        public string deviceCode { get; set; }
-
-        /// <summary>
-        /// 鐘舵�侊細 PutFinish鏀捐揣瀹屾垚銆丳ickUpFinish鍙栬揣瀹屾垚銆丷equestPickUp璇锋眰鍙栬揣銆丷equestPut璇锋眰鏀捐揣
-        /// </summary>
-        public int status { get; set; }
-
-
-        public string storageNum { get; set; }
-        public string modelProcessCode { get; set; }
-        public string errorDesc { get; set; }
-        public string shelfNumber { get; set; }
-        public string shelfCurrPosition { get; set; }
-        public string subTaskStatus { get; set; }
-        public string subTaskTypeId { get; set; }
-        public string subTaskId { get; set; }
-        public string subTaskSeq { get; set; }
-        public string extraInfo { get; set; }
-        public string icsTaskOrderDetailId { get; set; }
-    }
-}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/AgvRespone.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/AgvRespone.cs"
deleted file mode 100644
index 03bf861..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/AgvRespone.cs"
+++ /dev/null
@@ -1,15 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace WIDESEAWCS_DTO.AGV
-{
-    public class AgvRespone
-    {
-        public int code { get; set; }
-        public string data { get; set; }
-        public string desc { get; set; }
-    }
-}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/AgvResponseContent.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/AgvResponseContent.cs"
new file mode 100644
index 0000000..aa0d58d
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/AgvResponseContent.cs"
@@ -0,0 +1,31 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_DTO.Agv
+{
+    /// <summary>
+    /// AGV杩斿洖鍙傛暟
+    /// </summary>
+    public class AgvResponseContent
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public object Data { get; set; }
+        /// <summary>
+        /// 杩斿洖浠g爜
+        /// </summary>
+        public string Code { get; set; }
+        /// <summary>
+        /// 杩斿洖淇℃伅
+        /// </summary>
+        public string Message { get; set; }
+        /// <summary>
+        /// 杩斿洖缁撴灉
+        /// </summary>
+        public bool Success { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/AgvStatusUpdateDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/AgvStatusUpdateDTO.cs"
new file mode 100644
index 0000000..06887ff
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/AgvStatusUpdateDTO.cs"
@@ -0,0 +1,51 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_DTO.Agv
+{
+    public class AgvStatusUpdateDTO
+{
+        /// <summary>
+        /// 浠诲姟缂栧彿
+        /// </summary>
+        public string MissionCode { get; set; }
+        /// <summary>
+        /// 浣滀笟绫诲瀷
+        /// </summary>
+        public string ViewBoardType { get; set; }
+        /// <summary>
+        /// 褰撳墠鎵�鍦ㄦЫ浣�
+        /// </summary>
+        public string SlotCode { get; set; }
+        /// <summary>
+        /// 鎵ц褰撳墠浠诲姟鐨勬満鍣ㄤ汉 id
+        /// </summary>
+        public string RobotId { get; set; }
+        /// <summary>
+        /// 瀹瑰櫒缂栧彿
+        /// </summary>
+        public string ContainerCode { get; set; }
+        /// <summary>
+        /// 瀹瑰櫒褰撳墠浣嶇疆
+        /// </summary>
+        public string CurrentPosition { get; set; }
+        /// <summary>
+        ///浣滀笟褰撳墠鐘舵��<br/>
+        ///寮�濮嬬Щ鍔細MOVE_BEGIN<br/>
+        ///鏂� 绠� 鍙� 鏂� 瀹� 鎴�:PICKER_RECEIVE<br/>
+        ///鏂� 绠� 涓� 鏂� 瀹� 鎴�:PICKER_SEND<br/>
+        ///绛夊緟鏀捐锛歐AITFEEDBACK<br/>
+        ///浠诲姟瀹屾垚锛欳OMPLETED<br/>
+        ///浠诲姟鍙栨秷瀹屾垚锛欳ANCELED<br/>
+        ///鍛婅锛歐ARNING<br/>
+        /// </summary>
+        public string MissionStatus { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Message { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/AgvTaskSendDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/AgvTaskSendDTO.cs"
new file mode 100644
index 0000000..a3c444b
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/AgvTaskSendDTO.cs"
@@ -0,0 +1,154 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_DTO.Agv
+{
+    public class MissionDataItem
+    {
+        /// <summary>
+        /// 鎼繍鏂欑搴忓彿浠�1寮�濮�
+        /// </summary>
+        public int Sequence { get; set; } = 1;
+        /// <summary>
+        /// 鏂欑鍙�
+        /// </summary>
+        public string BinCode { get; set; }
+        /// <summary>
+        /// 鏂欑鎵�鍦ㄧ殑璧峰鐐逛綅
+        /// </summary>
+        public string StartPosition { get; set; }
+        /// <summary>
+        /// 鏂欑鎵�鍦ㄧ殑璧峰妲戒綅
+        /// </summary>
+        public string StartSlotCode { get; set; }
+        /// <summary>
+        /// 鍙栨枡绠辨椂涔嬪墠鏄惁闇�瑕佺‘璁�
+        /// </summary>
+        public bool TakeActionConfirm { get; set; }
+        /// <summary>
+        /// 鍙栨枡绠卞悗鏄惁闇�瑕侀�氱煡
+        /// </summary>
+        public bool TakeActionInform { get; set; }
+        /// <summary>
+        /// 鏂欑鎵�鍦ㄧ殑鐩爣鐐逛綅
+        /// </summary>
+        public string EndPosition { get; set; }
+        /// <summary>
+        /// 鏂欑鎵�鍦ㄧ殑鐩爣妲戒綅
+        /// </summary>
+        public string EndSlotCode { get; set; }
+        /// <summary>
+        /// 鏀炬枡绠辨椂涔嬪墠鏄惁闇�瑕佺‘璁�
+        /// </summary>
+        public bool PutActionConfirm { get; set; }
+        /// <summary>
+        /// 鏀炬枡绠卞悗鏄惁闇�瑕侀�氱煡
+        /// </summary>
+        public bool PutActionInform { get; set; }
+    }
+    /// <summary>
+    /// AGV浠诲姟鍙戦��
+    /// </summary>
+    public class AgvTaskSendDTO
+    {
+        /// <summary>
+        /// 搴撳瓨缁勭粐ID
+        /// </summary>
+        public string OrgId { get; set; } = "HF";
+        /// <summary>
+        /// 璇锋眰 id
+        /// </summary>
+        public string RequestId { get; set; }
+        /// <summary>
+        /// 浠诲姟缂栫爜
+        /// </summary>
+        public string MissionCode { get; set; }
+        /// <summary>
+        /// 浠诲姟绫诲瀷锛歅ICKER_MOVE
+        /// </summary>
+        public string MissionType { get; set; } = "PICKER_MOVE";
+        /// <summary>
+        /// 浠诲姟鐪嬫澘灞曠ず浠诲姟绫诲瀷
+        /// </summary>
+        public string ViewBoardType { get; set; }
+        /// <summary>
+        /// 鏈哄櫒浜哄叿浣撳瀷鍙�
+        /// </summary>
+        public List<string> RobotModels { get; set; }
+        /// <summary>
+        /// 鏈哄櫒浜虹紪鍙�
+        /// </summary>
+        public List<string> RobotIds { get; set; }
+        /// <summary>
+        /// 鏈哄櫒浜哄姛鑳界被鍨婸ICKER
+        /// </summary>
+        public string RobotType { get; set; } = "PICKER";
+        /// <summary>
+        /// 浣滀笟浼樺厛绾�
+        /// </summary>
+        public int Priority { get; set; }
+        /// <summary>
+        /// 瀹瑰櫒妯″瀷缂栫爜
+        /// </summary>
+        public string ContainerModelCode { get; set; }
+        /// <summary>
+        /// 瀹瑰櫒缂栧彿
+        /// </summary>
+        public string ContainerCode { get; set; }
+        /// <summary>
+        /// 浣滀笟娴佺▼妯℃澘缂栧彿
+        /// </summary>
+        public string TemplateCode { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public bool LockRobotAfterFinish { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string UnlockRobotId { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string UnlockMissionCode { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string IdleNode { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public List<MissionDataItem> MissionData { get; set; }
+    }
+
+    public class AgvTaskCancelDTO
+    {
+        /// <summary>
+        /// 璇锋眰id
+        /// </summary>
+        public string RequestId { get; set; }
+        /// <summary>
+        /// 浠诲姟缂栧彿
+        /// </summary>
+        public string MissionCode { get; set; }
+        /// <summary>
+        /// 瀹瑰櫒缂栧彿
+        /// </summary>
+        public string ContainerCode { get; set; }
+        /// <summary>
+        /// 鑺傜偣缂栧彿
+        /// </summary>
+        public string Position { get; set; }
+        /// <summary>
+        /// 鍙栨秷妯″紡
+        /// </summary>
+        public string CancelMode { get; set; }
+        /// <summary>
+        /// 鍙栨秷鍘熷洜
+        /// </summary>
+        public string Reason { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/SendTask.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/SendTask.cs"
deleted file mode 100644
index 2490e83..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/AGV/SendTask.cs"
+++ /dev/null
@@ -1,59 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace WIDESEAWCS_DTO.AGV
-{
-    public class SendTask
-    {
-        /// <summary>
-        /// 浠诲姟妯℃澘
-        /// </summary>
-        public string modelProcessCode { get; set; }
-
-        /// <summary>
-        /// 浼樺厛绾�
-        /// </summary>
-        public int priority { get; set; }
-
-        /// <summary>
-        /// 鏉ユ簮绯荤粺
-        /// </summary>
-        public string fromSystem { get; set; }
-
-        /// <summary>
-        /// 浠诲姟鍙�
-        /// </summary>
-        public string orderId { get; set; }
-
-        /// <summary>
-        /// 璁㈠崟鏄庣粏
-        /// </summary>
-        public List<taskOrderDetail> taskOrderDetail { get; set; }
-    }
-    public class taskOrderDetail
-    {
-        public string subOrderId { get; set; }
-
-        public string taskPath { get; set; }
-
-        public string shelfNumber { get; set; }
-
-        public string assignRobotIds { get; set; }
-
-        public string releaseRobot { get; set; }
-
-        public string deviceNum { get; set; }
-
-        public string loadType { get; set; }
-
-        public string robotType { get; set; }
-
-        public string extraInfo { get; set; }
-
-        public string shelfModel { get; set; }
-        
-    }
-}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/WMS/RequestTaskDto.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/WMS/RequestTaskDto.cs"
deleted file mode 100644
index f5c114a..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_DTO/WMS/RequestTaskDto.cs"
+++ /dev/null
@@ -1,45 +0,0 @@
-锘縩amespace WIDESEAWCS_DTO.WMS
-{
-    public class RequestTaskDto
-    {
-        /// <summary>
-        /// 褰撳墠浣嶇疆
-        /// </summary>
-        public string Position { get; set; }
-
-        /// <summary>
-        /// 鎵樼洏鍙�
-        /// </summary>
-        public string PalletCode { get; set; }
-
-        /// <summary>
-        /// 绌烘墭鐩樺彲鍏ュ贩鍒�
-        /// </summary>
-        public string PositionList { get; set; }
-
-        /// <summary>
-        /// 浠诲姟绫诲瀷
-        /// </summary>
-        public string RequestType { get; set; } = string.Empty;
-
-        public int TaskNum { get; set; }
-    }
-
-    public class RequestAcrossFloorTaskDto
-    {
-        /// <summary>
-        /// 浠诲姟鍙�
-        /// </summary>
-        public int TaskNum { get; set; }
-
-        /// <summary>
-        /// 鎵樼洏鍙�
-        /// </summary>
-        public string PalletCode { get; set; }
-
-        /// <summary>
-        /// 涓嬩竴浣嶇疆
-        /// </summary>
-        public string NextAddress { get; set; }
-    }
-}
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_IBasicInfoRepository/IApiInfoRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_IBasicInfoRepository/IApiInfoRepository.cs"
new file mode 100644
index 0000000..98f001b
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_IBasicInfoRepository/IApiInfoRepository.cs"
@@ -0,0 +1,14 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Core.BaseRepository;
+using WIDESEAWCS_Model.Models;
+
+namespace WIDESEAWCS_IBasicInfoRepository
+{
+    public interface IApiInfoRepository : IRepository<Dt_ApiInfo>
+    {
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_IBasicInfoRepository/IDt_StationManagerRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_IBasicInfoRepository/IDt_StationManagerRepository.cs"
index da4f5da..f048d8e 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_IBasicInfoRepository/IDt_StationManagerRepository.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_IBasicInfoRepository/IDt_StationManagerRepository.cs"
@@ -1,19 +1,8 @@
-锘�#region << 鐗� 鏈� 娉� 閲� >>
-/*----------------------------------------------------------------
- * 鍛藉悕绌洪棿锛歐IDESEAWCS_ITaskInfoRepository
- * 鍒涘缓鑰咃細鑳$搴�
- * 鍒涘缓鏃堕棿锛�2024/8/2 16:13:36
- * 鐗堟湰锛歏1.0.0
- * 鎻忚堪锛�
- *
- * ----------------------------------------------------------------
- * 淇敼浜猴細
- * 淇敼鏃堕棿锛�
- * 鐗堟湰锛歏1.0.1
- * 淇敼璇存槑锛�
- * 
- *----------------------------------------------------------------*/
-#endregion << 鐗� 鏈� 娉� 閲� >>
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
 using WIDESEAWCS_Core.BaseRepository;
 using WIDESEAWCS_Model.Models;
 
@@ -21,6 +10,5 @@
 {
     public interface IDt_StationManagerRepository : IRepository<Dt_StationManager>
     {
-
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_ITaskInfoService/ITaskExecuteDetailService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_ITaskInfoService/ITaskExecuteDetailService.cs"
index 210d039..6383481 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_ITaskInfoService/ITaskExecuteDetailService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_ITaskInfoService/ITaskExecuteDetailService.cs"
@@ -34,7 +34,5 @@
         WebResponseContent GetDetailInfo(int taskNum);
 
         WebResponseContent GetDetailDatas(int taskNum);
-
-        void AddTaskExecuteDetail(List<int> taskNums, string description = "");
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_ITaskInfoService/ITaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
index ebe6a7d..45bbb57 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
@@ -31,6 +31,8 @@
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_DTO.MES;
+using WIDESEAWCS_Common.APIEnum;
+using WIDESEAWCS_DTO.Agv;
 
 namespace WIDESEAWCS_ITaskInfoService
 {
@@ -40,37 +42,6 @@
         /// 浠诲姟鎺掑簭
         /// </summary>
         public Dictionary<string, OrderByType> TaskOrderBy { get; set; }
-
-        /// <summary>
-        /// 鎵�鏈夊叆搴撲换鍔$被鍨�
-        /// </summary>
-        public List<int> TaskInboundTypes { get; }
-
-        /// <summary>
-        /// 鎵�鏈夊嚭搴撲换鍔$被鍨�
-        /// </summary>
-        public List<int> TaskOutboundTypes { get; }
-
-        /// <summary>
-        /// 鎵�鏈夌Щ搴撲换鍔$被鍨�
-        /// </summary>
-        public List<int> TaskRelocationboundTypes { get; }
-
-        /// <summary>
-        /// 鎵�鏈夊叆搴撲换鍔$姸鎬�
-        /// </summary>
-        public List<int> TaskInboundStates { get; }
-
-        /// <summary>
-        /// 鎵�鏈夊嚭搴撲换鍔$姸鎬�
-        /// </summary>
-        public List<int> TaskOutboundStates { get; }
-
-        /// <summary>
-        /// 鎵�鏈夌Щ搴撲换鍔$姸鎬�
-        /// </summary>
-        public List<int> TaskRelocationboundStates { get; }
-
 
         /// <summary>
         /// 鎺ユ敹MES浠诲姟
@@ -112,5 +83,28 @@
         /// <param name="taskNum">浠诲姟鍙�</param>
         /// <returns>杩斿洖澶勭悊缁撴灉</returns>
         WebResponseContent RollbackTaskStatusToLast(int taskNum);
+        /// <summary>
+        /// AGV浠诲姟鍙戦��
+        /// </summary>
+        /// <returns></returns>
+        WebResponseContent AgvSendTask(AgvTaskSendDTO taskModel, APIEnum SendTask = APIEnum.AgvSendTask);
+
+        /// <summary>
+        /// 鏇存柊浠诲姟淇℃伅鍙婃坊鍔犱换鍔℃槑缁嗚褰�
+        /// </summary>
+        /// <param name="task">浠诲姟鍘熷璞″疄渚�(鏈慨鏀圭殑鏁版嵁瀵硅薄)</param>
+        /// <param name="taskStatus">淇敼鍚庣殑浠诲姟鐘舵��</param>
+        /// <param name="deviceCode">淇敼鍚庣殑璁惧缂栧彿</param>
+        /// <param name="sourceAddress">淇敼鍚庣殑璧峰鍦板潃</param>
+        /// <param name="targetAddress">淇敼鍚庣殑鐩爣鍦板潃</param>
+        /// <param name="currentAddress">淇敼鍚庣殑褰撳墠鍦板潃</param>
+        /// <param name="nextAddress">淇敼鍚庣殑涓嬩竴鍦板潃</param>
+        void UpdateTask(Dt_Task task, TaskAGVCarryStatusEnum taskStatus, string deviceCode = "", string sourceAddress = "", string targetAddress = "", string currentAddress = "", string nextAddress = "", string roadwayNo = "");
+
+        /// <summary>
+        /// 浠诲姟瀹屾垚棰�
+        /// </summary>
+        /// <returns></returns>
+        WebResponseContent TaskCompleted(int taskNum);
     }
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Model/Models/BasicInfo/Dt_ApiInfo.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Model/Models/BasicInfo/Dt_ApiInfo.cs"
new file mode 100644
index 0000000..f08521a
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Model/Models/BasicInfo/Dt_ApiInfo.cs"
@@ -0,0 +1,50 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Core.DB.Models;
+
+namespace WIDESEAWCS_Model.Models
+{
+    [SugarTable(nameof(Dt_ApiInfo), "鎺ュ彛淇℃伅")]
+    public class Dt_ApiInfo : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 鎺ュ彛缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎺ュ彛缂栧彿")]
+        public string ApiCode { get; set; }
+
+        /// <summary>
+        /// 鎺ュ彛鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鎺ュ彛鍚嶇О")]
+        public string ApiName { get; set; }
+
+        /// <summary>
+        /// 鎺ュ彛鍦板潃
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "鎺ュ彛鍦板潃")]
+        public string ApiAddress { get; set; }
+
+        /// <summary>
+        /// 鏄惁鍚敤
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鏄惁鍚敤")]
+        public int Enable { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs"
index 2862c62..778fd4c 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs"
@@ -1,29 +1,85 @@
-锘縰sing Microsoft.AspNetCore.Authorization;
+锘縰sing Autofac.Core;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
-using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
-using System.Reflection;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Information;
+using System.Text;
+using System.Text.RegularExpressions;
+using WIDESEAWCS_Common;
+using WIDESEAWCS_Common.APIEnum;
 using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core;
-using WIDESEAWCS_DTO.AGV;
+using WIDESEAWCS_Core.Enums;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_Core.LogHelper;
+using WIDESEAWCS_DTO;
+using WIDESEAWCS_DTO.Agv;
+using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_IBasicInfoRepository;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_QuartzJob.DTO;
+using WIDESEAWCS_QuartzJob.Models;
+using WIDESEAWCS_QuartzJob.Repository;
+using WIDESEAWCS_TaskInfoService;
 using WIDESEAWCS_Tasks;
 
-namespace WIDESEAWCS_Server.Controllers.AGV
+namespace WIDESEAWCS_Server.Controllers
 {
-    [Route("api/AGV")]
+    [Route("api/[controller]")]
     [ApiController]
     public class AGVController : ControllerBase
     {
-        private readonly ITaskRepository _taskRepository;
+        private readonly IDt_StationManagerRepository _stationMangerRepository;
         private readonly ITaskService _taskService;
+        private readonly ITaskRepository _taskRepository;
+        private readonly IRouterRepository _routerRepository;
 
-        public AGVController(ITaskRepository taskRepository,ITaskService taskService)
+        public AGVController(IDt_StationManagerRepository stationMangerRepository, ITaskService taskService, ITaskRepository taskRepository,IRouterRepository routerRepository)
         {
-            _taskRepository = taskRepository;
+            _stationMangerRepository = stationMangerRepository;
             _taskService = taskService;
+            _taskRepository = taskRepository;
+            _routerRepository = routerRepository;
+        }
+        /// <summary>
+        /// AGV浠诲姟鏇存柊
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("Callback"), AllowAnonymous]
+        public WebResponseContent? Callback([FromBody]AgvStatusUpdateDTO agvUpdateDTO)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                var task = _taskRepository.QueryFirst(x => (agvUpdateDTO.ContainerCode ?? "") == x.PalletCode);
+                switch (agvUpdateDTO.MissionStatus)
+                {
+                    case nameof(AGVStatusEnum.PICKER_RECEIVE):
+                        if (task == null) throw new Exception($"鏈壘鍒版枡绠便�恵agvUpdateDTO.ContainerCode}銆戜换鍔�");
+                        _taskService.UpdateTask(task, TaskAGVCarryStatusEnum.AGV_CarryTakeFinish);
+                        break;
+                    case nameof(AGVStatusEnum.PICKER_SEND):
+                        if (task == null) throw new Exception($"鏈壘鍒版枡绠便�恵agvUpdateDTO.ContainerCode}銆戜换鍔�");
+                        _taskService.UpdateTask(task, TaskAGVCarryStatusEnum.AGV_CarryReleaseFinish);
+                        break;
+                    case nameof(AGVStatusEnum.COMPLETED):
+                        if (task == null) throw new Exception($"鏈壘鍒版枡绠便�恵agvUpdateDTO.ContainerCode}銆戜换鍔�");
+                        _taskService.TaskCompleted(task.TaskNum);
+                        break;
+                    default:
+                        break;
+                }
+
+                content.OK();
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
         }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs"
index a03b8df..f37542e 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs"
@@ -186,94 +186,6 @@
                         {
                             List<object> data = new List<object>();
 
-                            #region TaskInboundTypeEnum
-                            {
-                                Type type = typeof(TaskInboundTypeEnum);
-                                List<int> enums = Enum.GetValues(typeof(TaskInboundTypeEnum)).Cast<int>().ToList();
-                                int index = 0;
-                                foreach (var item in enums)
-                                {
-                                    FieldInfo? fieldInfo = typeof(TaskInboundTypeEnum).GetField(((TaskInboundTypeEnum)item).ToString());
-                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
-                                    if (description != null)
-                                    {
-                                        data.Add(new { key = item.ToString(), value = description.Description });
-                                    }
-                                    else
-                                    {
-                                        data.Add(new { key = item.ToString(), value = item.ToString() });
-                                    }
-                                    index++;
-                                }
-                            }
-                            #endregion
-
-                            #region TaskOutboundTypeEnum
-                            {
-                                Type type = typeof(TaskOutboundTypeEnum);
-                                List<int> enums = Enum.GetValues(typeof(TaskOutboundTypeEnum)).Cast<int>().ToList();
-                                int index = 0;
-                                foreach (var item in enums)
-                                {
-                                    FieldInfo? fieldInfo = typeof(TaskOutboundTypeEnum).GetField(((TaskOutboundTypeEnum)item).ToString());
-                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
-                                    if (description != null)
-                                    {
-                                        data.Add(new { key = item.ToString(), value = description.Description });
-                                    }
-                                    else
-                                    {
-                                        data.Add(new { key = item.ToString(), value = item.ToString() });
-                                    }
-                                    index++;
-                                }
-                            }
-                            #endregion
-
-                            #region TaskRelocationTypeEnum
-                            {
-                                Type type = typeof(TaskRelocationTypeEnum);
-                                List<int> enums = Enum.GetValues(typeof(TaskRelocationTypeEnum)).Cast<int>().ToList();
-                                int index = 0;
-                                foreach (var item in enums)
-                                {
-                                    FieldInfo? fieldInfo = typeof(TaskRelocationTypeEnum).GetField(((TaskRelocationTypeEnum)item).ToString());
-                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
-                                    if (description != null)
-                                    {
-                                        data.Add(new { key = item.ToString(), value = description.Description });
-                                    }
-                                    else
-                                    {
-                                        data.Add(new { key = item.ToString(), value = item.ToString() });
-                                    }
-                                    index++;
-                                }
-                            }
-                            #endregion
-
-                            #region TaskOtherTypeEnum
-                            {
-                                Type type = typeof(TaskOtherTypeEnum);
-                                List<int> enums = Enum.GetValues(typeof(TaskOtherTypeEnum)).Cast<int>().ToList();
-                                int index = 0;
-                                foreach (var item in enums)
-                                {
-                                    FieldInfo? fieldInfo = typeof(TaskOtherTypeEnum).GetField(((TaskOtherTypeEnum)item).ToString());
-                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
-                                    if (description != null)
-                                    {
-                                        data.Add(new { key = item.ToString(), value = description.Description });
-                                    }
-                                    else
-                                    {
-                                        data.Add(new { key = item.ToString(), value = item.ToString() });
-                                    }
-                                    index++;
-                                }
-                            }
-                            #endregion
-
                             #region TaskAGVCarryTypeEnum
                             {
                                 Type type = typeof(TaskAGVCarryTypeEnum);
@@ -296,100 +208,12 @@
                             }
                             #endregion
 
-                            #region TaskAcrossFloorTypeEnum
-                            {
-                                Type type = typeof(TaskAcrossFloorTypeEnum);
-                                List<int> enums = Enum.GetValues(typeof(TaskAcrossFloorTypeEnum)).Cast<int>().ToList();
-                                int index = 0;
-                                foreach (var item in enums)
-                                {
-                                    FieldInfo? fieldInfo = typeof(TaskAcrossFloorTypeEnum).GetField(((TaskAcrossFloorTypeEnum)item).ToString());
-                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
-                                    if (description != null)
-                                    {
-                                        data.Add(new { key = item.ToString(), value = description.Description });
-                                    }
-                                    else
-                                    {
-                                        data.Add(new { key = item.ToString(), value = item.ToString() });
-                                    }
-                                    index++;
-                                }
-                            }
-                            #endregion
-
                             result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                         }
                         break;
                     case "taskState":
                         {
                             List<object> data = new List<object>();
-
-                            #region TaskInStatusEnum
-                            {
-                                Type type = typeof(TaskInStatusEnum);
-                                List<int> enums = Enum.GetValues(typeof(TaskInStatusEnum)).Cast<int>().ToList();
-                                int index = 0;
-                                foreach (var item in enums)
-                                {
-                                    FieldInfo? fieldInfo = typeof(TaskInStatusEnum).GetField(((TaskInStatusEnum)item).ToString());
-                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
-                                    if (description != null)
-                                    {
-                                        data.Add(new { key = item.ToString(), value = description.Description });
-                                    }
-                                    else
-                                    {
-                                        data.Add(new { key = item.ToString(), value = item.ToString() });
-                                    }
-                                    index++;
-                                }
-                            }
-                            #endregion
-
-                            #region TaskOutStatusEnum
-                            {
-                                Type type = typeof(TaskOutStatusEnum);
-                                List<int> enums = Enum.GetValues(typeof(TaskOutStatusEnum)).Cast<int>().ToList();
-                                int index = 0;
-                                foreach (var item in enums)
-                                {
-                                    FieldInfo? fieldInfo = typeof(TaskOutStatusEnum).GetField(((TaskOutStatusEnum)item).ToString());
-                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
-                                    if (description != null)
-                                    {
-                                        data.Add(new { key = item.ToString(), value = description.Description });
-                                    }
-                                    else
-                                    {
-                                        data.Add(new { key = item.ToString(), value = item.ToString() });
-                                    }
-                                    index++;
-                                }
-                            }
-                            #endregion
-
-                            #region TaskRelocationStatusEnum
-                            {
-                                Type type = typeof(TaskRelocationStatusEnum);
-                                List<int> enums = Enum.GetValues(typeof(TaskRelocationStatusEnum)).Cast<int>().ToList();
-                                int index = 0;
-                                foreach (var item in enums)
-                                {
-                                    FieldInfo? fieldInfo = typeof(TaskRelocationStatusEnum).GetField(((TaskRelocationStatusEnum)item).ToString());
-                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
-                                    if (description != null)
-                                    {
-                                        data.Add(new { key = item.ToString(), value = description.Description });
-                                    }
-                                    else
-                                    {
-                                        data.Add(new { key = item.ToString(), value = item.ToString() });
-                                    }
-                                    index++;
-                                }
-                            }
-                            #endregion
 
                             #region TaskAGVCarryStatusEnum
                             {
@@ -413,27 +237,6 @@
                             }
                             #endregion
 
-                            #region TaskAcrossFloorStatusEnum
-                            {
-                                Type type = typeof(TaskAcrossFloorStatusEnum);
-                                List<int> enums = Enum.GetValues(typeof(TaskAcrossFloorStatusEnum)).Cast<int>().ToList();
-                                int index = 0;
-                                foreach (var item in enums)
-                                {
-                                    FieldInfo? fieldInfo = typeof(TaskAcrossFloorStatusEnum).GetField(((TaskAcrossFloorStatusEnum)item).ToString());
-                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
-                                    if (description != null)
-                                    {
-                                        data.Add(new { key = item.ToString(), value = description.Description });
-                                    }
-                                    else
-                                    {
-                                        data.Add(new { key = item.ToString(), value = item.ToString() });
-                                    }
-                                    index++;
-                                }
-                            }
-                            #endregion
 
                             result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                         }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs"
new file mode 100644
index 0000000..fd3ebb7
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs"
@@ -0,0 +1,85 @@
+锘縰sing Autofac.Core;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Serialization;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection.Metadata;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common.Log;
+using WIDESEAWCS_Common.APIEnum;
+using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_DTO.Agv;
+using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_Model.Models;
+
+namespace WIDESEAWCS_TaskInfoService
+{
+    public partial class TaskService
+    {
+        // 鍒涘缓涓�涓娇鐢ㄥ皬椹煎嘲鍛藉悕娉曠殑搴忓垪鍖栬缃�
+        JsonSerializerSettings settings = new JsonSerializerSettings
+        {
+            ContractResolver = new CamelCasePropertyNamesContractResolver()
+        };
+        /// <summary>
+        /// AGV浠诲姟鍙戦��
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent AgvSendTask(AgvTaskSendDTO taskModel, APIEnum SendTask = APIEnum.AgvSendTask)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                
+                string? apiAddress = _apiInfoRepository.QueryFirst(x => x.ApiCode == SendTask.ToString())?.ApiAddress;
+                if (string.IsNullOrEmpty(apiAddress)) throw new Exception($"鏈壘鍒板彂閫丄GV浠诲姟鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+                string request = JsonConvert.SerializeObject(taskModel, settings);
+                string response = HttpHelper.Post(apiAddress, request);
+                WriteLog.Write_Log("AGV鍏ュ簱浠诲姟涓嬪彂", "鍑哄簱浠诲姟涓嬪彂鎺ュ彛", "璇锋眰浠诲姟", $"璇锋眰锛歿request},鍥炰紶锛歿response}");
+                AgvResponseContent agvContent = response.DeserializeObject<AgvResponseContent>() ?? throw new Exception("AGV浠诲姟鍙戦�佹湭杩斿洖缁撴灉");
+                if (agvContent.Success)
+                {
+                    content.OK();
+                }
+                else
+                {
+                    content.Error(agvContent.Message);
+                }
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        public WebResponseContent AgvCancelTask(AgvTaskCancelDTO taskModel, APIEnum SendTask = APIEnum.AgvTaskCancel)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string? apiAddress = _apiInfoRepository.QueryFirst(x => x.ApiCode == SendTask.ToString())?.ApiAddress;
+                if (string.IsNullOrEmpty(apiAddress)) throw new Exception($"鏈壘鍒板彂閫丄GV浠诲姟鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+                string request = JsonConvert.SerializeObject(taskModel, settings);
+                string response = HttpHelper.Post(apiAddress, request);
+                AgvResponseContent agvContent = response.DeserializeObject<AgvResponseContent>() ?? throw new Exception("AGV浠诲姟鍙戦�佹湭杩斿洖缁撴灉");
+                if (agvContent.Success)
+                {
+                    content.OK();
+                }
+                else
+                {
+                    content.Error(agvContent.Message);
+                }
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs"
index c6d4fb6..a2fd18f 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs"
@@ -53,14 +53,9 @@
                 int taskNum = task.TaskNum;
                 int taskState = task.TaskState;
 
-                if (!int.TryParse(Enum.Parse<TaskOutStatusEnum>(taskState.ToString()).ToString(), out int result))
+                if (!int.TryParse(Enum.Parse<TaskAGVCarryStatusEnum>(taskState.ToString()).ToString(), out int result))
                 {
-                    if ((int)(TaskOutStatusEnum)result > (int)TaskOutStatusEnum.OutFinish)
-                        isNormal = false;
-                }
-                else if (!int.TryParse(Enum.Parse<TaskInStatusEnum>(taskState.ToString()).ToString(), out result))
-                {
-                    if ((int)(TaskInStatusEnum)result > (int)TaskInStatusEnum.InFinish)
+                    if ((int)(TaskAGVCarryStatusEnum)result > (int)TaskAGVCarryStatusEnum.AGV_CarryFinish)
                         isNormal = false;
                 }
                 
@@ -93,14 +88,9 @@
                 int NewtaskNum = task.TaskNum;
                 int taskState = task.TaskState;
 
-                if (!int.TryParse(Enum.Parse<TaskOutStatusEnum>(taskState.ToString()).ToString(), out int result))
+                if (!int.TryParse(Enum.Parse<TaskAGVCarryStatusEnum>(taskState.ToString()).ToString(), out int result))
                 {
-                    if ((int)(TaskOutStatusEnum)result > (int)TaskOutStatusEnum.OutFinish)
-                        isNormal = false;
-                }
-                else if (!int.TryParse(Enum.Parse<TaskInStatusEnum>(taskState.ToString()).ToString(), out result))
-                {
-                    if ((int)(TaskInStatusEnum)result > (int)TaskInStatusEnum.InFinish)
+                    if ((int)(TaskAGVCarryStatusEnum)result > (int)TaskAGVCarryStatusEnum.AGV_CarryFinish)
                         isNormal = false;
                 }
                 
@@ -124,52 +114,6 @@
             }
         }
 
-        public void AddTaskExecuteDetail(List<int> taskNums, string description = "")
-        {
-            try
-            {
-                List<Dt_TaskExecuteDetail> taskExecuteDetails = new List<Dt_TaskExecuteDetail>();
-                foreach (var item in taskNums)
-                {
-                    bool isNormal = true;
-                    Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == item);
-                    if (task == null) return;
-                    int taskNum = task.TaskNum;
-                    int taskState = task.TaskState;
-
-                    if (!int.TryParse(Enum.Parse<TaskOutStatusEnum>(taskState.ToString()).ToString(), out int result))
-                    {
-                        if ((int)(TaskOutStatusEnum)result > (int)TaskOutStatusEnum.OutFinish)
-                            isNormal = false;
-                    }
-                    else if (!int.TryParse(Enum.Parse<TaskInStatusEnum>(taskState.ToString()).ToString(), out result))
-                    {
-                        if ((int)(TaskInStatusEnum)result > (int)TaskInStatusEnum.InFinish)
-                            isNormal = false;
-                    }
-                    
-                    Dt_TaskExecuteDetail taskExecuteDetail = new()
-                    {
-                        IsManual = App.User.UserId > 0,
-                        IsNormal = isNormal,
-                        TaskNum = taskNum,
-                        TaskId = task.TaskId,
-                        TaskState = taskState,
-                        Description = description,
-                        CurrentAddress = task.CurrentAddress,
-                        NextAddress = task.NextAddress,
-                    };
-                    taskExecuteDetails.Add(taskExecuteDetail);
-                }
-
-                BaseDal.AddData(taskExecuteDetails);
-            }
-            catch (Exception ex)
-            {
-
-            }
-        }
-
         public WebResponseContent GetDetailInfo(int taskNum)
         {
             WebResponseContent content = new();
@@ -182,14 +126,14 @@
                 if (task != null)
                 {
 
-                    if (!int.TryParse(Enum.Parse<TaskOutboundTypeEnum>(task.TaskType.ToString()).ToString(), out int result))
+                    if (!int.TryParse(Enum.Parse<TaskAGVCarryTypeEnum>(task.TaskType.ToString()).ToString(), out int result))
                     {
-                        steps = Enum.GetValues(typeof(TaskOutStatusEnum)).Cast<int>().Where(x => x <= (int)TaskOutStatusEnum.OutFinish).ToList();
+                        steps = Enum.GetValues(typeof(TaskAGVCarryStatusEnum)).Cast<int>().Where(x => x <= (int)TaskAGVCarryStatusEnum.AGV_CarryFinish).ToList();
 
                         foreach (var item in steps)
                         {
                             object obj;
-                            FieldInfo? fieldInfo = typeof(TaskOutStatusEnum).GetField(((TaskOutStatusEnum)item).ToString());
+                            FieldInfo? fieldInfo = typeof(TaskAGVCarryStatusEnum).GetField(((TaskAGVCarryStatusEnum)item).ToString());
                             DescriptionAttribute? descriptionAttribute = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                             if (descriptionAttribute != null)
                             {
@@ -197,38 +141,10 @@
                             }
                             else
                             {
-                                obj = new { title = item, description = ((TaskOutStatusEnum)item).ToString() };
+                                obj = new { title = item, description = ((TaskAGVCarryStatusEnum)item).ToString() };
                             }
                             list.Add(obj);
                         }
-                    }
-                    else if (!int.TryParse(Enum.Parse<TaskInboundTypeEnum>(task.TaskType.ToString()).ToString(), out result))
-                    {
-                        steps = Enum.GetValues(typeof(TaskInStatusEnum)).Cast<int>().Where(x => x <= (int)TaskInStatusEnum.InFinish).ToList();
-                        foreach (var item in steps)
-                        {
-                            object obj;
-                            FieldInfo? fieldInfo = typeof(TaskInStatusEnum).GetField(((TaskInStatusEnum)item).ToString());
-                            DescriptionAttribute? descriptionAttribute = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
-                            if (descriptionAttribute != null)
-                            {
-                                obj = new { title = item, description = descriptionAttribute.Description };
-                            }
-                            else
-                            {
-                                obj = new { title = item, description = ((TaskInStatusEnum)item).ToString() };
-                            }
-                            list.Add(obj);
-                        }
-                    }
-                   
-                    else if (!int.TryParse(Enum.Parse<TaskRelocationTypeEnum>(task.TaskType.ToString()).ToString(), out result))
-                    {
-                        //todo 璋冪敤WMS绉诲簱瀹屾垚
-                    }
-                    else if (!int.TryParse(Enum.Parse<TaskOtherTypeEnum>(task.TaskType.ToString()).ToString(), out result))
-                    {
-
                     }
                     else
                     {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_TaskInfoService/TaskService.cs"
index f374b24..5907898 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_TaskInfoService/TaskService.cs"
@@ -5,19 +5,25 @@
 using Newtonsoft.Json;
 using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
 using SqlSugar;
+using System.ComponentModel;
 using System.Diagnostics.CodeAnalysis;
+using System.Reflection;
+using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_Common.Log;
 using WIDESEAWCS_BasicInfoRepository;
 using WIDESEAWCS_BasicInfoService;
 using WIDESEAWCS_Common;
+using WIDESEAWCS_Common.APIEnum;
 using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.BaseRepository;
 using WIDESEAWCS_Core.BaseServices;
+using WIDESEAWCS_Core.Enums;
 using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_Core.LogHelper;
 using WIDESEAWCS_DTO.MES;
 using WIDESEAWCS_DTO.TaskInfo;
-using WIDESEAWCS_DTO.WMS;
 using WIDESEAWCS_IBasicInfoRepository;
 using WIDESEAWCS_IBasicInfoService;
 using WIDESEAWCS_ISystemServices;
@@ -43,6 +49,8 @@
         private readonly IDt_StationManagerRepository _stationManagerRepository;
         private readonly IRouterRepository _routerRepository;
         private readonly ITask_HtyRepository _taskHtyRepository;
+        private readonly IApiInfoRepository _apiInfoRepository;
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
 
         private Dictionary<string, OrderByType> _taskOrderBy = new()
         {
@@ -56,20 +64,12 @@
 
 
         #region 鑾峰彇鎵�鏈変换鍔$被鍨嬨�佺姸鎬�
-        public List<int> TaskInboundTypes => typeof(TaskInboundTypeEnum).GetEnumIndexList();
 
-        public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList();
-        public List<int> TaskRelocationboundTypes => typeof(TaskRelocationTypeEnum).GetEnumIndexList();
-
-        public List<int> TaskInboundStates => typeof(TaskInStatusEnum).GetEnumIndexList();
-
-        public List<int> TaskOutboundStates => typeof(TaskOutStatusEnum).GetEnumIndexList();
-        public List<int> TaskRelocationboundStates => typeof(TaskRelocationStatusEnum).GetEnumIndexList();
 
         #endregion 鑾峰彇鎵�鏈変换鍔$被鍨嬨�佺姸鎬�
 
 
-        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ISys_ConfigService sys_ConfigService, IDt_StationManagerService stationManagerService, IDt_StationManagerRepository stationManagerRepository, IRouterRepository routerRepository, ITask_HtyRepository htyRepository) : base(BaseDal)
+        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ISys_ConfigService sys_ConfigService, IDt_StationManagerService stationManagerService, IDt_StationManagerRepository stationManagerRepository, IRouterRepository routerRepository, ITask_HtyRepository htyRepository, IApiInfoRepository apiInfoRepository,IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
         {
             _routerService = routerService;
             _taskExecuteDetailService = taskExecuteDetailService;
@@ -80,6 +80,8 @@
             _stationManagerRepository = stationManagerRepository;
             _routerRepository = routerRepository;
             _taskHtyRepository = htyRepository;
+            _apiInfoRepository = apiInfoRepository;
+            _unitOfWorkManage = unitOfWorkManage;
         }
 
         /// <summary>
@@ -139,13 +141,9 @@
             {
                 var task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                 if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�");
-                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.CarryGroup)
                 {
-                    task.TaskState = (int)TaskOutStatusEnum.OutPending;
-                }
-                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
-                {
-                    task.TaskState = (int)TaskInStatusEnum.InPending;
+                    task.TaskState = (int)TaskAGVCarryStatusEnum.AGV_CarryException;
                 }
                 task.ExceptionMessage = message;
                 task.ModifyDate = DateTime.Now;
@@ -196,29 +194,15 @@
                 int oldState = task.TaskState;
                 if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.OutbondGroup)
                 {
-                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
+                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskAGVCarryStatusEnum>();
 
                     task.TaskState = nextStatus;
 
-                    if (task.TaskState == (int)TaskOutStatusEnum.AGV_OutFinish)
+                    if (task.TaskState == (int)TaskAGVCarryStatusEnum.AGV_CarryFinish)
                     {
 
-                        task.ModifyDate = DateTime.Now;
-                        task.Modifier = "System";
-
-                        Dt_Task_Hty task_Hty = _mapper.Map<Dt_Task_Hty>(task);
-                        task_Hty.TaskId = 0;
-
-                        BaseDal.DeleteData(task);
-                        _taskHtyRepository.AddData(task_Hty);
+                        BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐瀹屾垚 : OperateTypeEnum.鑷姩瀹屾垚);
                     }
-                }
-                else if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.InboundGroup)
-                {
-                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
-                    task.TaskState = nextStatus;
-
-                    
                 }
                 else
                 {
@@ -273,7 +257,7 @@
             {
                 var task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                 if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�");
-                if (task.TaskState != (int)TaskInStatusEnum.InPending && task.TaskState != (int)TaskOutStatusEnum.OutPending)
+                if (task.TaskState != (int)TaskAGVCarryStatusEnum.AGV_CarryException && task.TaskState != (int)TaskAGVCarryStatusEnum.AGV_CarryException)
                 {
                     return content = WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙仮澶�,浠诲姟鍙�:銆恵taskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskState}銆�");
                 }
@@ -285,14 +269,7 @@
                 }
                 else
                 {
-                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
-                    {
-                        task.TaskState = (int)TaskOutStatusEnum.OutNew;
-                    }
-                    else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
-                    {
-                        task.TaskState = (int)TaskInStatusEnum.InNew;
-                    }
+                    throw new Exception($"鏈壘鍒颁换鍔″彿{taskNum}鎭㈠鐘舵��");
                 }
 
                 task.ExceptionMessage = string.Empty;
@@ -379,5 +356,122 @@
 
 
         #endregion 閲嶅啓鏂规硶
+
+        /// <summary>
+        /// 鏇存柊浠诲姟淇℃伅鍙婃坊鍔犱换鍔℃槑缁嗚褰�
+        /// </summary>
+        /// <param name="task">浠诲姟鍘熷璞″疄渚�(鏈慨鏀圭殑鏁版嵁瀵硅薄)</param>
+        /// <param name="taskStatus">淇敼鍚庣殑浠诲姟鐘舵��</param>
+        /// <param name="deviceCode">淇敼鍚庣殑璁惧缂栧彿</param>
+        /// <param name="sourceAddress">淇敼鍚庣殑璧峰鍦板潃</param>
+        /// <param name="targetAddress">淇敼鍚庣殑鐩爣鍦板潃</param>
+        /// <param name="currentAddress">淇敼鍚庣殑褰撳墠鍦板潃</param>
+        /// <param name="nextAddress">淇敼鍚庣殑涓嬩竴鍦板潃</param>
+        public void UpdateTask(Dt_Task task, TaskAGVCarryStatusEnum taskStatus, string deviceCode = "", string sourceAddress = "", string targetAddress = "", string currentAddress = "", string nextAddress = "", string roadwayNo = "")
+        {
+            StringBuilder stringBuilder = new StringBuilder(App.User?.UserId == 0 ? $"绯荤粺鑷姩娴佺▼" : "浜哄伐鎵嬪姩娴佺▼");
+            if (task.SourceAddress != sourceAddress && !string.IsNullOrEmpty(sourceAddress))
+            {
+                stringBuilder.Append($",璧峰鍦板潃鐢眥task.SourceAddress}鍙樻洿涓簕sourceAddress}");
+                task.SourceAddress = sourceAddress;
+            }
+            if (task.TargetAddress != targetAddress && !string.IsNullOrEmpty(targetAddress))
+            {
+                stringBuilder.Append($",鐩爣鍦板潃鐢眥task.TargetAddress}鍙樻洿涓簕targetAddress}");
+                task.TargetAddress = targetAddress;
+            }
+            if (task.CurrentAddress != currentAddress && !string.IsNullOrEmpty(currentAddress))
+            {
+                stringBuilder.Append($",褰撳墠浣嶇疆鐢眥task.CurrentAddress}鍙樻洿涓簕currentAddress}");
+                task.CurrentAddress = currentAddress;
+            }
+            if (task.NextAddress != nextAddress && !string.IsNullOrEmpty(nextAddress))
+            {
+                stringBuilder.Append($",涓嬩竴浣嶇疆鐢眥task.NextAddress}鍙樻洿涓簕nextAddress}");
+                task.NextAddress = nextAddress;
+            }
+            if (task.Roadway != roadwayNo && !string.IsNullOrEmpty(roadwayNo))
+            {
+                stringBuilder.Append($",宸烽亾鍙风敱{task.Roadway}鍙樻洿涓簕roadwayNo}");
+                task.Roadway = roadwayNo;
+            }
+            if (task.TaskState != taskStatus.ObjToInt())
+            {
+                string newStatus = $"{taskStatus}";
+                try
+                {
+                    List<int> enums = Enum.GetValues(typeof(TaskAGVCarryStatusEnum)).Cast<int>().ToList();
+                    FieldInfo? fieldInfo = typeof(TaskAGVCarryStatusEnum).GetField((taskStatus).ToString());
+                    if (fieldInfo != null)
+                    {
+                        DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                        if (description != null)
+                        {
+                            newStatus = $"{description.Description}({taskStatus})";
+                        }
+                    }
+                }
+                catch { }
+                string oldStatus = $"{task.TaskState}";
+                try
+                {
+                    FieldInfo? fieldInfo2 = typeof(RouterInOutType).GetField(((TaskAGVCarryStatusEnum)task.TaskState).ToString());
+                    if (fieldInfo2 != null)
+                    {
+                        DescriptionAttribute? description2 = fieldInfo2.GetCustomAttribute<DescriptionAttribute>();
+                        if (description2 != null)
+                        {
+                            oldStatus = $"{description2.Description}({task.TaskState})";
+                        }
+                    }
+                }
+                catch { }
+                stringBuilder.Append($",浠诲姟鐘舵�佺敱{oldStatus}鍙樻洿涓簕newStatus}");
+
+                task.TaskState = taskStatus.ObjToInt();
+            }
+            BaseDal.UpdateData(task);
+            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, stringBuilder.ToString());
+        }
+
+        // 鍦ㄧ被涓坊鍔犻潤鎬侀攣瀵硅薄
+        private static readonly object _taskCompleteLock = new object();
+
+        /// <summary>
+        /// 浠诲姟瀹屾垚
+        /// </summary>
+        /// <param name="taskNum"></param>
+        /// <returns></returns>
+        public WebResponseContent TaskCompleted(int taskNum)
+        {
+            WebResponseContent content = new WebResponseContent();
+
+            // 浣跨敤閿佺‘淇濆悓涓�浠诲姟涓嶄細骞跺彂澶勭悊
+            lock (_taskCompleteLock)
+            {
+                try
+                {
+                    WriteLog.Write_Log("浠诲姟瀹屾垚", "浠诲姟瀹屾垚鎺ュ彛", "浠诲姟鍙�", $"浠诲姟锛歿taskNum}");
+
+                    // 鍐嶆鏌ヨ浠诲姟鐘舵�侊紝闃叉鍦ㄩ攣绛夊緟鏈熼棿浠诲姟鐘舵�佸凡鏀瑰彉
+                    Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
+                    if (task == null)
+                    {
+                        return content.Error($"浠诲姟{taskNum}涓嶅瓨鍦�");
+                    }
+                    //浠诲姟瀹屾垚閫昏緫
+                    _unitOfWorkManage.BeginTran();
+
+                    _unitOfWorkManage.CommitTran();
+                    content.OK("浠诲姟瀹屾垚");
+                }
+                catch (Exception ex)
+                {
+                    _unitOfWorkManage.RollbackTran();
+                    content.Error(ex.Message);
+                }
+                return content;
+            }
+        }
     }
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Tasks/AGV/CommonAGVJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Tasks/AGV/CommonAGVJob.cs"
index 110d9cc..4b89083 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Tasks/AGV/CommonAGVJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WCSServer/WIDESEAWCS_Tasks/AGV/CommonAGVJob.cs"
@@ -10,12 +10,15 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_Common.Log;
 using WIDESEAWCS_Common;
+using WIDESEAWCS_Common.APIEnum;
 using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_DTO.Agv;
 using WIDESEAWCS_DTO.TaskInfo;
-using WIDESEAWCS_DTO.WMS;
+using WIDESEAWCS_IBasicInfoRepository;
 using WIDESEAWCS_ISystemServices;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
@@ -30,15 +33,87 @@
         private readonly ITaskRepository _taskRepository;
         private readonly ITaskService _taskService;
         private readonly ISys_ConfigService _sys_ConfigService;
-        public CommonAGVJob(ITaskRepository taskRepository,ITaskService taskService,ISys_ConfigService configService) 
+        private readonly IDt_StationManagerRepository _stationManagerRepository;
+        public CommonAGVJob(ITaskRepository taskRepository,ITaskService taskService,ISys_ConfigService configService,IDt_StationManagerRepository stationManagerRepository) 
         {
             _taskRepository = taskRepository;
             _taskService = taskService;
             _sys_ConfigService = configService;
+            _stationManagerRepository = stationManagerRepository;
         }
 
         public Task Execute(IJobExecutionContext context)
         {
+            var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => (x.TaskState == TaskAGVCarryStatusEnum.AGV_CarryNew.ObjToInt())).ToList().OrderBy(x => x.Grade).ThenBy(x => x.TaskNum).ToList();
+            #region 浠诲姟涓嬪彂
+            if (newTasks.Count > 0)
+            {
+                WriteLog.Write_Log("AGV浠诲姟涓嬪彂", "浠诲姟涓嬪彂鎺ュ彛", "娣诲姞浠诲姟", $"浠诲姟锛歿newTasks.ToJson()}");
+                try
+                {
+                    AgvTaskSendDTO agvTaskSend = new AgvTaskSendDTO()
+                    {
+                        MissionData = new List<MissionDataItem>()
+                    };
+                    string taskGroupId = Guid.NewGuid().ToString().Replace("-", "");
+
+                    foreach (var task in newTasks)
+                    {
+                        //鑾峰彇鐩爣鐐硅揣浣�
+                        Dt_StationManager stationManagerStart = _stationManagerRepository.QueryFirst(x => x.stationLocation == task.CurrentAddress);
+                        //鑾峰彇鎷i�夊嚭搴撶珯鍙�
+                        Dt_StationManager stationManagerEnd = _stationManagerRepository.QueryFirst(x => x.stationLocation == task.NextAddress);
+
+                        if (stationManagerStart == null || stationManagerStart == null) throw new Exception($"鏈壘鍒颁换鍔″彿${task.TaskNum}璧峰鐐箋task.CurrentAddress}鎴栫洰鏍囩偣{task.NextAddress}浣嶇疆淇℃伅");
+                        agvTaskSend.RequestId = taskGroupId;
+                        agvTaskSend.MissionCode = task.TaskNum.ToString();
+                        agvTaskSend.ViewBoardType = "W01";
+                        //鏂欑瀛愭惉杩愪换鍔�
+                        MissionDataItem missionDataItem = new MissionDataItem()
+                        {
+                            Sequence = task.TaskNum,
+                            BinCode = task.PalletCode,
+                            StartPosition = stationManagerStart.stationLocation,
+                            EndPosition = stationManagerEnd.stationLocation,
+                            TakeActionConfirm = false,
+                            TakeActionInform = false,
+                            PutActionConfirm = true,
+                            PutActionInform = true,
+                        };
+                        agvTaskSend.MissionData.Add(missionDataItem);
+                    }
+                    if (newTasks.OrderByDescending(x => x.Grade).FirstOrDefault()?.Grade == 0)
+                    {
+                        agvTaskSend.Priority = 99;
+                    }
+                    else
+                    {
+                        agvTaskSend.Priority = 99 - newTasks.OrderByDescending(x => x.Grade).FirstOrDefault().Grade;
+                    }
+                    //鍙戦�丄GV浠诲姟
+                    WebResponseContent content = _taskService.AgvSendTask(agvTaskSend, APIEnum.AgvSendTask);
+                    if (!content.Status)
+                        throw new Exception(content.Message);
+                    newTasks.ForEach(x =>
+                    {
+                        x.Dispatchertime = DateTime.Now;
+                        x.TaskState = TaskAGVCarryStatusEnum.AGV_CarryExecuting.ObjToInt();
+                    });
+                    _taskService.UpdateData(newTasks);
+                    Thread.Sleep(500);
+                }
+                catch (Exception ex)
+                {
+                    newTasks.ForEach(x =>
+                    {
+                        x.TaskState = TaskAGVCarryStatusEnum.AGV_CarryException.ObjToInt();
+                        x.ExceptionMessage = ex.Message;
+                    });
+                    _taskService.UpdateData(newTasks);
+                }
+
+            }
+            #endregion
             return Task.CompletedTask;
         }
 

--
Gitblit v1.9.3