From f2b85c65234e0dcdd3fcce4dafbe16933b7f1b48 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期日, 30 十一月 2025 04:22:51 +0800
Subject: [PATCH] 出入库流程代码更新

---
 项目代码/WCSServices/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs                       |   84 -
 项目代码/WCSServices/WIDESEAWCS_Tasks/二期线体/ConveyorLineDBName.cs                       |   44 +
 项目资料/AGV通信文档/输送拣选和站台编号.xlsx                                                        |    0 
 项目代码/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskFlowDTO.cs                              |   28 
 项目代码/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs                         |  462 ++++--------
 项目代码/WCSServices/WIDESEAWCS_DTO/Agv/AgvResponseContent.cs                          |   19 
 项目代码/WCSServices/WIDESEAWCS_BasicInfoService/LocationInfoService.cs                |  102 ++
 项目代码/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs                      |   56 +
 项目代码/WCSServices/WIDESEAWCS_Model/Models/BasicInfo/Dt_LocationInfo.cs              |   16 
 项目资料/接口汇总文件/WMS接口对接文档_V1.1.3.docx                                                  |    0 
 项目代码/WCSServices/WIDESEAWCS_DTO/BasicInfo/InitializationLocationDTO.cs             |   31 
 项目代码/WCSServices/WIDESEAWCS_Model/Models/BasicInfo/Dt_Warehouse.cs                 |   18 
 项目代码/WCSServices/WIDESEAWCS_DTO/Agv/AgvUpdateDTO.cs                                |   43 
 项目代码/WCSServices/WIDESEAWCS_TaskInfoRepository/TaskRepository.cs                   |    9 
 项目代码/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs                        |  159 ----
 项目代码/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs                       |   74 -
 项目代码/WCSServices/WIDESEAWCS_DTO/WMSResponseContent.cs                              |    8 
 项目代码/WCSServices/WIDESEAWCS_DTO/WIDESEAWCS_DTO.csproj                              |    4 
 项目代码/WCSServices/WIDESEAWCS_Common/TaskEnum/SequenceEnum.cs                        |    6 
 项目代码/WCSServices/WIDESEAWCS_Common/APIEnum/APIEnum.cs                              |   15 
 项目代码/WCSServices/WIDESEAWCS_ITaskInfoRepository/ITaskRepository.cs                 |    2 
 项目代码/WCSServices/WIDESEAWCS_Tasks/AGV/AGVExtend.cs                                 |  260 ++----
 项目资料/AGV通信文档/WMS输送线对接协议251126.xls                                                  |    0 
 项目代码/WCSServices/WIDESEAWCS_Common/StationTypeEnum.cs                              |   10 
 项目代码/WCSServices/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs                    |   21 
 项目代码/WCSServices/WIDESEAWCS_IBasicInfoRepository/ILocationInfoRepository.cs        |    5 
 项目代码/WCSServices/WIDESEAWCS_Common/StationOccupiedEnum.cs                          |    1 
 项目代码/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs              |   46 
 项目代码/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs                |   36 
 项目代码/WCSServices/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs                             |   92 +-
 项目代码/WCSServices/WIDESEAWCS_IBasicInfoService/ILocationInfoService.cs              |   10 
 项目代码/WCSServices/WIDESEAWCS_Server/Filter/CustomProfile.cs                         |    2 
 /dev/null                                                                          |   35 
 项目代码/WCSServices/WIDESEAWCS_Tasks/AGV/AGVJob.cs                                    |    4 
 项目代码/WCSServices/WIDESEAWCS_Tasks/码垛/MDJob_CP.cs                                   |   32 
 项目代码/WCSServices/WIDESEAWCS_Server/Controllers/BasicInfo/LocationInfoController.cs |   73 +
 项目资料/一期对接相关资料/哈尔滨一期输送线对接协议modbusTcp协议V1.1.xlsx                                     |    0 
 项目代码/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskSendDTO.cs                              |  117 ++
 项目代码/WCSServices/WIDESEAWCS_BasicInfoRepository/LocationInfoRepository.cs          |    9 
 项目代码/WCSServices/WIDESEAWCS_Common/WareHouseEnum/WarehouseEnum.cs                  |   60 -
 项目代码/WCSServices/WIDESEAWCS_Tasks/二期线体/ConveyorLineJob2.cs                         |   92 ++
 项目资料/AGV通信文档/点位信息.xlsx                                                             |    0 
 项目代码/WCSServices/WIDESEAWCS_DTO/TaskInfo/ContainerDTO.cs                           |   65 +
 项目代码/WCSServices/WIDESEAWCS_Model/Models/BasicInfo/Dt_StationManger.cs             |   47 
 项目代码/WCSServices/WIDESEAWCS_TaskInfoService/TaskService_Operate.cs                 |   13 
 45 files changed, 1,155 insertions(+), 1,055 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_BasicInfoRepository/LocationInfoRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_BasicInfoRepository/LocationInfoRepository.cs"
index 6216abf..84d4009 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_BasicInfoRepository/LocationInfoRepository.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_BasicInfoRepository/LocationInfoRepository.cs"
@@ -57,5 +57,14 @@
         {
             return QueryData(x => x.LocationCode, x => x.WarehouseId == warehouseId && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt() && x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()).Distinct().ToList();
         }
+
+        /// <summary>
+        /// 鑾峰彇鏂欑瀵瑰簲鍑哄簱璐т綅
+        /// </summary>
+        /// <returns></returns>
+        public List<Dt_LocationInfo> GetCanOut(List<string> strings)
+        {
+            return QueryData(x => strings.Contains(x.PalletCode)).ToList();
+        }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_BasicInfoService/LocationInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_BasicInfoService/LocationInfoService.cs"
index 8d28bdd..d26efaa 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_BasicInfoService/LocationInfoService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_BasicInfoService/LocationInfoService.cs"
@@ -9,18 +9,26 @@
 using System.Threading.Tasks;
 using WIDESEA_Core;
 using WIDESEA_Core.Enums;
+using WIDESEA_DTO.Basic;
 using WIDESEAWCS_Common;
 using WIDESEAWCS_Common.WareHouseEnum;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.BaseRepository;
 using WIDESEAWCS_Core.BaseServices;
 using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_Core.Utilities;
 using WIDESEAWCS_IBasicInfoRepository;
 using WIDESEAWCS_IBasicInfoService;
 using WIDESEAWCS_Model.Models;
 
 namespace WIDESEAWCS_BasicInfoService
 {
+    public class LocationCache
+    {
+        public string LocationCode { get; set; }
+
+        public DateTime DateTime { get; set; }
+    }
     public partial class LocationInfoService : ServiceBase<Dt_LocationInfo, ILocationInfoRepository>, ILocationInfoService
     {
         private readonly IUnitOfWorkManage _unitOfWorkManage;
@@ -84,13 +92,101 @@
         {
             return LocationDisableStatus(new int[] { key });
         }
-
+        private readonly static object _locker = new object();
+        private static List<LocationCache> locationCaches = new List<LocationCache>();
         /// <summary>
         /// 鍒嗛厤璐т綅
         /// </summary>
-        public Dt_LocationInfo? AssignLocation(string roadwayNo, int palletType, int warehouseId)
+        public Dt_LocationInfo? AssignLocation()
         {
-            return new Dt_LocationInfo();
+            lock (_locker)
+            {
+                List<LocationCache> removeItems = locationCaches.Where(x => (DateTime.Now - x.DateTime).TotalMinutes > 5).ToList();//鏌ヨ娣诲姞闈欐�佸彉閲忚秴杩�5鍒嗛挓鐨勮揣浣�
+                int count = removeItems.Count;
+                for (int i = 0; i < count; i++)
+                {
+                    locationCaches.Remove(removeItems[i]);//绉婚櫎鏌ヨ娣诲姞闈欐�佸彉閲忚秴杩�5鍒嗛挓鐨勮揣浣�
+                }
+
+                List<string> lockLocations = locationCaches.Select(x => x.LocationCode).ToList();
+
+                Dictionary<string, OrderByType> orderBy = new Dictionary<string, OrderByType>()
+                {
+                    { nameof(Dt_LocationInfo.Row),OrderByType.Asc },
+                    { nameof(Dt_LocationInfo.Layer),OrderByType.Asc },
+                    { nameof(Dt_LocationInfo.Columns),OrderByType.Desc },
+                };
+
+                Dt_LocationInfo locationInfo = BaseDal.QueryFirst(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy);//鏌ヨ绌鸿揣浣嶄俊鎭苟鎺掗櫎5鍒嗛挓鍐呭垎閰嶇殑璐т綅,鏍规嵁灞傘�佸垪銆佹繁搴︺�佽鎺掑簭
+                if (locationInfo!=null)
+                {
+                    LocationCache locationCache = new LocationCache()
+                    {
+                        LocationCode = locationInfo.LocationCode,
+                        DateTime = DateTime.Now,
+                    };
+                    locationCaches.Add(locationCache);
+                }
+                return locationInfo;
+            }
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栬揣浣�
+        /// </summary>
+        /// <param name="initializationLocationDTO"></param>
+        /// <returns></returns>
+        public WebResponseContent InitializationLocation(InitializationLocationDTO initializationLocationDTO)
+        {
+            try
+            {
+                List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
+                for (int i = 0; i < initializationLocationDTO.MaxRow; i++)
+                {
+                    for (int j = 0; j < initializationLocationDTO.MaxColumn; j++)
+                    {
+                        for (int k = 0; k < initializationLocationDTO.MaxLayer; k++)
+                        {
+                            Dt_LocationInfo locationInfo = new Dt_LocationInfo()
+                            {
+                                WarehouseId = 0,
+                                Columns = j + 1,
+                                EnableStatus = EnableStatusEnum.Normal.ObjToInt(),
+                                Layer = k + 1,
+                                LocationStatus = LocationStatusEnum.Free.ObjToInt(),
+                                RoadwayNo = $"{initializationLocationDTO.Roadway}",
+                                Row = i + 1,
+                            };
+                            locationInfo.LocationCode = $"{locationInfo.RoadwayNo}-{locationInfo.Row.ToString().PadLeft(3, '0')}-{locationInfo.Columns.ToString().PadLeft(3, '0')}-{locationInfo.Layer.ToString().PadLeft(3, '0')}";
+                            locationInfo.LocationName = $"{locationInfo.RoadwayNo}宸烽亾{locationInfo.Row.ToString().PadLeft(3, '0')}琛寋locationInfo.Columns.ToString().PadLeft(3, '0')}鍒梴locationInfo.Layer.ToString().PadLeft(3, '0')}灞�";
+                            int point = 0;
+                            if (locationInfo.Row%2==0)
+                            {
+                                point = locationInfo.Row / 2;
+                            }
+                            else
+                            {
+                                if (locationInfo.Row==1)
+                                {
+                                    point = 1;
+                                }
+                                else
+                                {
+                                    point = (locationInfo.Row / 2)+1;
+                                }
+                            }
+                            locationInfo.AgvPoint = $"{point.ToString().PadLeft(2, '0')}-{locationInfo.Columns.ToString().PadLeft(2, '0')}";
+                            locationInfos.Add(locationInfo);
+                        }
+                    }
+                }
+                BaseDal.AddData(locationInfos);
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
         }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/APIEnum/APIEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/APIEnum/APIEnum.cs"
index 0afc6d4..ea9119a 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/APIEnum/APIEnum.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/APIEnum/APIEnum.cs"
@@ -14,5 +14,20 @@
         /// </summary>
         [Description("AGV鍙戦�佷换鍔℃帴鍙�")]
         AgvSendTask,
+        /// <summary>
+        /// AGV浠诲姟鏀捐鎺ュ彛
+        /// </summary>
+        [Description("AGV浠诲姟鏀捐鎺ュ彛")]
+        AgvTaskFlow,
+        /// <summary>
+        /// WMS鍏ュ簱鍙嶉瀹屾垚
+        /// </summary>
+        [Description("WMS鍏ュ簱鍙嶉瀹屾垚")]
+        WMSInBoundBack,
+        /// <summary>
+        /// WMS鏂欑鍒拌揪鎷i�変綅涓婃姤
+        /// </summary>
+        [Description("WMS鏂欑鍒拌揪鎷i�変綅涓婃姤")]
+        WMSPickArrivedUp,
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/StationOccupiedEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/StationOccupiedEnum.cs"
index fb9f974..0aa651e 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/StationOccupiedEnum.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/StationOccupiedEnum.cs"
@@ -8,7 +8,6 @@
 {
     public enum StationOccupiedEnum
     {
-
         None,
         Sure
     }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/StationTypeEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/StationTypeEnum.cs"
index c155e56..ec58375 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/StationTypeEnum.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/StationTypeEnum.cs"
@@ -25,15 +25,5 @@
         /// 鍑哄叆搴撶珯鍙�
         /// </summary>
         StationType_InboundAndOutbound = 3,
-
-        /// <summary>
-        /// 鍑哄叆搴撳彛
-        /// </summary>
-        StationType_InStartAndOutEnd = 33,
-
-        /// <summary>
-        /// 鍙犵洏鍙枡绔欏彴
-        /// </summary>
-        StationType_StackingPlates = 91,
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/StackerCarneTaskDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/TaskEnum/SequenceEnum.cs"
similarity index 61%
rename from "\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/StackerCarneTaskDTO.cs"
rename to "\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/TaskEnum/SequenceEnum.cs"
index 45aa206..85d2c01 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/StackerCarneTaskDTO.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/TaskEnum/SequenceEnum.cs"
@@ -4,10 +4,10 @@
 using System.Text;
 using System.Threading.Tasks;
 
-namespace WIDESEAWCS_DTO
+namespace WIDESEAWCS_Common.TaskEnum
 {
-    public class StackerCarneTaskDTO
+    public enum SequenceEnum
     {
-
+        SeqTaskNum
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
index b298043..26400db 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
@@ -19,6 +19,12 @@
         New = 100,
 
         /// <summary>
+        /// 杈撻�佺嚎鎵ц涓�
+        /// </summary>
+        [Description("杈撻�佺嚎鎵ц涓�")]
+        CL_Executing = 210,
+
+        /// <summary>
         /// AGV寰呮墽琛�
         /// </summary>
         [Description("AGV寰呮墽琛�")]
@@ -35,12 +41,6 @@
         /// </summary>
         [Description("AGV鍙栬揣瀹屾垚")]
         AGV_TakeFinish = 320,
-
-        /// <summary>
-        /// AGV瀹屾垚
-        /// </summary>
-        [Description("AGV瀹屾垚")]
-        AGV_Finish = 330,
 
         /// <summary>
         /// 浠诲姟瀹屾垚
@@ -65,6 +65,48 @@
         /// </summary>
         [Description("浠诲姟寮傚父")]
         Exception = 990,
-        
+    }
+    /// <summary>
+    ///浣滀笟褰撳墠鐘舵��<br/>
+    ///寮�濮嬬Щ鍔細MOVE_BEGIN<br/>
+    ///鏂� 绠� 鍙� 鏂� 瀹� 鎴�:PICKER_RECEIVE<br/>
+    ///鏂� 绠� 涓� 鏂� 瀹� 鎴�:PICKER_SEND<br/>
+    ///绛夊緟鏀捐锛歐AITFEEDBACK<br/>
+    ///浠诲姟瀹屾垚锛欳OMPLETED<br/>
+    ///浠诲姟鍙栨秷瀹屾垚锛欳ANCELED<br/>
+    ///鍛婅锛歐ARNING<br/>
+    /// </summary>
+    public enum AGVStatusEnum
+    {
+        /// <summary>
+        /// 寮�濮嬬Щ鍔�
+        /// </summary>
+        [Description("寮�濮嬬Щ鍔�")]
+        MOVE_BEGIN,
+        /// <summary>
+        /// 鏂� 绠� 鍙� 鏂� 瀹� 鎴�
+        /// </summary>
+        [Description("鏂� 绠� 鍙� 鏂� 瀹� 鎴�")]
+        PICKER_RECEIVE,
+        /// <summary>
+        /// 鏂� 绠� 涓� 鏂� 瀹� 鎴�
+        /// </summary>
+        [Description("鏂� 绠� 涓� 鏂� 瀹� 鎴�")]
+        PICKER_SEND,
+        /// <summary>
+        /// 浠诲姟瀹屾垚
+        /// </summary>
+        [Description("浠诲姟瀹屾垚")]
+        COMPLETED,
+        /// <summary>
+        /// 浠诲姟鍙栨秷瀹屾垚
+        /// </summary>
+        [Description("浠诲姟鍙栨秷瀹屾垚")]
+        CANCELED,
+        /// <summary>
+        /// 鍛婅
+        /// </summary>
+        [Description("鍛婅")]
+        WARNING,
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
index 992b7c0..12b4577 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
@@ -10,161 +10,22 @@
     public enum TaskTypeEnum
     {
         /// <summary>
-        /// 棰嗘枡鍑哄簱
+        /// 鍑哄簱
         /// </summary>
-        [Description("棰嗘枡鍑哄簱")]
+        [Description("鍑哄簱")]
         Outbound = 100,
 
         /// <summary>
-        /// 鐩樼偣鍑哄簱
+        /// 鍏ュ簱
         /// </summary>
-        [Description("鐩樼偣鍑哄簱")]
-        OutInventory = 110,
+        [Description("鍏ュ簱")]
+        Inbound = 500,
 
-        /// <summary>
-        /// 鍒嗘嫞鍑哄簱
-        /// </summary>
-        [Description("鍒嗘嫞鍑哄簱")]
-        OutPick = 120,
-
-        /// <summary>
-        /// 鎴愬搧绌烘墭鍑哄簱
-        /// </summary>
-        [Description("鎴愬搧绌烘墭鍑哄簱")]
-        OutEmpty = 130,
-
-        /// <summary>
-        /// 鎴愬搧鍑哄簱
-        /// </summary>
-        [Description("鎴愬搧鍑哄簱")]
-        OutProduct = 230,
-
-        /// <summary>
-        /// 鍘熸枡鑰佸巶鍑哄簱
-        /// </summary>
-        [Description("鍘熸枡鑰佸巶鍑哄簱")]
-        OldYLOutbound = 300,
-
-        /// <summary>
-        /// 鍘熸枡鍗板埛鍑哄簱
-        /// </summary>
-        [Description("鍘熸枡鍗板埛鍑哄簱")]
-        PrintYLOutbound = 310,
-
-        /// <summary>
-        /// 鍘熸枡绾歌鍒惰渚涙枡
-        /// </summary>
-        [Description("鍘熸枡绾歌鍒惰渚涙枡")]
-        PaperYLOutZDGL = 330,
-
-        /// <summary>
-        /// 杈呮枡鏃犵汉甯冨嚭搴�
-        /// </summary>
-        [Description("杈呮枡鏃犵汉甯冨嚭搴�")]
-        OutWFB = 350,
-
-        /// <summary>
-        /// 浜屾ゼ绾哥渚涙枡
-        /// </summary>
-        [Description("浜屾ゼ绾哥渚涙枡")]
-        OutCarton = 360,
-
-        /// <summary>
-        /// 鏃犵汉甯冩穻鑶滃嚭搴�
-        /// </summary>
-        [Description("鏃犵汉甯冩穻鑶滃嚭搴�")]
-        OutWFBLM = 370,
-
-        /// <summary>
-        /// 绾稿紶娣嬭啘鍑哄簱
-        /// </summary>
-        [Description("绾稿紶娣嬭啘鍑哄簱")]
-        OutPaperLM = 380,
-
-        /// <summary>
-        /// 鍐插垏鍖哄嚭搴�
-        /// </summary>
-        [Description("鍐插垏鍖哄嚭搴�")]
-        OutChongQie = 390,
-
-        /// <summary>
-        /// 妯″垏鍖哄嚭搴�
-        /// </summary>
-        [Description("妯″垏鍖哄嚭搴�")]
-        OutMoQie = 400,
-
-        /// <summary>
-        /// 鍒嗗垏鍖哄嚭搴�
-        /// </summary>
-        [Description("鍒嗗垏鍖哄嚭搴�")]
-        OutFenQie = 410,
-
-        /// <summary>
-        /// 鏃犵汉甯冨埗琚嬩緵鏂�
-        /// </summary>
-        [Description("鏃犵汉琚嬪埗琚嬩緵鏂�")]
-        OutWFBGL = 420,
-
-        /// <summary>
-        /// 閲囪喘鍏ュ簱
-        /// </summary>
-        [Description("閲囪喘鍏ュ簱")]
-        Inbound = 510,
-
-        /// <summary>
-        /// 鐩樼偣鍏ュ簱
-        /// </summary>
-        [Description("鐩樼偣鍏ュ簱")]
-        InInventory = 520,
-
-        /// <summary>
-        /// 鍒嗘嫞鍏ュ簱
-        /// </summary>
-        [Description("鍒嗘嫞鍏ュ簱")]
-        InPick = 530,
-
-        /// <summary>
-        /// 鎴愬搧鍏ュ簱
-        /// </summary>
-        [Description("鎴愬搧鍏ュ簱")]
-        InProduct = 610,
-
-        /// <summary>
-        /// 鎴愬搧绌烘墭鍥炲簱
-        /// </summary>
-        [Description("鎴愬搧绌烘墭鍥炲簱")]
-        EmptyProductBack = 630,
-
-        /// <summary>
-        /// 鍘熸枡鍗板埛鍗婃垚鍝佸叆搴�
-        /// </summary>
-        [Description("鍘熸枡鍗板埛鍗婃垚鍝佸叆搴�")]
-        PrintYLInbound = 710,
-
-        /// <summary>
-        /// 鍘熸枡鍗板埛浣欐枡閫�搴�
-        /// </summary>
-        [Description("鍘熸枡鍗板埛浣欐枡閫�搴�")]
-        PrintYLBackInbound = 720,
-
-        /// <summary>
-        /// 鍘熸枡鍗板埛浣欐枡閫�搴�
-        /// </summary>
-        [Description("鍘熸枡绾歌浣欐枡閫�搴�")]
-        PaperYLBackInbound = 730,
-
-        /// <summary>
-        /// 鍘熸枡鑰佸巶閫�搴�
-        /// </summary>
-        [Description("鍘熸枡鑰佸巶閫�搴�")]
-        PaperOldYLBackInbound = 740,
-
-        /// <summary>
-        /// 宸烽亾鍐呯Щ搴�
-        /// </summary>
-        [Description("宸烽亾鍐呯Щ搴�")]
-        Relocation = 900
-
+        ///// <summary>
+        ///// 宸烽亾鍐呯Щ搴�
+        ///// </summary>
+        //[Description("宸烽亾鍐呯Щ搴�")]
+        //Relocation = 900
     }
 
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/WareHouseEnum/WarehouseEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/WareHouseEnum/WarehouseEnum.cs"
index c78a355..14c44bd 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/WareHouseEnum/WarehouseEnum.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Common/WareHouseEnum/WarehouseEnum.cs"
@@ -9,68 +9,8 @@
 {
     /// <summary>
     /// 浠撳簱
-    /// HA57 = 娣畨浜屽巶 - 鏉挎枡浠�<br/>
-    /// HA58 = 娣畨浜屽巶 - PP浠�<br/>
-    /// HA60 = 娣畨浜屽巶 - 杈呮枡浠�<br/>
-    /// HA64 = 娣畨浜屽巶 - 娴嬭瘯鏋朵粨<br/>
-    /// HA71 = 娣畨浜屽巶 - 鎴愬搧浠�<br/>
-    /// HA72 = 娣畨浜屽巶 - 灏炬暟浠�<br/>
-    /// HA73 = 娣畨浜屽巶 - 鐮斿彂浠�<br/>
-    /// HA101 = 娣畨浜屽巶 - 鎴愬搧浠撳钩搴�<br/>
-    /// HA152 = 娣畨浜屽巶 - 骞茶啘浠�<br/>
-    /// HA153 = 娣畨浜屽巶 - 娌瑰ⅷ浠�<br/>
     /// </summary>
     public enum WarehouseEnum
     {
-        /// <summary>
-        /// 鏉挎枡浠�
-        /// </summary>
-        [Description("鏉挎枡浠�")]
-        HA57,
-        /// <summary>
-        /// PP浠�
-        /// </summary>
-        [Description("PP浠�")]
-        HA58,
-        /// <summary>
-        /// 杈呮枡浠�
-        /// </summary>
-        [Description("杈呮枡浠�")]
-        HA60,
-        /// <summary>
-        /// 娴嬭瘯鏋朵粨
-        /// </summary>
-        [Description("娴嬭瘯鏋朵粨")]
-        HA64,
-        /// <summary>
-        /// 鎴愬搧浠�
-        /// </summary>
-        [Description("鎴愬搧浠�")]
-        HA71,
-        /// <summary>
-        /// 灏炬暟浠�
-        /// </summary>
-        [Description("灏炬暟浠�")]
-        HA72,
-        /// <summary>
-        /// 鐮斿彂浠�
-        /// </summary>
-        [Description("鐮斿彂浠�")]
-        HA73,
-        /// <summary>
-        /// 鎴愬搧浠撳钩搴�
-        /// </summary>
-        [Description("鎴愬搧浠撳钩搴�")]
-        HA101,
-        /// <summary>
-        /// 骞茶啘浠�
-        /// </summary>
-        [Description("骞茶啘浠�")]
-        HA152,
-        /// <summary>
-        /// 娌瑰ⅷ浠�
-        /// </summary>
-        [Description("娌瑰ⅷ浠�")]
-        HA153
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvResponseContent.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvResponseContent.cs"
index 4344974..eda447d 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvResponseContent.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvResponseContent.cs"
@@ -6,23 +6,26 @@
 
 namespace WIDESEA_DTO.Agv
 {
+    /// <summary>
+    /// AGV杩斿洖鍙傛暟
+    /// </summary>
     public class AgvResponseContent
     {
         /// <summary>
-        /// 杩斿洖鐮�
+        /// 
+        /// </summary>
+        public object Data { get; set; }
+        /// <summary>
+        /// 杩斿洖浠g爜
         /// </summary>
         public string Code { get; set; }
         /// <summary>
-        /// 杩斿洖娑堟伅
+        /// 杩斿洖淇℃伅
         /// </summary>
         public string Message { get; set; }
         /// <summary>
-        /// 璇锋眰缂栧彿
+        /// 杩斿洖缁撴灉
         /// </summary>
-        public string ReqCode { get; set; }
-        /// <summary>
-        /// 鑷畾涔夎繑鍥烇紙杩斿洖浠诲姟鍗曞彿锛�
-        /// </summary>
-        public string Data { get; set; }
+        public bool Success { get; set; }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskFlowDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskFlowDTO.cs"
new file mode 100644
index 0000000..e38c2ff
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskFlowDTO.cs"
@@ -0,0 +1,28 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_DTO.Agv
+{
+    public class AgvTaskFlowDTO
+    {
+        /// <summary>
+        /// 璇锋眰ID
+        /// </summary>
+        public string RequestId { get; set; }
+        /// <summary>
+        /// 鎵ц浠诲姟鐨勬枡绠卞彿
+        /// </summary>
+        public string ContainerCode { get; set; }
+        /// <summary>
+        /// 褰撳墠鎵ц浠诲姟鍙�
+        /// </summary>
+        public string MissionCode { get; set; }
+        /// <summary>
+        /// 褰撳墠鎵ц浣滀笟鐨勮妭鐐�
+        /// </summary>
+        public string Position { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskSendDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskSendDTO.cs"
index 019904c..47f085d 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskSendDTO.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskSendDTO.cs"
@@ -6,44 +6,121 @@
 
 namespace WIDESEAWCS_DTO.Agv
 {
+    public class MissionDataItem
+    {
+        /// <summary>
+        /// 鎼繍鏂欑搴忓彿浠�1寮�濮�
+        /// </summary>
+        public int Sequence { get; set; } = 1;
+        /// <summary>
+        /// 鏂欑鍙�
+        /// </summary>
+        public string BinCode { get; set; }
+        /// <summary>
+        /// 鏂欑鎵�鍦ㄧ殑璧峰鐐逛綅
+        /// </summary>
+        public string StartPosition { get; set; }
+        /// <summary>
+        /// 鏂欑鎵�鍦ㄧ殑璧峰妲戒綅
+        /// </summary>
+        public string StartSlotCode { get; set; }
+        /// <summary>
+        /// 鍙栨枡绠辨椂涔嬪墠鏄惁闇�瑕佺‘璁�
+        /// </summary>
+        public bool TakeActionConfirm { get; set; }
+        /// <summary>
+        /// 鍙栨枡绠卞悗鏄惁闇�瑕侀�氱煡
+        /// </summary>
+        public bool TakeActionInform { get; set; }
+        /// <summary>
+        /// 鏂欑鎵�鍦ㄧ殑鐩爣鐐逛綅
+        /// </summary>
+        public string EndPosition { get; set; }
+        /// <summary>
+        /// 鏂欑鎵�鍦ㄧ殑鐩爣妲戒綅
+        /// </summary>
+        public string EndSlotCode { get; set; }
+        /// <summary>
+        /// 鏀炬枡绠辨椂涔嬪墠鏄惁闇�瑕佺‘璁�
+        /// </summary>
+        public bool PutActionConfirm { get; set; }
+        /// <summary>
+        /// 鏀炬枡绠卞悗鏄惁闇�瑕侀�氱煡
+        /// </summary>
+        public bool PutActionInform { get; set; }
+    }
+    /// <summary>
+    /// AGV浠诲姟鍙戦��
+    /// </summary>
     public class AgvTaskSendDTO
     {
         /// <summary>
-        /// 澶栨帴绯荤粺鏍囪瘑
+        /// 搴撳瓨缁勭粐ID
         /// </summary>
-        public string SysToken { get; set; }
+        public string OrgId { get; set; } = "HF";
         /// <summary>
-        /// 浠诲姟妯$増
+        /// 璇锋眰 id
         /// </summary>
-        public string TaskCode { get; set; } = "DUIGAO1";
+        public string RequestId { get; set; }
         /// <summary>
-        /// 鎺ユ敹浠诲姟
+        /// 浠诲姟缂栫爜
         /// </summary>
-        public string ReceiveTaskID { get; set; }
+        public string MissionCode { get; set; }
         /// <summary>
-        /// 饣嬭締缂栫爜
+        /// 浠诲姟绫诲瀷锛歅ICKER_MOVE
         /// </summary>
-        public string AgvCode { get; set; }
+        public string MissionType { get; set; } = "PICKER_MOVE";
         /// <summary>
-        /// 鍦板浘缂栫爜
+        /// 浠诲姟鐪嬫澘灞曠ず浠诲姟绫诲瀷
         /// </summary>
-        public string MapCode { get; set; } = "01";
+        public string ViewBoardType { get; set; }
         /// <summary>
-        /// 杞﹁締闆嗙兢
+        /// 鏈哄櫒浜哄叿浣撳瀷鍙�
         /// </summary>
-        public string AgvGroupCode { get; set; }
+        public List<string> RobotModels { get; set; }
         /// <summary>
-        /// 浠诲姟浼樺厛
+        /// 鏈哄櫒浜虹紪鍙�
+        /// </summary>
+        public List<string> RobotIds { get; set; }
+        /// <summary>
+        /// 鏈哄櫒浜哄姛鑳界被鍨婸ICKER
+        /// </summary>
+        public string RobotType { get; set; } = "PICKER";
+        /// <summary>
+        /// 浣滀笟浼樺厛绾�
         /// </summary>
         public int Priority { get; set; }
         /// <summary>
-        /// 绔欑偣鍙傛暟
+        /// 瀹瑰櫒妯″瀷缂栫爜
         /// </summary>
-        public List<PointDetail> Variables { get; set; }
-    }
-    public class PointDetail
-    {
-        public string Code { get; set; }
-        public string? Value { get; set; }
+        public string ContainerModelCode { get; set; }
+        /// <summary>
+        /// 瀹瑰櫒缂栧彿
+        /// </summary>
+        public string ContainerCode { get; set; }
+        /// <summary>
+        /// 浣滀笟娴佺▼妯℃澘缂栧彿
+        /// </summary>
+        public string TemplateCode { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public bool LockRobotAfterFinish { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string UnlockRobotId { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string UnlockMissionCode { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string IdleNode { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public List<MissionDataItem> MissionData { get; set; }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvUpdateDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvUpdateDTO.cs"
index 0f3aea6..e2dcd95 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvUpdateDTO.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/Agv/AgvUpdateDTO.cs"
@@ -7,24 +7,45 @@
 namespace WIDESEA_DTO.Agv
 {
     public class AgvUpdateDTO
-    {
+{
         /// <summary>
-        /// 浠诲姟鍗曞彿
+        /// 浠诲姟缂栧彿
         /// </summary>
-        public string ReceiveTaskID { get; set; }
+        public string MissionCode { get; set; }
         /// <summary>
-        /// 璋冨害绯荤粺鍗曞彿
+        /// 浣滀笟绫诲瀷
         /// </summary>
-        public string MakeTaskID { get; set; }
+        public string ViewBoardType { get; set; }
         /// <summary>
-        /// 浠诲姟鐘舵��
+        /// 褰撳墠鎵�鍦ㄦЫ浣�
         /// </summary>
-        public string TaskState { get; set; }
+        public string SlotCode { get; set; }
         /// <summary>
-        /// 鍙栨斁璐у畬鎴愮姸鎬�<br/>
-        /// 1鍙栬揣瀹屾垚<br/>
-        /// 2鏀捐揣瀹屾垚<br/>
+        /// 鎵ц褰撳墠浠诲姟鐨勬満鍣ㄤ汉 id
         /// </summary>
-        public string GoodsState { get; set; }
+        public string RobotId { get; set; }
+        /// <summary>
+        /// 瀹瑰櫒缂栧彿
+        /// </summary>
+        public string ContainerCode { get; set; }
+        /// <summary>
+        /// 瀹瑰櫒褰撳墠浣嶇疆
+        /// </summary>
+        public string CurrentPosition { get; set; }
+        /// <summary>
+        ///浣滀笟褰撳墠鐘舵��<br/>
+        ///寮�濮嬬Щ鍔細MOVE_BEGIN<br/>
+        ///鏂� 绠� 鍙� 鏂� 瀹� 鎴�:PICKER_RECEIVE<br/>
+        ///鏂� 绠� 涓� 鏂� 瀹� 鎴�:PICKER_SEND<br/>
+        ///绛夊緟鏀捐锛歐AITFEEDBACK<br/>
+        ///浠诲姟瀹屾垚锛欳OMPLETED<br/>
+        ///浠诲姟鍙栨秷瀹屾垚锛欳ANCELED<br/>
+        ///鍛婅锛歐ARNING<br/>
+        /// </summary>
+        public string MissionStatus { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string Message { get; set; }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/BasicInfo/InitializationLocationDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/BasicInfo/InitializationLocationDTO.cs"
new file mode 100644
index 0000000..6356442
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/BasicInfo/InitializationLocationDTO.cs"
@@ -0,0 +1,31 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.Basic
+{
+    public class InitializationLocationDTO
+    {
+        /// <summary>
+        /// 宸烽亾鍙�
+        /// </summary>
+        public string Roadway { get; set; }
+
+        /// <summary>
+        /// 琛�
+        /// </summary>
+        public int MaxRow { get; set; }
+
+        /// <summary>
+        /// 鍒�
+        /// </summary>
+        public int MaxColumn { get; set; }
+
+        /// <summary>
+        /// 灞�
+        /// </summary>
+        public int MaxLayer { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/RequestAGVArriveDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/RequestAGVArriveDTO.cs"
deleted file mode 100644
index 56e80ef..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/RequestAGVArriveDTO.cs"
+++ /dev/null
@@ -1,35 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace WIDESEAWCS_DTO
-{
-    /// <summary>
-    /// AGV灏忚溅鍒拌揪閫氱煡
-    /// </summary>
-    public class RequestAGVArriveDTO
-    {
-        public List<AgvArriveNotice> SD_WorkCentreAgvArriveNoticeInfo { get; set; }
-    }
-    public class AgvArriveNotice
-    {
-        /// <summary>
-        /// 棰嗘枡鏄庣粏ID
-        /// </summary>
-        public int DispatchPlanMaterialId { get; set; }
-        /// <summary>
-        /// 鍔犲伐涓績缂栫爜
-        /// </summary>
-        public string WorkCentreCode { get; set; }
-        /// <summary>
-        /// 鍛ㄨ浆浣嶄綅缃紪鐮�
-        /// </summary>
-        public string LocationCode { get; set; }
-        /// <summary>
-        /// 鍛煎彨ID
-        /// </summary>
-        public string CallId { get; set; }
-    }
-}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/TaskInfo/ContainerDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/TaskInfo/ContainerDTO.cs"
new file mode 100644
index 0000000..6c8d625
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/TaskInfo/ContainerDTO.cs"
@@ -0,0 +1,65 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_DTO.TaskInfo
+{
+    /// <summary>
+    /// 鏂欑鍒拌揪
+    /// </summary>
+    public class ContainerArriveDTO
+    {
+        /// <summary>
+        /// 鎷i�夊伐浣嶇紪鍙�
+        /// </summary>
+        public string SlotCode { get; set; }
+        /// <summary>
+        /// 鏂欑鍙�
+        /// </summary>
+        public string ContainerCode { get; set; }
+    }
+    /// <summary>
+    /// 鏂欑娴佸姩
+    /// </summary>
+    public class ContainerFlowDTO
+    {
+        /// <summary>
+        /// 鎷i�夊伐浣嶇紪鍙�
+        /// </summary>
+        public string SlotCode { get; set; }
+        /// <summary>
+        /// 鏂欑鍙�
+        /// </summary>
+        public string ContainerCode { get; set; }
+        /// <summary>
+        /// 娴佸姩鍘诲悜<br/>
+        /// 100搴撳唴<br/>
+        /// 200鍙栧嚭<br/>
+        /// </summary>
+        public string Direction { get; set; }
+    }
+    /// <summary>
+    /// 鏂欑鍏ュ簱瀹屾垚涓婃姤
+    /// </summary>
+    public class ContainerInFinishDTO
+    {
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        public string TaskCode { get; set; }
+        /// <summary>
+        /// 鏂欑鍙�
+        /// </summary>
+        public string ContainerCode { get; set; }
+        /// <summary>
+        /// 璧峰绔欏彴
+        /// </summary>
+        public string FromStationCode { get; set; }
+        /// <summary>
+        /// 鐩爣璐т綅
+        /// </summary>
+        public string ToLocationCode { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs"
index 55d9cf3..0377d7b 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs"
@@ -6,80 +6,62 @@
 
 namespace WIDESEAWCS_DTO.TaskInfo
 {
-    public class WMSTaskDTO
+    /// <summary>
+    /// 浠诲姟鏄庣粏
+    /// </summary>
+    public class TasksItem
     {
-        /// <summary>
-        /// WMS浠诲姟涓婚敭
-        /// </summary>
-        public int Id { get; set; }
-
         /// <summary>
         /// 浠诲姟鍙�
         /// </summary>
-        public int TaskNum { get; set; }
-
+        public string TaskCode { get; set; }
         /// <summary>
-        /// 鎵樼洏鍙�
+        /// 浠诲姟浼樺厛绾�
         /// </summary>
-        public string PalletCode { get; set; }
-
+        public int TaskPriority { get; set; }
         /// <summary>
-        /// Rfid淇℃伅
+        /// 鏂欑鍙�
         /// </summary>
-        public string RfidCode { get; set; }
-
+        public string ContainerCode { get; set; }
         /// <summary>
-        /// 宸烽亾鍙�
+        /// 鏂欑绫诲瀷
         /// </summary>
-        public string RoadWay { get; set; }
+        public string ContainerType { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string StorageTag { get; set; }
+        /// <summary>
+        /// 璧峰搴撲綅
+        /// </summary>
+        public string FromLocationCode { get; set; }
+        /// <summary>
+        /// 鍑哄簱鐨勭洰鏍囨搷浣滃彴缂栧彿
+        /// </summary>
+        public string ToStationCode { get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public string ToLocationCode { get; set; }
+    }
 
+    public class WMSTaskDTO
+    {
         /// <summary>
         /// 浠诲姟绫诲瀷
         /// </summary>
-        public int TaskType { get; set; }
-
+        public string TaskType { get; set; }
         /// <summary>
-        /// 浠诲姟鐘舵��
+        /// 浠诲姟鍒嗙粍
         /// </summary>
-        public int TaskStatus { get; set; }
-
+        public string TaskGroupCode { get; set; }
         /// <summary>
-        /// 璧风偣
+        /// 
         /// </summary>
-        public string SourceAddress { get; set; }
-
+        public string GroupPriority { get; set; }
         /// <summary>
-        /// 缁堢偣
+        /// 浠诲姟鏄庣粏
         /// </summary>
-        public string TargetAddress { get; set; }
-
-        /// <summary>
-        /// 浼樺厛绾�
-        /// </summary>
-        public int Grade { get; set; }
-
-        public int WarehouseId { get; set; }
-
-        /// <summary>
-        /// 浠诲姟缁�
-        /// </summary>
-        public string GroupId { get; set; }
-
-        /// <summary>
-        /// 浠诲姟鐗╂枡闀垮害
-        /// </summary>
-        public int TaskLength { get; set; }
-
-        public string AGVArea { get; set; }
-
-        public int PalletType { get; set; }
-        /// <summary>
-        /// MES璁″垝Id
-        /// </summary>
-        public int DispatchPlanId { get; set; }
-        /// <summary>
-        /// 鍔犲伐涓績
-        /// </summary>
-        public string WorkCentreCode { get; set; }
+        public List<TasksItem> Tasks { get; set; }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/WIDESEAWCS_DTO.csproj" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/WIDESEAWCS_DTO.csproj"
index 677b3e7..01765a3 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/WIDESEAWCS_DTO.csproj"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/WIDESEAWCS_DTO.csproj"
@@ -10,8 +10,4 @@
 	  <ProjectReference Include="..\WIDESEAWCS_Model\WIDESEAWCS_Model.csproj" />
 	</ItemGroup>
 
-	<ItemGroup>
-	  <Folder Include="BasicInfo\" />
-	</ItemGroup>
-
 </Project>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/MESResponse.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/WMSResponseContent.cs"
similarity index 76%
rename from "\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/MESResponse.cs"
rename to "\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/WMSResponseContent.cs"
index 15741a2..d02f463 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/MESResponse.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_DTO/WMSResponseContent.cs"
@@ -7,14 +7,14 @@
 namespace WIDESEA_External.Model
 {
     /// <summary>
-    /// MES杩斿洖
+    /// WMS杩斿洖
     /// </summary>
-    public class MESResponse
+    public class WMSResponseContent
     {
         /// <summary>
         /// 鎴愬姛缁撴灉
         /// </summary>
-        public bool Result { get; set; }
+        public string Code { get; set; }
         /// <summary>
         /// 杩斿洖淇℃伅
         /// </summary>
@@ -22,6 +22,6 @@
         /// <summary>
         /// 杩斿洖瀵硅薄
         /// </summary>
-        public bool Obj { get; set; }
+        public object Data { get; set; }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_IBasicInfoRepository/ILocationInfoRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_IBasicInfoRepository/ILocationInfoRepository.cs"
index f0cfede..7fd841f 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_IBasicInfoRepository/ILocationInfoRepository.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_IBasicInfoRepository/ILocationInfoRepository.cs"
@@ -36,5 +36,10 @@
         /// <param name="warehouseId"></param>
         /// <returns></returns>
         List<string> GetCanOutLocationCodes(int warehouseId);
+        /// <summary>
+        /// 鑾峰彇鏂欑瀵瑰簲鍑哄簱璐т綅
+        /// </summary>
+        /// <returns></returns>
+        List<Dt_LocationInfo> GetCanOut(List<string> strings);
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_IBasicInfoService/ILocationInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_IBasicInfoService/ILocationInfoService.cs"
index 989f42c..6378de9 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_IBasicInfoService/ILocationInfoService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_IBasicInfoService/ILocationInfoService.cs"
@@ -4,6 +4,7 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Core;
+using WIDESEA_DTO.Basic;
 using WIDESEAWCS_Common;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.BaseServices;
@@ -51,6 +52,13 @@
         /// <param name="roadwayNo">宸烽亾鍙�</param>
         /// <param name="palletType">鎵樼洏绫诲瀷</param>
         /// <returns></returns>
-        Dt_LocationInfo? AssignLocation(string roadwayNo, int palletType, int warehouseId);
+        Dt_LocationInfo? AssignLocation();
+
+        /// <summary>
+        /// 鍒濆鍖栬揣浣�
+        /// </summary>
+        /// <param name="initializationLocationDTO"></param>
+        /// <returns></returns>
+        WebResponseContent InitializationLocation(InitializationLocationDTO initializationLocationDTO);
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_ITaskInfoRepository/ITaskRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_ITaskInfoRepository/ITaskRepository.cs"
index 1b36db9..f59a03d 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_ITaskInfoRepository/ITaskRepository.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_ITaskInfoRepository/ITaskRepository.cs"
@@ -27,6 +27,6 @@
 {
     public interface ITaskRepository : IRepository<Dt_Task>
     {
-
+        int GetTaskNum(string sequenceName);
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
index e720fe9..c295c50 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
@@ -57,57 +57,8 @@
         /// </summary>
         /// <param name="taskDTOs">WMS浠诲姟瀵硅薄闆嗗悎</param>
         /// <returns>杩斿洖澶勭悊缁撴灉</returns>
-        WebResponseContent ReceiveWMSTask([NotNull] List<WMSTaskDTO> taskDTOs);
-
-        /// <summary>
-        /// 鏍规嵁鎵樼洏鍙枫�佽捣濮嬪湴鍧�鍚慦MS璇锋眰浠诲姟
-        /// </summary>
-        /// <param name="palletCode">鎵樼洏鍙�</param>
-        /// <param name="sourceAddress">璧峰鍦板潃</param>
-        /// <returns></returns>
-        WebResponseContent RequestWMSTask(string palletCode, string sourceAddress, string materielBoxCode = "");
-        /// <summary>
-        /// 璇锋眰鍘熸枡鍏ュ簱
-        /// </summary>
-        /// <param name="palletCode">鎵樼洏</param>
-        /// <param name="sourceAddress">璧风偣</param>
-        /// <returns></returns>
-        WebResponseContent RequestYLWMSTaskSimple(string palletCode, string sourceAddress, int taskNum = 0);
-        /// <summary>
-        /// 璇锋眰鍏ュ簱宸烽亾
-        /// </summary>
-        /// <returns></returns>
-        WebResponseContent AssignCPRoadwayNo();
-
-        // <summary>
-        /// 璇锋眰鍘熸枡鍏ュ簱宸烽亾
-        /// </summary>
-        /// <returns></returns>
-        WebResponseContent AssignYLRoadwayNo(string palletCode);
-        /// <summary>
-        /// 璇锋眰鍏ュ簱浠诲姟
-        /// </summary>
-        /// <param name="palletCode">鎵樼洏鍙�</param>
-        /// <param name="sourceAddress">璧峰鍦板潃</param>
-        /// /// <param name="roadWay">宸烽亾</param>
-        /// <returns></returns>
-        WebResponseContent RequestWMSTaskSimple(string palletCode, string sourceAddress, string roadWay="", int taskType = 630,int taskNum=0,string targetAddress="");
-
-        /// <summary>
-        /// 鍚慦MS鐢宠鍒嗛厤璐т綅
-        /// </summary>
-        /// <param name="taskNum">浠诲姟鍙�</param>
-        /// <param name="roadwayNo">宸烽亾鍙�</param>
-        /// <returns></returns>
-        string? RequestAssignLocation(int taskNum, string roadwayNo);
-
-        /// <summary>
-        /// 鍚慦MS鐢宠鍑哄簱AGV缁堢偣
-        /// </summary>
-        /// <param name="taskNum">浠诲姟鍙�</param>
-        /// <returns></returns>
-        string? RequestTargetAddress(int taskNum);
-
+        WebResponseContent ReceiveWMSTask([NotNull] WMSTaskDTO taskDTO);
+        
         /// <summary>
         /// 鏇存柊浠诲姟寮傚父淇℃伅鏄剧ず
         /// </summary>
@@ -151,21 +102,28 @@
         /// <param name="targetAddress">淇敼鍚庣殑鐩爣鍦板潃</param>
         /// <param name="currentAddress">淇敼鍚庣殑褰撳墠鍦板潃</param>
         /// <param name="nextAddress">淇敼鍚庣殑涓嬩竴鍦板潃</param>
-        void UpdateTask(Dt_Task task, TaskStatusEnum taskStatus, string deviceCode = "", string sourceAddress = "", string targetAddress = "", string currentAddress = "", string nextAddress = "", string roadwayNo = "", int heightType = 0);
+        void UpdateTask(Dt_Task task, TaskStatusEnum taskStatus, string deviceCode = "", string sourceAddress = "", string targetAddress = "", string currentAddress = "", string nextAddress = "", string roadwayNo = "");
 
         /// <summary>
         /// 鎺ュ彈WMS鎵嬪姩瀹屾垚浠诲姟
         /// </summary>
         /// <param name="taskNum"></param>
         /// <returns></returns>
-        public WebResponseContent RecWMSTaskCompleted(int taskNum);
-
+        WebResponseContent RecWMSTaskCompleted(int taskNum);
         /// <summary>
-        /// 鏍规嵁鎵樼洏鍙枫�佸綋鍓嶅湴鍧�鏌ヨAGV瀹屾垚鐨勪换鍔�
+        /// WMS鏂欑鍒拌揪鎷i�変綅涓婃姤
         /// </summary>
-        /// <param name="Barcode">鎵樼洏鍙�</param>
-        /// <param name="currentAddress">褰撳墠鍦板潃</param>
         /// <returns></returns>
-        Dt_Task QueryBarCodeAGVFinishTask(int TaskNum, string currentAddress);
+        WebResponseContent WMSPickUp(string stationCode, string pickCode);
+        /// <summary>
+        /// AGV浠诲姟鏀捐
+        /// </summary>
+        /// <returns></returns>
+        WebResponseContent AgvTaskFlow(string code);
+        /// <summary>
+        /// 浠诲姟瀹屾垚
+        /// </summary>
+        /// <returns></returns>
+        WebResponseContent TaskCompleted(int taskNum);
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Model/Models/BasicInfo/Dt_LocationInfo.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Model/Models/BasicInfo/Dt_LocationInfo.cs"
index 02e3f0a..615e8ee 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Model/Models/BasicInfo/Dt_LocationInfo.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Model/Models/BasicInfo/Dt_LocationInfo.cs"
@@ -21,10 +21,16 @@
         public int Id { get; set; }
 
         /// <summary>
-        /// 浠撳簱缂栧彿
+        /// 搴撳尯缂栧彿
         /// </summary>
-        [SugarColumn(IsNullable = false, ColumnDescription = "浠撳簱缂栧彿")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "搴撳尯缂栧彿")]
         public int WarehouseId { get; set; }
+
+        /// <summary>
+        /// 鏂欑缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鏂欑缂栧彿")]
+        public string PalletCode { get; set; }
 
         /// <summary>
         /// 璐т綅缂栧彿
@@ -63,10 +69,10 @@
         public int Layer {  get; set; }
 
         /// <summary>
-        /// 璐т綅绫诲瀷
+        /// AGV鍙栬揣鐐�
         /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDescription = "璐т綅绫诲瀷")]
-        public int LocationType {  get; set; }
+        [SugarColumn(IsNullable = true, ColumnDescription = "AGV鍙栬揣鐐�")]
+        public string AgvPoint { get; set; }
 
         /// <summary>
         /// 璐т綅鐘舵��
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Model/Models/BasicInfo/Dt_StationManger.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Model/Models/BasicInfo/Dt_StationManger.cs"
index 6502526..3993111 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Model/Models/BasicInfo/Dt_StationManger.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Model/Models/BasicInfo/Dt_StationManger.cs"
@@ -33,16 +33,22 @@
         /// 绔欏彴绫诲瀷 <br/>
         /// 1锛氬彧鍏� <br/>
         /// 2锛氬彧鍑� <br/>
-        /// 3锛氬彲鍏ュ彲鍑�
+        /// 3锛氬彲鍏ュ彲鍑�<br/>
         /// </summary>
         [SugarColumn(IsNullable = false, ColumnDescription = "绔欏彴绫诲瀷")]
         public int StationType {  get; set; }
 
         /// <summary>
-        /// 瀵瑰簲鍫嗗灈鏈烘帓-鍒�-灞�
+        /// 鍙栨斁浣嶇疆
         /// </summary>
-        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "瀵瑰簲鍫嗗灈鏈烘帓-鍒�-灞�")]
-        public string StackerCraneStationCode { get; set; }
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鍙栨斁浣嶇疆")]
+        public string CraneStationCode { get; set; }
+
+        /// <summary>
+        /// 鍏宠仈鎷i�夊伐浣�
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鍏宠仈鎷i�夊伐浣�")]
+        public string PickStationCode { get; set; }
 
         /// <summary>
         /// 绔欏彴璁惧缂栧彿
@@ -51,41 +57,18 @@
         public string StationDeviceCode { get; set; }
 
         /// <summary>
-        /// 鍫嗗灈鏈虹紪鍙�
+        /// 鍏宠仈璁惧
         /// </summary>
-        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鍫嗗灈鏈虹紪鍙�")]
-        public string StackerCraneCode { get; set; }
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鍏宠仈璁惧")]
+        public string CraneCode { get; set; }
 
-        /// <summary>
-        /// AGV绔欏彴缂栧彿
-        /// </summary>
-        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "AGV绔欏彴缂栧彿")]
-        public string? AGVStationCode { get; set; }
-        /// <summary>
-        /// AGV绔欏彴鍙栨斁楂樺害
-        /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDescription = "AGV绔欏彴鍙栨斁楂樺害")]
-        public decimal AGVStationHeight { get; set; }
-        /// <summary>
-        /// AGV鍓嶇疆鐐�
-        /// </summary>
-        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "AGV鍓嶇疆鐐�")]
-        public string? AGVFrontCode { get; set; }
         /// <summary>
         /// 绔欏彴鏄惁鍙敤 <br/>
         /// 0锛氬彲鐢� <br/>
-        /// 1锛氬崰鐢� <br/>
+        /// 1锛氱鐢� <br/>
         /// </summary>
         [SugarColumn(IsNullable = false, ColumnDescription = "绔欏彴鏄惁鍙敤")]
-        public int IsOccupied { get; set; }
-
-        /// <summary>
-        /// 绔欏彴鏄惁鍙敤 <br/>
-        /// 0锛氬彲鐢� <br/>
-        /// 1锛氬崰鐢� <br/>
-        /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDescription = "绔欏彴鏄惁鍙敤")]
-        public int IsManual { get; set; }
+        public int Enable { get; set; }
 
         /// <summary>
         /// 澶囨敞
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Model/Models/BasicInfo/Dt_Warehouse.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Model/Models/BasicInfo/Dt_Warehouse.cs"
index 756eb53..fd6d469 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Model/Models/BasicInfo/Dt_Warehouse.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Model/Models/BasicInfo/Dt_Warehouse.cs"
@@ -9,9 +9,9 @@
 namespace WIDESEAWCS_Model.Models
 {
     /// <summary>
-    /// 浠撳簱淇℃伅
+    /// 搴撳尯淇℃伅
     /// </summary>
-    [SugarTable(nameof(Dt_Warehouse), "浠撳簱淇℃伅")]
+    [SugarTable(nameof(Dt_Warehouse), "搴撳尯淇℃伅")]
     public class Dt_Warehouse : BaseEntity
     {
         /// <summary>
@@ -21,31 +21,25 @@
         public int WarehouseId { get; set; }
 
         /// <summary>
-        /// 浠撳簱缂栧彿
+        /// 搴撳尯缂栧彿
         /// </summary>
         [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "浠撳簱缂栧彿")]
         public string WarehouseCode { get; set; }
 
         /// <summary>
-        /// 浠撳簱鍚嶇О
+        /// 搴撳尯鍚嶇О
         /// </summary>
         [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "浠撳簱鍚嶇О")]
         public string WarehouseName { get; set; }
 
         /// <summary>
-        /// 浠撳簱绫诲瀷
-        /// </summary>
-        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "浠撳簱绫诲瀷")]
-        public string WarehouseType { get; set; }
-
-        /// <summary>
-        /// 浠撳簱鐘舵��
+        /// 搴撳尯鐘舵��
         /// </summary>
         [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "浠撳簱鐘舵��")]
         public int WarehouseStatus { get; set; }
 
         /// <summary>
-        /// 浠撳簱鎻忚堪
+        /// 搴撳尯鎻忚堪
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDescription = "浠撳簱鎻忚堪")]
         public string WarehouseDes { get; set; }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs"
index d4d2387..21434a4 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs"
@@ -22,6 +22,7 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core.Attributes;
 using WIDESEAWCS_Core.DB.Models;
 
@@ -43,40 +44,24 @@
         /// </summary>
         [ImporterHeader(Name = "浠诲姟鍙�")]
         [ExporterHeader(DisplayName = "浠诲姟鍙�")]
-        [SugarColumn(IsNullable = false, ColumnDescription = "浠诲姟鍙�")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "浠诲姟鍙�"), Sequence(nameof(SequenceEnum.SeqTaskNum), 100000000)]
         public int TaskNum { get; set; }
 
         /// <summary>
-        /// 浠撳簱涓婚敭
+        /// 搴撳尯涓婚敭
         /// </summary>
-        [ImporterHeader(Name = "浠撳簱涓婚敭")]
-        [ExporterHeader(DisplayName = "浠撳簱涓婚敭")]
-        [SugarColumn(IsNullable = false, ColumnDescription = "浠撳簱涓婚敭")]
+        [ImporterHeader(Name = "搴撳尯涓婚敭")]
+        [ExporterHeader(DisplayName = "搴撳尯涓婚敭")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "搴撳尯涓婚敭")]
         public int WarehouseId {  get; set; }
 
         /// <summary>
-        /// AGV浠诲姟鍙�
+        /// 鏂欑缂栧彿
         /// </summary>
-        [ImporterHeader(Name = "AGV浠诲姟鍙�")]
-        [ExporterHeader(DisplayName = "AGV浠诲姟鍙�")]
-        [SugarColumn(IsNullable = true,Length =50, ColumnDescription = "AGV浠诲姟鍙�")]
-        public string AgvTaskNum { get; set; }
-
-        /// <summary>
-        /// 鎵樼洏缂栧彿
-        /// </summary>
-        [ImporterHeader(Name = "鎵樼洏缂栧彿")]
-        [ExporterHeader(DisplayName = "鎵樼洏缂栧彿")]
-        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎵樼洏缂栧彿")]
+        [ImporterHeader(Name = "鏂欑缂栧彿")]
+        [ExporterHeader(DisplayName = "鏂欑缂栧彿")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鏂欑缂栧彿")]
         public string PalletCode { get; set; }
-
-        /// <summary>
-        /// RFID淇℃伅
-        /// </summary>
-        [ImporterHeader(Name = "RFID淇℃伅")]
-        [ExporterHeader(DisplayName = "RFID淇℃伅")]
-        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "RFID淇℃伅")]
-        public string RfidCode { get; set; }
 
         /// <summary>
         /// 鎵樼洏绫诲瀷
@@ -97,7 +82,6 @@
         [ExporterHeader(DisplayName = "宸烽亾鍙�")]
         [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "宸烽亾鍙�")]
         public string Roadway { get; set; }
-
         /// <summary>
         /// 浠诲姟绫诲瀷
         /// </summary>
@@ -105,7 +89,6 @@
         [ExporterHeader(DisplayName = "浠诲姟绫诲瀷")]
         [SugarColumn(IsNullable = false, ColumnDescription = "浠诲姟绫诲瀷")]
         public int TaskType { get; set; }
-
         /// <summary>
         /// 浠诲姟鐘舵��
         /// </summary>
@@ -113,7 +96,6 @@
         [ExporterHeader(DisplayName = "浠诲姟鐘舵��")]
         [SugarColumn(IsNullable = false, ColumnDescription = "浠诲姟鐘舵��")]
         public int TaskState { get; set; }
-
         /// <summary>
         /// 璧峰鍦板潃
         /// </summary>
@@ -121,7 +103,6 @@
         [ExporterHeader(DisplayName = "璧峰鍦板潃")]
         [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "璧峰鍦板潃")]
         public string SourceAddress { get; set; }
-
         /// <summary>
         /// 鐩爣鍦板潃
         /// </summary>
@@ -129,7 +110,6 @@
         [ExporterHeader(DisplayName = "鐩爣鍦板潃")]
         [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐩爣鍦板潃")]
         public string TargetAddress { get; set; }
-
         /// <summary>
         /// 褰撳墠浣嶇疆
         /// </summary>
@@ -137,7 +117,6 @@
         [ExporterHeader(DisplayName = "褰撳墠浣嶇疆")]
         [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "褰撳墠浣嶇疆")]
         public string CurrentAddress { get; set; }
-
         /// <summary>
         /// 涓嬩竴鍦板潃
         /// </summary>
@@ -145,7 +124,6 @@
         [ExporterHeader(DisplayName = "涓嬩竴鍦板潃")]
         [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "涓嬩竴鍦板潃")]
         public string NextAddress { get; set; }
-
         /// <summary>
         /// 寮傚父淇℃伅
         /// </summary>
@@ -153,7 +131,6 @@
         [ExporterHeader(DisplayName = "寮傚父淇℃伅")]
         [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "寮傚父淇℃伅")]
         public string? ExceptionMessage { get; set; }
-
         /// <summary>
         /// 浼樺厛绾�
         /// </summary>
@@ -163,19 +140,13 @@
         public int Grade { get; set; }
 
         /// <summary>
-        /// WMS浠诲姟涓婚敭
+        /// WMS浠诲姟
         /// </summary>
-        [ImporterHeader(Name = "WMS浠诲姟涓婚敭")]
-        [ExporterHeader(DisplayName = "WMS浠诲姟涓婚敭")]
-        [SugarColumn(IsNullable = false, ColumnDescription = "WMS浠诲姟涓婚敭")]
-        public int WMSId { get; set; }
-        /// <summary>
-        /// 楂樺害绫诲瀷
-        /// </summary>
-        [ImporterHeader(Name = "楂樺害绫诲瀷")]
-        [ExporterHeader(DisplayName = "楂樺害绫诲瀷")]
-        [SugarColumn(IsNullable = false, ColumnDescription = "楂樺害绫诲瀷")]
-        public int HeightType { get; set; }
+        [ImporterHeader(Name = "WMS浠诲姟鍙�")]
+        [ExporterHeader(DisplayName = "WMS浠诲姟鍙�")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "WMS浠诲姟鍙�")]
+        public string WMSId { get; set; }
+
         /// <summary>
         /// 浠诲姟涓嬪彂鏃堕棿
         /// </summary>
@@ -192,34 +163,11 @@
         [SugarColumn(IsNullable = true, ColumnDescription = "浠诲姟缁�")]
         public string GroupId { get; set; }
         /// <summary>
-        /// 浠诲姟鐗╂枡闀垮害
-        /// </summary>
-        [ImporterHeader(Name = "浠诲姟鐗╂枡闀垮害")]
-        [ExporterHeader(DisplayName = "浠诲姟鐗╂枡闀垮害")]
-        [SugarColumn(IsNullable = true, ColumnDescription = "浠诲姟鐗╂枡闀垮害")]
-        public int TaskLength { get; set; }
-        /// <summary>
         /// 澶囨敞
         /// </summary>
         [ImporterHeader(Name = "澶囨敞")]
         [ExporterHeader(DisplayName = "澶囨敞")]
         [SugarColumn(IsNullable = true, Length = 255, ColumnDescription = "澶囨敞")]
         public string Remark { get; set; }
-
-        /// <summary>
-        /// 鍔犲伐涓績缂栫爜
-        /// </summary>
-        [ImporterHeader(Name = "鍔犲伐涓績缂栫爜")]
-        [ExporterHeader(DisplayName = "鍔犲伐涓績缂栫爜")]
-        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鍔犲伐涓績缂栫爜")]
-        public string WorkCentreCode { get; set; }
-
-        /// <summary>
-        /// 鐗╂枡缂栧彿
-        /// </summary>
-        [ImporterHeader(Name = "MES璁″垝Id")]
-        [ExporterHeader(DisplayName = "MES璁″垝Id")]
-        [SugarColumn(IsNullable = true, ColumnDescription = "MES璁″垝Id")]
-        public int DispatchPlanId { get; set; }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs"
index 6a3c278..53a6ca1 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs"
@@ -1,4 +1,5 @@
-锘縰sing Microsoft.AspNetCore.Authorization;
+锘縰sing Autofac.Core;
+using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
 using System.Text;
@@ -43,7 +44,38 @@
             _taskRepository = taskRepository;
             _routerRepository = routerRepository;
         }
+        /// <summary>
+        /// AGV浠诲姟鏇存柊
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("Callback"), AllowAnonymous]
+        public WebResponseContent? Callback([FromBody]AgvUpdateDTO agvUpdateDTO)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                var task = _taskRepository.QueryFirst(x => agvUpdateDTO.ContainerCode==x.PalletCode) ?? throw new Exception($"鏈壘鍒版枡绠便�恵agvUpdateDTO.ContainerCode}銆戜换鍔�");
+                switch (agvUpdateDTO.MissionStatus)
+                {
+                    case nameof(AGVStatusEnum.PICKER_RECEIVE):
+                        _taskService.UpdateTask(task, TaskStatusEnum.AGV_TakeFinish);
+                        break;
+                    case nameof(AGVStatusEnum.PICKER_SEND):
+                        //WebResponseContent responseContent = _taskService.AgvTaskFlow(task.PalletCode);
+                        //if (!responseContent.Status) throw new Exception($"{responseContent.Message}");
+                        _taskService.TaskCompleted(task.TaskNum);
+                        break;
+                    default:
+                        break;
+                }
+                content.OK();
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
 
-        
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Controllers/BasicInfo/LocationInfoController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Controllers/BasicInfo/LocationInfoController.cs"
new file mode 100644
index 0000000..6e4f8d5
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Controllers/BasicInfo/LocationInfoController.cs"
@@ -0,0 +1,73 @@
+锘縰sing HslCommunication.WebSocket;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using System.Collections.Generic;
+using WIDESEA_Core;
+using WIDESEA_DTO.Basic;
+using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.BaseController;
+using WIDESEAWCS_IBasicInfoRepository;
+using WIDESEAWCS_IBasicInfoService;
+using WIDESEAWCS_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Basic
+{
+    /// <summary>
+    /// 璐т綅
+    /// </summary>
+    [Route("api/LocationInfo")]
+    [ApiController]
+    public class LocationInfoController : ApiBaseController<ILocationInfoService, Dt_LocationInfo>
+    {
+        private readonly ILocationInfoRepository _repository;
+        public LocationInfoController(ILocationInfoService service, ILocationInfoRepository repository) : base(service)
+        {
+            _repository = repository;
+        }
+
+        /// <summary>
+        /// 璐т綅鍒嗛厤
+        /// </summary>
+        /// <param name="roadwayNo"></param>
+        /// <param name="palletType"></param>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("AssignLocation"), AllowAnonymous]
+        public Dt_LocationInfo? AssignLocation()
+        {
+            return Service.AssignLocation();
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栬揣浣�
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost, Route("InitializationLocation"), AllowAnonymous]
+        public WebResponseContent InitializationLocation([FromBody] InitializationLocationDTO initializationLocationDTO)
+        {
+            return Service.InitializationLocation(initializationLocationDTO);
+        }
+        /// <summary>
+        /// 鍚敤璐т綅
+        /// </summary>
+        /// <param name="keys"></param>
+        /// <returns></returns>
+        [HttpPost, Route("LocationEnableStatus")]
+        public WebResponseContent LocationEnableStatus([FromBody] int[] keys)
+        {
+            return Service.LocationEnableStatus(keys); ;
+        }
+
+        /// <summary>
+        /// 绂佺敤璐т綅
+        /// </summary>
+        /// <param name="keys"></param>
+        /// <returns></returns>
+        [HttpPost, Route("LocationDisableStatus")]
+        public WebResponseContent LocationDisableStatus([FromBody] int[] keys)
+        {
+            return Service.LocationDisableStatus(keys); ;
+        }
+
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
index dcc11dc..77d542c 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
@@ -22,28 +22,21 @@
     {
         private readonly IHttpContextAccessor _httpContextAccessor;
         private readonly IRouterExtension _routerExtension;
-        //private readonly WebSocketServer _webSocketServer;
         private readonly IStationMangerRepository _stationMangerRepository;
 
-        public TaskController(ITaskService service, IHttpContextAccessor httpContextAccessor, IRouterExtension routerExtension/*, WebSocketServer webSocketServer*/, IStationMangerRepository stationMangerRepository) : base(service)
+        public TaskController(ITaskService service, IHttpContextAccessor httpContextAccessor, IRouterExtension routerExtension, IStationMangerRepository stationMangerRepository) : base(service)
         {
             _httpContextAccessor = httpContextAccessor;
             _routerExtension = routerExtension;
             _stationMangerRepository=stationMangerRepository;
-            //_webSocketServer = webSocketServer;
         }
 
         [HttpPost, Route("ReceiveTask"), AllowAnonymous]
-        public WebResponseContent ReceiveWMSTask([FromBody] List<WMSTaskDTO> taskDTOs)
+        public WebResponseContent ReceiveWMSTask([FromBody] WMSTaskDTO taskDTO)
         {
-            return Service.ReceiveWMSTask(taskDTOs);
+            return Service.ReceiveWMSTask(taskDTO);
         }
 
-        [HttpPost, HttpGet, Route("RequestAssignLocation"), AllowAnonymous]
-        public string? RequestAssignLocation(int taskNum, string roadwayNo)
-        {
-            return Service.RequestAssignLocation(taskNum, roadwayNo);
-        }
 
         [HttpPost, HttpGet, Route("UpdateTaskExceptionMessage")]
         public WebResponseContent UpdateTaskExceptionMessage(int taskNum, string message)
@@ -62,16 +55,39 @@
         {
             return Service.RollbackTaskStatusToLast(taskNum);
         }
+        /// <summary>
+        /// 瀹瑰櫒娴佸姩鎺ュ彛
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("ContainerFlow"), AllowAnonymous]
+        public WebResponseContent ContainerFlow([FromBody] ContainerFlowDTO containerFlowDTO)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x=>x.PickStationCode==containerFlowDTO.SlotCode) ?? throw new Exception($"{containerFlowDTO.SlotCode}鎷i�変綅缃笉瀛樺湪");
+                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
+                if (device == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒板搴旇澶噞stationManger.StationDeviceCode}");
+                }
+                CommonConveyorLine commonConveyorLine = (CommonConveyorLine)device;
+                string PickBarCode = commonConveyorLine.GetValue<ConveyorLineDBName, string>(ConveyorLineDBName.R_PickBarCode, stationManger.StationCode).Replace("\0", "");
+                if (containerFlowDTO.ContainerCode!= PickBarCode) throw new Exception($"浼犲叆鏂欑鐮亄containerFlowDTO.ContainerCode}锛岃緭閫佹枡绠辩爜{PickBarCode}鏁版嵁閿欒");
+                commonConveyorLine.SetValue(ConveyorLineDBName.W_PickToHode,(short)containerFlowDTO.Direction.ObjToInt(), stationManger.StationCode);
+                content.OK();
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
 
         [HttpPost, HttpGet, Route("GetRouteEndPoint"), AllowAnonymous]
         public WebResponseContent GetRouteEndPoint(string startPoint, int routeType)
         {
             return WebResponseContent.Instance.OK(data: _routerExtension.GetEndPoint(startPoint, routeType));
-        }
-        [HttpPost, HttpGet, Route("AssignCPRoadwayNo"), AllowAnonymous]
-        public WebResponseContent AssignCPRoadwayNo()
-        {
-            return Service.AssignCPRoadwayNo();
         }
         /// <summary>
         /// WMS浠诲姟瀹屾垚鍚屾
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Filter/CustomProfile.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Filter/CustomProfile.cs"
index f10edbd..95034e0 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Filter/CustomProfile.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Server/Filter/CustomProfile.cs"
@@ -21,7 +21,7 @@
         {
             CreateMap<Sys_Menu, MenuDTO>();
             CreateMap<Dt_DeviceInfo,DeviceInfoDTO>();
-            CreateMap<WMSTaskDTO, Dt_Task>().ForMember(a => a.WMSId, b => b.MapFrom(b => b.Id));
+            CreateMap<TasksItem, Dt_Task>().ForMember(a => a.WMSId, b => b.MapFrom(b => b.TaskCode)).ForMember(a => a.PalletCode, b => b.MapFrom(b => b.ContainerCode)).ForMember(a => a.Grade, b => b.MapFrom(b => b.TaskPriority));
         }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoRepository/TaskRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoRepository/TaskRepository.cs"
index a5df773..7751c52 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoRepository/TaskRepository.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoRepository/TaskRepository.cs"
@@ -21,6 +21,7 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEAWCS_Core.BaseRepository;
+using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_Model.Models;
 
@@ -31,5 +32,13 @@
         public TaskRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
         {
         }
+        static object lock_taskNum = new object();
+        public int GetTaskNum(string sequenceName)
+        {
+            lock (lock_taskNum)
+            {
+                return Db.Ado.GetScalar($"SELECT NEXT VALUE FOR {sequenceName}").ObjToInt();
+            }
+        }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs"
index 0b7f032..e0e1303 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs"
@@ -1,4 +1,6 @@
 锘縰sing Autofac.Core;
+using Newtonsoft.Json.Serialization;
+using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -15,19 +17,24 @@
 {
     public partial class TaskService
     {
+        // 鍒涘缓涓�涓娇鐢ㄥ皬椹煎嘲鍛藉悕娉曠殑搴忓垪鍖栬缃�
+        JsonSerializerSettings settings = new JsonSerializerSettings
+        {
+            ContractResolver = new CamelCasePropertyNamesContractResolver()
+        };
         public WebResponseContent AgvSendTask(AgvTaskSendDTO taskModel, APIEnum SendTask = APIEnum.AgvSendTask)
         {
             WebResponseContent content = new WebResponseContent();
             try
             {
-                string? apiAddress = apiInfos.FirstOrDefault(x => x.ApiCode == SendTask.ToString())?.ApiAddress;
-                if (string.IsNullOrEmpty(apiAddress))
-                    return WebResponseContent.Instance.Error($"鏈壘鍒板彂閫丄GV浠诲姟鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
-                string response = HttpHelper.Post(apiAddress, taskModel.Serialize());
-                AgvResponseContent agvContent = response.DeserializeObject<AgvResponseContent>();
-                if (agvContent.Code == "0")
+                string? apiAddress = _apiInfoRepository.QueryFirst(x => x.ApiCode == SendTask.ToString())?.ApiAddress;
+                if (string.IsNullOrEmpty(apiAddress)) throw new Exception($"鏈壘鍒板彂閫丄GV浠诲姟鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+                string request = JsonConvert.SerializeObject(taskModel, settings);
+                string response = HttpHelper.Post(apiAddress, request);
+                AgvResponseContent agvContent = response.DeserializeObject<AgvResponseContent>() ?? throw new Exception("AGV浠诲姟鍙戦�佹湭杩斿洖缁撴灉");
+                if (agvContent.Success)
                 {
-                    content.OK(data: agvContent.Data);
+                    content.OK();
                 }
                 else
                 {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
index d85473f..bc33716 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
@@ -16,19 +16,25 @@
 #endregion << 鐗� 鏈� 娉� 閲� >>
 using AutoMapper;
 using Newtonsoft.Json;
+using NPOI.SS.Formula.Functions;
 using SqlSugar;
 using System.Diagnostics.CodeAnalysis;
+using System.DirectoryServices.Protocols;
 using System.Net.Http.Headers;
+using System.Security.Policy;
 using WIDESEA_DTO.Agv;
+using WIDESEA_External.Model;
 using WIDESEAWCS_Common;
 using WIDESEAWCS_Common.APIEnum;
 using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.BaseRepository;
 using WIDESEAWCS_Core.BaseServices;
 using WIDESEAWCS_Core.Enums;
 using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_Core.LogHelper;
 using WIDESEAWCS_DTO;
+using WIDESEAWCS_DTO.Agv;
 using WIDESEAWCS_DTO.TaskInfo;
 using WIDESEAWCS_IBasicInfoRepository;
 using WIDESEAWCS_ITaskInfoRepository;
@@ -44,6 +50,7 @@
     public partial class TaskService : ServiceBase<Dt_Task, ITaskRepository>, ITaskService
     {
         private readonly IMapper _mapper;
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
         private readonly ICacheService _cacheService;
         private readonly IRouterService _routerService;
         private readonly ITaskExecuteDetailService _taskExecuteDetailService;
@@ -51,7 +58,7 @@
         private readonly IStationMangerRepository _stationMangerRepository;
         private readonly IRouterRepository _routerRepository;
         private readonly IApiInfoRepository _apiInfoRepository;
-        private List<Dt_ApiInfo> apiInfos;
+        private readonly ILocationInfoRepository _locationInfoRepository;
 
         private Dictionary<string, OrderByType> _taskOrderBy = new()
             {
@@ -60,7 +67,6 @@
                 {nameof(Dt_Task.CreateDate),OrderByType.Asc},
             };
 
-        private List<Dt_Warehouse>? Warehouses = new List<Dt_Warehouse>();
 
         public Dictionary<string, OrderByType> TaskOrderBy { get { return _taskOrderBy; } set { _taskOrderBy = value; } }
 
@@ -70,7 +76,7 @@
 
         public List<int> TaskRelocationTypes => typeof(TaskTypeEnum).GetEnumIndexList().Where(x => x >= 900 && x < 1000).ToList();
 
-        public TaskService(ITaskRepository BaseDal, IMapper mapper, ICacheService cacheService, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IApiInfoRepository apiInfoRepository) : base(BaseDal)
+        public TaskService(ITaskRepository BaseDal, IMapper mapper, ICacheService cacheService, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IApiInfoRepository apiInfoRepository,ILocationInfoRepository locationInfoRepository,IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
         {
             _mapper = mapper;
             _cacheService = cacheService;
@@ -80,278 +86,73 @@
             _stationMangerRepository = stationMangerRepository;
             _routerRepository = routerRepository;
             _apiInfoRepository = apiInfoRepository;
-
-            string? cacheStr = _cacheService.Get(nameof(Dt_Warehouse));
-            if (!string.IsNullOrEmpty(cacheStr))
-            {
-                Warehouses = JsonConvert.DeserializeObject<List<Dt_Warehouse>>(cacheStr);
-            }
-
-
-            string? apiInfoStr = _cacheService.Get("apiInfos");
-            if (!string.IsNullOrEmpty(apiInfoStr))
-            {
-                List<Dt_ApiInfo>? infos = JsonConvert.DeserializeObject<List<Dt_ApiInfo>>(apiInfoStr);
-                if (infos == null || infos.Count == 0)
-                {
-                    apiInfos = new List<Dt_ApiInfo>();
-                }
-                else
-                {
-                    apiInfos = infos;
-                }
-            }
+            _locationInfoRepository = locationInfoRepository;
+            _unitOfWorkManage = unitOfWorkManage;
         }
+        static object lock_taskReceive = new object();
         /// <summary>
         /// 鎺ユ敹WMS浠诲姟淇℃伅
         /// </summary>
         /// <param name="taskDTOs">WMS浠诲姟瀵硅薄闆嗗悎</param>
         /// <returns>杩斿洖澶勭悊缁撴灉</returns>
-        public WebResponseContent ReceiveWMSTask([NotNull] List<WMSTaskDTO> taskDTOs)
+        public WebResponseContent ReceiveWMSTask([NotNull] WMSTaskDTO taskDTO)
         {
             WebResponseContent content = new WebResponseContent();
             try
             {
-                bool flag = false;
-                List<Dt_Task> tasks = new List<Dt_Task>();
-                foreach (var item in taskDTOs)
+                lock (lock_taskReceive)
                 {
-                    if (BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum) != null)
+                    List<Dt_Task> tasks = new List<Dt_Task>();
+                    List<Dt_LocationInfo> locationInfos = _locationInfoRepository.GetCanOut(taskDTO.Tasks.Select(x=>x.ContainerCode).ToList());
+                    TasksItem? tasksItem = taskDTO.Tasks.FirstOrDefault(x => !locationInfos.Select(t => t.PalletCode).Contains(x.ContainerCode));
+                    if (tasksItem != null) throw new Exception($"浠诲姟{tasksItem.TaskCode}鏂欑鍙穥tasksItem.ContainerCode}涓嶅瓨鍦�");
+                    Dt_LocationInfo? noOutLocation = locationInfos.FirstOrDefault(x=>x.LocationStatus != LocationStatusEnum.InStock.ObjToInt() || x.EnableStatus != EnableStatusEnum.Normal.ObjToInt());
+                    if (noOutLocation != null) throw new Exception($"鏂欑{noOutLocation.PalletCode}璐т綅{noOutLocation.LocationCode}鐘舵�佷笉鍙嚭搴�");
+                    List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData();
+                    //涓嬪彂浠诲姟缁�
+                    string taskGroup= taskDTO.TaskGroupCode.IsNullOrEmpty() ? Guid.NewGuid().ToString().Replace("-","") : taskDTO.TaskGroupCode;
+                    foreach (var item in taskDTO.Tasks)
                     {
-                        flag = true;
-                        continue;
+                        if (item.ToStationCode.IsNullOrEmpty()) throw new Exception($"浠诲姟{item.TaskCode}鍑哄簱鐩爣鎿嶄綔鍙颁笉鑳戒负绌�");
+                        //鑾峰彇鎿嶄綔鍙�
+                        Dt_StationManger? stationManger = stationMangers.FirstOrDefault(x => x.PickStationCode == item.ToStationCode);
+                        if (stationManger == null) throw new Exception($"浠诲姟{item.TaskCode}鍑哄簱鐩爣鎿嶄綔鍙皗item.ToStationCode}涓嶅瓨鍦�");
+                        Dt_Task task = _mapper.Map<Dt_Task>(item);
+                        Dt_LocationInfo locationInfo = locationInfos.FirstOrDefault(x=>x.PalletCode==item.ContainerCode);
+                        task.SourceAddress = locationInfo.LocationCode;
+                        task.CurrentAddress = locationInfo.LocationCode;
+                        task.NextAddress = stationManger.PickStationCode;
+                        task.TargetAddress = stationManger.PickStationCode;
+                        task.GroupId = taskGroup;
+                        task.TaskType = TaskTypeEnum.Outbound.ObjToInt();
+                        task.Roadway = locationInfo.RoadwayNo;
+                        task.DeviceCode = "AGV";
+                        task.TaskState = TaskStatusEnum.AGV_Execute.ObjToInt();
+                        tasks.Add(task);
                     }
-                    Dt_Task task = _mapper.Map<Dt_Task>(item);
-                    task.Creater = "WMS";
-                    task.TaskState = (int)TaskStatusEnum.New;
-                    task.CurrentAddress = item.SourceAddress;
 
-                    Dt_Router? router;
-                    
-                }
-                BaseDal.AddData(tasks);
-
-                _taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskNum).ToList(), "鎺ユ敹WMS浠诲姟");
-
-                content = (flag || tasks.Count > 0) ? WebResponseContent.Instance.OK("鎴愬姛") : WebResponseContent.Instance.Error("澶辫触");
-            }
-            catch (Exception ex)
-            {
-                content = WebResponseContent.Instance.Error($"浠诲姟鎺ユ敹閿欒,閿欒淇℃伅:{ex.Message}");
-            }
-            return content;
-        }
-
-        /// <summary>
-        /// 鏍规嵁鎵樼洏鍙枫�佽捣濮嬪湴鍧�鍚慦MS璇锋眰浠诲姟
-        /// </summary>
-        /// <param name="palletCode">鎵樼洏鍙�</param>
-        /// <param name="sourceAddress">璧峰鍦板潃</param>
-        /// <returns></returns>
-        public WebResponseContent RequestWMSTask(string palletCode, string sourceAddress, string materielBoxCode = "")
-        {
-            WebResponseContent content = new WebResponseContent();
-            try
-            {
-                Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == sourceAddress);
-                if (stationManger == null)
-                {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒扮珯鍙颁俊鎭�");
-                }
-                string address = AppSettings.Get("WMSApiAddress");
-                if (string.IsNullOrEmpty(address))
-                {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
-                }
-                string responseStr = "";
-                if (!string.IsNullOrEmpty(materielBoxCode))
-                {
-                    responseStr = HttpHelper.Get($"{address}/api/Task/DeviceRequestInboundTask?stationCode={sourceAddress}&roadwayNo={stationManger.StackerCraneCode}&palletCode={palletCode}&materielBoxCode={materielBoxCode}");
-                }
-                else
-                {
-                    responseStr = HttpHelper.Get($"{address}/api/Task/DeviceRequestInboundTask?stationCode={sourceAddress}&roadwayNo={stationManger.StackerCraneCode}&palletCode={palletCode}");
-                }
-                WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
-                if (responseContent != null && responseContent.Status && responseContent.Data != null)
-                {
-                    WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.ToString());
-                    if (taskDTO != null)
+                    locationInfos.ForEach(x =>
                     {
-                        content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
-                    }
-                }
+                        x.LocationStatus=LocationStatusEnum.Lock.ObjToInt();
+                    });
+                    //娣诲姞浠诲姟鏇存柊璐т綅鏁版嵁
+                    _unitOfWorkManage.BeginTran();
+                    BaseDal.AddData(tasks);
+                    _locationInfoRepository.UpdateData(locationInfos);
+                    _unitOfWorkManage.CommitTran();
 
+                    _taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskNum).ToList(), "鎺ユ敹WMS浠诲姟");
+
+                    content = tasks.Count > 0 ? content.OK("鎴愬姛") : content.Error("澶辫触");
+                }
             }
             catch (Exception ex)
             {
-                content = WebResponseContent.Instance.Error(ex.Message);
+                content.Error($"浠诲姟鎺ユ敹閿欒,閿欒淇℃伅:{ex.Message}");
             }
             return content;
         }
-        // <summary>
-        /// 璇锋眰鍏ュ簱浠诲姟
-        /// </summary>
-        /// <param name="palletCode">鎵樼洏鍙�</param>
-        /// <param name="sourceAddress">璧峰鍦板潃</param>
-        /// /// <param name="roadWay">宸烽亾</param>
-        /// <returns></returns>
-        public WebResponseContent RequestYLWMSTaskSimple(string palletCode, string sourceAddress,int taskNum=0)
-        {
-            WebResponseContent content = new WebResponseContent();
-            try
-            {
-                string address = AppSettings.Get("WMSApiAddress");
-                if (string.IsNullOrEmpty(address))
-                {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
-                }
-                string responseStr = HttpHelper.Get($"{address}/api/Task/RequestYLWMSTaskSimple?stationCode={sourceAddress}&palletCode={palletCode}&taskNum{taskNum}");
-                WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
-                if (responseContent != null && responseContent.Status && responseContent.Data != null)
-                {
-                    WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.ToString());
-                    if (taskDTO != null)
-                    {
-                        content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
-                    }
-                }
-                else
-                {
-                    content = responseContent ?? content.Error("缁撴灉閿欒");
-                }
-
-            }
-            catch (Exception ex)
-            {
-                content = WebResponseContent.Instance.Error(ex.Message);
-            }
-            return content;
-        }
-        // <summary>
-        /// 璇锋眰鍏ュ簱宸烽亾
-        /// </summary>
-        /// <returns></returns>
-        public WebResponseContent AssignCPRoadwayNo()
-        {
-            WebResponseContent content = new WebResponseContent();
-            try
-            {
-                string address = AppSettings.Get("WMSApiAddress");
-                if (string.IsNullOrEmpty(address))
-                {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
-                }
-                string responseStr = HttpHelper.Get($"{address}/api/Task/AssignCPRoadwayNo");
-                
-                if (!responseStr.IsNullOrEmpty())
-                {
-                    content.OK("鎴愬姛", responseStr);
-                }
-
-            }
-            catch (Exception ex)
-            {
-                content = WebResponseContent.Instance.Error(ex.Message);
-            }
-            return content;
-        }
-
-        // <summary>
-        /// 璇锋眰鍘熸枡鍏ュ簱宸烽亾
-        /// </summary>
-        /// <returns></returns>
-        public WebResponseContent AssignYLRoadwayNo(string palletCode)
-        {
-            WebResponseContent content = new WebResponseContent();
-            try
-            {
-                string address = AppSettings.Get("WMSApiAddress");
-                if (string.IsNullOrEmpty(address))
-                {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
-                }
-                string responseStr = HttpHelper.Get($"{address}/api/Task/AssignYLRoadwayNo?palletCode={palletCode}");
-                WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
-                if (responseContent != null && responseContent.Status && responseContent.Data != null)
-                {
-                    content = responseContent;
-                }
-
-            }
-            catch (Exception ex)
-            {
-                content = WebResponseContent.Instance.Error(ex.Message);
-            }
-            return content;
-        }
-        // <summary>
-        /// 璇锋眰鍏ュ簱浠诲姟
-        /// </summary>
-        /// <param name="palletCode">鎵樼洏鍙�</param>
-        /// <param name="sourceAddress">璧峰鍦板潃</param>
-        /// /// <param name="roadWay">宸烽亾</param>
-        /// <returns></returns>
-        public WebResponseContent RequestWMSTaskSimple(string palletCode, string sourceAddress,string roadWay="", int taskType=630, int taskNum = 0, string targetAddress = "")
-        {
-            WebResponseContent content = new WebResponseContent();
-            try
-            {
-                //string address = AppSettings.Get("WMSApiAddress");
-                //if (string.IsNullOrEmpty(address))
-                //{
-                //    return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
-                //}
-                //string responseStr = HttpHelper.Get($"{address}/api/Task/DeviceRequestInboundTaskSimple?stationCode={sourceAddress}&palletCode={palletCode}");
-                //WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
-                //if (responseContent != null && responseContent.Status && responseContent.Data != null)
-                //{
-                //    WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.ToString());
-                //    if (taskDTO != null)
-                //    {
-                WMSTaskDTO? taskDTO = new WMSTaskDTO()
-                {
-                    TaskNum = taskNum ==0 ? DateTime.Now.ToString("mmss").ObjToInt(): taskNum,
-                    PalletCode= palletCode,
-                    RoadWay= roadWay,
-                    TaskType= taskType,
-                    PalletType=1,
-                    TaskStatus= TaskStatusEnum.New.ObjToInt(),
-                    SourceAddress= sourceAddress,
-                    TargetAddress= targetAddress,
-                    WarehouseId=2,
-                    Grade=0,
-                };
-                content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
-                //    }
-                //}
-
-            }
-            catch (Exception ex)
-            {
-                content = WebResponseContent.Instance.Error(ex.Message);
-            }
-            return content;
-        }
-        public WebResponseContent MESBoxCodeNotice(string boxCode)
-        {
-            WebResponseContent content = new WebResponseContent();
-            try
-            {
-                string address = AppSettings.Get("WMSApiAddress");
-                if (string.IsNullOrEmpty(address))
-                {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
-                }
-                string responseStr = HttpHelper.Get($"{address}/api/Mes/MESBoxCodeNotice?boxCode={boxCode}");
-                return content.OK(responseStr);
-            }
-            catch (Exception ex)
-            {
-                content = WebResponseContent.Instance.Error(ex.Message);
-            }
-            return content;
-        }
+       
         public static string Post(string serviceAddress, string requestJson = "", string contentType = "application/json", Dictionary<string, string>? headers = null)
         {
             string result = string.Empty;
@@ -388,47 +189,6 @@
             {
                 Logger.Add(serviceAddress, requestJson == null ? "" : requestJson, result, beginDate);
             }
-        }
-
-        /// <summary>
-        /// 鍚慦MS鐢宠鍒嗛厤璐т綅
-        /// </summary>
-        /// <param name="taskNum">浠诲姟鍙�</param>
-        /// <param name="roadwayNo">宸烽亾鍙�</param>
-        /// <returns></returns>
-        public string? RequestAssignLocation(int taskNum, string roadwayNo)
-        {
-            string address = AppSettings.Get("WMSApiAddress");
-            if (string.IsNullOrEmpty(address)) throw new Exception("鏈壘鍒癢MSApi鍦板潃");
-            string responseStr = HttpHelper.Get($"{address}/api/Task/AssignInboundTaskLocation?taskNum={taskNum}&roadwayNo={roadwayNo}");
-
-            WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
-            if (responseContent != null && responseContent.Status && responseContent.Data != null)
-            {
-                return responseContent.Data.ToString();
-            }
-
-            return "";
-        }
-        /// <summary>
-        /// 鍚慦MS鐢宠鍑哄簱AGV缁堢偣
-        /// </summary>
-        /// <param name="taskNum">浠诲姟鍙�</param>
-        /// <returns></returns>
-        /// <exception cref="Exception"></exception>
-        public string? RequestTargetAddress(int taskNum)
-        {
-            string address = AppSettings.Get("WMSApiAddress");
-            if (string.IsNullOrEmpty(address)) throw new Exception("鏈壘鍒癢MSApi鍦板潃");
-            string responseStr = HttpHelper.Get($"{address}/api/Task/AssignOutTargetAddress?taskNum={taskNum}");
-
-            WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
-            if (responseContent != null && responseContent.Status && responseContent.Data != null)
-            {
-                return responseContent.Data.ToString();
-            }
-
-            return "";
         }
 
         /// <summary>
@@ -565,10 +325,118 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
-
-        public Dt_Task QueryBarCodeAGVFinishTask(int TaskNum, string currentAddress)
+        /// <summary>
+        /// AGV浠诲姟鏀捐
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent AgvTaskFlow(string code)
         {
-            return BaseDal.QueryFirst(x => TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.AGV_Finish && x.CurrentAddress == currentAddress && x.TaskNum == TaskNum, TaskOrderBy);
+            WebResponseContent content=new WebResponseContent();
+            try
+            {
+                string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.AgvTaskFlow.ToString())?.ApiAddress;
+                if (string.IsNullOrEmpty(url)) throw new Exception($"{code},鏈壘鍒癆GV浠诲姟鏀捐鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+                AgvTaskFlowDTO agvTaskFlowDTO = new AgvTaskFlowDTO()
+                {
+                    RequestId = Guid.NewGuid().ToString().Replace("-", ""),
+                    ContainerCode = code
+                };
+                string request = JsonConvert.SerializeObject(agvTaskFlowDTO, settings);
+                string response = HttpHelper.Post(url, request);
+                AgvResponseContent agvResponse = JsonConvert.DeserializeObject<AgvResponseContent>(response) ?? throw new Exception($"{code},鏈帴鏀跺埌AGV浠诲姟鏀捐杩斿洖鍊�");
+                if (!agvResponse.Success) throw new Exception($"鏂欑{code},AGV浠诲姟鏀捐閿欒,淇℃伅:{agvResponse.Message}");
+                content.OK();
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        /// <summary>
+        /// WMS鏂欑鍒拌揪鎷i�変綅涓婃姤
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent WMSPickUp(string stationCode,string pickCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSPickArrivedUp.ToString())?.ApiAddress;
+                if (string.IsNullOrEmpty(url)) throw new Exception($"鏈壘鍒癢MS鏂欑鍒拌揪鎷i�変綅涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+                ContainerArriveDTO containerArriveDTO = new ContainerArriveDTO()
+                {
+                    SlotCode = stationCode,
+                    ContainerCode = pickCode
+                };
+                string request = JsonConvert.SerializeObject(containerArriveDTO, settings);
+                string response = HttpHelper.Post(url, request);
+                WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"{pickCode},鏈帴鏀跺埌WMS鏂欑鍒拌揪鎷i�変綅涓婃姤杩斿洖鍊�");
+                if (wMSResponse.Code != "0") throw new Exception($"鏂欑{pickCode}WMS鏂欑鍒拌揪鎷i�変綅涓婃姤閿欒,淇℃伅:{wMSResponse.Msg}");
+                content.OK();
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        /// <summary>
+        /// 浠诲姟瀹屾垚
+        /// </summary>
+        /// <param name="taskNum"></param>
+        /// <returns></returns>
+        public WebResponseContent TaskCompleted(int taskNum)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
+                if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)//鍑哄簱浠诲姟閫昏緫
+                {
+                    Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x=>x.PalletCode==task.PalletCode);
+                    if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt())
+                    {
+                        return content.Error($"{locationInfo.LocationCode}璐т綅鐘舵�佷笉姝g‘");
+                    }
+                    task.TaskState = TaskStatusEnum.Finish.ObjToInt();
+                    locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
+                    locationInfo.PalletCode = "";
+                    _unitOfWorkManage.BeginTran();
+                    _locationInfoRepository.UpdateData(locationInfo);
+                    BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+                    _unitOfWorkManage.CommitTran();
+                }
+                else if(task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//鍏ュ簱浠诲姟閫昏緫
+                {
+                    string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSInBoundBack.ToString())?.ApiAddress;
+                    if (string.IsNullOrEmpty(url))
+                    {
+                        _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"鏈壘鍒癢MS鍏ュ簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+                        UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒癢MS鍏ュ簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+                        return content.Error($"{taskNum},鏈壘鍒癢MS鍏ュ簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+                    }
+                    ContainerInFinishDTO containerInFinishDTO = new ContainerInFinishDTO()
+                    {
+                        TaskCode= task.TaskNum.ToString(),
+                        ContainerCode = task.PalletCode,
+                        FromStationCode = task.SourceAddress,
+                        ToLocationCode = task.TargetAddress
+                    };
+                    string request = JsonConvert.SerializeObject(containerInFinishDTO, settings);
+                    //璋冪敤鎺ュ彛
+                    string response = HttpHelper.Post(url, request);
+                    WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ??throw new Exception($"{taskNum},鏈帴鏀跺埌WMS鍏ュ簱涓婃姤杩斿洖鍊�");
+                    if (wMSResponse.Code!="0") throw new Exception($"鍏ュ簱浠诲姟{task.TaskNum}WMS鍏ュ簱涓婃姤閿欒,淇℃伅:{wMSResponse.Msg}");
+                }
+                content.OK("浠诲姟瀹屾垚");
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                content.Error(ex.Message);
+            }
+            return content;
         }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService_Operate.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService_Operate.cs"
index 9e80cd0..06efdd4 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService_Operate.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService_Operate.cs"
@@ -24,7 +24,7 @@
         /// <param name="targetAddress">淇敼鍚庣殑鐩爣鍦板潃</param>
         /// <param name="currentAddress">淇敼鍚庣殑褰撳墠鍦板潃</param>
         /// <param name="nextAddress">淇敼鍚庣殑涓嬩竴鍦板潃</param>
-        public void UpdateTask(Dt_Task task, TaskStatusEnum taskStatus, string deviceCode = "", string sourceAddress = "", string targetAddress = "", string currentAddress = "", string nextAddress = "", string roadwayNo = "", int heightType = 0)
+        public void UpdateTask(Dt_Task task, TaskStatusEnum taskStatus, string deviceCode = "", string sourceAddress = "", string targetAddress = "", string currentAddress = "", string nextAddress = "", string roadwayNo = "")
         {
             StringBuilder stringBuilder = new StringBuilder(App.User?.UserId == 0 ? $"绯荤粺鑷姩娴佺▼" : "浜哄伐鎵嬪姩娴佺▼");
             if (task.DeviceCode != deviceCode && !string.IsNullOrEmpty(deviceCode))
@@ -56,10 +56,6 @@
             {
                 stringBuilder.Append($",宸烽亾鍙风敱{task.Roadway}鍙樻洿涓簕roadwayNo}");
                 task.Roadway = roadwayNo;
-            }
-            if (heightType!=0)
-            {
-                task.HeightType= heightType;
             }
             if (task.TaskState != taskStatus.ObjToInt())
             {
@@ -96,14 +92,7 @@
 
                 task.TaskState = taskStatus.ObjToInt();
             }
-
             BaseDal.UpdateData(task);
-            //鍚屾鍒癢MS
-            string address = AppSettings.Get("WMSApiAddress");
-            if (!string.IsNullOrEmpty(address))
-            {
-                HttpHelper.Post($"{address}/api/Task/UpdateTaskInfo", task.Serialize());
-            }
             _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, stringBuilder.ToString());
         }
     }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/AGV/AGVExtend.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/AGV/AGVExtend.cs"
index a7df9df..8e51305 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/AGV/AGVExtend.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/AGV/AGVExtend.cs"
@@ -22,191 +22,137 @@
         {
             try
             {
-                var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => (x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt()|| x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.DeviceCode=="AGV").ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
-
-                if (newTasks.Count>0)
+                var newTasksOut = _taskService.Db.Queryable<Dt_Task>().Where(x => (x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt()) && x.TaskType==TaskTypeEnum.Outbound.ObjToInt() && x.DeviceCode == "AGV").ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
+                var newTasksIn = _taskService.Db.Queryable<Dt_Task>().Where(x => (x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt()) && x.TaskType == TaskTypeEnum.Inbound.ObjToInt() && x.DeviceCode == "AGV").ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
+                #region 鍑哄簱浠诲姟涓嬪彂
+                if (newTasksOut.Count>0)
                 {
-                    foreach (var task in newTasks)
+                    List<string> GroupIds = newTasksOut.GroupBy(x => x.GroupId).Select(x => x.Key).ToList();
+                    foreach (var GroupId in GroupIds)
                     {
+                        var tasks = newTasksOut.Where(x => x.GroupId == GroupId).ToList();
                         try
                         {
-                            Guid guid = Guid.NewGuid(); 
                             AgvTaskSendDTO agvTaskSend = new AgvTaskSendDTO()
                             {
-                                SysToken=guid.ToString().Replace("-",""),
-                                ReceiveTaskID=task.TaskNum.ToString(),
-                                MapCode="01",
-                                Variables=new List<PointDetail>()
+                                MissionData = new List<MissionDataItem>()
                             };
-                            if (task.NextAddress== "涓�妤兼湀鍙扮爜澶�")
+                            foreach (var task in tasks)
                             {
-                                string? address =_taskService.RequestTargetAddress(task.TaskNum);
-                                if (address.IsNullOrEmpty())
+                                //鑾峰彇鐩爣鐐硅揣浣�
+                                Dt_LocationInfo locationInfoStart = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.CurrentAddress);
+                                //鑾峰彇鎷i�夊嚭搴撶珯鍙�
+                                Dt_StationManger stationMangerEnd = _stationMangerRepository.QueryFirst(x => x.PickStationCode == task.NextAddress);
+
+                                if (locationInfoStart == null || stationMangerEnd == null) throw new Exception($"鏈壘鍒颁换鍔″彿${task.TaskNum}璧峰鐐箋task.CurrentAddress}鎴栫洰鏍囩偣{task.NextAddress}浣嶇疆淇℃伅");
+                                agvTaskSend.RequestId = GroupId;
+                                agvTaskSend.MissionCode = GroupId;
+                                if (task.Grade == 0)
                                 {
-                                    task.ExceptionMessage = "鏈壘鍒癆GV绔欑偣";
-                                    continue;
-                                }
-                                task.NextAddress = address;
-                            }
-                            Dt_StationManger stationMangerStart = _stationMangerRepository.QueryFirst(x=>x.StationCode==task.CurrentAddress);
-                            Dt_StationManger stationMangerEnd = _stationMangerRepository.QueryFirst(x => x.StationCode == task.NextAddress);
-                            //娣诲姞浠诲姟璺緞鍙婇珮搴�
-                            if (stationMangerStart !=null && stationMangerEnd != null)
-                            {
-                                PointDetail pointDetail1 = new PointDetail()
-                                {
-                                    Code= "GoodPoint",
-                                    Value=stationMangerStart.AGVStationCode
-                                };
-                                //鍒ゆ柇鏄惁鏈夊墠缃偣
-                                if (!string.IsNullOrEmpty(stationMangerStart.AGVFrontCode))
-                                {
-                                    PointDetail pointDetail2 = new PointDetail()
-                                    {
-                                        Code = "CostPoint",
-                                        Value = stationMangerStart.AGVFrontCode
-                                    };
-                                    agvTaskSend.Variables.Add(pointDetail2);
-                                }
-                                PointDetail pointDetail3 = new PointDetail()
-                                {
-                                    Code = "PointB",
-                                    Value = stationMangerEnd.AGVStationCode
-                                };
-                                //鍒ゆ柇鏄惁鏈夊墠缃偣
-                                if (!string.IsNullOrEmpty(stationMangerEnd.AGVFrontCode))
-                                {
-                                    PointDetail pointDetail4 = new PointDetail()
-                                    {
-                                        Code = "PointA",
-                                        Value = stationMangerEnd.AGVFrontCode
-                                    };
-                                    agvTaskSend.Variables.Add(pointDetail4);
-                                }
-                                PointDetail pointDetail5 = new PointDetail()
-                                {
-                                    Code = "QUQTH",
-                                    Value = stationMangerStart.AGVStationHeight.ToString()
-                                };
-                                PointDetail pointDetail6 = new PointDetail()
-                                {
-                                    Code = "FHMH",
-                                    Value = stationMangerEnd.AGVStationHeight.ToString()
-                                };
-                                agvTaskSend.Variables.Add(pointDetail1);
-                                agvTaskSend.Variables.Add(pointDetail3);
-                                agvTaskSend.Variables.Add(pointDetail5);
-                                agvTaskSend.Variables.Add(pointDetail6);
-                            }
-                            else
-                            {
-                                throw new Exception("鏈壘鍒癆GV绔欑偣");
-                            }
-                            //鍙栨斁浠诲姟妯$増
-                            if (stationMangerStart.StationCode.Contains("PNT") && !stationMangerEnd.StationCode.Contains("PNT") && stationMangerEnd.IsManual==0)//璇锋眰鏀�
-                            {
-                                agvTaskSend.TaskCode = "DUIGAO1";
-                                if (stationMangerStart.StationType == 998 || stationMangerEnd.StationType == 998)//娼滀紡椤跺崌杞�
-                                {
-                                    agvTaskSend.TaskCode = "DUOLUN1";
-                                }
-                            }
-                            else if (!stationMangerStart.StationCode.Contains("PNT") && stationMangerEnd.StationCode.Contains("PNT") && stationMangerStart.IsManual == 0)//璇锋眰鍙�
-                            {
-                                agvTaskSend.TaskCode = "DUIGAO2";
-                                if (stationMangerStart.StationType==998 || stationMangerEnd.StationType == 998)//娼滀紡椤跺崌杞�
-                                {
-                                    agvTaskSend.TaskCode = "DUOLUN2";
-                                }
-                            }
-                            else if (!stationMangerStart.StationCode.Contains("PNT") && !stationMangerEnd.StationCode.Contains("PNT") && stationMangerStart.IsManual == 0 && stationMangerStart.IsManual == 0)//璇锋眰鍙栨斁
-                            {
-                                agvTaskSend.TaskCode = "DUIGAO3";
-                                if (stationMangerStart.StationType == 998 || stationMangerEnd.StationType == 998)//娼滀紡椤跺崌杞�
-                                {
-                                    agvTaskSend.TaskCode = "DUOLUN3";
-                                }
-                            }
-                            else//鏃犺姹�
-                            {
-                                agvTaskSend.TaskCode = "DUIGAO4";
-                                if (stationMangerStart.StationType == 998 || stationMangerEnd.StationType == 998)//娼滀紡椤跺崌杞�
-                                {
-                                    agvTaskSend.TaskCode = "DUOLUN4";
-                                }
-                            }
-                            if (stationMangerStart.StationType == 998 || stationMangerEnd.StationType == 998)//娼滀紡椤跺崌杞�
-                            {
-                                agvTaskSend.Variables.FirstOrDefault(x => x.Code == "FHMH").Value = "0";
-                                agvTaskSend.Variables.FirstOrDefault(x => x.Code == "GoodPoint").Value = "";
-                                //鍒ゆ柇浜哄伐鎵嬪姩
-                                PointDetail complete = new();
-                                if (stationMangerStart.IsManual==1 && stationMangerEnd.IsManual==0)
-                                {
-                                    complete = new()
-                                    {
-                                        Code = "Complete",
-                                        Value = "1"
-                                    };
-                                }
-                                else if (stationMangerStart.IsManual == 0 && stationMangerEnd.IsManual == 1)
-                                {
-                                    complete = new()
-                                    {
-                                        Code = "Complete",
-                                        Value = "2"
-                                    };
-                                }
-                                else if (stationMangerStart.IsManual == 1 && stationMangerEnd.IsManual == 1)
-                                {
-                                    complete = new()
-                                    {
-                                        Code = "Complete",
-                                        Value = "3"
-                                    };
+                                    agvTaskSend.Priority = 99;
                                 }
                                 else
                                 {
-                                    complete = new()
-                                    {
-                                        Code = "Complete",
-                                        Value = "0"
-                                    };
+                                    agvTaskSend.Priority = 99 - task.Grade;
                                 }
-                                //涓嬪彂浠诲姟AGV浠诲姟闆嗙兢
-                                agvTaskSend.AgvGroupCode = "QianF";
-                                PointDetail pointDetail2 = new PointDetail()
+                                //鏂欑瀛愭惉杩愪换鍔�
+                                MissionDataItem missionDataItem = new MissionDataItem()
                                 {
-                                    Code = "CostPoint",
-                                    Value = stationMangerStart.AGVStationCode
+                                    Sequence = task.TaskNum,
+                                    BinCode = task.PalletCode,
+                                    StartPosition = locationInfoStart.AgvPoint,
+                                    StartSlotCode = locationInfoStart.LocationCode,
+                                    EndPosition = stationMangerEnd.StationCode,
+                                    EndSlotCode = stationMangerEnd.CraneStationCode,
+                                    TakeActionConfirm = false,
+                                    TakeActionInform = false,
+                                    PutActionConfirm = true,
+                                    PutActionInform = true,
                                 };
-                                agvTaskSend.Variables.Add(pointDetail2);
-                                agvTaskSend.Variables.Add(complete);
-                            }
-                            if (task.TaskType==TaskTypeEnum.OutCarton.ObjToInt())
-                            {
-                                agvTaskSend.AgvGroupCode = "GAOc";
+                                agvTaskSend.MissionData.Add(missionDataItem);
                             }
                             //鍙戦�丄GV浠诲姟
                             WebResponseContent content = _taskService.AgvSendTask(agvTaskSend, APIEnum.AgvSendTask);
                             if (!content.Status)
                                 throw new Exception(content.Message);
-                            task.Dispatchertime = DateTime.Now;
-                            _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing);
+                            tasks.ForEach(x =>
+                            {
+                                x.Dispatchertime = DateTime.Now;
+                                x.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt();
+                            });
+                            _taskService.UpdateData(tasks);
+                            Thread.Sleep(500);
+                        }
+                        catch (Exception ex)
+                        {
+                            tasks.ForEach(x =>
+                            {
+                                x.TaskState = TaskStatusEnum.Exception.ObjToInt();
+                                x.ExceptionMessage = ex.Message;
+                            });
+                            _taskService.UpdateData(tasks);
+                        }
+                    }
+                }
+                #endregion
+                #region 鍏ュ簱浠诲姟涓嬪彂
+                if (newTasksIn.Count > 0)
+                {
+                    foreach (var task in newTasksIn)
+                    {
+                        try
+                        {
+                            AgvTaskSendDTO agvTaskSend = new AgvTaskSendDTO()
+                            {
+                                MissionData = new List<MissionDataItem>()
+                            };
+                            //鑾峰彇鐩爣鐐硅揣浣�
+                            Dt_LocationInfo locationInfoEnd = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.NextAddress);
+                            //鑾峰彇绾夸綋鍏ュ簱绔欏彴
+                            Dt_StationManger stationMangerStart = _stationMangerRepository.QueryFirst(x => x.PickStationCode == task.CurrentAddress);
+                            if (locationInfoEnd == null || stationMangerStart == null) throw new Exception($"鏈壘鍒颁换鍔″彿${task.TaskNum}璧峰鐐箋task.CurrentAddress}鎴栫洰鏍囩偣{task.NextAddress}浣嶇疆淇℃伅");
+                            agvTaskSend.RequestId = Guid.NewGuid().ToString().Replace("-", "");
+                            agvTaskSend.MissionCode = task.TaskNum.ToString();
+                            if (task.Grade == 0)
+                            {
+                                agvTaskSend.Priority = 99;
+                            }
+                            else
+                            {
+                                agvTaskSend.Priority = 99 - task.Grade;
+                            }
+                            //鏂欑瀛愭惉杩愪换鍔�
+                            MissionDataItem missionDataItem = new MissionDataItem()
+                            {
+                                Sequence = task.TaskNum,
+                                BinCode = task.PalletCode,
+                                StartPosition = stationMangerStart.StationCode,
+                                StartSlotCode = stationMangerStart.CraneStationCode,
+                                EndPosition = locationInfoEnd.AgvPoint,
+                                EndSlotCode = locationInfoEnd.LocationCode,
+                                TakeActionConfirm = false,
+                                TakeActionInform = false,
+                                PutActionConfirm = true,
+                                PutActionInform = true,
+                            };
+                            agvTaskSend.MissionData.Add(missionDataItem);
+                            //鍙戦�丄GV浠诲姟
+                            WebResponseContent content = _taskService.AgvSendTask(agvTaskSend, APIEnum.AgvSendTask);
+                            if (!content.Status)
+                                throw new Exception(content.Message);
+                            task.Dispatchertime = DateTime.Now; task.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt();
+                            _taskService.UpdateData(task);
                             Thread.Sleep(500);
                         }
                         catch (Exception ex)
                         {
                             task.TaskState = TaskStatusEnum.Exception.ObjToInt();
                             task.ExceptionMessage = ex.Message;
+                            _taskService.UpdateData(task);
                         }
-                    }
-                    //鏇存柊浠诲姟
-                    if (newTasks.Count > 0)
-                    {
-                        _taskService.UpdateData(newTasks);
-                    }
+                    }    
                 }
+                #endregion
             }
             catch (Exception ex)
             {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/AGV/AGVJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/AGV/AGVJob.cs"
index 5d5a056..0c03019 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/AGV/AGVJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/AGV/AGVJob.cs"
@@ -19,14 +19,16 @@
         private readonly ITaskExecuteDetailService _taskExecuteDetailService;
         private readonly IRouterService _routerService;
         private readonly IStationMangerRepository _stationMangerRepository;
+        private readonly ILocationInfoRepository _locationInfoRepository;
         private readonly IMapper _mapper;
 
-        public AGVJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IStationMangerRepository stationMangerRepository, IMapper mapper)
+        public AGVJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IStationMangerRepository stationMangerRepository, ILocationInfoRepository locationInfoRepository, IMapper mapper)
         {
             _taskService = taskService;
             _taskExecuteDetailService = taskExecuteDetailService;
             _routerService = routerService;
             _stationMangerRepository = stationMangerRepository;
+            _locationInfoRepository = locationInfoRepository;
             _mapper = mapper;
         }
         public Task Execute(IJobExecutionContext context)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/\344\272\214\346\234\237\347\272\277\344\275\223/ConveyorLineDBName.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/\344\272\214\346\234\237\347\272\277\344\275\223/ConveyorLineDBName.cs"
new file mode 100644
index 0000000..6c967f3
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/\344\272\214\346\234\237\347\272\277\344\275\223/ConveyorLineDBName.cs"
@@ -0,0 +1,44 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_Tasks
+{
+    public enum ConveyorLineDBName
+    {
+        /// <summary>
+        /// 鍏ュ簱鐢宠(璇�)
+        /// </summary>
+        R_InRequest,
+        /// <summary>
+        /// 鍏ュ簱纭(鍐�)
+        /// </summary>
+        W_InResponse,
+        /// <summary>
+        /// 鍏ュ簱閲嶉噺(璇�)
+        /// </summary>
+        R_InWeight,
+        /// <summary>
+        /// 鍏ュ簱鏉$爜(璇�)
+        /// </summary>
+        R_InBarCode,
+        /// <summary>
+        /// 鎷i�夌敵璇�(璇�)
+        /// </summary>
+        R_PickRequest,
+        /// <summary>
+        /// 鎷i�夋潯鐮�(璇�)
+        /// </summary>
+        R_PickBarCode,
+        /// <summary>
+        /// 鎷i�夊幓鍚�(鍐�)
+        /// </summary>
+        W_PickToHode,
+        /// <summary>
+        /// 鎷i�夌‘璁�(鍐�)
+        /// </summary>
+        W_PickResponse,
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/\344\272\214\346\234\237\347\272\277\344\275\223/ConveyorLineJob2.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/\344\272\214\346\234\237\347\272\277\344\275\223/ConveyorLineJob2.cs"
new file mode 100644
index 0000000..5a91d08
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/\344\272\214\346\234\237\347\272\277\344\275\223/ConveyorLineJob2.cs"
@@ -0,0 +1,92 @@
+锘縰sing Autofac.Core;
+using AutoMapper;
+using Quartz;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Common;
+using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_IBasicInfoRepository;
+using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model.Models;
+using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_QuartzJob.DTO;
+using WIDESEAWCS_QuartzJob.Service;
+
+namespace WIDESEAWCS_Tasks
+{
+    [DisallowConcurrentExecution]
+    public partial class ConveyorLineJob2 : JobBase, IJob
+    {
+        public readonly ITaskService _taskService;
+        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
+        private readonly IRouterService _routerService;
+        private readonly IStationMangerRepository _stationMangerRepository;
+        private readonly ILocationInfoRepository _locationInfoRepository;
+        private readonly IMapper _mapper;
+
+        public ConveyorLineJob2(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IStationMangerRepository stationMangerRepository, ILocationInfoRepository locationInfoRepository, IMapper mapper)
+        {
+            _taskService = taskService;
+            _taskExecuteDetailService = taskExecuteDetailService;
+            _routerService = routerService;
+            _stationMangerRepository = stationMangerRepository;
+            _locationInfoRepository = locationInfoRepository;
+            _mapper = mapper;
+        }
+        public Task Execute(IJobExecutionContext context)
+        {
+            try
+            {
+                CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams");
+                if (conveyorLine != null)
+                {
+                    #region 绔欏彴鏂瑰紡
+
+                    List<Dt_StationManger> stationManagers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == conveyorLine.DeviceCode);
+
+                    foreach (var station in stationManagers)
+                    {
+                        if (station.StationType==StationTypeEnum.StationType_OnlyOutbound.ObjToInt()) //鎷i�夌敵璇�
+                        {
+                            bool PickRequest = conveyorLine.GetValue<ConveyorLineDBName, bool>(ConveyorLineDBName.R_PickRequest, station.StationCode);
+                            if (PickRequest)
+                            {
+                                string PickBarCode = conveyorLine.GetValue<ConveyorLineDBName, string>(ConveyorLineDBName.R_PickBarCode, station.StationCode).Replace("\0", "");
+                                //涓婃姤WMS鏂欑鍒拌揪
+                                if (PickBarCode.IsNotEmptyOrNull())
+                                {
+                                    WebResponseContent content = _taskService.WMSPickUp(station.PickStationCode, PickBarCode);
+                                    if (content.Status)
+                                    {
+                                        //鍐欏叆鎷i�夌‘璁�
+                                    }
+                                }
+                                else
+                                {
+                                    WriteError(nameof(conveyorLine.DeviceCode), $"{station.StationCode}鎷i�夌敵璇蜂负{PickRequest}鏉$爜涓虹┖鍊�");
+                                }
+                            }
+                            
+                        }
+                        else
+                        {
+
+                        }
+                        
+                    }
+                    #endregion 绔欏彴鏂瑰紡
+                }
+            }
+            catch (Exception ex)
+            {
+                WriteError(nameof(ConveyorLineJob2), ex.Message);
+            }
+            return Task.CompletedTask;
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/\347\240\201\345\236\233/MDJob_CP.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/\347\240\201\345\236\233/MDJob_CP.cs"
index da93f50..bf8e9eb 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/\347\240\201\345\236\233/MDJob_CP.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_Tasks/\347\240\201\345\236\233/MDJob_CP.cs"
@@ -61,46 +61,46 @@
             if (flag && value != null)
             {
                 OtherDevice device = (OtherDevice)value;
-                List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StackerCraneCode == device.DeviceCode && x.StationType == StationTypeEnum.StationType_InStartAndOutEnd.ObjToInt() && x.IsOccupied == 0);
+                List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.CraneCode == device.DeviceCode);
                 foreach (var item in stationMangers)
                 {
                     //鑾峰彇鍗忚
-                    DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StackerCraneCode && x.DeviceProParamType == nameof(R_MDDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
-                    DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StackerCraneCode && x.DeviceProParamType == nameof(W_MDDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+                    DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.CraneCode && x.DeviceProParamType == nameof(R_MDDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+                    DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.CraneCode && x.DeviceProParamType == nameof(W_MDDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                     if (deviceProRead != null && deviceProWrite != null)
                     {
-                        short Allow = device.GetValue<R_MDDB, short>(R_MDDB.R_MDAllow, item.StackerCraneCode);
+                        short Allow = device.GetValue<R_MDDB, short>(R_MDDB.R_MDAllow, item.CraneCode);
 
                         #region 璇诲彇宸ヤ綅鐘舵��
-                        short R_MDStatus1 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDStatus1, item.StackerCraneCode);
-                        short R_MDStatus2 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDStatus2, item.StackerCraneCode);
-                        short R_MDStatus3 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDStatus3, item.StackerCraneCode);
-                        short R_MDStatus4 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDStatus4, item.StackerCraneCode);
+                        short R_MDStatus1 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDStatus1, item.CraneCode);
+                        short R_MDStatus2 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDStatus2, item.CraneCode);
+                        short R_MDStatus3 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDStatus3, item.CraneCode);
+                        short R_MDStatus4 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDStatus4, item.CraneCode);
 
-                        short ReceiveDoneState = device.GetValue<W_MDDB, short>(W_MDDB.W_MDReceiveDone, item.StackerCraneCode);
+                        short ReceiveDoneState = device.GetValue<W_MDDB, short>(W_MDDB.W_MDReceiveDone, item.CraneCode);
                         #endregion
                         //鐮佸灈鐘舵��
-                        short PackState = device.GetValue<R_MDDB, short>(GetPackStateEnum(item.StackerCraneStationCode), item.StackerCraneCode);
+                        short PackState = device.GetValue<R_MDDB, short>(GetPackStateEnum(item.CraneStationCode), item.CraneCode);
                         //鐮佸灈鏁伴噺
-                        short PackNum = device.GetValue<R_MDDB, short>(GetPackNumEnum(item.StackerCraneStationCode), item.StackerCraneCode);
+                        short PackNum = device.GetValue<R_MDDB, short>(GetPackNumEnum(item.CraneStationCode), item.CraneCode);
                         if (R_MDStatus1 == 1 || R_MDStatus2 == 1 || R_MDStatus3 == 1 || R_MDStatus4 == 1)
                         {
                             Thread.Sleep(200);
                             if (ReceiveDoneState != 0)
                             {
                                 device.Communicator.Write<short>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDReceiveDone.ToString()).DeviceProDataBlock, 0);
-                                WriteInfo(item.StackerCraneCode, $"{item.StackerCraneCode}娓呴櫎涓嬪彂鏍囪瘑淇″彿");
+                                WriteInfo(item.CraneCode, $"{item.CraneCode}娓呴櫎涓嬪彂鏍囪瘑淇″彿");
                             }
                             continue;
                         }
                         if (PackState == 2)
                         {
                             Thread.Sleep(200);
-                            device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == GetPackSendEnum(item.StackerCraneStationCode).ToString()).DeviceProDataBlock, 0);
+                            device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == GetPackSendEnum(item.CraneStationCode).ToString()).DeviceProDataBlock, 0);
                             WriteInfo(item.StationName, $"{item.StationName}娓呴櫎宸ヤ綅缁撴墭淇″彿");
                             continue;
                         }
-                        device.Communicator.Write<short>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == GetPackSendEnum(item.StackerCraneStationCode).ToString()).DeviceProDataBlock, 2);
+                        device.Communicator.Write<short>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == GetPackSendEnum(item.CraneStationCode).ToString()).DeviceProDataBlock, 2);
                         WriteInfo(item.StationName, $"{item.StationName}鍐欏叆宸ヤ綅缁撴墭淇″彿");
                         //鑾峰彇褰撳墠浠诲姟
                         Dt_Task task = _taskRepository.QueryData(x => x.NextAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.DeviceCode == device.DeviceCode).OrderBy(x => x.TaskNum).FirstOrDefault();
@@ -108,9 +108,9 @@
                         if (task != null)
                         {
                             //鍐欏叆宸ヤ綅鍙�
-                            device.Communicator.Write<short>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDSendID.ToString()).DeviceProDataBlock, Convert.ToInt16(item.StackerCraneStationCode));
+                            device.Communicator.Write<short>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDSendID.ToString()).DeviceProDataBlock, Convert.ToInt16(item.CraneStationCode));
                             //鍐欏叆宸ヤ綅鍏佽鐮佸灈
-                            device.Communicator.Write<short>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == GetPackSendEnum(item.StackerCraneStationCode).ToString()).DeviceProDataBlock, 1);
+                            device.Communicator.Write<short>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == GetPackSendEnum(item.CraneStationCode).ToString()).DeviceProDataBlock, 1);
 
                             #region 鑾峰彇鍐欏叆鐮佸灈X銆乊銆乑鍧愭爣
 
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/AGV\351\200\232\344\277\241\346\226\207\346\241\243/WMS\350\276\223\351\200\201\347\272\277\345\257\271\346\216\245\345\215\217\350\256\256251126.xls" "b/\351\241\271\347\233\256\350\265\204\346\226\231/AGV\351\200\232\344\277\241\346\226\207\346\241\243/WMS\350\276\223\351\200\201\347\272\277\345\257\271\346\216\245\345\215\217\350\256\256251126.xls"
new file mode 100644
index 0000000..3f24a27
--- /dev/null
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/AGV\351\200\232\344\277\241\346\226\207\346\241\243/WMS\350\276\223\351\200\201\347\272\277\345\257\271\346\216\245\345\215\217\350\256\256251126.xls"
Binary files differ
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/AGV\351\200\232\344\277\241\346\226\207\346\241\243/\347\202\271\344\275\215\344\277\241\346\201\257.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/AGV\351\200\232\344\277\241\346\226\207\346\241\243/\347\202\271\344\275\215\344\277\241\346\201\257.xlsx"
index d93d6dd..233fdee 100644
--- "a/\351\241\271\347\233\256\350\265\204\346\226\231/AGV\351\200\232\344\277\241\346\226\207\346\241\243/\347\202\271\344\275\215\344\277\241\346\201\257.xlsx"
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/AGV\351\200\232\344\277\241\346\226\207\346\241\243/\347\202\271\344\275\215\344\277\241\346\201\257.xlsx"
Binary files differ
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/AGV\351\200\232\344\277\241\346\226\207\346\241\243/\350\276\223\351\200\201\346\213\243\351\200\211\345\222\214\347\253\231\345\217\260\347\274\226\345\217\267.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/AGV\351\200\232\344\277\241\346\226\207\346\241\243/\350\276\223\351\200\201\346\213\243\351\200\211\345\222\214\347\253\231\345\217\260\347\274\226\345\217\267.xlsx"
new file mode 100644
index 0000000..64a7bea
--- /dev/null
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/AGV\351\200\232\344\277\241\346\226\207\346\241\243/\350\276\223\351\200\201\346\213\243\351\200\211\345\222\214\347\253\231\345\217\260\347\274\226\345\217\267.xlsx"
Binary files differ
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\344\270\200\346\234\237\345\257\271\346\216\245\347\233\270\345\205\263\350\265\204\346\226\231/\345\223\210\345\260\224\346\273\250\344\270\200\346\234\237\350\276\223\351\200\201\347\272\277\345\257\271\346\216\245\345\215\217\350\256\256modbusTcp\345\215\217\350\256\256V1.1.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\344\270\200\346\234\237\345\257\271\346\216\245\347\233\270\345\205\263\350\265\204\346\226\231/\345\223\210\345\260\224\346\273\250\344\270\200\346\234\237\350\276\223\351\200\201\347\272\277\345\257\271\346\216\245\345\215\217\350\256\256modbusTcp\345\215\217\350\256\256V1.1.xlsx"
index 2cc6c69..2452227 100644
--- "a/\351\241\271\347\233\256\350\265\204\346\226\231/\344\270\200\346\234\237\345\257\271\346\216\245\347\233\270\345\205\263\350\265\204\346\226\231/\345\223\210\345\260\224\346\273\250\344\270\200\346\234\237\350\276\223\351\200\201\347\272\277\345\257\271\346\216\245\345\215\217\350\256\256modbusTcp\345\215\217\350\256\256V1.1.xlsx"
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\344\270\200\346\234\237\345\257\271\346\216\245\347\233\270\345\205\263\350\265\204\346\226\231/\345\223\210\345\260\224\346\273\250\344\270\200\346\234\237\350\276\223\351\200\201\347\272\277\345\257\271\346\216\245\345\215\217\350\256\256modbusTcp\345\215\217\350\256\256V1.1.xlsx"
Binary files differ
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\346\261\207\346\200\273\346\226\207\344\273\266/WMS\346\216\245\345\217\243\345\257\271\346\216\245\346\226\207\346\241\243_V1.1.3.docx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\346\261\207\346\200\273\346\226\207\344\273\266/WMS\346\216\245\345\217\243\345\257\271\346\216\245\346\226\207\346\241\243_V1.1.3.docx"
index bfd36a8..63840a7 100644
--- "a/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\346\261\207\346\200\273\346\226\207\344\273\266/WMS\346\216\245\345\217\243\345\257\271\346\216\245\346\226\207\346\241\243_V1.1.3.docx"
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\346\261\207\346\200\273\346\226\207\344\273\266/WMS\346\216\245\345\217\243\345\257\271\346\216\245\346\226\207\346\241\243_V1.1.3.docx"
Binary files differ

--
Gitblit v1.9.3