From f723c6e9087a2110a28572543c7cfd9104e2a4ed Mon Sep 17 00:00:00 2001
From: hutongqing <hutongqing@hnkhzn.com>
Date: 星期一, 23 十二月 2024 20:52:58 +0800
Subject: [PATCH] 1

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs                                     |    4 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs                  |  102 -----
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/测试架仓/GroundStationJob_CSJ.cs                                     |   93 ++++
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs                                       |    8 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_CSJ.cs            |   24 +
 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/c6122441-2f23-4566-894d-2438c126bfa0.vsidx |    0 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Task/WMSTaskDTO.cs                                                    |    1 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/Dt_ApiInfo.cs                                   |    6 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/油墨仓/StackerCraneJob_YM.cs                                        |  101 +---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs                                 |  100 +++++
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs                                    |    4 
 代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/b38bf002-812b-4b12-b991-24b69f011aa6.vsidx |    0 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs                                             |   14 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGVController.cs                                    |    2 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/油墨仓/CommonHoisterJob.cs                                          |   57 --
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs                                          |   11 
 代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/1030e901-57d8-49d3-8577-b4454b655f2c.vsidx |    0 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs                                         |   95 ++--
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/WIDESEAWCS_Model.csproj                                          |    2 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP仓/StackerCraneJob_PP.cs                                        |    2 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs                         |    4 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs                        |   55 ++
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs                                      |   32 -
 代码管理/WMS/WIDESEA_WMSClient/src/extension/basic/warehouse.js                                                  |   10 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs                          |    6 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/DBNames/GroundStationDBName.cs                                   |    2 
 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e8a69a95-d256-4664-a68b-3579d7c901f3.vsidx |    0 
 /dev/null                                                                                                    |    0 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/干膜仓/StackerCraneJob_GM.cs                                        |    3 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs                                      |  118 ++----
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/板材仓/StackerCraneJob_BC.cs                                        |    2 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/阻焊仓/StackerCraneJob_ZH.cs                                        |    2 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs                                        |   71 +--
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/StationTypeEnum.cs                                              |   15 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/测试架仓/StackerCraneJob_CSJ.cs                                      |   57 ++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs                                     |   15 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs                            |  118 ++---
 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/7ab5e54f-e15f-4070-8b63-2b0d6e70b364.vsidx |    0 
 38 files changed, 631 insertions(+), 505 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/00a56665-6752-4d06-b9b6-0852d20709ee.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/00a56665-6752-4d06-b9b6-0852d20709ee.vsidx"
deleted file mode 100644
index 6913cde..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/00a56665-6752-4d06-b9b6-0852d20709ee.vsidx"
+++ /dev/null
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/1030e901-57d8-49d3-8577-b4454b655f2c.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/1030e901-57d8-49d3-8577-b4454b655f2c.vsidx"
new file mode 100644
index 0000000..8b56de7
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/1030e901-57d8-49d3-8577-b4454b655f2c.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/46d6cd41-4a65-4d05-9f72-66a9e3980a0c.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/46d6cd41-4a65-4d05-9f72-66a9e3980a0c.vsidx"
deleted file mode 100644
index cd5b5c7..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/46d6cd41-4a65-4d05-9f72-66a9e3980a0c.vsidx"
+++ /dev/null
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/7a005823-c1a7-4703-9472-7a90323886f9.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/7a005823-c1a7-4703-9472-7a90323886f9.vsidx"
deleted file mode 100644
index 2e70448..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/7a005823-c1a7-4703-9472-7a90323886f9.vsidx"
+++ /dev/null
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/b38bf002-812b-4b12-b991-24b69f011aa6.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/b38bf002-812b-4b12-b991-24b69f011aa6.vsidx"
new file mode 100644
index 0000000..39180e0
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/b38bf002-812b-4b12-b991-24b69f011aa6.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/read.lock" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/read.lock"
deleted file mode 100644
index e69de29..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/read.lock"
+++ /dev/null
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/StationTypeEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/StationTypeEnum.cs"
new file mode 100644
index 0000000..a29ca87
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/StationTypeEnum.cs"
@@ -0,0 +1,15 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_Common
+{
+    public enum StationTypeEnum
+    {
+        StationType_OnlyInbound = 1,
+        StationType_OnlyOutbound = 2,
+        StationType_InboundAndOutbound = 3
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs"
index 98a8147..004a523 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs"
@@ -18,45 +18,21 @@
 
         public static TaskTypeGroup GetTaskTypeGroup(this int taskType)
         {
-            if (!int.TryParse(Enum.Parse<TaskOutboundTypeEnum>(taskType.ToString()).ToString(), out int result))
+            if (taskType >= 500 && taskType < 900)
             {
                 return TaskTypeGroup.OutbondGroup;
             }
-            else if (!int.TryParse(Enum.Parse<TaskInStatusEnum>(taskType.ToString()).ToString(), out result))
+            else if (taskType >= 100 && taskType < 500)
             {
                 return TaskTypeGroup.InboundGroup;
             }
-            else if (!int.TryParse(Enum.Parse<TaskRelocationTypeEnum>(taskType.ToString()).ToString(), out result))
+            else if (taskType >= 900 && taskType < 1000)
             {
                 return TaskTypeGroup.RelocationGroup;
             }
-            else if (!int.TryParse(Enum.Parse<TaskOtherTypeEnum>(taskType.ToString()).ToString(), out result))
+            else
             {
                 return TaskTypeGroup.OtherGroup;
-            }
-            else
-            {
-                throw new NotImplementedException();
-            }
-        }
-
-        public static int GetNextNotCompletedStatus<T>(this int currentStatus) where T : Enum
-        {
-            Type type = typeof(T);
-            if (type is null) throw new ArgumentNullException();
-            if (!type.IsEnum) return 0;
-            if (type == typeof(TaskInStatusEnum))
-            {
-                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
-            {
-                throw new NotImplementedException();
             }
         }
     }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
index efd2b07..8424dd8 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
@@ -10,108 +10,72 @@
     /// <summary>
     /// 鍏ュ簱浠诲姟鐘舵��
     /// </summary>
-    public enum TaskInStatusEnum
-    {
-        /// <summary>
-        /// 鏂板缓鍏ュ簱浠诲姟
-        /// </summary>
-        [Description("鏂板缓")]
-        InNew = 200,
-
-        /// <summary>
-        /// 鍫嗗灈鏈哄叆搴撳緟鎵ц
-        /// </summary>
-        [Description("鍫嗗灈鏈哄叆搴撳緟鎵ц")]
-        SC_InExecute = 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,
-    }
-
-    /// <summary>
-    /// 鍑哄簱浠诲姟鐘舵��
-    /// </summary>
-    public enum TaskOutStatusEnum
+    public enum TaskStatusEnum
     {
         /// <summary>
         /// 鏂板缓浠诲姟
         /// </summary>
         [Description("鏂板缓")]
-        OutNew = 100,
+        New = 100,
 
         /// <summary>
-        /// 鍫嗗灈鏈哄嚭搴撳緟鎵ц
+        /// 鍫嗗灈鏈哄緟鎵ц
         /// </summary>
-        [Description("鍫嗗灈鏈哄嚭搴撳緟鎵ц")]
-        SC_OutExecute = 125,
+        [Description("鍫嗗灈鏈哄緟鎵ц")]
+        SC_Execute = 200,
 
         /// <summary>
-        /// 鍫嗗灈鏈哄嚭搴撴墽琛屼腑
+        /// 鍫嗗灈鏈烘墽琛屼腑
         /// </summary>
-        [Description("鍫嗗灈鏈哄嚭搴撴墽琛屼腑")]
-        SC_OutExecuting = 130,
+        [Description("鍫嗗灈鏈烘墽琛屼腑")]
+        SC_Executing = 210,
 
         /// <summary>
-        /// 鍫嗗灈鏈哄嚭搴撳畬鎴�
+        /// 鍫嗗灈鏈哄畬鎴�
         /// </summary>
-        [Description("鍫嗗灈鏈哄嚭搴撳畬鎴�")]
-        SC_OutFinish = 135,
+        [Description("鍫嗗灈鏈哄畬鎴�")]
+        SC_Finish = 220,
 
         /// <summary>
-        /// 鍑哄簱浠诲姟瀹屾垚
+        /// AGV寰呮墽琛�
         /// </summary>
-        [Description("鍑哄簱浠诲姟瀹屾垚")]
-        OutFinish = 190,
+        [Description("AGV寰呮墽琛�")]
+        AGV_Execute = 300,
 
         /// <summary>
-        /// 鍑哄簱浠诲姟鎸傝捣
+        /// AGV鎵ц涓�
         /// </summary>
-        [Description("鍑哄簱浠诲姟鎸傝捣")]
-        OutPending = 197,
+        [Description("AGV鎵ц涓�")]
+        AGV_Executing = 310,
 
         /// <summary>
-        /// 鍑哄簱浠诲姟鍙栨秷
+        /// AGV瀹屾垚
         /// </summary>
-        [Description("鍑哄簱浠诲姟鍙栨秷")]
-        OutCancel = 198,
+        [Description("AGV瀹屾垚")]
+        AGV_Finish = 320,
 
         /// <summary>
-        /// 鍑哄簱浠诲姟寮傚父
+        /// 浠诲姟瀹屾垚
         /// </summary>
-        [Description("鍑哄簱浠诲姟寮傚父")]
-        OutException = 199,
+        [Description("浠诲姟瀹屾垚")]
+        Finish = 900,
+
+        /// <summary>
+        /// 浠诲姟鎸傝捣
+        /// </summary>
+        [Description("浠诲姟鎸傝捣")]
+        Pending = 970,
+
+        /// <summary>
+        /// 浠诲姟鍙栨秷
+        /// </summary>
+        [Description("浠诲姟鍙栨秷")]
+        Cancel = 980,
+
+        /// <summary>
+        /// 浠诲姟寮傚父
+        /// </summary>
+        [Description("浠诲姟寮傚父")]
+        Exception = 990,
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
index 33dfdfc..6401cc0 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
@@ -7,70 +7,55 @@
 
 namespace WIDESEAWCS_Common.TaskEnum
 {
-    public enum TaskInboundTypeEnum
+    public enum TaskTypeEnum
     {
         /// <summary>
-        /// 鍏ュ簱
+        /// 棰嗘枡鍑哄簱
         /// </summary>
-        [Description("鍏ュ簱")]
-        Inbound = 200,
-        /// <summary>
-        /// 鐩樼偣鍏ュ簱
-        /// </summary>
-        [Description("鐩樼偣鍏ュ簱")]
-        InInventory = 201,
-        /// <summary>
-        /// 鍒嗘嫞鍏ュ簱
-        /// </summary>
-        [Description("鍒嗘嫞鍏ュ簱")]
-        InPick = 202,
-        /// <summary>
-        /// 璐ㄦ鍏ュ簱
-        /// </summary>
-        [Description("璐ㄦ鍏ュ簱")]
-        InQuality = 203
-    }
-
-    public enum TaskOutboundTypeEnum
-    {
-        /// <summary>
-        /// 鍑哄簱
-        /// </summary>
-        [Description("鍑哄簱")]
+        [Description("棰嗘枡鍑哄簱")]
         Outbound = 100,
         /// <summary>
         /// 鐩樼偣鍑哄簱
         /// </summary>
         [Description("鐩樼偣鍑哄簱")]
-        OutInventory = 101,
+        OutInventory = 110,
         /// <summary>
         /// 鍒嗘嫞鍑哄簱
         /// </summary>
         [Description("鍒嗘嫞鍑哄簱")]
-        OutPick = 102,
+        OutPick = 120,
         /// <summary>
         /// 璐ㄦ鍑哄簱
         /// </summary>
         [Description("璐ㄦ鍑哄簱")]
-        OutQuality = 103,
-    }
+        OutQuality = 130,
 
-    public enum TaskRelocationTypeEnum
-    {
         /// <summary>
-        /// 搴撳唴绉诲簱
+        /// 閲囪喘鍏ュ簱
         /// </summary>
-        [Description("搴撳唴绉诲簱")]
-        Relocation = 300,
+        [Description("閲囪喘鍏ュ簱")]
+        Inbound = 510,
         /// <summary>
-        /// 搴撳绉诲簱
+        /// 鐩樼偣鍏ュ簱
         /// </summary>
-        [Description("搴撳绉诲簱")]
-        RelocationIn = 301
+        [Description("鐩樼偣鍏ュ簱")]
+        InInventory = 520,
+        /// <summary>
+        /// 鍒嗘嫞鍏ュ簱
+        /// </summary>
+        [Description("鍒嗘嫞鍏ュ簱")]
+        InPick = 530,
+        /// <summary>
+        /// 璐ㄦ鍏ュ簱
+        /// </summary>
+        [Description("璐ㄦ鍏ュ簱")]
+        InQuality = 540,
+
+        /// <summary>
+        /// 宸烽亾鍐呯Щ搴�
+        /// </summary>
+        [Description("宸烽亾鍐呯Щ搴�")]
+        Relocation = 900
     }
 
-    public enum TaskOtherTypeEnum
-    {
-
-    }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs"
index 5844ddd..ff58ac3 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs"
@@ -11,17 +11,17 @@
         /// <summary>
         /// WMS浠诲姟涓婚敭
         /// </summary>
-        public int Id {  get; set; }
+        public int Id { get; set; }
 
         /// <summary>
         /// 浠诲姟鍙�
         /// </summary>
-        public int TaskNum {  get; set; }
+        public int TaskNum { get; set; }
 
         /// <summary>
         /// 鎵樼洏鍙�
         /// </summary>
-        public string PalletCode {  get; set; }
+        public string PalletCode { get; set; }
 
         /// <summary>
         /// 宸烽亾鍙�
@@ -31,7 +31,7 @@
         /// <summary>
         /// 浠诲姟绫诲瀷
         /// </summary>
-        public int TaskType {  get; set; }
+        public int TaskType { get; set; }
 
         /// <summary>
         /// 浠诲姟鐘舵��
@@ -41,16 +41,16 @@
         /// <summary>
         /// 璧风偣
         /// </summary>
-        public string SourceAddress {  get; set; }
+        public string SourceAddress { get; set; }
 
         /// <summary>
         /// 缁堢偣
         /// </summary>
-        public string TargetAddress {  get; set; }
+        public string TargetAddress { get; set; }
 
         /// <summary>
         /// 浼樺厛绾�
         /// </summary>
-        public int Grade {  get; set; }
+        public int Grade { get; set; }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
index 6b97c18..0fa1d52 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
@@ -47,7 +47,7 @@
         /// <summary>
         /// 鎵�鏈夊嚭搴撲换鍔$被鍨�
         /// </summary>
-        public List<int> TaskOutboundTypes {  get; }
+        public List<int> TaskOutboundTypes { get; }
 
         /// <summary>
         /// 鎺ユ敹WMS浠诲姟淇℃伅
@@ -64,6 +64,12 @@
         /// <returns></returns>
         WebResponseContent RequestWMSTask(string palletCode, string sourceAddress);
 
+        /// <summary>
+        /// 鍚慦MS鐢宠鍒嗛厤璐т綅
+        /// </summary>
+        /// <param name="taskNum">浠诲姟鍙�</param>
+        /// <param name="roadwayNo">宸烽亾鍙�</param>
+        /// <returns></returns>
         string? RequestAssignLocation(int taskNum, string roadwayNo);
 
         /// <summary>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/Dt_ApiInfo.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/Dt_ApiInfo.cs"
index a2ab325..4e043be 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/Dt_ApiInfo.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/BasicInfo/Dt_ApiInfo.cs"
@@ -16,21 +16,25 @@
         /// </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 = true, Length = 200, ColumnDescription = "鎺ュ彛鍦板潃")]
+        [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "鎺ュ彛鍦板潃")]
         public string ApiAddress { get; set; }
+
         /// <summary>
         /// 澶囨敞
         /// </summary>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskFlowConfig/Dt_TaskFlow.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskFlowConfig/Dt_TaskFlow.cs"
deleted file mode 100644
index 4ba8898..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskFlowConfig/Dt_TaskFlow.cs"
+++ /dev/null
@@ -1,20 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using WIDESEAWCS_Core.DB.Models;
-
-namespace WIDESEAWCS_Model.Models.TaskFlowConfig
-{
-    public class Dt_TaskFlow : BaseEntity
-    {
-        public int TaskFlowId { get; set; }
-
-        public int TaskTypeId { get; set; }
-
-        public string TaskFlowName { get; set; }
-
-        public string TaskFlowDescription { get; set; }
-    }
-}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskFlowConfig/Dt_TaskFlowStep.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskFlowConfig/Dt_TaskFlowStep.cs"
deleted file mode 100644
index d08789b..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskFlowConfig/Dt_TaskFlowStep.cs"
+++ /dev/null
@@ -1,20 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using WIDESEAWCS_Core.DB.Models;
-
-namespace WIDESEAWCS_Model.Models.TaskFlowConfig
-{
-    public class Dt_TaskFlowStep : BaseEntity
-    {
-        public int StepId { get; set; }
-
-        public int TaskFlowId { get; set; }
-
-        public int NextStepId { get; set; }
-
-        public int SequenceOrder { get; set; }
-    }
-}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskFlowConfig/Dt_TaskType.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskFlowConfig/Dt_TaskType.cs"
deleted file mode 100644
index 44f9f41..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskFlowConfig/Dt_TaskType.cs"
+++ /dev/null
@@ -1,21 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using WIDESEAWCS_Core.DB.Models;
-
-namespace WIDESEAWCS_Model.Models.TaskFlowConfig
-{
-    
-    public class Dt_TaskType : BaseEntity
-    {
-        public int TaskTypeId { get; set; }
-
-        public string TaskType { get; set; }
-
-        public string TaskTypeName { get; set; }
-
-        public string TaskTypeDescription { get; set; }
-    }
-}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/WIDESEAWCS_Model.csproj" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/WIDESEAWCS_Model.csproj"
index e4e80a5..1894ea5 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/WIDESEAWCS_Model.csproj"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/WIDESEAWCS_Model.csproj"
@@ -8,7 +8,7 @@
 
 	<ItemGroup>
 		<PackageReference Include="System.Text.RegularExpressions" Version="4.3.1" />
-		<PackageReference Include="WIDESEAWCS_Core" Version="1.0.9" />
+		<PackageReference Include="WIDESEAWCS_Core" Version="1.0.10" />
 	</ItemGroup>
 
 	<ItemGroup>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGVController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGVController.cs"
index 683857f..bf814b7 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGVController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGVController.cs"
@@ -5,7 +5,7 @@
 using WIDESEAWCS_IBasicInfoRepository;
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_QuartzJob;
-using WIDESEAWCS_Tasks.闃荤剨浠�;
+using WIDESEAWCS_Tasks;
 
 namespace WIDESEAWCS_Server.Controllers
 {
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs"
index 4af342e..e47a9bd 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs"
@@ -175,80 +175,14 @@
                         {
                             List<object> data = new List<object>();
 
-                            #region TaskInboundTypeEnum
+                            #region TaskTypeEnum
                             {
-                                Type type = typeof(TaskInboundTypeEnum);
-                                List<int> enums = Enum.GetValues(typeof(TaskInboundTypeEnum)).Cast<int>().ToList();
+                                Type type = typeof(TaskTypeEnum);
+                                List<int> enums = Enum.GetValues(typeof(TaskTypeEnum)).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());
+                                    FieldInfo? fieldInfo = typeof(TaskTypeEnum).GetField(((TaskTypeEnum)item).ToString());
                                     DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                     if (description != null)
                                     {
@@ -272,34 +206,12 @@
 
                             #region TaskInStatusEnum
                             {
-                                Type type = typeof(TaskInStatusEnum);
-                                List<int> enums = Enum.GetValues(typeof(TaskInStatusEnum)).Cast<int>().ToList();
+                                Type type = typeof(TaskStatusEnum);
+                                List<int> enums = Enum.GetValues(typeof(TaskStatusEnum)).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());
+                                    FieldInfo? fieldInfo = typeof(TaskStatusEnum).GetField(((TaskStatusEnum)item).ToString());
                                     DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                     if (description != null)
                                     {
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs"
index fa13d12..18b5cc0 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs"
@@ -25,8 +25,8 @@
             {
                 string apiAddress = AppSettings.Get(APIEnum.AgvSendTask.ToString());
                 string response = HttpHelper.Post(apiAddress, taskModel.Serialize());
-                AgvResponseContent agvContent= response.DeserializeObject<AgvResponseContent>();
-                if (agvContent.Code=="200")
+                AgvResponseContent agvContent = response.DeserializeObject<AgvResponseContent>();
+                if (agvContent.Code == "200")
                 {
                     content.OK(agvContent.Message);
                 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs"
index 9d23f8a..b018095 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs"
@@ -51,15 +51,9 @@
                 int taskNum = task.TaskNum;
                 int taskState = task.TaskState;
 
-                if (!int.TryParse(Enum.Parse<TaskOutStatusEnum>(taskState.ToString()).ToString(), out int result))
+                if(taskState > (int)TaskStatusEnum.Finish)
                 {
-                    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;
+                    isNormal = false;
                 }
                 Dt_TaskExecuteDetail taskExecuteDetail = new()
                 {
@@ -93,15 +87,9 @@
                     int taskNum = task.TaskNum;
                     int taskState = task.TaskState;
 
-                    if (!int.TryParse(Enum.Parse<TaskOutStatusEnum>(taskState.ToString()).ToString(), out int result))
+                    if (taskState > (int)TaskStatusEnum.Finish)
                     {
-                        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;
+                        isNormal = false;
                     }
                     Dt_TaskExecuteDetail taskExecuteDetail = new()
                     {
@@ -137,57 +125,57 @@
                 if (task != null)
                 {
 
-                    if (!int.TryParse(Enum.Parse<TaskOutboundTypeEnum>(task.TaskType.ToString()).ToString(), out int result))
-                    {
-                        steps = Enum.GetValues(typeof(TaskOutStatusEnum)).Cast<int>().Where(x => x <= (int)TaskOutStatusEnum.OutFinish).ToList();
+                    //if (!int.TryParse(Enum.Parse<TaskOutboundTypeEnum>(task.TaskType.ToString()).ToString(), out int result))
+                    //{
+                    //    steps = Enum.GetValues(typeof(TaskOutStatusEnum)).Cast<int>().Where(x => x <= (int)TaskOutStatusEnum.OutFinish).ToList();
 
-                        foreach (var item in steps)
-                        {
-                            object obj;
-                            FieldInfo? fieldInfo = typeof(TaskOutStatusEnum).GetField(((TaskOutStatusEnum)item).ToString());
-                            DescriptionAttribute? descriptionAttribute = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
-                            if (descriptionAttribute != null)
-                            {
-                                obj = new { title = item, description = descriptionAttribute.Description };
-                            }
-                            else
-                            {
-                                obj = new { title = item, description = ((TaskOutStatusEnum)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))
-                    {
+                    //    foreach (var item in steps)
+                    //    {
+                    //        object obj;
+                    //        FieldInfo? fieldInfo = typeof(TaskOutStatusEnum).GetField(((TaskOutStatusEnum)item).ToString());
+                    //        DescriptionAttribute? descriptionAttribute = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+                    //        if (descriptionAttribute != null)
+                    //        {
+                    //            obj = new { title = item, description = descriptionAttribute.Description };
+                    //        }
+                    //        else
+                    //        {
+                    //            obj = new { title = item, description = ((TaskOutStatusEnum)item).ToString() };
+                    //        }
+                    //        list.Add(obj);
+                    //    }
+                    //}
+                    //else if (!int.TryParse(Enum.Parse<TaskTypeEnum>(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
-                    {
-                        throw new Exception($"浠诲姟绫诲瀷閿欒,鏈壘鍒拌浠诲姟绫诲瀷,浠诲姟鍙�:銆恵taskNum}銆�,浠诲姟绫诲瀷:銆恵task.TaskType}銆�");
-                    }
+                    //}
+                    //else
+                    //{
+                    //    throw new Exception($"浠诲姟绫诲瀷閿欒,鏈壘鍒拌浠诲姟绫诲瀷,浠诲姟鍙�:銆恵taskNum}銆�,浠诲姟绫诲瀷:銆恵task.TaskType}銆�");
+                    //}
                     active = steps.IndexOf(task.TaskState) + 1;
 
                 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
index af188c5..d1dc670 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
@@ -33,6 +33,7 @@
 using WIDESEAWCS_Core.Enums;
 using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_IBasicInfoRepository;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Model.Models;
@@ -47,6 +48,7 @@
         private readonly ITaskExecuteDetailService _taskExecuteDetailService;
         private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository;
         private readonly IMapper _mapper;
+        private readonly IStationMangerRepository _stationMangerRepository;
 
         private Dictionary<string, OrderByType> _taskOrderBy = new()
             {
@@ -56,16 +58,17 @@
 
         public Dictionary<string, OrderByType> TaskOrderBy { get { return _taskOrderBy; } set { _taskOrderBy = value; } }
 
-        public List<int> TaskInboundTypes => typeof(TaskInboundTypeEnum).GetEnumIndexList();
+        public List<int> TaskInboundTypes => typeof(TaskTypeEnum).GetEnumIndexList().Where(x => x >= 100 && x < 500).ToList();
 
-        public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList();
+        public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList().Where(x => x >= 500 && x < 900).ToList();
 
-        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper) : base(BaseDal)
+        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, IStationMangerRepository stationMangerRepository) : base(BaseDal)
         {
             _routerService = routerService;
             _taskExecuteDetailService = taskExecuteDetailService;
             _taskExecuteDetailRepository = taskExecuteDetailRepository;
             _mapper = mapper;
+            _stationMangerRepository = stationMangerRepository;
         }
 
         /// <summary>
@@ -81,24 +84,17 @@
                 List<Dt_Task> tasks = new List<Dt_Task>();
                 foreach (var item in taskDTOs)
                 {
+                    
                     if (BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum || x.PalletCode == item.PalletCode) != null)
                     {
                         continue;
                     }
                     Dt_Task task = _mapper.Map<Dt_Task>(item);
                     task.Creater = "WMS";
-                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
-                    {
-                        task.TaskState = (int)TaskOutStatusEnum.OutNew;
-                        task.CurrentAddress = item.SourceAddress;
-                        task.NextAddress = item.TargetAddress;
+                    task.TaskState = (int)TaskStatusEnum.New;
+                    task.CurrentAddress = item.SourceAddress;
+                    task.NextAddress = item.TargetAddress;
 
-                    }
-                    else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
-                    {
-                        task.TaskState = (int)TaskInStatusEnum.InNew; task.CurrentAddress = item.SourceAddress;
-                        task.NextAddress = item.TargetAddress;
-                    }
                     tasks.Add(task);
                 }
                 BaseDal.AddData(tasks);
@@ -125,18 +121,15 @@
             WebResponseContent content = new WebResponseContent();
             try
             {
-                WMSTaskDTO taskDTO = new WMSTaskDTO()
+                Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationDeviceCode == sourceAddress);
+                if (stationManger == null)
                 {
-                    TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
-                    Grade = 1,
-                    PalletCode = palletCode,
-                    RoadWay = "SC01",
-                    SourceAddress = sourceAddress,
-                    TargetAddress = "SC01",
-                    TaskStatus = (int)TaskInStatusEnum.InNew,
-                    Id = 0,
-                    TaskType = (int)TaskInboundTypeEnum.Inbound
-                };
+                    return WebResponseContent.Instance.Error($"鏈壘鍒扮珯鍙颁俊鎭�");
+                }
+
+                HttpHelper.Post($"RequestInboundTask?palletCode={palletCode}&stationCode={sourceAddress}");
+
+                WMSTaskDTO taskDTO = new WMSTaskDTO();
 
                 content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
             }
@@ -147,6 +140,12 @@
             return content;
         }
 
+        /// <summary>
+        /// 鍚慦MS鐢宠鍒嗛厤璐т綅
+        /// </summary>
+        /// <param name="taskNum">浠诲姟鍙�</param>
+        /// <param name="roadwayNo">宸烽亾鍙�</param>
+        /// <returns></returns>
         public string? RequestAssignLocation(int taskNum, string roadwayNo)
         {
             string responseStr = HttpHelper.Get($"http://127.0.0.1:9293/api/Task/AssignInboundTaskLocation?taskNum={taskNum}&roadwayNo={roadwayNo}");
@@ -169,11 +168,11 @@
         public Dt_Task? QuertStackerCraneTask(string deviceNo, TaskTypeGroup? taskTypeGroup = null)
         {
             if (taskTypeGroup == null)
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InExecute || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
+                return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && x.TaskState == (int)TaskStatusEnum.New, TaskOrderBy);
             if (taskTypeGroup.Value == TaskTypeGroup.InboundGroup)
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InExecute, TaskOrderBy);
+                return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
             if (taskTypeGroup.Value == TaskTypeGroup.OutbondGroup)
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutExecute, TaskOrderBy);
+                return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
             return null;
         }
 
@@ -186,9 +185,9 @@
         public Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "")
         {
             if (string.IsNullOrEmpty(currentAddress))
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InExecute || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
+                return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && x.TaskState == (int)TaskStatusEnum.New, TaskOrderBy);
             else
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InExecute || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutExecute), TaskOrderBy);
+                return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && x.CurrentAddress == currentAddress && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
         }
 
         /// <summary>
@@ -200,9 +199,9 @@
         public Dt_Task QueryStackerCraneInTask(string deviceNo, string currentAddress = "")
         {
             if (string.IsNullOrEmpty(currentAddress))
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InExecute, TaskOrderBy);
+                return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
             else
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_InExecute && x.CurrentAddress == currentAddress, TaskOrderBy);
+                return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute && x.CurrentAddress == currentAddress, TaskOrderBy);
         }
 
         /// <summary>
@@ -214,9 +213,9 @@
         public Dt_Task QueryStackerCraneOutTask(string deviceNo, string currentAddress = "")
         {
             if (string.IsNullOrEmpty(currentAddress))
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutExecute, TaskOrderBy);
+                return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
             else
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutExecute && x.CurrentAddress == currentAddress, TaskOrderBy);
+                return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute && x.CurrentAddress == currentAddress, TaskOrderBy);
         }
 
         /// <summary>
@@ -227,9 +226,14 @@
         /// <returns>杩斿洖浠诲姟瀹炰綋瀵硅薄闆嗗悎锛屽彲鑳戒负null</returns>
         public List<Dt_Task> QueryStackerCraneOutTasks(string deviceNo, List<string> outStationCodes)
         {
-            return BaseDal.QueryData(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutExecute && outStationCodes.Contains(x.CurrentAddress), TaskOrderBy);
+            return BaseDal.QueryData(x => x.DeviceCode == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute && outStationCodes.Contains(x.CurrentAddress), TaskOrderBy);
         }
 
+        /// <summary>
+        /// 鏇存柊浠诲姟寮傚父淇℃伅鏄剧ず
+        /// </summary>
+        /// <param name="taskNum">浠诲姟鍙�</param>
+        /// <param name="message">寮傚父淇℃伅</param>
         public WebResponseContent UpdateTaskExceptionMessage(int taskNum, string message)
         {
             WebResponseContent content = new WebResponseContent();
@@ -237,14 +241,7 @@
             {
                 Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                 if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�");
-                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
-                {
-                    task.TaskState = (int)TaskOutStatusEnum.OutPending;
-                }
-                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
-                {
-                    task.TaskState = (int)TaskInStatusEnum.InPending;
-                }
+                task.TaskState = (int)TaskStatusEnum.Pending;
                 task.ExceptionMessage = message;
                 task.ModifyDate = DateTime.Now;
                 BaseDal.UpdateData(task);
@@ -272,7 +269,7 @@
             {
                 Dt_Task 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)TaskStatusEnum.Pending)
                 {
                     return content = WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙仮澶�,浠诲姟鍙�:銆恵taskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskState}銆�");
                 }
@@ -284,15 +281,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;
-                    }
-                    //todo
+                    task.TaskState = (int)TaskStatusEnum.New;
                 }
 
                 task.ExceptionMessage = string.Empty;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\351\230\273\347\204\212\344\273\223/GroundStationDBName.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/DBNames/GroundStationDBName.cs"
similarity index 96%
rename from "\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\351\230\273\347\204\212\344\273\223/GroundStationDBName.cs"
rename to "\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/DBNames/GroundStationDBName.cs"
index a310009..4b10952 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\351\230\273\347\204\212\344\273\223/GroundStationDBName.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/DBNames/GroundStationDBName.cs"
@@ -4,7 +4,7 @@
 using System.Text;
 using System.Threading.Tasks;
 
-namespace WIDESEAWCS_Tasks.闃荤剨浠�
+namespace WIDESEAWCS_Tasks
 {
     public enum GroundStationDBName
     {
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP\344\273\223/StackerCraneJob_PP.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP\344\273\223/StackerCraneJob_PP.cs"
index 2345f90..3da3cfd 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP\344\273\223/StackerCraneJob_PP.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP\344\273\223/StackerCraneJob_PP.cs"
@@ -166,7 +166,7 @@
         /// <returns>濡傛灉鏈鍗犵敤锛岃繑鍥炰紶鍏ョ殑浠诲姟淇℃伅锛屽惁鍒欙紝杩斿洖null</returns>
         private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
         {
-            Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.TargetAddress && x.StackerCraneCode == task.Roadway);
+            Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.TargetAddress && x.StackerCraneCode == task.DeviceCode);
             if (stationManger != null)
             {
                 IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
index 4d8b471..2b6d582 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
@@ -162,13 +162,13 @@
         /// <returns>濡傛灉鏈鍗犵敤锛岃繑鍥炰紶鍏ョ殑浠诲姟淇℃伅锛屽惁鍒欙紝杩斿洖null</returns>
         private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
         {
-            Dt_Router? router = _routerService.QueryNextRoutes(task.Roadway, task.NextAddress).FirstOrDefault();
+            Dt_Router? router = _routerService.QueryNextRoutes(task.DeviceCode, task.NextAddress).FirstOrDefault();
             if (router != null)
             {
                 IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == router.ChildPosiDeviceCode);
                 if (device != null)
                 {
-                    if (device.DeviceCode == "YMCTSJ" || task.Roadway == "CSJCSC01") return task;
+                    if (device.DeviceCode == "YMCTSJ" || task.DeviceCode == "CSJCSC01") return task;
                     CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
                     if (conveyorLine.IsOccupied(router.ChildPosi))//鍑哄簱绔欏彴鏈鍗犵敤
                     {
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\345\271\262\350\206\234\344\273\223/StackerCraneJob_GM.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\345\271\262\350\206\234\344\273\223/StackerCraneJob_GM.cs"
index 424425e..2c10b52 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\345\271\262\350\206\234\344\273\223/StackerCraneJob_GM.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\345\271\262\350\206\234\344\273\223/StackerCraneJob_GM.cs"
@@ -19,7 +19,6 @@
 using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
 using WIDESEAWCS_Tasks.HoisterJob;
 using WIDESEAWCS_Tasks.StackerCraneJob;
-using WIDESEAWCS_Tasks.闃荤剨浠�;
 
 namespace WIDESEAWCS_Tasks
 {
@@ -166,7 +165,7 @@
         /// <returns>濡傛灉鏈鍗犵敤锛岃繑鍥炰紶鍏ョ殑浠诲姟淇℃伅锛屽惁鍒欙紝杩斿洖null</returns>
         private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
         {
-            Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.TargetAddress && x.StackerCraneCode == task.Roadway);
+            Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.TargetAddress && x.StackerCraneCode == task.DeviceCode);
             if (stationManger != null)
             {
                 IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs"
index eba2492..7368d05 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs"
@@ -166,7 +166,7 @@
         /// <returns>濡傛灉鏈鍗犵敤锛岃繑鍥炰紶鍏ョ殑浠诲姟淇℃伅锛屽惁鍒欙紝杩斿洖null</returns>
         private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
         {
-            Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.TargetAddress && x.StackerCraneCode == task.Roadway);
+            Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.TargetAddress && x.StackerCraneCode == task.DeviceCode);
             if (stationManger != null)
             {
                 IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\262\271\345\242\250\344\273\223/CommonHoisterJob.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\262\271\345\242\250\344\273\223/CommonHoisterJob.cs"
index 6152060..62c0a55 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\262\271\345\242\250\344\273\223/CommonHoisterJob.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\262\271\345\242\250\344\273\223/CommonHoisterJob.cs"
@@ -64,7 +64,7 @@
 
                         if (leisure && tray && !requestIn && !inbounding && !requestOut && !outbounding)
                         {
-                            Dt_Task task = _taskRepository.QueryFirst(x => x.TaskState == TaskInStatusEnum.InNew.ObjToInt() && string.IsNullOrEmpty(x.TargetAddress) && x.SourceAddress == deviceChildCode);
+                            Dt_Task task = _taskRepository.QueryFirst(x => x.TaskState == TaskStatusEnum.New.ObjToInt() && string.IsNullOrEmpty(x.TargetAddress) && x.SourceAddress == deviceChildCode && _taskService.TaskInboundTypes.Contains(x.TaskType));
                             if (task != null)
                             {
                                 bool isWrite = hoister.SetValue(HoisterDBName.RequestIn, true, deviceChildCode);
@@ -73,7 +73,7 @@
                         }
                         else if (!leisure && tray && requestIn && inbounding && !requestOut && !outbounding)
                         {
-                            Dt_Task task = _taskRepository.QueryFirst(x => x.TaskState == TaskInStatusEnum.InNew.ObjToInt() && string.IsNullOrEmpty(x.TargetAddress) && x.SourceAddress == deviceChildCode);
+                            Dt_Task task = _taskRepository.QueryFirst(x => x.TaskState == TaskStatusEnum.New.ObjToInt() && string.IsNullOrEmpty(x.TargetAddress) && x.SourceAddress == deviceChildCode && _taskService.TaskInboundTypes.Contains(x.TaskType));
                             if (task != null)
                             {
                                 Dt_StationManger? stationManger = stationMangers.FirstOrDefault(x => x.StationDeviceCode == deviceChildCode);
@@ -91,8 +91,8 @@
 
                                 task.TargetAddress = locationCode;
                                 task.NextAddress = locationCode;
-                                task.Roadway = stationManger.StackerCraneCode;
-                                task.TaskState = TaskInStatusEnum.SC_InExecute.ObjToInt();
+                                task.DeviceCode = stationManger.StackerCraneCode;
+                                task.TaskState = TaskStatusEnum.SC_Execute.ObjToInt();
                                 _taskRepository.UpdateData(task);
 
                                 bool isWrite = hoister.SetValue(HoisterDBName.RequestIn, false, deviceChildCode);
@@ -104,7 +104,7 @@
                         }
                         else if (leisure && !tray && !requestIn && !inbounding && !requestOut && !outbounding)
                         {
-                            Dt_Task task = _taskRepository.QueryFirst(x => x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt() && string.IsNullOrEmpty(x.TargetAddress));
+                            Dt_Task task = _taskRepository.QueryFirst(x => x.TaskState == TaskStatusEnum.New.ObjToInt() && string.IsNullOrEmpty(x.TargetAddress) && _taskService.TaskOutboundTypes.Contains(x.TaskType));
                             if (task != null)
                             {
                                 bool isWrite = hoister.SetValue(HoisterDBName.RequestOut, true, deviceChildCode);
@@ -113,7 +113,7 @@
                         }
                         else if (!leisure && !tray && !requestIn && !inbounding && requestOut && outbounding)
                         {
-                            Dt_Task task = _taskRepository.QueryFirst(x => x.TaskState == TaskInStatusEnum.InNew.ObjToInt() && string.IsNullOrEmpty(x.TargetAddress) && x.SourceAddress == deviceChildCode);
+                            Dt_Task task = _taskRepository.QueryFirst(x => x.TaskState == TaskStatusEnum.New.ObjToInt() && string.IsNullOrEmpty(x.TargetAddress) && _taskService.TaskOutboundTypes.Contains(x.TaskType));
                             if (task != null)
                             {
                                 Dt_StationManger? stationManger = stationMangers.FirstOrDefault(x => x.StationDeviceCode == deviceChildCode);
@@ -125,8 +125,8 @@
 
                                 task.TargetAddress = deviceChildCode;
                                 task.NextAddress = deviceChildCode;
-                                task.Roadway = stationManger.StackerCraneCode;
-                                task.TaskState = TaskInStatusEnum.SC_InExecute.ObjToInt();
+                                task.DeviceCode = stationManger.StackerCraneCode;
+                                task.TaskState = TaskStatusEnum.SC_Execute.ObjToInt();
                                 _taskRepository.UpdateData(task);
 
                                 bool isWrite = hoister.SetValue(HoisterDBName.RequestIn, false, deviceChildCode);
@@ -136,47 +136,6 @@
                                 WriteInfo(hoister.DeviceName, $"鏈壘鍒板搴旂珯鍙颁俊鎭�,{deviceChildCode}");
                             }
                         }
-
-
-                        //if (tray && leisure)
-                        //{
-                        //#region 鏌ヨ缁勭洏淇℃伅
-                        //鍚慦MS鐢宠鏌ヨ褰撳墠鎻愬崌鏈哄彛鐨勭粍鐩樹俊鎭紝瀛樺湪缁勭洏淇℃伅杩斿洖鍏ュ簱浠诲姟骞跺彂鍑哄叆搴撶敵璇�
-                        //var task = _taskService.QueryExecutingConveyorLineTask(1, deviceChildCode);
-                        //if (Leisure && task != null)
-                        //    Hoister.SetValue(HoisterDBName.RequestIn, true, deviceChildCode);
-
-                        //#endregion
-                        //var Inbounding = Hoister.GetValue<HoisterDBName, bool>(HoisterDBName.Inbounding, deviceChildCode);
-                        //if (Inbounding && task != null)
-                        //{
-                        //    task.TaskState = (int)TaskInStatusEnum.SC_InExecute;
-                        //    task.NextAddress = "001-003-001";
-                        //    _taskService.UpdateData(task);
-                        //    //鏇存柊浠诲姟鐘舵�佸苟鍙栨秷鍏ュ簱鐢宠
-                        //    Hoister.SetValue(HoisterDBName.RequestIn, false, deviceChildCode);
-                        //}
-                        //}
-                        //else
-                        //{
-
-
-                        //鏌ヨ鍑哄簱浠诲姟,瀛樺湪鍑哄簱浠诲姟鍙戝嚭鍑哄簱鐢宠
-                        //var task = _taskService.QueryExecutingConveyorLineTask(2, deviceChildCode);
-                        //if (task != null && Leisure)
-                        //    Hoister.SetValue(HoisterDBName.RequestOut, true, deviceChildCode);
-                        //var Outbounding = Hoister.GetValue<HoisterDBName, bool>(HoisterDBName.Outbounding, deviceChildCode);
-                        //if (Outbounding && task != null)
-                        //{
-                        //    task.NextAddress = deviceChildCode;
-                        //    task.TargetAddress = deviceChildCode;
-                        //    task.TaskState = (int)TaskOutStatusEnum.OutNew;
-                        //    _taskService.UpdateData(task);
-                        //    //鏇存柊浠诲姟鐘舵�佸苟鍙栨秷鍑哄簱鐢宠
-                        //    Hoister.SetValue(HoisterDBName.RequestOut, false, deviceChildCode);
-                        //}
-                        //}
-
                     }
                 }
             }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\262\271\345\242\250\344\273\223/StackerCraneJob_YM.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\262\271\345\242\250\344\273\223/StackerCraneJob_YM.cs"
index 53ed581..17fbe79 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\262\271\345\242\250\344\273\223/StackerCraneJob_YM.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\262\271\345\242\250\344\273\223/StackerCraneJob_YM.cs"
@@ -21,7 +21,6 @@
 using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
 using WIDESEAWCS_Tasks.HoisterJob;
 using WIDESEAWCS_Tasks.StackerCraneJob;
-using WIDESEAWCS_Tasks.闃荤剨浠�;
 
 namespace WIDESEAWCS_Tasks
 {
@@ -48,44 +47,32 @@
 
         public Task Execute(IJobExecutionContext context)
         {
+            CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
             try
             {
-                CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
                 if (commonStackerCrane != null)
                 {
                     if (!commonStackerCrane.IsEventSubscribed)
                     {
                         commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//璁㈤槄浠诲姟瀹屾垚浜嬩欢
                     }
-
-                    if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal)
+                    commonStackerCrane.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆�
+                    if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal && commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
                     {
-                        commonStackerCrane.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆�
-
-                        if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
+                        Dt_Task? task = GetTask(commonStackerCrane);
+                        if (task != null)
                         {
-                            Dt_Task? task = GetTask(commonStackerCrane);
-                            if (task != null)
+                            StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
+                            if (stackerCraneTaskCommand != null)
                             {
-                                StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
-                                if (stackerCraneTaskCommand != null)
+                                bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand);
+                                if (sendFlag)
                                 {
-                                    bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand);
-                                    if (sendFlag)
-                                    {
-                                        commonStackerCrane.LastTaskType = task.TaskType;
-                                        int oldState = task.TaskState;
-                                        if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
-                                        {
-                                            task.TaskState = TaskInStatusEnum.SC_InExecuting.ObjToInt();
-                                        }
-                                        else
-                                        {
-                                            task.TaskState = TaskOutStatusEnum.SC_OutExecuting.ObjToInt();
-                                        }
-                                        _taskRepository.UpdateData(task);
-                                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"绯荤粺鑷姩娴佺▼锛屼换鍔$姸鎬佷粠銆恵oldState}銆戣浆鍒般�恵task.TaskState}銆�");
-                                    }
+                                    commonStackerCrane.LastTaskType = task.TaskType;
+                                    int oldState = task.TaskState;
+                                    task.TaskState = TaskStatusEnum.SC_Executing.ObjToInt();
+                                    _taskRepository.UpdateData(task);
+                                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"绯荤粺鑷姩娴佺▼锛屼换鍔$姸鎬佷粠銆恵oldState}銆戣浆鍒般�恵task.TaskState}銆�");
                                 }
                             }
                         }
@@ -94,7 +81,7 @@
             }
             catch (Exception ex)
             {
-                WriteError(nameof(CommonStackerCraneJob), ex.Message, ex);
+                WriteError(commonStackerCrane.DeviceName, ex.Message, ex);
             }
             return Task.CompletedTask;
         }
@@ -115,7 +102,9 @@
                     Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == e.TaskNum);
                     if (task != null)
                     {
-
+                        _taskExecuteDetailService.AddTaskExecuteDetail(e.TaskNum, $"绯荤粺鑷姩娴佺▼,浠诲姟瀹屾垚");
+                        _taskRepository.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
+                        HttpHelper.Post("", "");//todo 璋冪敤WMS浠诲姟瀹屾垚鏂规硶
                     }
                     else
                     {
@@ -189,7 +178,7 @@
         /// <returns>濡傛灉鏈鍗犵敤锛岃繑鍥炰紶鍏ョ殑浠诲姟淇℃伅锛屽惁鍒欙紝杩斿洖null</returns>
         private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
         {
-            Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.TargetAddress && x.StackerCraneCode == task.Roadway);
+            Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.TargetAddress && x.StackerCraneCode == task.DeviceCode);
             if (stationManger != null)
             {
                 IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
@@ -231,9 +220,6 @@
             stackerCraneTaskCommand.TrayType = 1;
             if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//鍒ゆ柇鏄惁鏄叆搴撲换鍔�
             {
-                //List<Dt_Router> routers = _routerService.QueryNextRoutes(task.CurrentAddress, task.Roadway);
-                //if (routers.Count > 0)
-                //{
                 string[] startCodes = task.CurrentAddress.Split("-");
 
                 stackerCraneTaskCommand.StartRow = Convert.ToInt16(startCodes[0]);
@@ -253,43 +239,28 @@
                     _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍏ュ簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.NextAddress}銆�");
                     return null;
                 }
-                //}
-                //else
-                //{
-                //    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鍙栬揣绔欏彴淇℃伅");
-                //    return null;
-                //}
             }
             else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
             {
-                //List<Dt_Router> routers = _routerService.QueryNextRoutes(task.Roadway, task.TargetAddress);
-                //if (routers.Count > 0)
+                string[] targetCodes = task.NextAddress.Split("-");
+
+                stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
+                stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
+                stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
+
+                string[] sourceCodes = task.CurrentAddress.Split("-");
+                if (sourceCodes.Length == 3)
                 {
-                    string[] targetCodes = task.NextAddress.Split("-");
-
-                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
-                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
-                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
-
-                    string[] sourceCodes = task.CurrentAddress.Split("-");
-                    if (sourceCodes.Length == 3)
-                    {
-                        stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
-                        stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
-                        stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
-                    }
-                    else
-                    {
-                        //鏁版嵁閰嶇疆閿欒
-                        _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
-                        return null;
-                    }
+                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
+                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
+                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
                 }
-                //else
-                //{
-                //    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鏀捐揣绔欏彴淇℃伅");
-                //    return null;
-                //}
+                else
+                {
+                    //鏁版嵁閰嶇疆閿欒
+                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
+                    return null;
+                }
             }
             else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
             {
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/GroundStationJob_CSJ.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/GroundStationJob_CSJ.cs"
new file mode 100644
index 0000000..023c6cd
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/GroundStationJob_CSJ.cs"
@@ -0,0 +1,93 @@
+锘縰sing Quartz;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Common;
+using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_IBasicInfoRepository;
+using WIDESEAWCS_ITaskInfoRepository;
+using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model.Models;
+using WIDESEAWCS_QuartzJob;
+
+namespace WIDESEAWCS_Tasks
+{
+    /// <summary>
+    /// 娴嬭瘯鏋朵粨鍦伴潰绔�
+    /// </summary>
+    [DisallowConcurrentExecution]
+    public class GroundStationJob_CSJ : JobBase, IJob
+    {
+        private readonly ITaskService _taskService;
+        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
+        private readonly ITaskRepository _taskRepository;
+        private readonly IStationMangerRepository _stationMangerRepository;
+
+        public GroundStationJob_CSJ(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IStationMangerRepository stationMangerRepository)
+        {
+            _taskService = taskService;
+            _taskExecuteDetailService = taskExecuteDetailService;
+            _taskRepository = taskRepository;
+            _stationMangerRepository = stationMangerRepository;
+        }
+
+        public Task Execute(IJobExecutionContext context)
+        {
+            OtherDevice device = (OtherDevice)context.JobDetail.JobDataMap.Get("JobParams");
+            try
+            {
+                if (device == null)
+                {
+                    WriteInfo(nameof(GroundStationJob_CSJ), "璋冨害閿欒,璁惧瀵硅薄浼犲�间负null");
+                    return Task.CompletedTask;
+                }
+
+                List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
+                foreach (var item in stationMangers)
+                {
+                    bool isCanPut = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanPut, item.StationCode);
+                    bool isCanTake = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanTake, item.StationCode);
+                    bool putRequest = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_PutRequest, item.StationCode);
+                    bool putFinish = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_PutFinish, item.StationCode);
+                    bool takeRequest = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_TakeRequest, item.StationCode);
+                    bool takeFinish = device.GetValue<GroundStationDBName, bool>(GroundStationDBName.W_TakeFinish, item.StationCode);
+
+                    if (item.StationType == StationTypeEnum.StationType_OnlyOutbound.ObjToInt())
+                    {
+                        Dt_Task task = _taskRepository.QueryFirst(x => x.DeviceCode == item.StackerCraneCode && x.TaskState == TaskStatusEnum.New.ObjToInt() && string.IsNullOrEmpty(x.NextAddress));
+                        if (task != null && isCanPut && !isCanTake && !putRequest && !putFinish && !takeRequest && !takeFinish)
+                        {
+                            string oldAddress = task.NextAddress;
+                            int oldStatus = task.TaskState;
+                            task.TaskState = TaskStatusEnum.SC_Execute.ObjToInt();
+                            task.NextAddress = item.StationCode;
+                            _taskRepository.UpdateData(task);
+                            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"绯荤粺鑷姩娴佺▼,鐩爣鍦板潃鐢眥oldAddress}鍙樻洿涓簕task.NextAddress},浠诲姟鐘舵�佺敱{oldStatus}鍙樻洿涓簕task.TaskState}");
+                        }
+                    }
+                    else if (item.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt())
+                    {
+                        Dt_Task task = _taskRepository.QueryFirst(x => x.TargetAddress == item.StackerCraneCode && x.TaskState == TaskStatusEnum.New.ObjToInt() && string.IsNullOrEmpty(x.NextAddress));
+                        if (task != null && isCanPut && !isCanTake && !putRequest && !putFinish && !takeRequest && !takeFinish)
+                        {
+                            string oldAddress = task.NextAddress;
+                            int oldStatus = task.TaskState;
+                            task.TaskState = TaskStatusEnum.SC_Execute.ObjToInt();
+                            task.NextAddress = item.StationCode;
+                            _taskRepository.UpdateData(task);
+                            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"绯荤粺鑷姩娴佺▼,鐩爣鍦板潃鐢眥oldAddress}鍙樻洿涓簕task.NextAddress},浠诲姟鐘舵�佺敱{oldStatus}鍙樻洿涓簕task.TaskState}");
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                WriteError(device.DeviceName, "", ex);
+            }
+            return Task.CompletedTask;
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/StackerCraneJob_CSJ.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/StackerCraneJob_CSJ.cs"
index b66585d..c96fb0f 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/StackerCraneJob_CSJ.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/StackerCraneJob_CSJ.cs"
@@ -7,7 +7,9 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.Enums;
+using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_IBasicInfoRepository;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
@@ -19,7 +21,6 @@
 using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
 using WIDESEAWCS_Tasks.HoisterJob;
 using WIDESEAWCS_Tasks.StackerCraneJob;
-using WIDESEAWCS_Tasks.闃荤剨浠�;
 
 namespace WIDESEAWCS_Tasks
 {
@@ -69,7 +70,10 @@
                                     if (sendFlag)
                                     {
                                         commonStackerCrane.LastTaskType = task.TaskType;
-                                       // _taskService.UpdateTaskStatusToNext(task.TaskNum);
+                                        int oldState = task.TaskState;
+                                        task.TaskState = TaskStatusEnum.SC_Executing.ObjToInt();
+                                        _taskRepository.UpdateData(task);
+                                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"绯荤粺鑷姩娴佺▼锛屼换鍔$姸鎬佷粠銆恵oldState}銆戣浆鍒般�恵task.TaskState}銆�");
                                     }
                                 }
                             }
@@ -97,9 +101,48 @@
                 if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
                 {
                     Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
-                   // _taskService.StackCraneTaskCompleted(e.TaskNum);
+                    StackerCraneTaskCompleted(e.TaskNum, commonStackerCrane.DeviceName);
                     commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                 }
+            }
+        }
+
+        public WebResponseContent StackerCraneTaskCompleted(int taskNum, string deviceName)
+        {
+            try
+            {
+                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum);
+                if (task != null)
+                {
+                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+                    {
+                        int oldStatus = task.TaskState;
+                        task.DeviceCode = "AGV";
+                        task.TaskState = TaskStatusEnum.AGV_Execute.ObjToInt();
+                        task.CurrentAddress = task.NextAddress;
+                        task.NextAddress = task.TargetAddress;
+                        _taskRepository.UpdateData(task);
+                        _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"绯荤粺鑷姩娴佺▼,锛屼换鍔$姸鎬佷粠銆恵oldStatus}銆戣浆鍒般�恵task.TaskState}銆�");
+                    }
+                    else if (task.TaskType.GetTaskTypeGroup() != TaskTypeGroup.InboundGroup)
+                    {
+                        _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"绯荤粺鑷姩娴佺▼,锛屼换鍔″畬鎴�");
+                        _taskRepository.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
+                        HttpHelper.Post("", "");//todo 璋冪敤WMS浠诲姟瀹屾垚鏂规硶
+                    }
+                }
+                else
+                {
+                    WriteInfo(deviceName, $"鏈壘鍒颁换鍔′俊鎭�,浠诲姟鍙�:{taskNum}");
+                    return WebResponseContent.Instance.Error($"鏈壘鍒颁换鍔′俊鎭�,浠诲姟鍙�:{taskNum}");
+                }
+
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                WriteError(deviceName, $"浠诲姟瀹屾垚閿欒", ex);
+                return WebResponseContent.Instance.Error(ex.Message);
             }
         }
 
@@ -156,6 +199,11 @@
                 }
             }
 
+            if(task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
+            {
+                HttpHelper.Post("", "");
+            }
+
             return task;
         }
 
@@ -166,7 +214,7 @@
         /// <returns>濡傛灉鏈鍗犵敤锛岃繑鍥炰紶鍏ョ殑浠诲姟淇℃伅锛屽惁鍒欙紝杩斿洖null</returns>
         private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
         {
-            Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.TargetAddress && x.StackerCraneCode == task.Roadway);
+            Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.NextAddress && x.StackerCraneCode == task.DeviceCode);
             if (stationManger != null)
             {
                 IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
@@ -177,6 +225,7 @@
                     {
                         task.TargetAddress = stationManger.StackerCraneStationCode;
                         _taskRepository.UpdateData(task);
+                        client.SetValue(GroundStationDBName.R_IsCanPut, true, stationManger.StationCode);
                         return task;
                     }
                 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\351\230\273\347\204\212\344\273\223/StackerCraneJob_ZH.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\351\230\273\347\204\212\344\273\223/StackerCraneJob_ZH.cs"
index dd8c979..0ee91a9 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\351\230\273\347\204\212\344\273\223/StackerCraneJob_ZH.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\351\230\273\347\204\212\344\273\223/StackerCraneJob_ZH.cs"
@@ -166,7 +166,7 @@
         /// <returns>濡傛灉鏈鍗犵敤锛岃繑鍥炰紶鍏ョ殑浠诲姟淇℃伅锛屽惁鍒欙紝杩斿洖null</returns>
         private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
         {
-            Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.TargetAddress && x.StackerCraneCode == task.Roadway);
+            Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.TargetAddress && x.StackerCraneCode == task.DeviceCode);
             if (stationManger != null)
             {
                 IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/basic/warehouse.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/basic/warehouse.js"
index 151c927..7840edd 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/basic/warehouse.js"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/basic/warehouse.js"
@@ -20,7 +20,15 @@
       let enableBtn = this.buttons.find(x => x.value == 'Enable');
       if (enableBtn) {
         enableBtn.onClick = function () {
-          this.$message.success('鑷畾涔夋寜閽偣鍑讳簨浠�');
+          //this.$message.success('鑷畾涔夋寜閽偣鍑讳簨浠�');
+          var printSection = document.querySelector('.vol-table');
+          var printWindow = window.open('', '');
+          printWindow.document.write(printSection.innerHTML);
+          printWindow.document.close();
+          printWindow.focus();
+          printWindow.print();
+          printWindow.close();
+
         }
       }
       let disableBtn = this.buttons.find(x => x.value == 'Disable');
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/7ab5e54f-e15f-4070-8b63-2b0d6e70b364.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/7ab5e54f-e15f-4070-8b63-2b0d6e70b364.vsidx"
new file mode 100644
index 0000000..b3fbf09
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/7ab5e54f-e15f-4070-8b63-2b0d6e70b364.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/c6122441-2f23-4566-894d-2438c126bfa0.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/c6122441-2f23-4566-894d-2438c126bfa0.vsidx"
new file mode 100644
index 0000000..70aef67
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/c6122441-2f23-4566-894d-2438c126bfa0.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e8a69a95-d256-4664-a68b-3579d7c901f3.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e8a69a95-d256-4664-a68b-3579d7c901f3.vsidx"
new file mode 100644
index 0000000..f165ae6
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e8a69a95-d256-4664-a68b-3579d7c901f3.vsidx"
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/read.lock" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/read.lock"
deleted file mode 100644
index e69de29..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/read.lock"
+++ /dev/null
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_CSJ.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_CSJ.cs"
index 31aed3f..3533316 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_CSJ.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_CSJ.cs"
@@ -150,6 +150,28 @@
             return null;
         }
 
+        private bool LittleDepthLocationIsEmpty_CSJ(Dt_LocationInfo locationInfo, PalletTypeEnum palletType)
+        {
+            List<Dt_LocationInfo> locations = GetGroupLocations(locationInfo);
+
+            switch (palletType)
+            {
+                case PalletTypeEnum.LargestPallet:
+                case PalletTypeEnum.LargePallet:
+                    {
+                        List<Dt_LocationInfo> littleDepth = locations.Where(x => x.Depth <= locationInfo.Depth).ToList();
+                        return littleDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.OnlyIn.ObjToInt() && x.EnableStatus != EnableStatusEnum.Normal.ObjToInt()) == null; //鏌ヨ灏忎簬褰撳墠璐т綅娣卞害鐨勯泦鍚堥噷鏄惁鏈夌姸鎬佷笉涓虹┖锛屼笖绂佺敤鐘舵�佷笉涓虹鐢ㄤ互鍙婂彧鍏ョ殑璐т綅锛屽鏋滄槸true锛屽垯琛ㄧず娴呰揣浣嶈浣跨敤鎴栬�呰绂佺敤鐨勬儏鍐�
+                    }
+                case PalletTypeEnum.MediumPallet:
+                case PalletTypeEnum.SmallPallet:
+                    {
+                        List<Dt_LocationInfo> littleDepth = locations.Where(x => x.Depth <= locationInfo.Depth).ToList();
+                        return littleDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.OnlyIn.ObjToInt() && x.EnableStatus != EnableStatusEnum.Normal.ObjToInt()) == null; //鏌ヨ灏忎簬褰撳墠璐т綅娣卞害鐨勯泦鍚堥噷鏄惁鏈夌姸鎬佷笉涓虹┖锛屼笖绂佺敤鐘舵�佷笉涓虹鐢ㄤ互鍙婂彧鍏ョ殑璐т綅锛屽鏋滄槸true锛屽垯琛ㄧず娴呰揣浣嶈浣跨敤鎴栬�呰绂佺敤鐨勬儏鍐�
+                    }
+            }
+            return false;
+        }
+
         /// <summary>
         /// 鍒ゆ柇涓嶅悓娣卞害鐨勫悓缁勮揣浣嶇姸鎬佹槸鍚︿负绌洪棽绌轰綅(娴嬭瘯鏋朵粨)
         /// </summary>
@@ -184,7 +206,7 @@
                         List<Dt_LocationInfo> littleDepth = locations.Where(x => x.Depth <= emptyLocation.Depth).ToList();
                         littleDepthFlag = littleDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.OnlyIn.ObjToInt() && x.EnableStatus != EnableStatusEnum.Normal.ObjToInt()) == null; //鏌ヨ灏忎簬褰撳墠璐т綅娣卞害鐨勯泦鍚堥噷鏄惁鏈夌姸鎬佷笉涓虹┖锛屼笖绂佺敤鐘舵�佷笉涓虹鐢ㄤ互鍙婂彧鍏ョ殑璐т綅锛屽鏋滄槸true锛屽垯琛ㄧず娴呰揣浣嶈浣跨敤鎴栬�呰绂佺敤鐨勬儏鍐�
                     }
-                    
+
                     break;
             }
 
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs"
index bd6834c..146b0b7 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs"
@@ -45,6 +45,28 @@
             };
         }
 
+        public bool LittleDepthLocationIsEmpty(Dt_LocationInfo locationInfo, PalletTypeEnum palletType)
+        {
+            Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == locationInfo.WarehouseId);
+            if (warehouse == null)
+            {
+                throw new Exception($"鏈壘鍒颁粨搴撲俊鎭�");
+            }
+
+            return warehouse.WarehouseName switch
+            {
+                "鏉挎潗浠�" => false,
+                "PP浠�" => false,
+                "骞茶啘浠�" => false,
+                "娴嬭瘯鏋朵粨" => LittleDepthLocationIsEmpty_CSJ(locationInfo, palletType),
+                "闃荤剨浠�" => false,
+                "娌瑰ⅷ浠�" => true,
+                "鎴愬搧浠�" => true,
+                "杈呮枡浠�" => true,
+                _ => throw new Exception($"鏈壘鍒颁粨搴撹揣浣嶅垎閰嶆柟娉�")
+            };
+        }
+
         private readonly static object _locker = new object();
         private static List<LocationCache> locationCaches = new List<LocationCache>();
         /// <summary>
@@ -146,7 +168,7 @@
         /// <param name="locationInfos"></param>
         /// <param name="location"></param>
         /// <returns></returns>
-        private List<Dt_LocationInfo> GetGroupLocations(List<Dt_LocationInfo> locationInfos, Dt_LocationInfo location)
+        public List<Dt_LocationInfo> GetGroupLocations(List<Dt_LocationInfo> locationInfos, Dt_LocationInfo location)
         {
             List<Dt_LocationInfo> groupLocations = new List<Dt_LocationInfo>() { location };
             int maxDepth = locationInfos.Max(x => x.Depth);
@@ -169,6 +191,37 @@
             }
             return groupLocations;
         }
+
+        /// <summary>
+        /// 鑾峰彇涓嶅悓娣卞害鐨勫悓缁勮揣浣嶄俊鎭�
+        /// </summary>
+        /// <param name="location"></param>
+        /// <returns></returns>
+        public List<Dt_LocationInfo> GetGroupLocations(Dt_LocationInfo location)
+        {
+            List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => x.RoadwayNo == location.RoadwayNo && x.WarehouseId == location.WarehouseId);
+
+            List<Dt_LocationInfo> groupLocations = new List<Dt_LocationInfo>() { location };
+            int maxDepth = locationInfos.Max(x => x.Depth);
+            for (int j = location.Depth + 1; j <= maxDepth; j++)
+            {
+                Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer);
+                if (locationInfo != null)
+                {
+                    groupLocations.Add(locationInfo);
+                }
+            }
+
+            for (int j = location.Depth - 1; j >= 1; j--)
+            {
+                Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer);
+                if (locationInfo != null)
+                {
+                    groupLocations.Add(locationInfo);
+                }
+            }
+            return groupLocations;
+        }
     }
 
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs"
index 19d60dc..fed318a 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/RepositoryBase.cs"
@@ -923,8 +923,8 @@
             {
                 object? obj2 = Activator.CreateInstance(htyType);
                 PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
-                PropertyInfo? operateTypePro = htyType.GetProperty(nameof(OperateTypeEnum));
-                PropertyInfo? sourceIdPro = htyType.GetProperty("SourceId");
+                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();
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Task/WMSTaskDTO.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Task/WMSTaskDTO.cs"
index 84b63eb..6708cc4 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Task/WMSTaskDTO.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Task/WMSTaskDTO.cs"
@@ -52,5 +52,6 @@
         /// 浼樺厛绾�
         /// </summary>
         public int Grade { get; set; }
+
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs"
index 925ecf3..1e79cc9 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/ILocationInfoService.cs"
@@ -75,5 +75,20 @@
         /// <param name="palletType">鎵樼洏绫诲瀷</param>
         /// <param name="locationStatus">璐т綅鐘舵��</param>
         void UpdateLocationStatus(Dt_LocationInfo location, PalletTypeEnum palletType, LocationStatusEnum locationStatus, int warehousId);
+
+        /// <summary>
+        /// 鑾峰彇涓嶅悓娣卞害鐨勫悓缁勮揣浣嶄俊鎭�
+        /// </summary>
+        /// <param name="location"></param>
+        /// <returns></returns>
+        List<Dt_LocationInfo> GetGroupLocations(Dt_LocationInfo location);
+
+        /// <summary>
+        /// 鍒ゆ柇娴呰揣浣嶆槸鍚﹁鍗犵敤
+        /// </summary>
+        /// <param name="locationInfo">璐т綅淇℃伅</param>
+        /// <param name="palletType">鎵樼洏绫诲瀷</param>
+        /// <returns></returns>
+        bool LittleDepthLocationIsEmpty(Dt_LocationInfo locationInfo, PalletTypeEnum palletType);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
index c2f6446..10cce98 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
@@ -93,11 +93,22 @@
         /// <param name="taskNum">浠诲姟鍙�</param>
         /// <returns></returns>
         WebResponseContent OutboundTaskCompleted(int taskNum);
+<<<<<<< Updated upstream
         /// <summary>
         /// 娴嬭瘯鏋堕��搴�
         /// </summary>
         /// <param name="backModel"></param>
         /// <returns></returns>
         MesResponseContent TestReturnStock(TestToolBackModel backModel);
+=======
+
+        /// <summary>
+        /// 鍒ゆ柇鏄惁闇�瑕佺Щ搴�
+        /// </summary>
+        /// <param name="taskNum">浠诲姟鍙�</param>
+        /// <param name="locationCode">鍏ュ簱鎴栧嚭搴撶殑璐т綅鍙�</param>
+        /// <returns></returns>
+        WebResponseContent IsRelocation(int taskNum, string locationCode);
+>>>>>>> Stashed changes
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs"
new file mode 100644
index 0000000..e0ae17a
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs"
@@ -0,0 +1,100 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common.CommonEnum;
+using WIDESEA_Common.LocationEnum;
+using WIDESEA_Common.OtherEnum;
+using WIDESEA_Common.StockEnum;
+using WIDESEA_Common.TaskEnum;
+using WIDESEA_Core;
+using WIDESEA_Core.Helper;
+using WIDESEA_DTO.Task;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_TaskInfoService
+{
+    public partial class TaskService
+    {
+        public WebResponseContent IsRelocation(int taskNum, string locationCode)
+        {
+            try
+            {
+                Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == locationCode);
+                if (locationInfo == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑璐т綅淇℃伅");
+                }
+                Dt_Task task = Repository.QueryFirst(x => x.TaskNum == taskNum);
+                if (task == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒颁换鍔′俊鎭�");
+                }
+
+                if (!_basicService.LocationInfoService.LittleDepthLocationIsEmpty(locationInfo, (PalletTypeEnum)task.PalletType))
+                {
+                    return WebResponseContent.Instance.OK(data: _mapper.Map<WMSTaskDTO>(task));
+                }
+                else
+                {
+                    Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == locationCode);
+                    if (stockInfo == null)
+                    {
+                        return WebResponseContent.Instance.Error($"鏈壘鍒板搴旇揣浣嶇殑搴撳瓨淇℃伅");
+                    }
+
+                    Dt_LocationInfo? newLocation = _basicService.LocationInfoService.AssignLocation(task.Roadway, (PalletTypeEnum)task.PalletType, task.WarehouseId);
+                    if (newLocation != null)
+                    {
+                        Dt_Task newTask = new Dt_Task()
+                        {
+                            Roadway = task.Roadway,
+                            WarehouseId = task.WarehouseId,
+                            CurrentAddress = locationCode,
+                            Grade = 99,
+                            NextAddress = newLocation.LocationCode,
+                            OrderNo = "",
+                            PalletCode = stockInfo.PalletCode,
+                            PalletType = stockInfo.PalletType,
+                            SourceAddress = locationCode,
+                            TargetAddress = newLocation.LocationCode,
+                            TaskNum = Repository.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
+                            TaskStatus = 0,
+                            TaskType = 0
+                        };
+
+                        _unitOfWorkManage.BeginTran();
+                        Repository.AddData(newTask);
+                        {
+                            LocationStatusEnum lastStatus = (LocationStatusEnum)newLocation.LocationStatus;
+                            newLocation.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
+                            _basicService.LocationInfoService.UpdateLocationStatus(newLocation, (PalletTypeEnum)task.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
+                            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationChangeType.RelocationAssignLocation, taskNum: newTask.TaskNum);
+                        }
+                        {
+                            LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
+                            locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
+                            _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, (PalletTypeEnum)task.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
+                            _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationChangeType.RelocationAssignLocation, taskNum: newTask.TaskNum);
+                        }
+                        stockInfo.StockStatus = StockStatusEmun.绉诲簱閿佸畾.ObjToInt();
+                        _stockRepository.StockInfoRepository.UpdateData(stockInfo);
+
+                        _unitOfWorkManage.RollbackTran();
+
+                        return WebResponseContent.Instance.OK(data: _mapper.Map<WMSTaskDTO>(newTask));
+                    }
+                    else
+                    {
+                        return WebResponseContent.Instance.Error($"鏈壘鍒板彲鍒嗛厤璐т綅,璇锋煡鐪嬭宸烽亾銆恵task.Roadway}銆戞槸鍚﹁繕鏈夌┖闂插彲浣跨敤璐т綅");
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
index e4e773a..67ca56d 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
@@ -100,5 +100,11 @@
         {
             return Service.OutboundTaskCompleted(taskNum);
         }
+
+        [HttpPost, HttpGet, Route("IsRelocation"), AllowAnonymous]
+        public WebResponseContent IsRelocation(int taskNum, string locationCode)
+        {
+            return Service.IsRelocation(taskNum, locationCode);
+        }
     }
 }

--
Gitblit v1.9.3