From a23691d54a0142ba9a0668788d366638bd82349e Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期二, 26 八月 2025 08:25:41 +0800
Subject: [PATCH] 更新最新代码,码垛,伸缩货叉等

---
 项目代码/WCS/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs        |    5 
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/StackerCraneJob_CP.cs                  |   44 
 项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs    |   68 +
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs |   71 +
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/R_MDDBName.cs                      |   60 +
 项目资料/通信协议/龙利得机器人IO通讯表20250712.xlsx                                               |    0 
 项目代码/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs          |  215 ++++
 项目代码/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs                   |  106 +
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CPB.cs                 |   47 
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CPH.cs                 |   40 
 项目资料/通信协议/原料库输送线通讯协议.xlsx                                                        |    0 
 项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Completed.cs            |    4 
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/RetractDBName.cs                   |   59 +
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/W_MDDBName.cs                      |   52 +
 项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs              |  413 ++++++----
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/AGV_CPExtend.cs                        |   55 +
 项目代码/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs  |    4 
 项目资料/通信协议/伸缩货叉接驳台IP分配表.xlsx                                                      |    0 
 项目资料/通信协议/成品输送线通讯协议_20250707.xlsx                                                |    0 
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/码垛/MDJob_CP.cs                             |  165 ++++
 项目代码/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs                    |   40 +
 项目代码/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs                |   12 
 项目资料/接口协议/一期BSTERP需求字段.xlsx                                                      |    0 
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/原料库/ConveyorLineJob_YL1ndFloor.cs          |   49 +
 项目代码/龙利得PDA/common/config.js                                                     |    2 
 项目代码/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs                  |   31 
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/接驳台/CoveryorJobYL.cs                       |  116 +++
 项目资料/通信协议/印智云数据字典.xlsx                                                           |    0 
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CPC.cs                 |   11 
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/伸缩货叉/RetractYSJob.cs                       |  114 +++
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CPA.cs                 |   24 
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/CoveryorDBName.cs                  |   60 +
 项目代码/WMS/WMSServices/WIDESEA_Model/Models/Stock/Dt_ProCache.cs                   |   12 
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/原料库/StackerCraneJob_YLSC2.cs               |   49 
 项目代码/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs                     |   34 
 项目代码/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs                   |   61 +
 项目代码/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskSendDTO.cs                        |    2 
 项目代码/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvSecureApplyDTO.cs                     |    2 
 项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/RGVJob_CP.cs                           |   56 +
 项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs             |   75 +
 项目代码/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs                 |   21 
 项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Reloaction.cs           |   63 +
 42 files changed, 1,848 insertions(+), 394 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
index ccd5df8..87025f1 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
@@ -48,10 +48,10 @@
         [Description("AGV寰呮墽琛�")]
         AGV_Execute = 300,
         /// <summary>
-        /// AGV鍙栬揣涓�
+        /// AGV鍙栬揣瀹屾垚
         /// </summary>
-        [Description("AGV鍙栬揣涓�")]
-        AGV_Takeing = 305,
+        [Description("AGV鍙栬揣瀹屾垚")]
+        AGV_TakeFinish = 305,
         /// <summary>
         /// AGV鎵ц涓�
         /// </summary>
@@ -104,6 +104,12 @@
         RGV_Executing = 510,
 
         /// <summary>
+        /// 鐮佸灈鎵ц涓�
+        /// </summary>
+        [Description("鐮佸灈鎵ц涓�")]
+        MD_Executing = 520,
+
+        /// <summary>
         /// 浠诲姟瀹屾垚
         /// </summary>
         [Description("浠诲姟瀹屾垚")]
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
index aa83b00..7f758b7 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
@@ -80,6 +80,19 @@
         /// </summary>
         [Description("鎴愬搧MES鎻愬簱")]
         OutMesRworkProduct = 250,
+
+        /// <summary>
+        /// 鍗板埛鍑哄簱
+        /// </summary>
+        [Description("鍗板埛鍑哄簱")]
+        PrintOutbound = 310,
+
+        /// <summary>
+        /// 鏃犵汉甯冨嚭搴�
+        /// </summary>
+        [Description("鏃犵汉甯冨嚭搴�")]
+        OutWFB = 320,
+
         /// <summary>
         /// 閲囪喘鍏ュ簱
         /// </summary>
@@ -155,6 +168,24 @@
         EmptyProductBack = 630,
 
         /// <summary>
+        /// 鎴愬搧鐮佸灈
+        /// </summary>
+        [Description("鎴愬搧鐮佸灈")]
+        ProductMD = 640,
+
+        /// <summary>
+        /// 鍗板埛鍗婃垚鍝佸叆搴�
+        /// </summary>
+        [Description("鍗板埛鍗婃垚鍝佸叆搴�")]
+        PrintInbound = 710,
+
+        /// <summary>
+        /// 鍗板埛鍘熸枡浣欐枡閫�搴�
+        /// </summary>
+        [Description("鍗板埛鍘熸枡浣欐枡閫�搴�")]
+        PrintBackInbound = 720,
+
+        /// <summary>
         /// 宸烽亾鍐呯Щ搴�
         /// </summary>
         [Description("宸烽亾鍐呯Щ搴�")]
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvSecureApplyDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvSecureApplyDTO.cs"
index b94f32d..d7f0523 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvSecureApplyDTO.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvSecureApplyDTO.cs"
@@ -13,7 +13,7 @@
         /// </summary>
         public string ReceiveTaskID { get; set; }
         /// <summary>
-        /// 鎵规
+        /// 鍦板浘鍙�
         /// </summary>
         public string WbCode { get; set; }
     }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskSendDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskSendDTO.cs"
index b064b5c..2ed4cec 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskSendDTO.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskSendDTO.cs"
@@ -44,6 +44,6 @@
     public class PointDetail
     {
         public string Code { get; set; }
-        public string Value { get; set; }
+        public string? Value { get; set; }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
index 2d1bf0a..d375bea 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
@@ -71,7 +71,15 @@
         /// <param name="palletCode">鎵樼洏</param>
         /// <param name="sourceAddress">璧风偣</param>
         /// <returns></returns>
-        WebResponseContent RequestYLWMSTaskSimple(string palletCode, string sourceAddress);
+        WebResponseContent RequestYLWMSTaskSimple(string palletCode, string sourceAddress, int taskNum = 0);
+
+        WebResponseContent AssignCPRoadwayNo();
+
+        // <summary>
+        /// 璇锋眰鍘熸枡鍏ュ簱宸烽亾
+        /// </summary>
+        /// <returns></returns>
+        WebResponseContent AssignYLRoadwayNo(string palletCode);
         /// <summary>
         /// 璇锋眰鍏ュ簱浠诲姟
         /// </summary>
@@ -79,7 +87,7 @@
         /// <param name="sourceAddress">璧峰鍦板潃</param>
         /// /// <param name="roadWay">宸烽亾</param>
         /// <returns></returns>
-        WebResponseContent RequestWMSTaskSimple(string palletCode, string sourceAddress, string roadWay="", int taskType = 630);
+        WebResponseContent RequestWMSTaskSimple(string palletCode, string sourceAddress, string roadWay="", int taskType = 630,int taskNum=0,string targetAddress="");
 
         /// <summary>
         /// 鍚慦MS鐢宠浠诲姟
@@ -97,15 +105,6 @@
         /// <param name="roadwayNo">宸烽亾鍙�</param>
         /// <returns></returns>
         string? RequestAssignLocation(int taskNum, string roadwayNo);
-
-        /// <summary>
-        /// 鍚慦MS鐢宠鍒嗛厤璐т綅
-        /// </summary>
-        /// <param name="taskNum">浠诲姟鍙�</param>
-        /// <param name="roadwayNo">宸烽亾鍙�</param>
-        /// <param name="heightType">楂樺害</param>
-        /// <returns></returns>
-        string? RequestAssignLocationByHeight(int taskNum, string roadwayNo, int heightType);
 
         /// <summary>
         /// 浠诲姟瀹屾垚
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs"
index 4724199..bd06e10 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs"
@@ -15,9 +15,12 @@
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_QuartzJob;
 using WIDESEAWCS_QuartzJob.DTO;
+using WIDESEAWCS_QuartzJob.Models;
+using WIDESEAWCS_QuartzJob.Repository;
 using WIDESEAWCS_Tasks;
 using WIDESEAWCS_Tasks.ConveyorLineJob;
 using WIDESEAWCS_Tasks.DBNames;
+using static Dm.net.buffer.ByteArrayBuffer;
 
 namespace WIDESEAWCS_Server.Controllers
 {
@@ -28,12 +31,14 @@
         private readonly IStationMangerRepository _stationMangerRepository;
         private readonly ITaskService _taskService;
         private readonly ITaskRepository _taskRepository;
+        private readonly IRouterRepository _routerRepository;
 
-        public AGVController(IStationMangerRepository stationMangerRepository, ITaskService taskService, ITaskRepository taskRepository)
+        public AGVController(IStationMangerRepository stationMangerRepository, ITaskService taskService, ITaskRepository taskRepository,IRouterRepository routerRepository)
         {
             _stationMangerRepository = stationMangerRepository;
             _taskService = taskService;
             _taskRepository = taskRepository;
+            _routerRepository = routerRepository;
         }
 
         
@@ -53,22 +58,42 @@
                 if (task == null) throw new Exception("鏈壘鍒颁换鍔�");
                 if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                 {
-                    var content = TakeRequest(task.CurrentAddress);
-                    if (!content.Status)
+                    if (task.TaskState==TaskStatusEnum.AGV_Executing.ObjToInt())//鍑哄簱鍙栬揣璇锋眰
                     {
-                        throw new Exception(content.Message);
+                        var content = TakeRequest(secureApplyModel.WbCode);
+                        if (!content.Status)
+                        {
+                            throw new Exception(content.Message);
+                        }
+                    }
+                    else//鍑哄簱鏀捐揣璇锋眰
+                    {
+                        var content = PutRequest(secureApplyModel.WbCode, task.PalletType);
+                        if (!content.Status)
+                        {
+                            throw new Exception(content.Message);
+                        }
                     }
                 }
                 else
                 {
-                    var content = PutRequest(task.NextAddress, task.PalletType);
-                    if (!content.Status)
+                    if (task.TaskState == TaskStatusEnum.AGV_Executing.ObjToInt())//鍏ュ簱鍙栬揣璇锋眰
                     {
-                        throw new Exception(content.Message);
+                        var content = TakeRequest(secureApplyModel.WbCode);
+                        if (!content.Status)
+                        {
+                            throw new Exception(content.Message);
+                        }
+                    }
+                    else//鍏ュ簱鏀捐揣璇锋眰
+                    {
+                        var content = PutRequest(secureApplyModel.WbCode, task.TaskNum);
+                        if (!content.Status)
+                        {
+                            throw new Exception(content.Message);
+                        }
                     }
                 }
-                task.TaskState = TaskStatusEnum.AGV_Puting.ObjToInt();
-                var up = _taskRepository.UpdateData(task);
                 agvResponse.OK("鎴愬姛","0");
             }
             catch (Exception ex)
@@ -201,6 +226,9 @@
                 switch (agvUpdateModel.GoodsState)
                 {
                     case "1"://鍑哄簱鏍规嵁杩欎釜淇″彿鍒ゆ柇鍙栬揣瀹屾垚
+
+                        //鏇存柊浠诲姟鐘舵��
+                        _taskService.UpdateTask(task, TaskStatusEnum.AGV_TakeFinish);
                         if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                         {
                             var content = TakeFinish(task.CurrentAddress);
@@ -208,9 +236,19 @@
                             {
                                 throw new Exception(content.Message);
                             };
-                            return agvResponse.OK("鎴愬姛", "0");
                         }
-                        break;
+                        else
+                        {
+                            if (task.TaskType == TaskTypeEnum.PrintInbound.ObjToInt() || task.TaskType == TaskTypeEnum.PrintBackInbound.ObjToInt())
+                            {
+                                var content = TakeFinish(task.CurrentAddress);
+                                if (!content.Status)
+                                {
+                                    throw new Exception(content.Message);
+                                };
+                            }
+                        }
+                        return agvResponse.OK("鎴愬姛", "0");
                     case "2"://鍏ュ簱鏍规嵁杩欎釜淇″彿鍒ゆ柇鏀捐揣瀹屾垚
                         if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                         {
@@ -219,19 +257,41 @@
                             {
                                 throw new Exception($"{task.NextAddress}AGV绔欏彴鏈畾涔�");
                             }
-                            task.CurrentAddress = dt_Station.StationCode;
-                            task.NextAddress = "";
-                            task.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt();
-                            task.DeviceCode = dt_Station.StationDeviceCode;
-                            var up = _taskRepository.UpdateData(task);
+                            if (task.TaskType == TaskTypeEnum.PrintInbound.ObjToInt() || task.TaskType == TaskTypeEnum.PrintBackInbound.ObjToInt())
+                            {
+                                List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == task.TaskType && task.NextAddress == x.StartPosi);
+                                Dt_Router router = routers.FirstOrDefault();
+                                if (router == null)
+                                {
+                                    throw new Exception($"浠诲姟鍙�:{task.TaskNum}鏈壘鍒拌矾鐢遍厤缃俊鎭�");
+                                }
+                                string oldAddress = task.NextAddress;
+                                //鏇存柊浠诲姟鐘舵��
+                                task.CurrentAddress = router.NextPosi;
+                                task.NextAddress = "";
+                                task.DeviceCode = router.ChildPosiDeviceCode;
+                                _taskService.UpdateTask(task, TaskStatusEnum.AGV_Finish);
+                                PutFinish(oldAddress, task.TaskNum);
+                            }
+                            else
+                            {
+                                task.CurrentAddress = dt_Station.StationCode;
+                                task.NextAddress = "";
+                                task.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt();
+                                task.DeviceCode = dt_Station.StationDeviceCode;
+                                _taskRepository.UpdateData(task);
+                            }
                             return agvResponse.OK("鎴愬姛","0");
                         }
-                        else if(task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+                        else
                         {
                             _taskService.TaskCompleted(task.TaskNum);
+                            if (task.TaskType==TaskTypeEnum.PrintOutbound.ObjToInt())
+                            {
+                                PutFinish(task.NextAddress);
+                            }
                             return agvResponse.OK("鎴愬姛", "0");
                         }
-                        break;
                     default:
                         throw new Exception($"鏈畾涔夋柟娉曞悕銆恵agvUpdateModel.TaskState}銆�");
                 }
@@ -241,7 +301,6 @@
                 agvResponse.Error(ex.Message);
             }
             return agvResponse;
-            //return _taskService.AgvUpdateTask(agvUpdateModel);
         }
 
         /// <summary>
@@ -251,12 +310,12 @@
         /// <param name="palletType"></param>
         /// <returns></returns>
         [HttpPost, HttpGet, Route("PutRequest"), AllowAnonymous]
-        public WebResponseContent PutRequest(string code, int palletType)
+        public WebResponseContent PutRequest(string code, int taskNum)
         {
             WebResponseContent content = new WebResponseContent();
             try
             {
-                Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == code);
+                Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == code);
                 if (stationManger == null)
                 {
                     return content.Error($"鏈壘鍒扮珯鍙伴厤缃�");
@@ -269,15 +328,57 @@
 
                 OtherDevice otherDevice = (OtherDevice)device;
 
-                short Command = otherDevice.GetValue<R_ConveyorLineCPDB, short>(R_ConveyorLineCPDB.Command, stationManger.StationCode);
-                if (Command == 3)
+                if (device.DeviceCode.Contains("CP"))//鎴愬搧杈撻�佺嚎
                 {
-                    content.OK("鍏佽鏀炬枡");
+                    short Command = otherDevice.GetValue<R_ConveyorLineCPDB, short>(R_ConveyorLineCPDB.Command, stationManger.StationCode);
+                    if (Command == 3)
+                    {
+                        content.OK("鍏佽鏀炬枡");
+                    }
+                    else
+                    {
+                        return content.Error("绂佹鏀炬枡");
+                    }
                 }
-                else
+                else if (device.DeviceCode.Contains("Coveryor"))//鎺ラ┏鍙�
                 {
-                    return content.Error("绂佹鏀炬枡");
+                    bool RequestPut = otherDevice.GetValue<CoveryorDB, bool>(CoveryorDB.C_RequestPut, stationManger.StationDeviceCode);
+                    if (!RequestPut)
+                    {
+                        otherDevice.SetValue(CoveryorDB.C_InTaskNum, taskNum, stationManger.StationDeviceCode);
+                        otherDevice.SetValue(CoveryorDB.C_RequestPut, true, stationManger.StationDeviceCode);
+                        Thread.Sleep(1000);
+                    }
+                    bool AllowFinish = otherDevice.GetValue<CoveryorDB, bool>(CoveryorDB.C_AllowFinish, stationManger.StationDeviceCode);
+                    if (AllowFinish)
+                    {
+                        content.OK("鍏佽鏀炬枡");
+                    }
+                    else
+                    {
+                        return content.Error("绂佹鏀炬枡");
+                    }
                 }
+                else if (device.DeviceCode.Contains("Retract"))//浼哥缉璐у弶
+                {
+                    bool RequestPut = otherDevice.GetValue<RetractDB, bool>(RetractDB.Ret_RequestPut, stationManger.StationDeviceCode);
+                    if (!RequestPut)
+                    {
+                        otherDevice.SetValue(RetractDB.Ret_TargetAddress, Convert.ToInt16(stationManger.StationCode), stationManger.StationDeviceCode);
+                        otherDevice.SetValue(RetractDB.Ret_RequestPut, true, stationManger.StationDeviceCode);
+                        Thread.Sleep(1000);
+                    }
+                    bool AllowFinish = otherDevice.GetValue<RetractDB, bool>(RetractDB.Ret_AllowFinish, stationManger.StationDeviceCode);
+                    if (AllowFinish)
+                    {
+                        content.OK("鍏佽鏀炬枡");
+                    }
+                    else
+                    {
+                        return content.Error("绂佹鏀炬枡");
+                    }
+                }
+                
                 return content;
             }
             catch (Exception ex)
@@ -293,11 +394,11 @@
         /// <param name="code"></param>
         /// <returns></returns>
         [HttpPost, HttpGet, Route("PutFinish"), AllowAnonymous]
-        public WebResponseContent PutFinish(string code)
+        public WebResponseContent PutFinish(string code,int taskNum=0)
         {
             try
             {
-                Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == code);
+                Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == code);
                 if (stationManger == null)
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒扮珯鍙伴厤缃�");
@@ -309,7 +410,14 @@
                 }
 
                 OtherDevice otherDevice = (OtherDevice)device;
-                otherDevice.SetValue(GroundStationDBName.W_PutFinish, true, stationManger.StationCode);
+                if (device.DeviceCode.Contains("Coveryor"))//鎺ラ┏鍙�
+                {
+                    otherDevice.SetValue(CoveryorDB.C_PutFinish, true, stationManger.StationDeviceCode);
+                }
+                else if (device.DeviceCode.Contains("Retract"))//浼哥缉璐у弶
+                {
+                    otherDevice.SetValue(RetractDB.Ret_PutFinish, true, stationManger.StationDeviceCode);
+                }
                 return WebResponseContent.Instance.OK();
             }
             catch (Exception ex)
@@ -330,7 +438,7 @@
             WebResponseContent content = new WebResponseContent();
             try
             {
-                Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == code);
+                Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == code);
                 if (stationManger == null)
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒扮珯鍙伴厤缃畕code}");
@@ -343,15 +451,43 @@
 
                 OtherDevice otherDevice = (OtherDevice)device;
 
-                short Command = otherDevice.GetValue<R_ConveyorLineCPDB, short>(R_ConveyorLineCPDB.Command, stationManger.StationCode);
-                if (Command == 2)
+                if (otherDevice.DeviceCode.Contains("CP"))//鎴愬搧杈撻�佺嚎
                 {
-                    content.OK("鍏佽鍙栨枡");
+                    short Command = otherDevice.GetValue<R_ConveyorLineCPDB, short>(R_ConveyorLineCPDB.Command, stationManger.StationCode);
+                    if (Command == 2)
+                    {
+                        content.OK("鍏佽鍙栨枡");
+                    }
+                    else
+                    {
+                        return content.Error("绂佹鍙栨枡");
+                    }
                 }
-                else
+                else if (device.DeviceCode.Contains("Coveryor"))//鎺ラ┏鍙�
                 {
-                    return content.Error("绂佹鍙栨枡");
+                    bool AllowTake = otherDevice.GetValue<CoveryorDB, bool>(CoveryorDB.C_AllowTake, stationManger.StationDeviceCode);
+                    if (AllowTake)
+                    {
+                        content.OK("鍏佽鍙栨枡");
+                    }
+                    else
+                    {
+                        return content.Error("绂佹鍙栨枡");
+                    }
                 }
+                else if (device.DeviceCode.Contains("Retract"))//浼哥缉璐у弶
+                {
+                    bool AllowTake = otherDevice.GetValue<RetractDB, bool>(RetractDB.Ret_AllowTake, stationManger.StationDeviceCode);
+                    if (AllowTake)
+                    {
+                        content.OK("鍏佽鍙栨枡");
+                    }
+                    else
+                    {
+                        return content.Error("绂佹鍙栨枡");
+                    }
+                }
+
                 return content;
             }
             catch (Exception ex)
@@ -387,6 +523,15 @@
                 {
                     otherDevice.SetValue(W_ConveyorLineCPDB.W_Command, 2, stationManger.StationCode);
                 }
+                else if (device.DeviceCode.Contains("Coveryor"))
+                {
+                    otherDevice.SetValue(CoveryorDB.C_TakeFinish, true, stationManger.StationDeviceCode);
+                }
+                else if (device.DeviceCode.Contains("Retract"))//浼哥缉璐у弶
+                {
+                    otherDevice.SetValue(RetractDB.Ret_TakeFinish, true, stationManger.StationDeviceCode);
+                }
+
                 return WebResponseContent.Instance.OK();
             }
             catch (Exception ex)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
index 35a9f81..18a0ec3 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
@@ -102,6 +102,11 @@
             };
             return Service.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
         }
+        [HttpPost, HttpGet, Route("AssignCPRoadwayNo"), AllowAnonymous]
+        public WebResponseContent AssignCPRoadwayNo()
+        {
+            return Service.AssignCPRoadwayNo();
+        }
         /// <summary>
         /// 璇锋眰鍏ュ簱浠诲姟
         /// </summary>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
index f8398a4..8110c69 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
@@ -80,6 +80,8 @@
 
         public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList().Where(x => x >= 100 && x < 500).ToList();
 
+        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)
         {
             _mapper = mapper;
@@ -206,6 +208,10 @@
                                 task.CurrentAddress = router.StartPosi;
                                 task.NextAddress = router.NextPosi;
                                 task.DeviceCode = router.ChildPosiDeviceCode;
+                                if (task.TaskType == TaskTypeEnum.ProductMD.ObjToInt())
+                                {
+                                    task.TaskState = TaskStatusEnum.Line_Executing.ObjToInt();
+                                }
                             }
                             else //鍑哄簱
                             {
@@ -312,7 +318,7 @@
         /// <param name="sourceAddress">璧峰鍦板潃</param>
         /// /// <param name="roadWay">宸烽亾</param>
         /// <returns></returns>
-        public WebResponseContent RequestYLWMSTaskSimple(string palletCode, string sourceAddress)
+        public WebResponseContent RequestYLWMSTaskSimple(string palletCode, string sourceAddress,int taskNum=0)
         {
             WebResponseContent content = new WebResponseContent();
             try
@@ -322,7 +328,7 @@
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃");
                 }
-                string responseStr = HttpHelper.Get($"{address}/api/Task/RequestYLWMSTaskSimple?stationCode={sourceAddress}&palletCode={palletCode}");
+                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)
                 {
@@ -340,6 +346,64 @@
             }
             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>
@@ -347,7 +411,7 @@
         /// <param name="sourceAddress">璧峰鍦板潃</param>
         /// /// <param name="roadWay">宸烽亾</param>
         /// <returns></returns>
-        public WebResponseContent RequestWMSTaskSimple(string palletCode, string sourceAddress, string roadWay="", int taskType=630)
+        public WebResponseContent RequestWMSTaskSimple(string palletCode, string sourceAddress,string roadWay="", int taskType=630, int taskNum = 0, string targetAddress = "")
         {
             WebResponseContent content = new WebResponseContent();
             try
@@ -366,16 +430,15 @@
                 //    {
                 WMSTaskDTO? taskDTO = new WMSTaskDTO()
                 {
-                    Id = 1,
-                    TaskNum = DateTime.Now.ToString("mmss").ObjToInt(),
+                    TaskNum = taskNum ==0 ? DateTime.Now.ToString("mmss").ObjToInt(): taskNum,
                     PalletCode= palletCode,
-                    RoadWay= roadWay ?? "",
+                    RoadWay= roadWay,
                     TaskType= taskType,
                     PalletType=1,
-                    TaskStatus=TaskStatusEnum.New.ObjToInt(),
+                    TaskStatus= TaskStatusEnum.New.ObjToInt(),
                     SourceAddress= sourceAddress,
-                    TargetAddress="",
-                    WarehouseId=1,
+                    TargetAddress= targetAddress,
+                    WarehouseId=2,
                     Grade=0,
                 };
                 content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
@@ -574,29 +637,6 @@
         }
 
         /// <summary>
-        /// 鍚慦MS鐢宠鍒嗛厤璐т綅
-        /// </summary>
-        /// <param name="taskNum"></param>
-        /// <param name="roadwayNo"></param>
-        /// <param name="heightType"></param>
-        /// <returns></returns>
-        /// <exception cref="Exception"></exception>
-        public string? RequestAssignLocationByHeight(int taskNum, string roadwayNo, int heightType)
-        {
-            string address = AppSettings.Get("WMSApiAddress");
-            if (string.IsNullOrEmpty(address)) throw new Exception("鏈壘鍒癢MSApi鍦板潃");
-            string responseStr = HttpHelper.Get($"{address}/api/Task/AssignInboundTaskLocationByHeight?taskNum={taskNum}&roadwayNo={roadwayNo}&heightType={heightType}");
-
-            WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
-            if (responseContent != null && responseContent.Status && responseContent.Data != null)
-            {
-                return responseContent.Data.ToString();
-            }
-
-            return "";
-        }
-
-        /// <summary>
         /// 鏍规嵁璁惧缂栧彿銆佷换鍔$被鍨嬪垎缁�(鍙��)鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鏂板鐨勪换鍔�
         /// </summary>
         /// <param name="deviceNo">璁惧缂栧彿</param>
@@ -610,6 +650,8 @@
                 return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
             if (taskTypeGroup.Value == TaskTypeGroup.OutbondGroup)
                 return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
+            if (taskTypeGroup.Value == TaskTypeGroup.RelocationGroup)
+                return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskRelocationTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy);
             return null;
         }
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs"
index 5fbd015..4224dae 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs"
@@ -62,7 +62,7 @@
         ///7锛氱敵璇锋枡妗�
         ///8锛氭枡妗嗗埌浣�
         ///9锛氭墽琛屽懡浠や腑
-        ///11锛氬紓甯�
+        ///11锛氭弧鐩樺噯澶�
         /// </summary>
         public short Command { get; set; }
         /// <summary>
@@ -261,7 +261,8 @@
         public short WR_Height { get; set; }
 
         /// <summary>
-        /// 鐢宠
+        /// 鐢宠<br/>
+        /// 86涓虹敵璇�
         /// </summary>
         public short WR_Request { get; set; }
 
@@ -350,4 +351,70 @@
         /// </summary>
         public short TaskReceivedDone { get; set; }
     }
+
+    /// <summary>
+    /// 鎺ラ┏鍙版湁鏃犺揣
+    /// </summary>
+    public class C_RequestTakeStatus
+    {
+        /// <summary>
+        /// 鏈敵璇峰彇鏂�
+        /// </summary>
+        [BoolIndex(0)]
+        public bool NoTakeRequest { get; set; }
+
+        /// <summary>
+        /// 宸茬敵璇峰彇鏂�
+        /// </summary>
+        [BoolIndex(1)]
+        public bool OkTakeRequest { get; set; }
+    }
+
+    public class CoveryorInfo : DeviceCommand
+    {
+        /// <summary>
+        /// 鏈夋棤璐х姸鎬�
+        /// </summary>
+        public byte C_GoodsStatus { get; set; }
+        /// <summary>
+        /// 鏁呴殰鐘舵��
+        /// </summary>
+        public short C_Error { get; set; }
+        /// <summary>
+        /// 鍏ュ簱鐢宠鏀捐揣
+        /// </summary>
+        public byte C_RequestPut { get; set; }
+        /// <summary>
+        /// 鍏ュ簱鏀捐揣瀹屾垚
+        /// </summary>
+        public byte C_PutFinish { get; set; }
+        /// <summary>
+        /// 鍏ュ簱鍏佽鏀捐揣
+        /// </summary>
+        public byte C_AllowFinish { get; set; }
+        /// <summary>
+        /// 鍑哄簱鐢宠鍙栬揣
+        /// </summary>
+        public byte C_RequestTake { get; set; }
+        /// <summary>
+        /// 鍑哄簱鍏佽鍙栬揣
+        /// </summary>
+        public byte C_AllowTake { get; set; }
+        /// <summary>
+        /// 鍑哄簱浠诲姟鍙�
+        /// </summary>
+        public int C_OutTaskNum { get; set; }
+        /// <summary>
+        /// 鍑哄簱鐢宠鍥炲簲
+        /// </summary>
+        public byte C_OutResponse { get; set; }
+        /// <summary>
+        /// 鍑哄簱鍙栨枡瀹屾垚
+        /// </summary> 
+        public byte C_TakeFinish { get; set; }
+        /// <summary>
+        /// 鍏ュ簱浠诲姟鍙�
+        /// </summary>
+        public int C_InTaskNum { get; set; }
+    }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/CoveryorDBName.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/CoveryorDBName.cs"
new file mode 100644
index 0000000..81bbc9a
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/CoveryorDBName.cs"
@@ -0,0 +1,60 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_Tasks.DBNames
+{
+    /// <summary>
+    /// 鎺ラ┏鍙颁俊鍙�
+    /// </summary>
+    public enum CoveryorDB
+    {
+        /// <summary>
+        /// 鏈夋棤璐х姸鎬�
+        /// </summary>
+        C_GoodsStatus,
+        /// <summary>
+        /// 鏁呴殰鐘舵��
+        /// </summary>
+        C_Error,
+        /// <summary>
+        /// 鍏ュ簱鐢宠鏀捐揣
+        /// </summary>
+        C_RequestPut,
+        /// <summary>
+        /// 鍏ュ簱鏀捐揣瀹屾垚
+        /// </summary>
+        C_PutFinish,
+        /// <summary>
+        /// 鍏ュ簱鍏佽鏀捐揣
+        /// </summary>
+        C_AllowFinish,
+        /// <summary>
+        /// 鍑哄簱鐢宠鍙栬揣
+        /// </summary>
+        C_RequestTake,
+        /// <summary>
+        /// 鍑哄簱鍏佽鍙栬揣
+        /// </summary>
+        C_AllowTake,
+        /// <summary>
+        /// 鍑哄簱浠诲姟鍙�
+        /// </summary>
+        C_OutTaskNum,
+        /// <summary>
+        /// 鍑哄簱鐢宠鍥炲簲
+        /// </summary>
+        C_OutResponse,
+        /// <summary>
+        /// 鍑哄簱鍙栨枡瀹屾垚
+        /// </summary>
+        C_TakeFinish,
+        /// <summary>
+        /// 鍏ュ簱浠诲姟鍙�
+        /// </summary>
+        C_InTaskNum,
+    }
+
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/R_MDDBName.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/R_MDDBName.cs"
new file mode 100644
index 0000000..c0546ee
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/R_MDDBName.cs"
@@ -0,0 +1,60 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_Tasks.DBNames
+{
+    public enum R_MDDB
+    {
+        /// <summary>
+        /// 1鍏佽鐮佸灈
+        /// </summary>
+        R_MDAllow,
+        /// <summary>
+        /// 鐮佸灈1鐘舵��<br/>
+        /// 1鐮佸灈涓�<br/>
+        /// 2鐮佸灈瀹屾垚<br/>
+        /// 4鐮佸灈娓呮墭<br/>
+        /// </summary>
+        R_MDStatus1,
+        /// <summary>
+        /// 鐮佸灈2鐘舵��<br/>
+        /// 1鐮佸灈涓�<br/>
+        /// 2鐮佸灈瀹屾垚<br/>
+        /// 4鐮佸灈娓呮墭<br/>
+        /// </summary>
+        R_MDStatus2,
+        /// <summary>
+        /// 鐮佸灈3鐘舵��<br/>
+        /// 1鐮佸灈涓�<br/>
+        /// 2鐮佸灈瀹屾垚<br/>
+        /// 4鐮佸灈娓呮墭<br/>
+        /// </summary>
+        R_MDStatus3,
+        /// <summary>
+        /// 鐮佸灈4鐘舵��<br/>
+        /// 1鐮佸灈涓�<br/>
+        /// 2鐮佸灈瀹屾垚<br/>
+        /// 4鐮佸灈娓呮墭<br/>
+        /// </summary>
+        R_MDStatus4,
+        /// <summary>
+        /// 鐮佸灈1鏁伴噺
+        /// </summary>
+        R_MDQtys1,
+        /// <summary>
+        /// 鐮佸灈2鏁伴噺
+        /// </summary>
+        R_MDQtys2,
+        /// <summary>
+        /// 鐮佸灈3鏁伴噺
+        /// </summary>
+        R_MDQtys3,
+        /// <summary>
+        /// 鐮佸灈4鏁伴噺
+        /// </summary>
+        R_MDQtys4
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/RetractDBName.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/RetractDBName.cs"
new file mode 100644
index 0000000..6851a63
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/RetractDBName.cs"
@@ -0,0 +1,59 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_Tasks.DBNames
+{
+    /// <summary>
+    /// 浼哥缉璐у弶淇″彿
+    /// </summary>
+    public enum RetractDB
+    {
+        /// <summary>
+        /// 鏈夋棤璐х姸鎬�
+        /// </summary>
+        Ret_GoodsStatus,
+        /// <summary>
+        /// 鏁呴殰鐘舵��
+        /// </summary>
+        Ret_Error,
+        /// <summary>
+        /// 涓婃枡鐢宠鏀捐揣
+        /// </summary>
+        Ret_RequestPut,
+        /// <summary>
+        /// 涓婃枡鏀捐揣瀹屾垚
+        /// </summary>
+        Ret_PutFinish,
+        /// <summary>
+        /// 涓婃枡鐩殑绔欏彴
+        /// </summary>
+        Ret_TargetAddress,
+        /// <summary>
+        /// 涓婃枡鍏佽鏀捐揣
+        /// </summary>
+        Ret_AllowFinish,
+        /// <summary>
+        /// 涓嬫枡鐢宠鍙栬揣
+        /// </summary>
+        Ret_RequestTake,
+        /// <summary>
+        /// 涓嬫枡鍏佽鍙栬揣
+        /// </summary>
+        Ret_AllowTake,
+        /// <summary>
+        /// 涓嬫枡鏉ユ簮绔欏彴
+        /// </summary>
+        Ret_SourceAddress,
+        /// <summary>
+        /// 涓嬫枡鐢宠鍥炲簲
+        /// </summary>
+        Ret_OutResponse,
+        /// <summary>
+        /// 涓嬫枡鍙栨枡瀹屾垚
+        /// </summary>
+        Ret_TakeFinish
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/W_MDDBName.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/W_MDDBName.cs"
new file mode 100644
index 0000000..a7fc602
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/DBNames/W_MDDBName.cs"
@@ -0,0 +1,52 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_Tasks.DBNames
+{
+    public enum W_MDDB
+    {
+        /// <summary>
+        /// 浠诲姟涓嬪彂鏍囪瘑
+        /// </summary>
+        W_MDReceiveDone,
+        /// <summary>
+        /// 浠诲姟宸ヤ綅1
+        /// </summary>
+        W_MDSend1,
+        /// <summary>
+        /// 浠诲姟宸ヤ綅2
+        /// </summary>
+        W_MDSend2,
+        /// <summary>
+        /// 浠诲姟宸ヤ綅3
+        /// </summary>
+        W_MDSend3,
+        /// <summary>
+        /// 浠诲姟宸ヤ綅4
+        /// </summary>
+        W_MDSend4,
+        /// <summary>
+        /// 浠诲姟宸ヤ綅鍙�
+        /// </summary>
+        W_MDSendID,
+        /// <summary>
+        /// 浠诲姟宸ヤ綅X
+        /// </summary>
+        W_MDX,
+        /// <summary>
+        /// 浠诲姟宸ヤ綅Y
+        /// </summary>
+        W_MDY,
+        /// <summary>
+        /// 浠诲姟宸ヤ綅Z
+        /// </summary>
+        W_MDZ,
+        /// <summary>
+        /// 浠诲姟宸ヤ綅A
+        /// </summary>
+        W_MDA
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\344\274\270\347\274\251\350\264\247\345\217\211/RetractYSJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\344\274\270\347\274\251\350\264\247\345\217\211/RetractYSJob.cs"
new file mode 100644
index 0000000..7b1a9f8
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\344\274\270\347\274\251\350\264\247\345\217\211/RetractYSJob.cs"
@@ -0,0 +1,114 @@
+锘縰sing Microsoft.AspNetCore.Components.Routing;
+using Newtonsoft.Json;
+using Quartz;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection.Metadata;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Common;
+using WIDESEAWCS_Common.Helper;
+using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Communicator;
+using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_IBasicInfoRepository;
+using WIDESEAWCS_ITaskInfoRepository;
+using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model.Models;
+using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_QuartzJob.ConveyorLine.Enum;
+using WIDESEAWCS_QuartzJob.DTO;
+using WIDESEAWCS_QuartzJob.Models;
+using WIDESEAWCS_QuartzJob.Repository;
+using WIDESEAWCS_QuartzJob.Service;
+using WIDESEAWCS_Tasks.ConveyorLineJob;
+using WIDESEAWCS_Tasks.DBNames;
+using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
+
+namespace WIDESEAWCS_Tasks
+{
+    [DisallowConcurrentExecution]
+    public class RetractYSJob : JobBase, IJob
+    {
+        private readonly ICacheService _cacheService;
+        private readonly ITaskService _taskService;
+        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
+        private readonly ITaskRepository _taskRepository;
+        private readonly IStationMangerRepository _stationMangerRepository;
+        private readonly IRouterRepository _routerRepository;
+        private readonly IRouterService _routerService;
+        private readonly IRouterExtension _routerExtension;
+        private readonly List<Dt_WarehouseDevice> warehouseDevices;
+
+        public RetractYSJob(ICacheService cacheService, ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IRouterService routerService, IRouterExtension routerExtension)
+        {
+            _cacheService = cacheService;
+            _taskService = taskService;
+            _taskExecuteDetailService = taskExecuteDetailService;
+            _taskRepository = taskRepository;
+            _stationMangerRepository = stationMangerRepository;
+            _routerRepository = routerRepository;
+            _routerService = routerService;
+            _routerExtension = routerExtension;
+
+            string? warehouseDevicesStr = _cacheService.Get<string>(nameof(Dt_WarehouseDevice));
+            if (!string.IsNullOrEmpty(warehouseDevicesStr))
+            {
+                warehouseDevices = JsonConvert.DeserializeObject<List<Dt_WarehouseDevice>>(warehouseDevicesStr) ?? new List<Dt_WarehouseDevice>();
+            }
+            else
+            {
+                warehouseDevices = new List<Dt_WarehouseDevice>();
+            }
+        }
+
+        public Task Execute(IJobExecutionContext context)
+        {
+            bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
+            if (flag && value != null)
+            {
+                OtherDevice device = (OtherDevice)value;
+                List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
+                foreach (var item in stationMangers)
+                {
+                    //鑾峰彇鍗忚
+                    DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationDeviceCode && x.DeviceProParamType == nameof(RetractDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+                    if (deviceProRead != null)
+                    {
+                        bool RequestTake = device.GetValue<RetractDB, bool>(RetractDB.Ret_RequestTake, item.StationDeviceCode);
+                        short SourceAddress = device.GetValue<RetractDB, short>(RetractDB.Ret_SourceAddress, item.StationDeviceCode);
+                        if (RequestTake && SourceAddress > 0) //涓�妤煎嵃鍒蜂笅鏂欑敵璇�
+                        {
+                            //鑾峰彇褰撳墠浠诲姟
+                            Dt_Task task = _taskRepository.QueryFirst(x => x.CurrentAddress == SourceAddress.ToString() && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.New.ObjToInt() && x.DeviceCode== device.DeviceCode);
+                            if (task != null)
+                            {
+                                //鍒嗛厤宸烽亾 瀛樺叆鎵樼洏鏁版嵁
+                                List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == task.TaskType && task.CurrentAddress == x.StartPosi && x.ChildPosi==device.DeviceCode);
+                                Dt_Router router = routers.FirstOrDefault();
+                                if (router == null)
+                                {
+                                    WriteError(item.StationName, $"浠诲姟鍙�:{task.TaskNum}鏈壘鍒拌矾鐢遍厤缃俊鎭�");
+                                    return Task.CompletedTask;
+                                }
+                                device.SetValue(RetractDB.Ret_OutResponse, true, item.StationDeviceCode);
+                                //鏇存柊浠诲姟淇℃伅
+                                task.DeviceCode = item.StackerCraneCode;
+                                _taskService.UpdateTask(task, TaskStatusEnum.AGV_Execute);
+                                WriteInfo(item.StationName, $"浠诲姟鍙穥task.TaskNum}浼哥缉璐у弶涓嬫枡");
+                            }
+                        }
+
+                    }
+                    else
+                    {
+                        WriteError(item.StationName, $"鏈壘鍒拌澶囧瓙缂栧彿{item.StationCode}鐨勫崗璁俊鎭�");
+                    }
+                }
+            }
+            return Task.CompletedTask;
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/ConveyorLineJob_YL1ndFloor.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/ConveyorLineJob_YL1ndFloor.cs"
index 2267256..e2fc1d9 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/ConveyorLineJob_YL1ndFloor.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/ConveyorLineJob_YL1ndFloor.cs"
@@ -82,7 +82,7 @@
                             device.SetValue(WR_CLineYLDB.WR_Reresult, 86, item.StationCode);
                             WriteInfo(item.StationCode, $"璇锋眰鍏ュ簱鏉$爜:{conveyorLineInfoRead.WR_TMID}");
                         }
-                        else if (conveyorLineInfoRead != null && item.StationType == StationTypeEnum.StationType_InboundAndOutbound.ObjToInt() && conveyorLineInfoRead.WR_ToHode <= 0 && conveyorLineInfoRead.WR_Request == 86 && !string.IsNullOrEmpty(conveyorLineInfoRead.WR_TMID)) //涓�妤煎垎閰嶇珯鍙板叆搴撳垎閰嶇洰鏍囩偣
+                        else if (conveyorLineInfoRead != null && item.StationType == StationTypeEnum.StationType_InboundAndOutbound.ObjToInt() && conveyorLineInfoRead.WR_ToHode <= 0 && conveyorLineInfoRead.WR_Request == 86 && conveyorLineInfoRead.WR_Task <= 0 && !string.IsNullOrEmpty(conveyorLineInfoRead.WR_TMID)) //涓�妤煎垎閰嶇珯鍙板叆搴撳垎閰嶇洰鏍囩偣
                         {
                             Dt_Task task = _taskRepository.QueryFirst(x => x.PalletCode == conveyorLineInfoRead.WR_TMID && x.CurrentAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.New.ObjToInt() && x.DeviceCode == device.DeviceCode);
                             if (task == null)
@@ -99,7 +99,45 @@
                                 device.SetValue(WR_CLineYLDB.WR_ToHode, task.NextAddress, item.StationCode);
                                 device.SetValue(WR_CLineYLDB.WR_Reresult, 86, item.StationCode);
                                 _taskService.UpdateTask(task, TaskStatusEnum.Line_Executing);
-                                WriteInfo(item.StationCode, conveyorLineInfoRead.Serialize());
+                                WriteInfo(item.StationCode, $"{conveyorLineInfoRead.Serialize()}");
+                            }
+                        }
+                        else if (conveyorLineInfoRead != null && item.StationType == StationTypeEnum.StationType_InboundAndOutbound.ObjToInt() && conveyorLineInfoRead.WR_ToHode <= 0 && conveyorLineInfoRead.WR_Request == 86 && conveyorLineInfoRead.WR_Task > 0) //涓�妤煎垎閰嶇珯鍙板叆搴撳垎閰嶇洰鏍囩偣
+                        {
+                            Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == conveyorLineInfoRead.WR_Task && x.CurrentAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.AGV_Finish.ObjToInt() && x.DeviceCode == device.DeviceCode);
+                            //鍙戦�佷换鍔�
+                            if (task != null)
+                            {
+                                if (string.IsNullOrEmpty(task.Roadway) && string.IsNullOrEmpty(task.NextAddress))
+                                {
+                                    WebResponseContent content = _taskService.AssignYLRoadwayNo(task.PalletCode);
+                                    if (!content.Status)
+                                    {
+                                        WriteError(item.StationCode, $"璇锋眰鍏ュ簱澶辫触锛歿content.Message}");
+                                    }
+                                    string roadWay = content.Data.ToString();
+                                    //鑾峰彇璺敱閰嶇疆
+                                    List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == task.TaskType && task.CurrentAddress == x.StartPosi && x.ChildPosiDeviceCode== roadWay);
+                                    Dt_Router router = routers.FirstOrDefault();
+                                    if (router == null)
+                                    {
+                                        WriteError(item.StationName, $"浠诲姟鍙�:{task.TaskNum}鏈壘鍒拌矾鐢遍厤缃俊鎭�");
+                                        return Task.CompletedTask;
+                                    }
+                                    task.Roadway = roadWay;
+                                    task.NextAddress = router.NextPosi;
+                                    _taskService.UpdateTask(task,TaskStatusEnum.AGV_Finish);
+                                }
+                                else
+                                {
+                                    device.SetValue(WR_CLineYLDB.WR_Task, task.TaskNum, item.StationCode);
+                                    device.SetValue(WR_CLineYLDB.WR_ToHode, task.NextAddress, item.StationCode);
+                                    device.SetValue(WR_CLineYLDB.WR_Width, task.TaskLength, item.StationCode);
+                                    device.SetValue(WR_CLineYLDB.WR_TMID, task.PalletCode, item.StationCode);
+                                    device.SetValue(WR_CLineYLDB.WR_Reresult, 86, item.StationCode);
+                                    _taskService.UpdateTask(task, TaskStatusEnum.Line_Executing);
+                                    WriteInfo(item.StationCode, $"璇锋眰鍏ュ簱鎴愬姛:{conveyorLineInfoRead.Serialize()}");
+                                }
                             }
                         }
                         else if (conveyorLineInfoRead != null && item.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt() && conveyorLineInfoRead.WR_ToHode > 0 && conveyorLineInfoRead.WR_Request == 86 && !string.IsNullOrEmpty(conveyorLineInfoRead.WR_TMID) && conveyorLineInfoRead.WR_Task>0) //鍏ュ簱绔欏彴鐢宠
@@ -137,7 +175,14 @@
                                 device.SetValue(WR_CLineYLDB.WR_TMID, task.PalletCode, item.StationCode);
                                 device.SetValue(WR_CLineYLDB.WR_ToHode, task.NextAddress, item.StationCode);
                                 device.SetValue(WR_CLineYLDB.WR_Reresult, 86, item.StationCode);
+                                if (task.TaskType==TaskTypeEnum.OutPick.ObjToInt())
+                                {
+                                    task.Roadway = task.TargetAddress;
+                                    task.TargetAddress = "";
+                                    task.TaskType=TaskTypeEnum.InPick.ObjToInt();
+                                }
                                 _taskService.UpdateTask(task,TaskStatusEnum.Line_Executing);
+                                WriteInfo(item.StationCode, $"浠诲姟鍙�:{task.TaskNum}鍑哄簱鑷硔task.NextAddress}");
                             }
                         }
                         else if (conveyorLineInfoRead != null && item.StationType == StationTypeEnum.StationType_InboundAndOutbound.ObjToInt() && conveyorLineInfoRead.WR_Task > 0 && conveyorLineInfoRead.WR_Request == 98) //涓�妤艰�佸巶鍑哄簱鍙e畬鎴�
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC2.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC2.cs"
index 4c1a6ca..04b620f 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC2.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\345\216\237\346\226\231\345\272\223/StackerCraneJob_YLSC2.cs"
@@ -60,22 +60,26 @@
                     commonStackerCrane.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆�
                     if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal && commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
                     {
-                        Dt_Task? task = GetTask(commonStackerCrane);
-                        if (task != null)
+                        short stackerError = commonStackerCrane.Communicator.Read<short>("DB1000.54.0");
+                        if (stackerError==0)
                         {
-                            StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
-                            if (stackerCraneTaskCommand != null)
+                            Dt_Task? task = GetTask(commonStackerCrane);
+                            if (task != null)
                             {
-                                bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand);
-                                if (sendFlag)
+                                StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
+                                if (stackerCraneTaskCommand != null)
                                 {
-                                    commonStackerCrane.LastTaskType = task.TaskType;
-                                    task.Dispatchertime = DateTime.Now;
-                                    task.ExceptionMessage = "";
-                                    _taskService.UpdateTask(task, TaskStatusEnum.SC_Executing);
-                                    commonStackerCrane.Communicator.Write("DB1000.20.0", true);
-                                    //寤舵椂1s
-                                    Thread.Sleep(1000);
+                                    bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand);
+                                    if (sendFlag)
+                                    {
+                                        commonStackerCrane.LastTaskType = task.TaskType;
+                                        task.Dispatchertime = DateTime.Now;
+                                        task.ExceptionMessage = "";
+                                        _taskService.UpdateTask(task, TaskStatusEnum.SC_Executing);
+                                        commonStackerCrane.Communicator.Write("DB1000.20.0", true);
+                                        //寤舵椂1s
+                                        Thread.Sleep(1000);
+                                    }
                                 }
                             }
                         }
@@ -112,7 +116,7 @@
         {
             try
             {
-                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum);
+                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum && x.TaskState == TaskStatusEnum.SC_Executing.ObjToInt());
                 if (task != null)
                 {
                     if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
@@ -132,7 +136,7 @@
                             return WebResponseContent.Instance.Error($"鏈壘鍒拌矾鐢变俊鎭�,{task.NextAddress}");
                         }
                         int oldStatus = task.TaskState;
-                        //todo 鍫嗗灈鏈哄畬鎴愬畬鎴�
+                        // 鍫嗗灈鏈哄畬鎴�
                         _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute, deviceCode: stationManger.StationDeviceCode, currentAddress: stationManger.StationCode, nextAddress: router.NextPosi);
                         _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"绯荤粺鑷姩娴佺▼,浠诲姟鐘舵�佷粠銆恵oldStatus}銆戣浆鍒般�恵task.TaskState}銆�");
                         WriteInfo(deviceCode, $"鍫嗗灈鏈哄嚭搴撲换鍔″畬鎴�,浠诲姟鍙�:{taskNum}");
@@ -172,7 +176,7 @@
         /// <returns></returns>
         private Dt_Task? GetTask(CommonStackerCrane commonStackerCrane)
         {
-            Dt_Task task;
+            Dt_Task? task;
             if (commonStackerCrane.LastTaskType == null)
             {
                 task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
@@ -181,6 +185,7 @@
             {
                 if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                 {
+                    //涓婁竴涓负鍑哄簱鍒欐煡鏄惁瀛樺湪鍏ュ簱浠诲姟 浜ゆ浛鎵ц
                     task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                     if (task == null)
                     {
@@ -189,6 +194,7 @@
                 }
                 else
                 {
+                    //涓婁竴涓负鍏ュ簱鍒欐煡鏄惁瀛樺湪鍑哄簱浠诲姟 浜ゆ浛鎵ц
                     task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
                     if (task == null)
                     {
@@ -199,6 +205,7 @@
 
             if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
             {
+                //鍒ゆ柇鍑哄簱绔欏彴鍗犵敤
                 if (OutTaskStationIsOccupied(task) == null)
                 {
                     bool flag = false;
@@ -218,7 +225,11 @@
                     }
                 }
             }
-            task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
+            if (task == null)
+            {
+                task = _taskService.QuertStackerCraneTask(commonStackerCrane.DeviceCode, TaskTypeGroup.RelocationGroup);
+            }
+            
             return task;
         }
 
@@ -298,7 +309,7 @@
                     return null;
                 }
             }
-            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)//鍒ゆ柇鏄惁鏄嚭搴撲换鍔�
             {
                 string[] targetCodes = task.NextAddress.Split("-");
                 if (targetCodes.Length == 3)
@@ -327,7 +338,7 @@
                     return null;
                 }
             }
-            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
+            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)//鍒ゆ柇鏄惁鏄Щ搴撲换鍔�
             {
                 string[] targetCodes = task.NextAddress.Split("-");
                 if (targetCodes.Length == 5)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPExtend.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPExtend.cs"
index 06e8917..0af81dc 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPExtend.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPExtend.cs"
@@ -22,7 +22,7 @@
         {
             try
             {
-                var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => (x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt()|| x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.DeviceCode=="AGV" && x.TaskType!=999).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
+                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)
                 {
@@ -48,6 +48,7 @@
                                     Code= "GoodPoint",
                                     Value=stationMangerStart.AGVStationCode
                                 };
+                                //鍒ゆ柇鏄惁鏈夊墠缃偣
                                 if (!string.IsNullOrEmpty(stationMangerStart.AGVFrontCode))
                                 {
                                     PointDetail pointDetail2 = new PointDetail()
@@ -62,7 +63,8 @@
                                     Code = "PointB",
                                     Value = stationMangerEnd.AGVStationCode
                                 };
-                                if (!string.IsNullOrEmpty(stationMangerStart.AGVFrontCode))
+                                //鍒ゆ柇鏄惁鏈夊墠缃偣
+                                if (!string.IsNullOrEmpty(stationMangerEnd.AGVFrontCode))
                                 {
                                     PointDetail pointDetail4 = new PointDetail()
                                     {
@@ -90,17 +92,61 @@
                             {
                                 throw new Exception("鏈壘鍒癆GV绔欑偣");
                             }
-                            if (!stationMangerStart.StationCode.Contains("PNT") && stationMangerEnd.StationCode.Contains("PNT"))
+                            //鍙栨斁浠诲姟妯$増
+                            if (stationMangerStart.StationCode.Contains("PNT") && !stationMangerEnd.StationCode.Contains("PNT"))//璇锋眰鏀�
+                            {
+                                agvTaskSend.TaskCode = "DUIGAO1";
+                                if (stationMangerStart.StationType == 998 || stationMangerEnd.StationType == 998)//娼滀紡椤跺崌杞�
+                                {
+                                    agvTaskSend.TaskCode = "DUOLUN1";
+                                }
+                            }
+                            else if (!stationMangerStart.StationCode.Contains("PNT") && stationMangerEnd.StationCode.Contains("PNT"))//璇锋眰鍙�
                             {
                                 agvTaskSend.TaskCode = "DUIGAO2";
+                                if (stationMangerStart.StationType==998 || stationMangerEnd.StationType == 998)//娼滀紡椤跺崌杞�
+                                {
+                                    agvTaskSend.TaskCode = "DUOLUN2";
+                                }
                             }
+                            else if (!stationMangerStart.StationCode.Contains("PNT") && !stationMangerEnd.StationCode.Contains("PNT"))//璇锋眰鍙栨斁
+                            {
+                                agvTaskSend.TaskCode = "DUIGAO3";
+                                if (stationMangerStart.StationType == 998 || stationMangerEnd.StationType == 998)//娼滀紡椤跺崌杞�
+                                {
+                                    agvTaskSend.TaskCode = "DUOLUN3";
+                                }
+                            }
+                            else if (stationMangerStart.StationCode.Contains("PNT") && stationMangerEnd.StationCode.Contains("PNT"))//鏃犺姹�
+                            {
+                                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 = "";
+                                //涓嬪彂浠诲姟AGV浠诲姟闆嗙兢
+                                agvTaskSend.AgvGroupCode = "QianF";
+                                PointDetail pointDetail2 = new PointDetail()
+                                {
+                                    Code = "CostPoint",
+                                    Value = stationMangerStart.AGVStationCode
+                                };
+                                agvTaskSend.Variables.Add(pointDetail2);
+                            }
+                            //寤舵椂
+                            Thread.Sleep(500);
                             //鍙戦�丄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);
-                            Thread.Sleep(500);
+                            Thread.Sleep(200);
                         }
                         catch (Exception ex)
                         {
@@ -108,6 +154,7 @@
                             task.ExceptionMessage = ex.Message;
                         }
                     }
+                    //鏇存柊浠诲姟
                     if (newTasks.Count > 0)
                     {
                         _taskService.UpdateData(newTasks);
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPA.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPA.cs"
index 1fb0fa4..2584f47 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPA.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPA.cs"
@@ -67,9 +67,8 @@
             {
                 OtherDevice device = (OtherDevice)value;
                 List<string> deviceStations = device.DeviceProDTOs.Select(x => x.DeviceChildCode).ToList();
-                //鑾峰彇鏈夊崗璁殑杈撻�佺嚎-z
+                //鑾峰彇鏈夊崗璁殑杈撻�佺嚎
                 List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
-                //璁╂瘡涓緭閫佺嚎鍚姩-z
                 foreach (var item in stationMangers.Where(x => deviceStations.Contains(x.StationCode)))
                 {
                     DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(R_ConveyorLineCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
@@ -83,22 +82,17 @@
                             Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == conveyorLineInfoRead.TaskNo && x.NextAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt() && x.DeviceCode == device.DeviceCode);
                             if (task != null)
                             {
-                                string local = "";
                                 //鍒嗛厤璐т綅
-                                if (task.HeightType==1)
+                                string? local = _taskService.RequestAssignLocation(task.TaskNum, task.Roadway);
+                                if (!string.IsNullOrEmpty(local))
                                 {
-                                    local = "SC02_CP-001-064-001-01";
+                                    task.CurrentAddress = item.StackerCraneStationCode;
+                                    task.TargetAddress = local;
+                                    task.NextAddress = local;
+                                    task.DeviceCode = item.StackerCraneCode;
+                                    _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute);
+                                    WriteInfo(item.StationName, $"浠诲姟鍙�:{task.TaskNum}杩涜鍫嗗灈鏈哄叆搴�");
                                 }
-                                else if (task.HeightType == 2)
-                                {
-                                    local = "SC02_CP-001-063-001-01";
-                                }
-                                task.CurrentAddress = item.StackerCraneStationCode;
-                                task.TargetAddress= local;
-                                task.NextAddress = local;
-                                task.DeviceCode = item.StackerCraneCode;
-                                _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute);
-                                WriteInfo(item.StationName, $"浠诲姟鍙�:{task.TaskNum}杩涜鍫嗗灈鏈哄叆搴�");
                             }
                         }
                         else if (conveyorLineInfoRead != null && conveyorLineInfoRead.Command == 4 && conveyorLineInfoRead.TaskNo <= 0 && item.StationType == StationTypeEnum.StationType_OnlyOutbound.ObjToInt()) //浜屾ゼ绾夸綋鍑哄簱绔欏彴
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPB.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPB.cs"
index 0810c02..d04c373 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPB.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPB.cs"
@@ -77,36 +77,39 @@
                     {
                         R_ConveyorLineCPInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineCPInfo>(deviceProRead.DeviceProAddress);
                         //浜屾ゼ鍏ュ簱鎵爜璇锋眰宸ヤ綅
-                        if (conveyorLineInfoRead != null && conveyorLineInfoRead.Command == 5 && conveyorLineInfoRead.TaskNo > 0 && !string.IsNullOrEmpty(conveyorLineInfoRead.PalletCode))
+                        if (conveyorLineInfoRead != null && conveyorLineInfoRead.Command == 5 && conveyorLineInfoRead.TaskNo > 0)//&& !string.IsNullOrEmpty(conveyorLineInfoRead.PalletCode) todo涓存椂鍒犻櫎鏉′欢闄愬埗
                         {
                             //鏌ユ壘瀵瑰簲浠诲姟
                             Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == conveyorLineInfoRead.TaskNo && x.NextAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt() && x.DeviceCode == device.DeviceCode);
                             if (task != null)
                             {
                                 //鍒嗛厤宸烽亾 瀛樺叆鎵樼洏鏁版嵁
-                                List<Dt_Router> routers = _routerService.QueryNextRoutes(item.StationCode, "SC02_CP", task.TaskType);
-                                Dt_Router? router = routers.FirstOrDefault();
-                                if (routers == null || routers.Count == 0 || router == null)
+                                string roadWay = _taskService.AssignCPRoadwayNo().Data.ToString();
+                                if (!string.IsNullOrEmpty(roadWay))
                                 {
-                                    WriteError(item.StationName, $"鏈壘鍒板搴旇矾鐢变俊鎭�,璁惧缂栧彿:{item.StationCode},浠诲姟鍙�:{task.TaskNum}");
-                                    continue;
+                                    List<Dt_Router> routers = _routerService.QueryNextRoutes(item.StationCode, roadWay, task.TaskType);
+                                    Dt_Router? router = routers.FirstOrDefault();
+                                    if (routers == null || routers.Count == 0 || router == null)
+                                    {
+                                        WriteError(item.StationName, $"鏈壘鍒板搴旇矾鐢变俊鎭�,璁惧缂栧彿:{item.StationCode},浠诲姟鍙�:{task.TaskNum}");
+                                        continue;
+                                    }
+                                    if (routers.Count > 1)
+                                    {
+                                        WriteError(item.StationName, $"璺敱淇℃伅閰嶇疆閿欒,璁惧缂栧彿:{item.StationCode},浠诲姟鍙�:{task.TaskNum}");
+                                        continue;
+                                    }
+                                    device.SetValue(W_ConveyorLineCPDB.W_TargetAddress, router.NextPosi, item.StationCode);
+                                    device.SetValue(W_ConveyorLineCPDB.W_TaskNo, task.TaskNum, item.StationCode);
+                                    device.SetValue(W_ConveyorLineCPDB.W_Command, 1, item.StationCode);
+                                    task.CurrentAddress = item.StationCode;
+                                    task.NextAddress = router.NextPosi;
+                                    task.PalletCode = DateTime.Now.ToString("yyMMddHHmmss");//todo涓存椂
+                                    task.Roadway = roadWay;
+                                    task.DeviceCode = router.ChildPosiDeviceCode;
+                                    _taskService.UpdateTask(task, TaskStatusEnum.Line_Executing);
+                                    WriteInfo(item.StationName, $"浠诲姟鍙穥conveyorLineInfoRead.TaskNo}涓嬩竴姝�");
                                 }
-                                if (routers.Count > 1)
-                                {
-                                    WriteError(item.StationName, $"璺敱淇℃伅閰嶇疆閿欒,璁惧缂栧彿:{item.StationCode},浠诲姟鍙�:{task.TaskNum}");
-                                    continue;
-                                }
-                                device.SetValue(W_ConveyorLineCPDB.W_TargetAddress, router.NextPosi, item.StationCode);
-                                device.SetValue(W_ConveyorLineCPDB.W_TaskNo, task.TaskNum, item.StationCode);
-                                device.SetValue(W_ConveyorLineCPDB.W_Command, 1, item.StationCode);
-                                task.CurrentAddress = item.StationCode;
-                                task.NextAddress = router.NextPosi;
-                                task.PalletType = 1;
-                                task.PalletCode = conveyorLineInfoRead.PalletCode;
-                                task.Roadway = "SC02_CP";
-                                task.DeviceCode = router.ChildPosiDeviceCode;
-                                _taskService.UpdateTask(task, TaskStatusEnum.Line_Executing);
-                                WriteInfo(item.StationName, $"浠诲姟鍙穥conveyorLineInfoRead.TaskNo}涓嬩竴姝�");
                             }
                         }
                     }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPC.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPC.cs"
index 28f4d66..a662580 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPC.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPC.cs"
@@ -82,7 +82,7 @@
                             if (task == null)
                             {
                                 //鑾峰彇绔欏彴鐢熸垚浠诲姟
-                                WebResponseContent content = _taskService.RequestWMSTaskSimple("", item.StationCode);
+                                WebResponseContent content = _taskService.RequestWMSTaskSimple("", item.StationCode,taskType:TaskTypeEnum.InProduct.ObjToInt());
                                 if (content.Status)
                                 {
                                     Dt_Task taskNew = _taskRepository.QueryFirst(x => x.SourceAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && (x.TaskState == TaskStatusEnum.New.ObjToInt()));
@@ -94,9 +94,18 @@
                                 Thread.Sleep(1000);
                             }
                         }
+                        if (conveyorLineInfoRead != null && conveyorLineInfoRead.StatusPV == 2 && conveyorLineInfoRead.Command == 10)
+                        {
+                            item.IsOccupied = 0;
+                        }
+                        else
+                        {
+                            item.IsOccupied = 1;
+                        }
                     }
                     
                 }
+                _stationMangerRepository.UpdateData(stationMangers);
             }
             return Task.CompletedTask;
         }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPH.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPH.cs"
index 742eb6b..2f9369c 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPH.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/ConveyorLineJob_CPH.cs"
@@ -1,5 +1,6 @@
 锘縰sing Microsoft.AspNetCore.Components.Routing;
 using Newtonsoft.Json;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
 using Quartz;
 using SqlSugar.Extensions;
 using System;
@@ -80,11 +81,24 @@
                         //鐮佸灈鐜嚎璇锋眰浠诲姟 
                         if (conveyorLineInfoRead != null && (conveyorLineInfoRead.R_State == 2 || conveyorLineInfoRead.R_State == 3) && conveyorLineInfoRead.R_TaskNo <= 0 && !string.IsNullOrEmpty(conveyorLineInfoRead.R_BoxCode) && conveyorLineInfoRead.R_Request==1)
                         {
-                            WebResponseContent content = _taskService.RequestWMSTaskSimple(conveyorLineInfoRead.R_BoxCode, item.StationCode);
-                            //鍚慦MS璇锋眰浠诲姟
-                            if (true)
-                            {
+                            //WebResponseContent content = _taskService.RequestWMSTaskSimple(conveyorLineInfoRead.R_BoxCode, item.StationCode);
+                            ////鍚慦MS璇锋眰浠诲姟
+                            //if (true)
+                            //{
 
+                            //}
+                            if (conveyorLineInfoRead.R_BoxCode=="1")
+                            {
+                                int taskNum = Convert.ToInt32(DateTime.Now.ToString("ddHHmmss"));
+                                WebResponseContent content = _taskService.RequestWMSTaskSimple(taskNum.ToString(), item.StationCode,taskType:TaskTypeEnum.ProductMD.ObjToInt(),taskNum: taskNum, targetAddress:"2554");
+                                //璇锋眰浠诲姟
+                                if (content.Status)
+                                {
+                                    //鍐欏叆鍑哄簱绾夸綋鍦板潃
+                                    device.SetValue(W_CLineCPHDB.W_TaskNo, 5, item.StationCode);
+                                    device.SetValue(W_CLineCPHDB.W_TaskNo, taskNum, item.StationCode);
+                                    device.SetValue(W_ConveyorLineCPDB.W_Command, 1, item.StationCode);
+                                }
                             }
                         }
                     }
@@ -94,16 +108,14 @@
                         //鑾峰彇鐮佸灈鍙d换鍔℃洿鏂颁换鍔$姸鎬�
                         if (conveyorLineInfoRead != null && (conveyorLineInfoRead.R_State == 2 || conveyorLineInfoRead.R_State == 3) && conveyorLineInfoRead.R_TaskNo > 0)
                         {
-
-                        }
-                    }
-                    else if (item.StationType == StationTypeEnum.StationType_InboundAndOutbound.ObjToInt() && deviceProRead != null)
-                    {
-                        R_CLineCPHInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_CLineCPHInfo>(deviceProRead.DeviceProAddress);
-                        //鐮佸灈鐜嚎鎺掑嚭鍙h姹傚彇娑堜换鍔�
-                        if (conveyorLineInfoRead != null && (conveyorLineInfoRead.R_State == 2 || conveyorLineInfoRead.R_State == 3) && conveyorLineInfoRead.R_TaskNo > 0 && conveyorLineInfoRead.R_Request == 2)
-                        {
-
+                            Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == conveyorLineInfoRead.R_TaskNo && x.NextAddress==item.StationCode && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt());
+                            if (task != null)
+                            {
+                                task.CurrentAddress = item.StationCode;
+                                task.NextAddress = task.TargetAddress;
+                                task.DeviceCode = item.StackerCraneCode;
+                                _taskService.UpdateTask(task, TaskStatusEnum.MD_Executing);
+                            }
                         }
                     }
                     else
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/RGVJob_CP.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/RGVJob_CP.cs"
index 7d9a407..b9bb207 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/RGVJob_CP.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/RGVJob_CP.cs"
@@ -78,66 +78,88 @@
                     W_RGVCPInfo rgvInfoWrite = device.Communicator.ReadCustomer<W_RGVCPInfo>(deviceProWrite.DeviceProAddress);
                     if ((rgvInfoRead.Mode == 5 || rgvInfoRead.Mode == 4) && rgvInfoRead.State == 0 && rgvInfoRead.TaskDone==1)
                     {
+                        //鑾峰彇浠诲姟 鏄惁鏈塕GV鎵ц鐨勪换鍔�
                         List<Dt_Task> tasks = _taskRepository.QueryData(x => _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState != TaskStatusEnum.RGV_Execute.ObjToInt() && x.DeviceCode == device.DeviceCode);
-                        //鑾峰彇浠诲姟
+                        
                         Dt_Task? task1 = tasks.FirstOrDefault(x => x.HeightType == 1);
                         Dt_Task? task2 = tasks.FirstOrDefault(x => x.HeightType == 2);
                         Dt_Task? task3 = tasks.FirstOrDefault(x => x.HeightType == 3);
                         List<Dt_Task> tasksDown = _taskRepository.QueryData(x => _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.RGV_Execute.ObjToInt() && x.DeviceCode == device.DeviceCode).OrderBy(x=>x.CreateDate).Take(3).ToList();
-                        //鍒嗛厤RGV宸ヤ綅浠诲姟
-                        if (tasksDown.Count>=2)
+                        if (tasksDown.Count>0)
                         {
-                            device.SetValue(W_RgvCPDB.TaskType, 4);
-                            //鍗犵敤涓や釜宸ヤ綅
-                            if (tasksDown.Count==2)
+                            bool ReceivedDone = false;
+                            //鍒嗛厤RGV宸ヤ綅浠诲姟鍗犵敤涓�涓伐浣�
+                            if (tasksDown.Count == 1)
                             {
-                                device.SetValue(W_RgvCPDB.WorkStation, 4);
                                 if (task1 == null)
                                 {
+                                    //涓嬪彂鎵ц宸ヤ綅
+                                    device.SetValue(W_RgvCPDB.WorkStation, 1);
                                     device.SetValue(W_RgvCPDB.WcsTask1, tasksDown[0].TaskNum);
                                     device.SetValue(W_RgvCPDB.Qu1, tasksDown[0].CurrentAddress);
                                     device.SetValue(W_RgvCPDB.Fang1, tasksDown[0].NextAddress);
                                     tasksDown[0].HeightType = 1;
                                     _taskService.UpdateTask(tasksDown[0], TaskStatusEnum.RGV_Executing);
+                                    Thread.Sleep(100);
+                                    ReceivedDone=true;
                                 }
-                                if (task2 == null)
+                            }
+                            else if (tasksDown.Count == 2)//鍗犵敤涓や釜宸ヤ綅
+                            {
+                                
+                                if (task1 == null && task2 == null)
                                 {
+                                    //涓嬪彂鎵ц宸ヤ綅
+                                    device.SetValue(W_RgvCPDB.WorkStation, 4);
+
+                                    device.SetValue(W_RgvCPDB.WcsTask1, tasksDown[0].TaskNum);
+                                    device.SetValue(W_RgvCPDB.Qu1, tasksDown[0].CurrentAddress);
+                                    device.SetValue(W_RgvCPDB.Fang1, tasksDown[0].NextAddress);
+                                    tasksDown[0].HeightType = 1;
+                                    _taskService.UpdateTask(tasksDown[0], TaskStatusEnum.RGV_Executing);
+                                    Thread.Sleep(100);
                                     device.SetValue(W_RgvCPDB.WcsTask2, tasksDown[1].TaskNum);
                                     device.SetValue(W_RgvCPDB.Qu2, tasksDown[1].CurrentAddress);
                                     device.SetValue(W_RgvCPDB.Fang2, tasksDown[1].NextAddress);
                                     tasksDown[1].HeightType = 2;
                                     _taskService.UpdateTask(tasksDown[1], TaskStatusEnum.RGV_Executing);
+                                    Thread.Sleep(100);
+                                    ReceivedDone = true;
                                 }
                             }
                             else //鍗犵敤涓変釜宸ヤ綅
                             {
-                                device.SetValue(W_RgvCPDB.WorkStation, 7);
-                                if ( task1 == null)
+                                if (task1 == null && task2 == null && task3 == null)
                                 {
+                                    //涓嬪彂鎵ц宸ヤ綅
+                                    device.SetValue(W_RgvCPDB.WorkStation, 7);
+
                                     device.SetValue(W_RgvCPDB.WcsTask1, tasksDown[0].TaskNum);
                                     device.SetValue(W_RgvCPDB.Qu1, tasksDown[0].CurrentAddress);
                                     device.SetValue(W_RgvCPDB.Fang1, tasksDown[0].NextAddress);
                                     tasksDown[0].HeightType = 1;
                                     _taskService.UpdateTask(tasksDown[0], TaskStatusEnum.RGV_Executing);
-                                }
-                                if (task2 == null)
-                                {
+                                    Thread.Sleep(100);
                                     device.SetValue(W_RgvCPDB.WcsTask2, tasksDown[1].TaskNum);
                                     device.SetValue(W_RgvCPDB.Qu2, tasksDown[1].CurrentAddress);
                                     device.SetValue(W_RgvCPDB.Fang2, tasksDown[1].NextAddress);
                                     tasksDown[1].HeightType = 2;
                                     _taskService.UpdateTask(tasksDown[1], TaskStatusEnum.RGV_Executing);
-                                }
-                                if (task3 == null)
-                                {
+                                    Thread.Sleep(100);
                                     device.SetValue(W_RgvCPDB.WcsTask3, tasksDown[2].TaskNum);
                                     device.SetValue(W_RgvCPDB.Qu3, tasksDown[2].CurrentAddress);
                                     device.SetValue(W_RgvCPDB.Fang3, tasksDown[2].NextAddress);
                                     tasksDown[2].HeightType = 3;
                                     _taskService.UpdateTask(tasksDown[2], TaskStatusEnum.RGV_Executing);
+                                    Thread.Sleep(100);
+                                    ReceivedDone = true;
                                 }
                             }
-                            device.SetValue(W_RgvCPDB.TaskReceivedDone, 1);
+                            if (ReceivedDone)
+                            {
+                                device.SetValue(W_RgvCPDB.TaskType, 4);
+                                device.SetValue(W_RgvCPDB.TaskReceivedDone, 1);
+                            }
                         }
                     }
                     else if((rgvInfoRead.Mode == 5 || rgvInfoRead.Mode == 4) && rgvInfoRead.TaskDone == 3)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/StackerCraneJob_CP.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/StackerCraneJob_CP.cs"
index 789ddf7..35e320b 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/StackerCraneJob_CP.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/StackerCraneJob_CP.cs"
@@ -60,22 +60,26 @@
                     commonStackerCrane.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆�
                     if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal && commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
                     {
-                        Dt_Task? task = GetTask(commonStackerCrane);
-                        if (task != null)
+                        short stackerError = commonStackerCrane.Communicator.Read<short>("DB1000.54.0");
+                        if (stackerError == 0)
                         {
-                            StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
-                            if (stackerCraneTaskCommand != null)
+                            Dt_Task? task = GetTask(commonStackerCrane);
+                            if (task != null)
                             {
-                                bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand);
-                                if (sendFlag)
+                                StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
+                                if (stackerCraneTaskCommand != null)
                                 {
-                                    commonStackerCrane.LastTaskType = task.TaskType;
-                                    task.Dispatchertime = DateTime.Now;
-                                    task.ExceptionMessage = "";
-                                    _taskService.UpdateTask(task, TaskStatusEnum.SC_Executing);
-                                    commonStackerCrane.Communicator.Write("DB1000.20.0", true);
-                                    //寤舵椂1s
-                                    Thread.Sleep(1000);
+                                    bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand);
+                                    if (sendFlag)
+                                    {
+                                        commonStackerCrane.LastTaskType = task.TaskType;
+                                        task.Dispatchertime = DateTime.Now;
+                                        task.ExceptionMessage = "";
+                                        _taskService.UpdateTask(task, TaskStatusEnum.SC_Executing);
+                                        commonStackerCrane.Communicator.Write("DB1000.20.0", true);
+                                        //寤舵椂1s
+                                        Thread.Sleep(1000);
+                                    }
                                 }
                             }
                         }
@@ -112,7 +116,7 @@
         {
             try
             {
-                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum);
+                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum && x.TaskState==TaskStatusEnum.SC_Executing.ObjToInt());
                 if (task != null)
                 {
                     if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
@@ -131,13 +135,14 @@
                             WriteError(deviceCode, $"鏈壘鍒拌矾鐢变俊鎭�,{task.NextAddress}");
                             return WebResponseContent.Instance.Error($"鏈壘鍒拌矾鐢变俊鎭�,{task.NextAddress}");
                         }
+                        //鍫嗗灈鏈哄畬鎴愬畬鎴�
                         int oldStatus = task.TaskState;
                         task.DeviceCode = stationManger.StationDeviceCode;
                         task.TaskState = TaskStatusEnum.Line_Execute.ObjToInt();
                         task.CurrentAddress = stationManger.StationCode;
                         task.NextAddress = router.NextPosi;
                         _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute);
-                        //todo 鍫嗗灈鏈哄畬鎴愬畬鎴�
+                        
                         //_taskService.UpdateTask(task, TaskStatusEnum.Line_Execute, deviceCode: stationManger.StationDeviceCode, currentAddress: stationManger.StationCode, nextAddress: router.NextPosi, targetAddress: router.NextPosi);
                         _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"绯荤粺鑷姩娴佺▼,浠诲姟鐘舵�佷粠銆恵oldStatus}銆戣浆鍒般�恵task.TaskState}銆�");
                         WriteInfo(deviceCode, $"鍫嗗灈鏈轰换鍔″畬鎴�,浠诲姟鍙�:{taskNum}");
@@ -186,6 +191,7 @@
             {
                 if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                 {
+                    //涓婁竴涓负鍑哄簱鍒欐煡鏄惁瀛樺湪鍏ュ簱浠诲姟 浜ゆ浛鎵ц
                     task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                     if (task == null)
                     {
@@ -194,6 +200,7 @@
                 }
                 else
                 {
+                    //涓婁竴涓负鍏ュ簱鍒欐煡鏄惁瀛樺湪鍑哄簱浠诲姟 浜ゆ浛鎵ц
                     task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
                     if (task == null)
                     {
@@ -204,6 +211,7 @@
 
             if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
             {
+                //鍒ゆ柇鍑哄簱绔欏彴鍗犵敤
                 if (OutTaskStationIsOccupied(task) == null)
                 {
                     bool flag = false;
@@ -234,7 +242,7 @@
         /// <returns>濡傛灉鏈鍗犵敤锛岃繑鍥炰紶鍏ョ殑浠诲姟淇℃伅锛屽惁鍒欙紝杩斿洖null</returns>
         private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
         {
-            Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.NextAddress && x.StackerCraneCode == task.DeviceCode);
+            Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => (x.StationCode == task.NextAddress) && x.StackerCraneCode == task.DeviceCode);
             if (stationManger != null)
             {
                 IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
@@ -303,7 +311,7 @@
                     return null;
                 }
             }
-            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)//鍒ゆ柇鏄惁鏄嚭搴撲换鍔�
             {
                 string[] targetCodes = task.NextAddress.Split("-");
                 if (targetCodes.Length == 3)
@@ -332,7 +340,7 @@
                     return null;
                 }
             }
-            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
+            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)//鍒ゆ柇鏄惁鏄Щ搴撲换鍔�
             {
                 string[] targetCodes = task.NextAddress.Split("-");
                 if (targetCodes.Length == 5)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\216\245\351\251\263\345\217\260/CoveryorJobYL.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\216\245\351\251\263\345\217\260/CoveryorJobYL.cs"
new file mode 100644
index 0000000..f4e1ec9
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\346\216\245\351\251\263\345\217\260/CoveryorJobYL.cs"
@@ -0,0 +1,116 @@
+锘縰sing Microsoft.AspNetCore.Components.Routing;
+using Newtonsoft.Json;
+using Quartz;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection.Metadata;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Common;
+using WIDESEAWCS_Common.Helper;
+using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Communicator;
+using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_IBasicInfoRepository;
+using WIDESEAWCS_ITaskInfoRepository;
+using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model.Models;
+using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_QuartzJob.ConveyorLine.Enum;
+using WIDESEAWCS_QuartzJob.DTO;
+using WIDESEAWCS_QuartzJob.Models;
+using WIDESEAWCS_QuartzJob.Repository;
+using WIDESEAWCS_QuartzJob.Service;
+using WIDESEAWCS_Tasks.ConveyorLineJob;
+using WIDESEAWCS_Tasks.DBNames;
+using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
+
+namespace WIDESEAWCS_Tasks
+{
+    [DisallowConcurrentExecution]
+    public class CoveryorJobYL : JobBase, IJob
+    {
+        private readonly ICacheService _cacheService;
+        private readonly ITaskService _taskService;
+        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
+        private readonly ITaskRepository _taskRepository;
+        private readonly IStationMangerRepository _stationMangerRepository;
+        private readonly IRouterRepository _routerRepository;
+        private readonly IRouterService _routerService;
+        private readonly IRouterExtension _routerExtension;
+        private readonly List<Dt_WarehouseDevice> warehouseDevices;
+
+        public CoveryorJobYL(ICacheService cacheService, ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IRouterService routerService, IRouterExtension routerExtension)
+        {
+            _cacheService = cacheService;
+            _taskService = taskService;
+            _taskExecuteDetailService = taskExecuteDetailService;
+            _taskRepository = taskRepository;
+            _stationMangerRepository = stationMangerRepository;
+            _routerRepository = routerRepository;
+            _routerService = routerService;
+            _routerExtension = routerExtension;
+
+            string? warehouseDevicesStr = _cacheService.Get<string>(nameof(Dt_WarehouseDevice));
+            if (!string.IsNullOrEmpty(warehouseDevicesStr))
+            {
+                warehouseDevices = JsonConvert.DeserializeObject<List<Dt_WarehouseDevice>>(warehouseDevicesStr) ?? new List<Dt_WarehouseDevice>();
+            }
+            else
+            {
+                warehouseDevices = new List<Dt_WarehouseDevice>();
+            }
+        }
+
+        public Task Execute(IJobExecutionContext context)
+        {
+            bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
+            if (flag && value != null)
+            {
+                OtherDevice device = (OtherDevice)value;
+                List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
+                foreach (var item in stationMangers)
+                {
+                    //鑾峰彇鍗忚
+                    DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationDeviceCode && x.DeviceProParamType == nameof(CoveryorDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
+                    if (deviceProRead != null)
+                    {
+                        bool RequestTake = device.GetValue<CoveryorDB, bool>(CoveryorDB.C_RequestTake, item.StationDeviceCode);
+                        int OutTaskNum = device.GetValue<CoveryorDB, int>(CoveryorDB.C_OutTaskNum, item.StationDeviceCode);
+                        if (RequestTake && OutTaskNum>0) //涓�妤煎嚭搴撶敵璇�
+                        {
+                            //鑾峰彇褰撳墠浠诲姟
+                            Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum ==OutTaskNum && x.NextAddress == item.StationCode && _taskService.TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt());
+                            if (task != null)
+                            {
+                                //鍒嗛厤宸烽亾 瀛樺叆鎵樼洏鏁版嵁
+                                List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == task.TaskType && task.NextAddress == x.StartPosi);
+                                Dt_Router router = routers.FirstOrDefault();
+                                if (router == null)
+                                {
+                                    WriteError(item.StationName, $"浠诲姟鍙�:{task.TaskNum}鏈壘鍒拌矾鐢遍厤缃俊鎭�");
+                                    return Task.CompletedTask;
+                                }
+                                device.SetValue(CoveryorDB.C_OutResponse, true, item.StationDeviceCode);
+                                //鏇存柊浠诲姟淇℃伅
+                                task.CurrentAddress = router.StartPosi;
+                                task.NextAddress = task.TargetAddress;
+                                task.DeviceCode = router.NextPosi;
+                                _taskService.UpdateTask(task, TaskStatusEnum.AGV_Execute);
+                                WriteInfo(item.StationName, $"浠诲姟鍙穥OutTaskNum}鎺ラ┏鍙板嚭搴�");
+                            }
+                        }
+                       
+                    }
+                    else
+                    {
+                        WriteError(item.StationName, $"鏈壘鍒拌澶囧瓙缂栧彿{item.StationCode}鐨勫崗璁俊鎭�");
+                    }
+                }
+            }
+            return Task.CompletedTask;
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/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/WCS/WCSServices/WIDESEAWCS_Tasks/\347\240\201\345\236\233/MDJob_CP.cs"
new file mode 100644
index 0000000..7551321
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_Tasks/\347\240\201\345\236\233/MDJob_CP.cs"
@@ -0,0 +1,165 @@
+锘縰sing Microsoft.AspNetCore.Components.Routing;
+using Newtonsoft.Json;
+using Quartz;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection.Metadata;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Common;
+using WIDESEAWCS_Common.Helper;
+using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Communicator;
+using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_IBasicInfoRepository;
+using WIDESEAWCS_ITaskInfoRepository;
+using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model.Models;
+using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_QuartzJob.ConveyorLine.Enum;
+using WIDESEAWCS_QuartzJob.DTO;
+using WIDESEAWCS_QuartzJob.Models;
+using WIDESEAWCS_QuartzJob.Repository;
+using WIDESEAWCS_QuartzJob.Service;
+using WIDESEAWCS_Tasks.ConveyorLineJob;
+using WIDESEAWCS_Tasks.DBNames;
+using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
+
+namespace WIDESEAWCS_Tasks
+{
+    [DisallowConcurrentExecution]
+    public class MDJob_CP : JobBase, IJob
+    {
+        private readonly ICacheService _cacheService;
+        private readonly ITaskService _taskService;
+        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
+        private readonly ITaskRepository _taskRepository;
+        private readonly IStationMangerRepository _stationMangerRepository;
+        private readonly IRouterRepository _routerRepository;
+        private readonly IRouterService _routerService;
+        private readonly IRouterExtension _routerExtension;
+        private readonly List<Dt_WarehouseDevice> warehouseDevices;
+
+        public MDJob_CP(ICacheService cacheService, ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IRouterService routerService, IRouterExtension routerExtension)
+        {
+            _cacheService = cacheService;
+            _taskService = taskService;
+            _taskExecuteDetailService = taskExecuteDetailService;
+            _taskRepository = taskRepository;
+            _stationMangerRepository = stationMangerRepository;
+            _routerRepository = routerRepository;
+            _routerService = routerService;
+            _routerExtension = routerExtension;
+
+            string? warehouseDevicesStr = _cacheService.Get<string>(nameof(Dt_WarehouseDevice));
+            if (!string.IsNullOrEmpty(warehouseDevicesStr))
+            {
+                warehouseDevices = JsonConvert.DeserializeObject<List<Dt_WarehouseDevice>>(warehouseDevicesStr) ?? new List<Dt_WarehouseDevice>();
+            }
+            else
+            {
+                warehouseDevices = new List<Dt_WarehouseDevice>();
+            }
+        }
+
+        public Task Execute(IJobExecutionContext context)
+        {
+            bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
+            if (flag && value != null)
+            {
+                OtherDevice device = (OtherDevice)value;
+                List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StackerCraneCode == 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();
+                    if (deviceProRead != null && deviceProWrite != null && item.IsOccupied==0)
+                    {
+                        short Allow = device.GetValue<R_MDDB, short>(R_MDDB.R_MDAllow, item.StackerCraneCode);
+                        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_MDQtys1 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDQtys1, item.StackerCraneCode);
+                        short R_MDQtys2 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDQtys2, item.StackerCraneCode);
+                        short R_MDQtys3 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDQtys3, item.StackerCraneCode);
+                        short R_MDQtys4 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDQtys4, item.StackerCraneCode);
+                        if (R_MDStatus1 == 1 || R_MDStatus2 == 1 || R_MDStatus3 == 1 || R_MDStatus4 == 1)
+                        {
+                            Thread.Sleep(500);
+                            device.Communicator.Write<short>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDReceiveDone.ToString()).DeviceProDataBlock, 0);
+                        }
+                        //鑾峰彇褰撳墠浠诲姟
+                        Dt_Task task = _taskRepository.QueryData(x => x.NextAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.MD_Executing.ObjToInt() && x.DeviceCode == device.DeviceCode).OrderBy(x=>x.TaskNum).First();
+                        if (task!=null) //鐮佸灈鐢宠
+                        {
+                            if ((Allow==3 || Allow == 7)&& item.StackerCraneStationCode == "1")
+                            {
+                                if ( R_MDQtys1 / 6 ==1)
+                                {
+                                    device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDZ.ToString()).DeviceProDataBlock, 400);
+                                }
+                                else if (R_MDQtys1 / 6 == 2)
+                                {
+                                    device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDZ.ToString()).DeviceProDataBlock, 800);
+                                }
+                                else
+                                {
+                                    device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDZ.ToString()).DeviceProDataBlock, 0);
+                                }
+                                device.Communicator.Write<short>(device.DeviceProDTOs.FirstOrDefault(x=>x.DeviceProParamName== W_MDDB.W_MDSend1.ToString()).DeviceProDataBlock,1);
+                                device.Communicator.Write<short>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDSendID.ToString()).DeviceProDataBlock, 1);
+                                if (R_MDQtys1 % 6==0)
+                                {
+                                    device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDX.ToString()).DeviceProDataBlock, 1675);
+                                    device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDY.ToString()).DeviceProDataBlock, 1137);
+                                }
+                                else if (R_MDQtys1 % 6 == 1)
+                                {
+                                    device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDX.ToString()).DeviceProDataBlock, 1675);
+                                    device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDY.ToString()).DeviceProDataBlock, 1462);
+                                }
+                                else if (R_MDQtys1 % 6 == 2)
+                                {
+                                    device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDX.ToString()).DeviceProDataBlock, 1675);
+                                    device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDY.ToString()).DeviceProDataBlock, 1787);
+                                }
+                                else if (R_MDQtys1 % 6 == 3)
+                                {
+                                    device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDX.ToString()).DeviceProDataBlock, 1250);
+                                    device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDY.ToString()).DeviceProDataBlock, 1137);
+                                }
+                                else if (R_MDQtys1 % 6 == 4)
+                                {
+                                    device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDX.ToString()).DeviceProDataBlock, 1250);
+                                    device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDY.ToString()).DeviceProDataBlock, 1462);
+                                }
+                                else if (R_MDQtys1 % 6 == 5)
+                                {
+                                    device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDX.ToString()).DeviceProDataBlock, 1250);
+                                    device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDY.ToString()).DeviceProDataBlock, 1787);
+                                }
+                                device.Communicator.Write<float>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDA.ToString()).DeviceProDataBlock, 1);
+                                device.Communicator.Write<short>(device.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == W_MDDB.W_MDReceiveDone.ToString()).DeviceProDataBlock, 3);
+                                //鏇存柊浠诲姟淇℃伅
+                                //_taskService.TaskCompleted(task.TaskNum);
+                                task.TaskState = TaskStatusEnum.Finish.ObjToInt();
+                                _taskRepository.UpdateData(task);
+                                Thread.Sleep(1500);
+                                WriteInfo(item.StationName, $"浠诲姟鍙穥task.TaskNum}鐮佸灈");
+                            }
+                        }
+                    }
+                    else
+                    {
+                        WriteError(item.StationName, $"鏈壘鍒拌澶囧瓙缂栧彿{item.StationCode}鐨勫崗璁俊鎭�");
+                    }
+                }
+            }
+            return Task.CompletedTask;
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs"
index b4f28e1..c3e5351 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs"
@@ -25,7 +25,9 @@
 {
     public partial class LocationInfoService
     {
-
+        /// <summary>
+        /// 鍒嗛厤璐т綅
+        /// </summary>
         public Dt_LocationInfo? AssignLocation(string roadwayNo, int palletType, int warehouseId, string beRelocationCode = "", int heightType = 0)
         {
             Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == warehouseId);
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs"
index d48c3fa..eabcb6e 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs"
@@ -37,33 +37,17 @@
         SC_Finish = 220,
 
         /// <summary>
-        /// 杈撻�佺嚎寰呮墽琛�
-        /// </summary>
-        [Description("杈撻�佺嚎寰呮墽琛�")]
-        Line_Execute = 400,
-
-        /// <summary>
-        /// 杈撻�佺嚎鎵ц涓�
-        /// </summary>
-        [Description("杈撻�佺嚎鎵ц涓�")]
-        Line_Executing = 410,
-
-        /// <summary>
-        /// 杈撻�佺嚎瀹屾垚
-        /// </summary>
-        [Description("杈撻�佺嚎瀹屾垚")]
-        Line_Finish = 420,
-
-        /// <summary>
         /// AGV寰呮墽琛�
         /// </summary>
         [Description("AGV寰呮墽琛�")]
         AGV_Execute = 300,
+
         /// <summary>
-        /// AGV鍙栬揣涓�
+        /// AGV鍙栬揣瀹屾垚
         /// </summary>
-        [Description("AGV鍙栬揣涓�")]
-        AGV_Takeing =305,
+        [Description("AGV鍙栬揣瀹屾垚")]
+        AGV_TakeFinish = 305,
+
         /// <summary>
         /// AGV鎵ц涓�
         /// </summary>
@@ -88,6 +72,41 @@
         AGV_Finish = 330,
 
         /// <summary>
+        /// 杈撻�佺嚎寰呮墽琛�
+        /// </summary>
+        [Description("杈撻�佺嚎寰呮墽琛�")]
+        Line_Execute = 400,
+
+        /// <summary>
+        /// 杈撻�佺嚎鎵ц涓�
+        /// </summary>
+        [Description("杈撻�佺嚎鎵ц涓�")]
+        Line_Executing = 410,
+
+        /// <summary>
+        /// 杈撻�佺嚎瀹屾垚
+        /// </summary>
+        [Description("杈撻�佺嚎瀹屾垚")]
+        Line_Finish = 420,
+
+        /// <summary>
+        /// RGV寰呮墽琛�
+        /// </summary>
+        [Description("RGV寰呮墽琛�")]
+        RGV_Execute = 500,
+        /// <summary>
+        /// RGV鎵ц涓�
+        /// </summary>
+        [Description("RGV鎵ц涓�")]
+        RGV_Executing = 510,
+
+        /// <summary>
+        /// 鐮佸灈鎵ц涓�
+        /// </summary>
+        [Description("鐮佸灈鎵ц涓�")]
+        MD_Executing = 520,
+
+        /// <summary>
         /// 浠诲姟瀹屾垚
         /// </summary>
         [Description("浠诲姟瀹屾垚")]
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs"
index 2cd97a0..a52ade1 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs"
@@ -80,21 +80,37 @@
         /// </summary>
         [Description("鎴愬搧MES鎻愬簱")]
         OutMesRworkProduct =250,
+
+        /// <summary>
+        /// 鍗板埛鍑哄簱
+        /// </summary>
+        [Description("鍗板埛鍑哄簱")]
+        PrintOutbound = 310,
+
+        /// <summary>
+        /// 鏃犵汉甯冨嚭搴�
+        /// </summary>
+        [Description("鏃犵汉甯冨嚭搴�")]
+        OutWFB = 320,
+
         /// <summary>
         /// 閲囪喘鍏ュ簱
         /// </summary>
         [Description("閲囪喘鍏ュ簱")]
         Inbound = 510,
+
         /// <summary>
         /// 鐩樼偣鍏ュ簱
         /// </summary>
         [Description("鐩樼偣鍏ュ簱")]
         InInventory = 520,
+
         /// <summary>
         /// 鍒嗘嫞鍏ュ簱
         /// </summary>
         [Description("鍒嗘嫞鍏ュ簱")]
         InPick = 530,
+
         /// <summary>
         /// 璐ㄦ鍏ュ簱
         /// </summary>
@@ -155,6 +171,24 @@
         EmptyProductBack = 630,
 
         /// <summary>
+        /// 鎴愬搧鐮佸灈
+        /// </summary>
+        [Description("鎴愬搧鐮佸灈")]
+        ProductMD = 640,
+
+        /// <summary>
+        /// 鍗板埛鍗婃垚鍝佸叆搴�
+        /// </summary>
+        [Description("鍗板埛鍗婃垚鍝佸叆搴�")]
+        PrintInbound = 710,
+
+        /// <summary>
+        /// 鍗板埛鍘熸枡浣欐枡閫�搴�
+        /// </summary>
+        [Description("鍗板埛鍘熸枡浣欐枡閫�搴�")]
+        PrintBackInbound = 720,
+
+        /// <summary>
         /// 宸烽亾鍐呯Щ搴�
         /// </summary>
         [Description("宸烽亾鍐呯Щ搴�")]
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs"
index 238ea19..856fcba 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs"
@@ -167,6 +167,14 @@
         /// <param name="Count"></param>
         /// <returns></returns>
         WebResponseContent RequestCPWMSTaskOut(int Count);
+
+        /// <summary>
+        /// 鏃犵汉甯冨嚭搴�
+        /// </summary>
+        /// <param name="Count"></param>
+        /// <returns></returns>
+        WebResponseContent RequestWFBWMSTaskOut(int Count);
+
         /// <summary>
         /// 鍘熸枡鍑哄簱浠诲姟
         /// </summary>
@@ -174,8 +182,38 @@
         /// <param name="materielWide">鐗╂枡骞呭</param>
         /// <param name="Count">鍗锋暟</param>
         /// <returns></returns>
-        WebResponseContent RequestYLWMSTaskOut(string materielCode, int materielWide, int Count);
+        WebResponseContent RequestYLWMSTaskOut(string materielCode, int materielWide, int Count, string address = "");
 
+        /// <summary>
+        /// 鍘熸枡绉诲簱
+        /// </summary>
+        /// <param name="startAddress"></param>
+        /// <param name="endAddress"></param>
+        /// <param name="roadWay"></param>
+        /// <returns></returns>
         WebResponseContent IsRelocation(string startAddress, string endAddress, string roadWay);
+        /// <summary>
+        /// 鍘熸枡宸烽亾闂寸Щ搴撲换鍔�
+        /// </summary>
+        WebResponseContent RelocationRoadWay(string roadWay,int Count);
+
+        /// <summary>
+        /// 鍒嗛厤宸烽亾
+        /// </summary>
+        /// <returns></returns>
+        string AssignCPRoadwayNo();
+        /// <summary>
+        /// 鍗板埛浣欐枡閫�鏂欎换鍔�
+        /// </summary>
+        /// <param name="saveModel"></param>
+        /// <returns></returns>
+        WebResponseContent PrintBackInbound(SaveModel saveModel);
+
+        /// <summary>
+        /// 鍗板埛涓嬫枡浠诲姟
+        /// </summary>
+        /// <param name="saveModel"></param>
+        /// <returns></returns>
+        WebResponseContent PrintInbound(SaveModel saveModel);
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Stock/Dt_ProCache.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Stock/Dt_ProCache.cs"
index ab93e6a..2f61471 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Stock/Dt_ProCache.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_Model/Models/Stock/Dt_ProCache.cs"
@@ -45,6 +45,18 @@
         public string MdQtys { get; set; }
 
         /// <summary>
+        /// 鐮佸灈涓暟閲忥紙鍚凡鐮佸灈锛�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鐮佸灈涓暟閲�")]
+        public string MdingQtys { get; set; }
+
+        /// <summary>
+        /// 鐮佸灈缁撴墭鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鐮佸灈缁撴墭鏁伴噺")]
+        public string MdEndQtys { get; set; }
+
+        /// <summary>
         /// 鍗曞彿
         /// </summary>
         [SugarColumn(IsNullable = true, Length = 30, ColumnDescription = "鍗曞彿")]
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Completed.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Completed.cs"
index 1ddd8a0..eb453f5 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Completed.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Completed.cs"
@@ -98,10 +98,14 @@
                 Dt_Task wmsTask = BaseDal.QueryFirst(x=>x.TaskNum == task.TaskNum);
                 if (wmsTask != null)
                 {
+                    wmsTask.PalletCode= task.PalletCode;
+                    wmsTask.Roadway = task.Roadway;
                     wmsTask.TaskStatus = task.TaskState;
                     wmsTask.CurrentAddress = task.CurrentAddress;
                     wmsTask.NextAddress = task.NextAddress;
                     wmsTask.Dispatchertime = task.Dispatchertime;
+                    wmsTask.TaskType = task.TaskType;
+                    wmsTask.TargetAddress = task.TargetAddress;
                     BaseDal.UpdateData(wmsTask);
                 }
                 return WebResponseContent.Instance.OK();
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
index 16142da..1f7d0db 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs"
@@ -10,6 +10,7 @@
 using System.Threading.Tasks;
 using WIDESEA_Common.CommonEnum;
 using WIDESEA_Common.LocationEnum;
+using WIDESEA_Common.MaterielEnum;
 using WIDESEA_Common.OrderEnum;
 using WIDESEA_Common.StockEnum;
 using WIDESEA_Common.TaskEnum;
@@ -127,61 +128,78 @@
         /// <returns></returns>
         public WebResponseContent RequestYLWMSTaskSimple(string stationCode, string palletCode)
         {
-            Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode);
-            if (task != null)
+            WebResponseContent content = new WebResponseContent();
+            try
             {
-                PushTasksToWCS(new List<Dt_Task> { task });
-                return WebResponseContent.Instance.OK($"璇ユ墭鐩樺凡鐢熸垚浠诲姟", _mapper.Map<WMSTaskDTO>(task));
-            }
+                Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode);
+                if (task != null)
+                {
+                    PushTasksToWCS(new List<Dt_Task> { task });
+                    return content.OK($"璇ユ墭鐩樺凡鐢熸垚浠诲姟", _mapper.Map<WMSTaskDTO>(task));
+                }
 
-            if (Repository.QueryFirst(x => x.SourceAddress == stationCode && x.TaskStatus == TaskStatusEnum.New.ObjToInt()) != null)
-            {
-                return WebResponseContent.Instance.Error($"璇ョ珯鐐瑰凡鏈夋湭鎵ц鐨勪换鍔�");
-            }
-            Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == palletCode);
-            if (stockInfo == null)
-            {
-                return WebResponseContent.Instance.Error($"鏈壘鍒扮粍鐩樹俊鎭�");
-            }
-            if (stockInfo.StockStatus != StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt())
-            {
-                return WebResponseContent.Instance.Error($"璇ユ墭鐩樼姸鎬佷笉姝g‘,涓嶅彲鐢宠鍏ュ簱");
-            }
-            string rowWay = AssignYLRoadwayNo(stockInfo.PalletCode);
-            Dt_Task newTask = new Dt_Task()
-            {
-                CurrentAddress = stationCode,
-                Grade = 0,
-                NextAddress = "",
-                PalletCode = palletCode,
-                Roadway = rowWay,
-                SourceAddress = stationCode,
-                TargetAddress = "",
-                TaskType = TaskTypeEnum.Inbound.ObjToInt(),
-                TaskStatus = TaskStatusEnum.New.ObjToInt(),
-                WarehouseId = stockInfo.WarehouseId,
-                PalletType = stockInfo.PalletType,
-            };
+                if (Repository.QueryFirst(x => x.SourceAddress == stationCode && x.TaskStatus == TaskStatusEnum.New.ObjToInt()) != null)
+                {
+                    return content.Error($"璇ョ珯鐐瑰凡鏈夋湭鎵ц鐨勪换鍔�");
+                }
+                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == palletCode);
+                if (stockInfo == null)
+                {
+                    return content.Error($"鏈壘鍒扮粍鐩樹俊鎭�");
+                }
+                if (stockInfo.StockStatus != StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt())
+                {
+                    return content.Error($"璇ユ墭鐩樼姸鎬佷笉姝g‘,涓嶅彲鐢宠鍏ュ簱");
+                }
+                string rowWay = AssignYLRoadwayNo(stockInfo.PalletCode);
+                if (string.IsNullOrEmpty(rowWay))
+                {
+                    return content.Error($"鏈壘鍒板彲鍒嗛厤宸烽亾");
+                }
+                Dt_Task newTask = new Dt_Task()
+                {
+                    CurrentAddress = stationCode,
+                    Grade = 0,
+                    NextAddress = "",
+                    PalletCode = palletCode,
+                    Roadway = rowWay,
+                    SourceAddress = stationCode,
+                    TargetAddress = "",
+                    TaskType = TaskTypeEnum.Inbound.ObjToInt(),
+                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
+                    WarehouseId = stockInfo.WarehouseId,
+                    PalletType = stockInfo.PalletType,
+                };
 
-            if (stockInfo.StockStatus == StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt())
-            {
-                stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt();
+                if (stockInfo.StockStatus == StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt())
+                {
+                    stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt();
+                }
+                _unitOfWorkManage.BeginTran();
+                int taskId = BaseDal.AddData(newTask);
+                newTask.TaskId = taskId;
+                _stockRepository.StockInfoRepository.UpdateData(stockInfo);
+                _unitOfWorkManage.CommitTran();
+                PushTasksToWCS(new List<Dt_Task> { newTask });
+                WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask);
+                return content.OK(data: wMSTaskDTO);
             }
-            _unitOfWorkManage.BeginTran();
-            int taskId = BaseDal.AddData(newTask);
-            newTask.TaskId = taskId;
-            _stockRepository.StockInfoRepository.UpdateData(stockInfo);
-            _unitOfWorkManage.CommitTran();
-            PushTasksToWCS(new List<Dt_Task> { newTask });
-            WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask);
-            return WebResponseContent.Instance.OK(data: wMSTaskDTO);
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                content.Error(ex.Message);
+            }
+            return content;
         }
         public string AssignYLRoadwayNo(string palletCode)
         {
             try
             {
                 Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == palletCode);
-
+                if (stockInfo==null)
+                {
+                    throw new Exception($"缁勭洏搴撳瓨涓嶅瓨鍦�");
+                }
                 Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == stockInfo.WarehouseId);
 
                 if (warehouse == null)
@@ -192,11 +210,11 @@
                 string roadwayNo = "";
                 if (stockInfo.MaterielThickness > 800)
                 {
-                    List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationType == LocationTypeEnum.Undefined.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo.Contains("YL")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
+                    List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo.Contains("YL")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                     roadwayNo = locationCounts.OrderByDescending(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
                     if (stockInfo.MaterielWide > 2200)
                     {
-                        locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationType == LocationTypeEnum.Undefined.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && !x.RoadwayNo.Contains("SC01_YL")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
+                        locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo=="SC02_YL").GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                         roadwayNo = locationCounts.OrderByDescending(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
                     }
                 }
@@ -223,7 +241,7 @@
                     {
                         return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑缁堢偣璐т綅淇℃伅");
                     }
-                    Dt_AGVStationInfo agvstation = _agvStationInfoRepository.QueryFirst(x => x.AGVStationCode == task.SourceAddress && x.StationArea == AGVStationAreaEnum.AreaA.ObjToInt());
+                    Dt_AGVStationInfo agvstation = _agvStationInfoRepository.QueryFirst(x => x.AGVStationCode == task.SourceAddress && ( x.StationArea == AGVStationAreaEnum.AreaA.ObjToInt() || x.StationArea == AGVStationAreaEnum.AreaC.ObjToInt()));
                     if (agvstation != null)
                     {
                         agvstation.IsOccupied = WhetherEnum.False.ObjToInt();
@@ -261,8 +279,14 @@
                     {
                         return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑缁堢偣璐т綅淇℃伅");
                     }
+                    
                     task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
                     _unitOfWorkManage.BeginTran();
+                    if (task.TaskType == TaskTypeEnum.InPick.ObjToInt())
+                    {
+                        Dt_LocationInfo locationInfoStart = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+                        _basicService.LocationInfoService.UpdateLocationStatus(locationInfoStart, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId);
+                    }
                     stockInfo.LocationCode = locationInfoEnd.LocationCode;
                     stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
                     _stockService.StockInfoService.Repository.UpdateData(stockInfo);
@@ -293,9 +317,8 @@
                 }
 
                 string roadwayNo = "";
-                List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationType == LocationTypeEnum.Undefined.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo.Contains("CP")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
-
-                //鑾峰彇褰撳墠鍏ュ簱浠诲姟涓凡鍒嗛厤宸烽亾浠诲姟鏁伴噺
+                List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo.Contains("CP")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
+                //绛涢�夊綋鍓嶅叆搴撲换鍔′腑宸插垎閰嶅贩閬撲换鍔℃暟閲�
                 List<LocationCount> useLocationCounts = Db.Queryable<Dt_Task>().Where(x => x.WarehouseId == warehouse.WarehouseId 
                 && locationCounts.Select(j=>j.RoadwayNo).Contains(x.Roadway)
                 && TaskInboundTypes.Contains(x.TaskType)).GroupBy(x => x.Roadway).Select(x => new LocationCount { RoadwayNo = x.Roadway, Count = SqlFunc.AggregateCount(x) }).ToList();
@@ -336,7 +359,7 @@
                 {
                     return WebResponseContent.Instance.OK(data: task.TargetAddress);
                 }
-                
+                //鍒嗛厤璐т綅
                 Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(roadwayNo, task.PalletType, task.WarehouseId);
                 if (locationInfo == null)
                 {
@@ -356,7 +379,7 @@
                 
 
                 LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
-
+                //鏇存柊閿佸畾璐т綅
                 _unitOfWorkManage.BeginTran();
                 _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.Lock, LocationChangeType.InboundAssignLocation);
                 _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, task.PalletType, LocationStatusEnum.Lock, task.WarehouseId);
@@ -418,119 +441,6 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
-        public readonly string[] OutStartPonits = { "5230", "5237", "5244" };
-        /// <summary>
-        /// 鎴愬搧浣欐枡閫�搴撳叆浠�
-        /// </summary>
-        /// <param name="barCode"></param>
-        /// <param name="startPoint"></param>
-        /// <returns></returns>
-        //public WebResponseContent BackProductTask(string barCode, string startPoint)
-        //{
-        //    WebResponseContent content = new WebResponseContent();
-        //    try
-        //    {
-        //        string palletCode = @"^C\d{5}$";  // 姝e垯琛ㄨ揪寮�
-        //        bool isValid = Regex.IsMatch(barCode, palletCode);
-        //        if (!isValid)
-        //        {
-        //            return content.Error($"妗嗙爜鏍煎紡閿欒{barCode}");
-        //        }
-        //        if (!OutStartPonits.Contains(startPoint))
-        //        {
-        //            return content.Error($"璧风偣閿欒{startPoint}");
-        //        }
-        //        //鍒ゆ柇褰撳墠鐐逛綅鏄惁閲嶅
-        //        Dt_Task taskOldPoint = BaseDal.QueryFirst(x=>x.SourceAddress==startPoint && (x.TaskStatus == TaskStatusEnum.New.ObjToInt()||x.TaskStatus==TaskStatusEnum.Line_Execute.ObjToInt()|| x.TaskStatus == TaskStatusEnum.Line_Executing.ObjToInt() || x.TaskStatus == TaskStatusEnum.AGV_Takeing.ObjToInt()));
-        //        if (taskOldPoint != null)
-        //        {
-        //            return content.Error($"绔欑偣{startPoint}宸插瓨鍦ㄤ换鍔�");
-        //        }
-        //        Dt_Task taskOld = BaseDal.QueryFirst(x => x.PalletCode == barCode);
-        //        if (taskOld != null)
-        //        {
-        //            return content.Error($"鑳舵{barCode}浠诲姟宸插瓨鍦�");
-        //        }
-        //        //鑾峰彇鑳舵浣欐枡
-        //        Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x=>x.PalletCode== barCode).Includes(x=>x.proStockInfoDetails).First();
-        //        if (proStockInfo==null)
-        //        {
-        //            return content.Error($"鏈壘鍒皗barCode}鑳舵淇℃伅");
-        //        }
-        //        if (proStockInfo.proStockInfoDetails==null || proStockInfo.proStockInfoDetails.Count<=0)
-        //        {
-        //            return content.Error($"{barCode}鑳舵淇℃伅涓虹┖");
-        //        }
-        //        if (proStockInfo.StockStatus!=StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt())
-        //        {
-        //            return content.Error($"{barCode}鑳舵淇℃伅鐘舵�佸紓甯�");
-        //        }
-        //        //鑾峰彇鎴愬搧骞冲簱
-        //        Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString());
-        //        if (proStockInfo.WarehouseId != warehouse.WarehouseId && proStockInfo.LocationCode!= "鎴愬搧鍖呰鎷h揣鍖�")
-        //        {
-        //            return content.Error($"{barCode}鑳舵淇℃伅涓嶅湪鎷h揣鍖�");
-        //        }
-        //        //鑾峰彇褰撳墠鐨勫簱瀛樺睘鎬�
-        //        Dt_Warehouse? warePoint = null;
-        //        switch (proStockInfo.ProStockAttribute)
-        //        {
-        //            case (int)ProStockAttributeEnum.鎴愬搧:
-        //                warePoint = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA71.ToString());
-        //                break;
-        //            case (int)ProStockAttributeEnum.灏炬暟:
-        //                warePoint = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA72.ToString());
-        //                break;
-        //            case (int)ProStockAttributeEnum.鐮斿彂:
-        //                warePoint = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA73.ToString());
-        //                break;
-        //            default:
-        //                throw new Exception($"鏈壘鍒皗barCode}鑳舵淇℃伅搴撳瓨灞炴��");
-        //        }
-        //        Dt_Warehouse warehouseLocation = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA71.ToString());
-        //        Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.WarehouseId == warehouseLocation.WarehouseId);
-        //        if (locationInfo == null)
-        //        {
-        //            return content.Error($"鏈壘鍒皗warehouse.WarehouseCode}璐т綅淇℃伅");
-        //        }
-        //        proStockInfo.StockStatus = StockStatusEmun.鎴愬搧浣欐枡鍥炲簱.ObjToInt();
-        //        proStockInfo.proStockInfoDetails.ForEach(x =>
-        //        {
-        //            x.ProOutDetailStatus = StockStatusEmun.鎴愬搧浣欐枡鍥炲簱.ObjToInt();
-        //        });
-        //        Dt_Task newTask = new Dt_Task()
-        //        {
-        //            CurrentAddress = startPoint,
-        //            Grade = 0,
-        //            NextAddress = "",
-        //            PalletCode = proStockInfo.PalletCode,
-        //            Roadway = locationInfo.RoadwayNo,
-        //            SourceAddress = startPoint,
-        //            TargetAddress = "",
-        //            TaskType = TaskTypeEnum.InProductBack.ObjToInt(),
-        //            TaskStatus = TaskStatusEnum.New.ObjToInt(),
-        //            WarehouseId = warePoint.WarehouseId,
-        //            PalletType = proStockInfo.PalletType,
-        //            MaterielCode = proStockInfo.proStockInfoDetails.Where(x => x.ProStockId == proStockInfo.Id).FirstOrDefault()?.ProductCode,
-        //            Quantity = (float)proStockInfo.proStockInfoDetails.Where(x => x.ProStockId == proStockInfo.Id).Sum(x => x.StockPcsQty)
-        //        };
-        //        _unitOfWorkManage.BeginTran();
-        //        int taskId = BaseDal.AddData(newTask);
-        //        newTask.TaskId = taskId;
-        //        _stockRepository.ProStockInfoRepository.UpdateData(proStockInfo);
-        //        _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfo.proStockInfoDetails);
-        //        _unitOfWorkManage.CommitTran();
-        //        //鎺ㄩ�佷换鍔�
-        //        PushTasksToWCS(new List<Dt_Task> { newTask });
-        //        content.OK("鍙戦�佹垚鍔�");
-        //    }
-        //    catch (Exception ex)
-        //    {
-        //        _unitOfWorkManage.RollbackTran();
-        //        content.Error(ex.Message);
-        //    }
-        //    return content;
-        //}
         /// <summary>
         /// 绌烘鍥炲簱
         /// </summary>
@@ -551,7 +461,7 @@
                     return content.Error($"璧风偣閿欒{startPoint}");
                 }
                 //鍒ゆ柇褰撳墠鐐逛綅鏄惁閲嶅
-                Dt_Task taskOldPoint = BaseDal.QueryFirst(x => x.SourceAddress == startPoint && x.TaskStatus == TaskStatusEnum.New.ObjToInt());
+                Dt_Task taskOldPoint = BaseDal.QueryFirst(x => x.SourceAddress == startPoint &&( x.TaskStatus == TaskStatusEnum.New.ObjToInt() || x.TaskStatus==TaskStatusEnum.AGV_Executing.ObjToInt()));
                 if (taskOldPoint != null)
                 {
                     return content.Error($"绔欑偣{startPoint}宸插瓨鍦ㄤ换鍔�");
@@ -606,6 +516,175 @@
             }
             catch (Exception ex)
             {
+                _unitOfWorkManage.RollbackTran();
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        /// <summary>
+        /// 鍗板埛浣欐枡閫�鏂欎换鍔�
+        /// </summary>
+        public WebResponseContent PrintBackInbound(SaveModel saveModel)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                var barcode = saveModel.MainData["palletCode"].ToString();
+                var warehouseId = saveModel.MainData["warehouseId"].ObjToInt();
+                var materSn = saveModel.MainData["materSn"];
+                //鐩村緞
+                var thickness = saveModel.MainData["thickness"].ObjToInt();
+                var weight = saveModel.MainData["weight"].ObjToInt();
+                var address = saveModel.MainData["address"].ToString();
+                //骞呭
+                var wide = saveModel.MainData["wide"].ObjToInt();
+                Dt_MaterielInfo? materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materSn);
+                if (materielInfo == null)
+                {
+                    return content.Error("鏈壘鍒扮墿鏂欎俊鎭�");
+                }
+                Dt_StockInfo stockInfoOld = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == barcode);
+                if (stockInfoOld != null)
+                {
+                    return content.Error("鎵樼洏淇℃伅宸插瓨鍦�");
+                }
+                //鐢熸垚搴撳瓨缁勭洏淇℃伅
+                Dt_StockInfo stockInfo = new Dt_StockInfo()
+                {
+                    MaterielInvOrgId = materielInfo.MaterielInvOrgId,
+                    PalletCode = barcode,
+                    LocationCode = "",
+                    PalletType = 1,
+                    WarehouseId = warehouseId,
+                    StockAttribute = materielInfo.MaterielSourceType,
+                    StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt(),
+                    MaterielSpec = materielInfo.MaterielSpec,
+                    Unit = materielInfo.MaterielUnit,
+                    MaterielThickness = thickness,
+                    MaterielWide = wide,
+                    MaterielWeight = weight,
+                    MaterielCode = materielInfo.MaterielCode,
+                    MaterielName = materielInfo.MaterielName,
+                };
+                if (wide > 1200)
+                {
+                    stockInfo.PalletType = 2;
+                }
+                
+                //鐢熸垚鍗板埛浣欐枡閫�鏂欎换鍔�
+                Dt_Task newTask = new Dt_Task()
+                {
+                    CurrentAddress = address,
+                    Grade = 0,
+                    NextAddress = "",
+                    PalletCode = barcode,
+                    Roadway = "",
+                    SourceAddress = address,
+                    TargetAddress = "",
+                    TaskType = TaskTypeEnum.PrintBackInbound.ObjToInt(),
+                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
+                    WarehouseId = warehouseId,
+                    PalletType = 1,
+                    TaskLength= wide
+                };
+                _unitOfWorkManage.BeginTran();
+                int taskId = BaseDal.AddData(newTask);
+                _stockRepository.StockInfoRepository.AddData(stockInfo);
+                newTask.TaskId = taskId;
+                _unitOfWorkManage.CommitTran();
+                //鎺ㄩ�佷换鍔�
+                PushTasksToWCS(new List<Dt_Task> { newTask });
+                content.OK("鍙戦�佹垚鍔�");
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        /// <summary>
+        /// 鍗板埛涓嬫枡浠诲姟
+        /// </summary>
+        public WebResponseContent PrintInbound(SaveModel saveModel)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                var barcode = saveModel.MainData["palletCode"].ToString();
+                var warehouseId = saveModel.MainData["warehouseId"].ObjToInt();
+                var materSn = saveModel.MainData["materSn"];
+                //鐩村緞
+                var thickness = saveModel.MainData["thickness"].ObjToInt();
+                var weight = saveModel.MainData["weight"].ObjToInt();
+                var address = saveModel.MainData["address"].ToString();
+                //骞呭
+                var wide = saveModel.MainData["wide"].ObjToInt();
+                Dt_MaterielInfo? materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materSn);
+                if (materielInfo == null)
+                {
+                    return content.Error("鏈壘鍒扮墿鏂欎俊鎭�");
+                }
+                if (materielInfo.MaterielSourceType!=MaterielTypeEnum.鍗婃垚鍝�.ObjToInt())
+                {
+                    return content.Error($"鏈壘鍒扮墿鏂檣materielInfo.MaterielCode}鍗婃垚鍝佷俊鎭�");
+                }
+                Dt_StockInfo stockInfoOld = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == barcode);
+                if (stockInfoOld != null)
+                {
+                    return content.Error("鎵樼洏淇℃伅宸插瓨鍦�");
+                }
+                //鐢熸垚搴撳瓨缁勭洏淇℃伅
+                Dt_StockInfo stockInfo = new Dt_StockInfo()
+                {
+                    MaterielInvOrgId = materielInfo.MaterielInvOrgId,
+                    PalletCode = barcode,
+                    LocationCode = "",
+                    PalletType = 1,
+                    WarehouseId = warehouseId,
+                    StockAttribute = materielInfo.MaterielSourceType,
+                    StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt(),
+                    MaterielSpec = materielInfo.MaterielSpec,
+                    Unit = materielInfo.MaterielUnit,
+                    MaterielThickness = thickness,
+                    MaterielWide = wide,
+                    MaterielWeight = weight,
+                    MaterielCode = materielInfo.MaterielCode,
+                    MaterielName = materielInfo.MaterielName,
+                };
+                if (wide > 1200)
+                {
+                    stockInfo.PalletType = 2;
+                }
+
+                //鐢熸垚鍗板埛鍗婃垚鍝佸叆搴撲换鍔�
+                Dt_Task newTask = new Dt_Task()
+                {
+                    CurrentAddress = address,
+                    Grade = 0,
+                    NextAddress = "",
+                    PalletCode = barcode,
+                    Roadway = "",
+                    SourceAddress = address,
+                    TargetAddress = "",
+                    TaskType = TaskTypeEnum.PrintInbound.ObjToInt(),
+                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
+                    WarehouseId = warehouseId,
+                    PalletType = 1,
+                    TaskLength = wide
+                };
+                _unitOfWorkManage.BeginTran();
+                int taskId = BaseDal.AddData(newTask);
+                _stockRepository.StockInfoRepository.AddData(stockInfo);
+                newTask.TaskId = taskId;
+                _unitOfWorkManage.CommitTran();
+                //鎺ㄩ�佷换鍔�
+                PushTasksToWCS(new List<Dt_Task> { newTask });
+                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/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
index fb613e5..e9c6340 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
@@ -284,13 +284,77 @@
             return content;
         }
         /// <summary>
+        /// 鏃犵汉甯冨嚭搴�
+        /// </summary>
+        /// <param name="Count"></param>
+        /// <returns></returns>
+        public WebResponseContent RequestWFBWMSTaskOut(int Count)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                List<Dt_AGVStationInfo> aGVStationInfos = _agvStationInfoRepository.QueryData(x => x.StationArea == AGVStationAreaEnum.AreaC.ObjToInt() && x.IsOccupied == WhetherEnum.False.ObjToInt());
+                if (aGVStationInfos.Count < Count)
+                {
+                    return content.Error($"鍙敤缂撳瓨鏁颁笉瓒�");
+                }
+                List<Dt_ProStockInfo> stockInfos = _stockRepository.ProStockInfoRepository.QueryData(x => x.ProStockAttribute == ProStockAttributeEnum.绌烘墭.ObjToInt() && x.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt()).OrderBy(x => x.CreateDate).Take(Count).ToList();
+                List<Dt_LocationInfo> locationInfos = _basicRepository.LocationInfoRepository.QueryData(x => stockInfos.Select(x => x.LocationCode).Contains(x.LocationCode));
+                if (stockInfos.Count < Count)
+                {
+                    return content.Error($"搴撳瓨鏁伴噺涓嶈冻");
+                }
+                foreach (var item in stockInfos)
+                {
+                    Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.LocationCode == item.LocationCode);
+                    if (locationInfo != null && (locationInfo.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt())
+                    {
+                        item.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt();
+                    }
+                    else
+                    {
+                        return content.Error($"璐т綅鐘舵�佷笉姝g‘");
+                    }
+                }
+                List<Dt_Task> tasks = GetTasks(stockInfos, TaskTypeEnum.OutWFB);
+                if (tasks == null || tasks.Count <= 0)
+                {
+                    return content.Error($"鐢熸垚浠诲姟澶辫触");
+                }
+                for (int i = 0; i < tasks.Count; i++)
+                {
+                    aGVStationInfos[i].IsOccupied = WhetherEnum.True.ObjToInt();
+                    tasks[i].TargetAddress = aGVStationInfos[i].AGVStationCode;
+                }
+                //鍒ゆ柇鏄惁鏈夊嚭搴撳崟淇℃伅
+                _unitOfWorkManage.BeginTran();
+                //鏇存柊搴撳瓨鐘舵��
+                _stockRepository.ProStockInfoRepository.UpdateData(stockInfos);
+                _agvStationInfoRepository.UpdateData(aGVStationInfos);
+                //鏇存柊璐т綅鐘舵��
+                _basicRepository.LocationInfoRepository.UpdateLocationStatus(locationInfos, LocationStatusEnum.Lock);
+                //鍔犲叆璐т綅鍙樺姩璁板綍
+                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, taskNums: tasks.Select(x => x.TaskNum).ToList());
+                //鏂板缓浠诲姟
+                BaseDal.AddData(tasks);
+                _unitOfWorkManage.CommitTran();
+                PushTasksToWCS(tasks);
+                content.OK();
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        /// <summary>
         /// 鍘熸枡鍑哄簱浠诲姟
         /// </summary>
         /// <param name="materielCode">鐗╂枡浠g爜</param>
         /// <param name="materielWide">鐗╂枡骞呭</param>
         /// <param name="Count">鍗锋暟</param>
         /// <returns></returns>
-        public WebResponseContent RequestYLWMSTaskOut(string materielCode, int materielWide, int Count)
+        public WebResponseContent RequestYLWMSTaskOut(string materielCode, int materielWide, int Count, string address = "")
         {
             WebResponseContent content = new WebResponseContent();
             try
@@ -323,13 +387,20 @@
                 }
                 else
                 {
-                    taskTypeEnum = TaskTypeEnum.Outbound;
+                    taskTypeEnum = TaskTypeEnum.PrintOutbound;
                 }
                 List<Dt_Task> tasks = GetTasks(stockInfos, taskTypeEnum);
                 if (tasks == null || tasks.Count <= 0)
                 {
                     return content.Error($"鐢熸垚浠诲姟澶辫触");
                 }
+                if (!string.IsNullOrEmpty(address))
+                {
+                    tasks.ForEach(x =>
+                    {
+                        x.TargetAddress= address;
+                    });
+                }
                 //鍒ゆ柇鏄惁鏈夊嚭搴撳崟淇℃伅
                 _unitOfWorkManage.BeginTran();
                 //鏇存柊搴撳瓨鐘舵��
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Reloaction.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Reloaction.cs"
index 10f4bb0..7968781 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Reloaction.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Reloaction.cs"
@@ -1,10 +1,12 @@
-锘縰sing System;
+锘縰sing OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Common.CommonEnum;
 using WIDESEA_Common.LocationEnum;
+using WIDESEA_Common.MaterielEnum;
 using WIDESEA_Common.OtherEnum;
 using WIDESEA_Common.StockEnum;
 using WIDESEA_Common.TaskEnum;
@@ -176,8 +178,10 @@
                 Dt_LocationInfo startLocationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == startAddress);
                 Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.LocationCode == startAddress);
                 Dt_LocationInfo endLocationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == endAddress);
+                //鍒ゆ柇鏉′欢
                 if (startLocationInfo != null && startLocationInfo.LocationStatus==LocationStatusEnum.InStock.ObjToInt() && endLocationInfo != null && endLocationInfo.LocationStatus==LocationStatusEnum.Free.ObjToInt() && endLocationInfo.EnableStatus==EnableStatusEnum.Normal.ObjToInt() && stockInfo!=null)
                 {
+                    //鐢熸垚浠诲姟
                     Dt_Task newTask = new Dt_Task()
                     {
                         Roadway = roadWay,
@@ -191,7 +195,7 @@
                         SourceAddress = startLocationInfo.LocationCode,
                         TargetAddress = endLocationInfo.LocationCode,
                         TaskNum = Repository.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
-                        TaskStatus = 0,
+                        TaskStatus = TaskStatusEnum.SC_Execute.ObjToInt(),
                         TaskType = TaskTypeEnum.Relocation.ObjToInt()
                     };
                     stockInfo.StockStatus = StockStatusEmun.绉诲簱閿佸畾.ObjToInt();
@@ -216,5 +220,60 @@
             }
             return content;
         }
+        /// <summary>
+        /// 鍘熸枡宸烽亾闂寸Щ搴撲换鍔� todo:涓存椂
+        /// </summary>
+        public WebResponseContent RelocationRoadWay(string roadWay, int Count)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                //鑾峰彇瀵瑰簲搴撳瓨
+                List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.QueryData(x =>  x.MaterielWide <2200 && x.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt()).OrderBy(x => x.CreateDate).Take(Count).ToList();
+
+                //鑾峰彇璐т綅
+                List<Dt_LocationInfo> locationInfos = _basicRepository.LocationInfoRepository.QueryData(x => stockInfos.Select(x => x.LocationCode).Contains(x.LocationCode));
+                foreach (var item in stockInfos)
+                {
+                    Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.LocationCode == item.LocationCode);
+                    if (locationInfo != null && (locationInfo.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt())
+                    {
+                        item.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt();
+                    }
+                    else
+                    {
+                        return content.Error($"璐т綅鐘舵�佷笉姝g‘");
+                    }
+                }
+                
+                List<Dt_Task> tasks = GetTasks(stockInfos, TaskTypeEnum.OutPick);
+                if (tasks == null || tasks.Count <= 0)
+                {
+                    return content.Error($"鐢熸垚浠诲姟澶辫触");
+                }
+                tasks.ForEach(x =>
+                {
+                    x.TargetAddress = roadWay;
+                });
+                //鍒ゆ柇鏄惁鏈夊嚭搴撳崟淇℃伅
+                _unitOfWorkManage.BeginTran();
+                //鏇存柊搴撳瓨鐘舵��
+                _stockRepository.StockInfoRepository.UpdateData(stockInfos);
+                //鏇存柊璐т綅鐘舵��
+                _basicRepository.LocationInfoRepository.UpdateLocationStatus(locationInfos, LocationStatusEnum.Lock);
+                //鍔犲叆璐т綅鍙樺姩璁板綍
+                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, taskNums: tasks.Select(x => x.TaskNum).ToList());
+                //鏂板缓浠诲姟
+                BaseDal.AddData(tasks);
+                _unitOfWorkManage.CommitTran();
+                PushTasksToWCS(tasks);
+                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/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
index 1d03895..90a0e24 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
@@ -172,6 +172,21 @@
         {
             return Service.RequestYLWMSTaskSimple(stationCode,palletCode);
         }
+        /// <summary>
+        /// 鍒嗛厤鍘熸枡鍏ュ簱宸烽亾
+        /// </summary>
+        /// <param name="palletCode"></param>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("AssignYLRoadwayNo"), AllowAnonymous]
+        public WebResponseContent AssignYLRoadwayNo(string palletCode)
+        {
+            string roadWay= Service.AssignYLRoadwayNo(palletCode);
+            if (string.IsNullOrEmpty(roadWay))
+            {
+                return WebResponseContent.Instance.Error("鏈壘鍒板彲鍒嗛厤宸烽亾");
+            }
+            return WebResponseContent.Instance.OK(data: roadWay);
+        }
 
         /// <summary>
         /// 鎴愬搧鍑哄簱浠诲姟璇锋眰
@@ -182,6 +197,17 @@
         {
             return Service.RequestCPWMSTaskOut(Count);
         }
+
+        /// <summary>
+        /// 鏃犵汉甯冨嚭搴�
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("RequestWFBWMSTaskOut"), AllowAnonymous]
+        public WebResponseContent RequestWFBWMSTaskOut(int Count)
+        {
+            return Service.RequestWFBWMSTaskOut(Count);
+        }
+
         /// <summary>
         /// 鍘熸枡鍑哄簱浠诲姟
         /// </summary>
@@ -190,9 +216,9 @@
         /// <param name="Count">鍗锋暟</param>
         /// <returns></returns>
         [HttpPost, HttpGet, Route("RequestYLWMSTaskOut"), AllowAnonymous]
-        public WebResponseContent RequestYLWMSTaskOut(string materielCode,int materielWide, int Count)
+        public WebResponseContent RequestYLWMSTaskOut(string materielCode,int materielWide, int count,string address="")
         {
-            return Service.RequestYLWMSTaskOut(materielCode, materielWide, Count);
+            return Service.RequestYLWMSTaskOut(materielCode, materielWide, count, address);
         }
         /// <summary>
         /// 鍘熸枡绉诲簱浠诲姟
@@ -206,5 +232,43 @@
         {
             return Service.IsRelocation(startAddress, endAddress, roadWay);
         }
+        /// <summary>
+        /// 鍘熸枡宸烽亾闂寸Щ搴撲换鍔�
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("RelocationRoadWay"), AllowAnonymous]
+        public WebResponseContent RelocationRoadWay(string roadWay,int Count)
+        {
+            return Service.RelocationRoadWay(roadWay, Count);
+        }
+        /// <summary>
+        /// 鍒嗛厤鎴愬搧宸烽亾
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("AssignCPRoadwayNo"), AllowAnonymous]
+        public string AssignCPRoadwayNo()
+        {
+            return Service.AssignCPRoadwayNo();
+        }
+        /// <summary>
+        /// 鍗板埛浣欐枡閫�鏂欎换鍔�
+        /// </summary>
+        /// <param name="saveModel"></param>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("PrintBackInbound"), AllowAnonymous]
+        public WebResponseContent PrintBackInbound([FromBody]SaveModel saveModel)
+        {
+            return Service.PrintBackInbound(saveModel);
+        }
+        /// <summary>
+        /// 鍗板埛涓嬫枡浠诲姟
+        /// </summary>
+        /// <param name="saveModel"></param>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("PrintInbound"), AllowAnonymous]
+        public WebResponseContent PrintInbound([FromBody] SaveModel saveModel)
+        {
+            return Service.PrintInbound(saveModel);
+        }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/\351\276\231\345\210\251\345\276\227PDA/common/config.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/\351\276\231\345\210\251\345\276\227PDA/common/config.js"
index 31aeea7..e8ba20c 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/\351\276\231\345\210\251\345\276\227PDA/common/config.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/\351\276\231\345\210\251\345\276\227PDA/common/config.js"
@@ -1,5 +1,5 @@
 let config = {
-	baseUrl: 'http://127.0.0.1:9293',
+	baseUrl: 'http://192.168.35.3:9283',
 	urls: [
 		'http://192.168.35.3:9283',
 		'http://192.168.35.3:9283'
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\345\215\217\350\256\256/\344\270\200\346\234\237BSTERP\351\234\200\346\261\202\345\255\227\346\256\265.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\345\215\217\350\256\256/\344\270\200\346\234\237BSTERP\351\234\200\346\261\202\345\255\227\346\256\265.xlsx"
new file mode 100644
index 0000000..f743eb2
--- /dev/null
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\346\216\245\345\217\243\345\215\217\350\256\256/\344\270\200\346\234\237BSTERP\351\234\200\346\261\202\345\255\227\346\256\265.xlsx"
Binary files differ
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\344\274\270\347\274\251\350\264\247\345\217\211\346\216\245\351\251\263\345\217\260IP\345\210\206\351\205\215\350\241\250.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\344\274\270\347\274\251\350\264\247\345\217\211\346\216\245\351\251\263\345\217\260IP\345\210\206\351\205\215\350\241\250.xlsx"
new file mode 100644
index 0000000..3fd91ef
--- /dev/null
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\344\274\270\347\274\251\350\264\247\345\217\211\346\216\245\351\251\263\345\217\260IP\345\210\206\351\205\215\350\241\250.xlsx"
Binary files differ
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\345\215\260\346\231\272\344\272\221\346\225\260\346\215\256\345\255\227\345\205\270.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\345\215\260\346\231\272\344\272\221\346\225\260\346\215\256\345\255\227\345\205\270.xlsx"
new file mode 100644
index 0000000..4028ae6
--- /dev/null
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\345\215\260\346\231\272\344\272\221\346\225\260\346\215\256\345\255\227\345\205\270.xlsx"
Binary files differ
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\345\216\237\346\226\231\345\272\223\350\276\223\351\200\201\347\272\277\351\200\232\350\256\257\345\215\217\350\256\256.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\345\216\237\346\226\231\345\272\223\350\276\223\351\200\201\347\272\277\351\200\232\350\256\257\345\215\217\350\256\256.xlsx"
index a1adcea..7313fdd 100644
--- "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\345\216\237\346\226\231\345\272\223\350\276\223\351\200\201\347\272\277\351\200\232\350\256\257\345\215\217\350\256\256.xlsx"
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\345\216\237\346\226\231\345\272\223\350\276\223\351\200\201\347\272\277\351\200\232\350\256\257\345\215\217\350\256\256.xlsx"
Binary files differ
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\346\210\220\345\223\201\350\276\223\351\200\201\347\272\277\351\200\232\350\256\257\345\215\217\350\256\256_20250707.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\346\210\220\345\223\201\350\276\223\351\200\201\347\272\277\351\200\232\350\256\257\345\215\217\350\256\256_20250707.xlsx"
index a745a85..dc6a722 100644
--- "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\346\210\220\345\223\201\350\276\223\351\200\201\347\272\277\351\200\232\350\256\257\345\215\217\350\256\256_20250707.xlsx"
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\346\210\220\345\223\201\350\276\223\351\200\201\347\272\277\351\200\232\350\256\257\345\215\217\350\256\256_20250707.xlsx"
Binary files differ
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\351\276\231\345\210\251\345\276\227\346\234\272\345\231\250\344\272\272IO\351\200\232\350\256\257\350\241\25020250712.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\351\276\231\345\210\251\345\276\227\346\234\272\345\231\250\344\272\272IO\351\200\232\350\256\257\350\241\25020250712.xlsx"
index 9f35452..b93e12b 100644
--- "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\351\276\231\345\210\251\345\276\227\346\234\272\345\231\250\344\272\272IO\351\200\232\350\256\257\350\241\25020250712.xlsx"
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\200\232\344\277\241\345\215\217\350\256\256/\351\276\231\345\210\251\345\276\227\346\234\272\345\231\250\344\272\272IO\351\200\232\350\256\257\350\241\25020250712.xlsx"
Binary files differ

--
Gitblit v1.9.3