From 05d580b4357829263c9c44449621ca6017576dcb Mon Sep 17 00:00:00 2001
From: duyongjia <adu_555@163.com>
Date: 星期二, 19 十一月 2024 16:26:46 +0800
Subject: [PATCH] 现场修改提交

---
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/MESTaskDTO.cs                         |   71 ++
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HttpManager.cs                              |   98 ++
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs                   |    6 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Common/ApiInvoke.cs                |   53 +
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Basic/LocationInfoController.cs |    2 
 项目资料/项目图纸/郭店项目实施工作安排及进度管理表-第1周-2024.11.13.xlsx                                           |    0 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs                   |   53 +
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Common/MESSendCMD.cs               |   28 
 项目资料/项目图纸/流程图1.png                                                                       |    0 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/DeliveryPlan.cs                       |   19 
 项目资料/项目图纸/流程说明.doc                                                                       |    0 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/DoubleStackerCraneJob.cs     |  303 +++++++++
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WIDESEAWCS_TaskInfoService.csproj  |    1 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/Comm/ResponseModel.cs                 |   14 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs                     |  618 ++++++++++++++++-
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj                    |    4 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs     |  332 ++++++---
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/WIDESEAWCS_Tasks.csproj                      |    2 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/LocationEnum/LocationStatusEnum.cs          |    5 
 项目资料/项目图纸/PLC地址.png                                                                      |    0 
 项目资料/项目图纸/智汇奇策郭店尖山项目通清单1031.xls                                                          |    0 
 项目资料/项目图纸/库位.png                                                                         |    0 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/LocationEnum/LocationTypeEnum.cs            |   42 +
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Common/MESResponse.cs              |   15 
 项目资料/项目图纸/入库生成任务报文.txt                                                                   |   19 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_StockRepository/StockInfoRepository.cs             |    3 
 /dev/null                                                                                |    0 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs                  |   39 
 项目资料/项目图纸/堆垛机通信协议.xlsx                                                                   |    0 
 代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/config/applicationhost.config           |   14 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs                    |   47 
 项目资料/项目图纸/流程图2.png                                                                       |    0 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs          |   12 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json                            |    5 
 项目资料/项目图纸/异常出库生成任务报文.txt                                                                 |   19 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs        |    4 
 项目资料/项目图纸/组立机上料剩余层数回写(DB28).png                                                          |    0 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/ServiceLog/ServiceLogger.cs                 |   78 ++
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/MESPeekBack.cs                        |   32 
 39 files changed, 1,670 insertions(+), 268 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/16a40d16-80f0-4c73-a9a6-e28826d2b979.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/16a40d16-80f0-4c73-a9a6-e28826d2b979.vsidx"
deleted file mode 100644
index d35681b..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/16a40d16-80f0-4c73-a9a6-e28826d2b979.vsidx"
+++ /dev/null
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/33f3558c-adae-4d5b-a8db-37cdc93fc75a.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/33f3558c-adae-4d5b-a8db-37cdc93fc75a.vsidx"
deleted file mode 100644
index cffa9f8..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/33f3558c-adae-4d5b-a8db-37cdc93fc75a.vsidx"
+++ /dev/null
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/591ce19e-7364-4503-b4b3-a190a9a73366.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/591ce19e-7364-4503-b4b3-a190a9a73366.vsidx"
deleted file mode 100644
index fab0ba6..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/591ce19e-7364-4503-b4b3-a190a9a73366.vsidx"
+++ /dev/null
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/a239e3a6-c377-4c06-90b5-6cbecfe39546.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/a239e3a6-c377-4c06-90b5-6cbecfe39546.vsidx"
deleted file mode 100644
index 2910ed2..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/a239e3a6-c377-4c06-90b5-6cbecfe39546.vsidx"
+++ /dev/null
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/d04c6c27-9127-4d1a-aa0f-9cd4d8948537.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/d04c6c27-9127-4d1a-aa0f-9cd4d8948537.vsidx"
deleted file mode 100644
index d47c8c3..0000000
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/d04c6c27-9127-4d1a-aa0f-9cd4d8948537.vsidx"
+++ /dev/null
Binary files differ
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/config/applicationhost.config" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/config/applicationhost.config"
index cdd2df8..0d88f0d 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/config/applicationhost.config"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/config/applicationhost.config"
@@ -812,7 +812,7 @@
                 </add>
             </traceFailedRequests>
 
-            <traceProviderDefinitions>
+             <traceProviderDefinitions>
                 <add name="WWW Server" guid="{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}">
                     <areas>
                         <clear />
@@ -905,7 +905,7 @@
                 <add name="CgiModule" lockItem="true" />
                 <add name="FastCgiModule" lockItem="true" />
 <!--                <add name="WebDAVModule" /> -->
-                <add name="RewriteModule" />
+                <add name="RewriteModule" /> 
                 <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" preCondition="managedHandler" />
                 <add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="managedHandler" />
                 <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" preCondition="managedHandler" />
@@ -923,7 +923,6 @@
                 <add name="ConfigurationValidationModule" lockItem="true" />
                 <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" />
                 <add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
-                <add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler,runtimeVersionv2.0" />
                 <add name="AspNetCoreModule" lockItem="true" />
                 <add name="AspNetCoreModuleV2" lockItem="true" />
             </modules>
@@ -944,12 +943,6 @@
                 <add name="cshtml-ISAPI-4.0_64bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
                 <add name="vbhtm-ISAPI-4.0_64bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
                 <add name="vbhtml-ISAPI-4.0_64bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
-                <add name="svc-Integrated" path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="svc-ISAPI-2.0" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
-                <add name="xoml-Integrated" path="*.xoml" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="xoml-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
-                <add name="rules-Integrated" path="*.rules" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
-                <add name="rules-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
                 <add name="AXD-ISAPI-4.0_32bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
                 <add name="PageHandlerFactory-ISAPI-4.0_32bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
                 <add name="SimpleHandlerFactory-ISAPI-4.0_32bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
@@ -1001,15 +994,12 @@
                 <add name="WebServiceHandlerFactory-ISAPI-2.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
                 <add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
                 <add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
-                <add name="svc-ISAPI-2.0-64" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
                 <add name="AXD-ISAPI-2.0-64" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
                 <add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
                 <add name="SimpleHandlerFactory-ISAPI-2.0-64" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
                 <add name="WebServiceHandlerFactory-ISAPI-2.0-64" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
                 <add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0-64" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
                 <add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0-64" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
-                <add name="rules-64-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
-                <add name="xoml-64-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
                 <add name="CGI-exe" path="*.exe" verb="*" modules="CgiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
                 <add name="SSINC-stm" path="*.stm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
                 <add name="SSINC-shtm" path="*.shtm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HttpManager.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HttpManager.cs"
new file mode 100644
index 0000000..0cba3ba
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HttpManager.cs"
@@ -0,0 +1,98 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_Common
+{
+    public class HttpManager
+    {
+        public static Task<string> HttpPostAsync(string url, string postData = null, string contentType = "application/json", int timeOut = 30, Dictionary<string, string> headers = null)
+        {
+            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
+            request.Method = "POST";
+            request.Timeout = 10000;
+            if (!string.IsNullOrEmpty(contentType))
+            {
+                request.ContentType = contentType;
+
+            }
+            if (headers != null)
+            {
+                foreach (var header in headers)
+                    request.Headers[header.Key] = header.Value;
+            }
+
+            try
+            {
+                byte[] bytes = Encoding.UTF8.GetBytes(postData ?? "");
+                using (Stream sendStream = request.GetRequestStream())
+                {
+                    sendStream.Write(bytes, 0, bytes.Length);
+                }
+
+                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
+                {
+                    Stream responseStream = response.GetResponseStream();
+                    StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);
+                    return streamReader.ReadToEndAsync();
+                }
+            }
+            catch (Exception ex)
+            {
+                return Task.FromResult(ex.Message);
+            }
+
+        }
+
+        public static Task<string> HttpPost(string url, string postData)
+        {
+            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
+            request.Method = "POST";
+            try
+            {
+                byte[] bytes = Encoding.UTF8.GetBytes(postData ?? "");
+                using (Stream sendStream = request.GetRequestStream())
+                {
+                    sendStream.Write(bytes, 0, bytes.Length);
+                }
+
+                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
+                {
+                    Stream responseStream = response.GetResponseStream();
+                    StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);
+                    return streamReader.ReadToEndAsync();
+                }
+            }
+            catch (Exception ex)
+            {
+                return Task.FromResult(ex.Message);
+            }
+
+        }
+        public static Task<string> HttpGetAsync(string url, Dictionary<string, string> headers = null)
+        {
+            try
+            {
+                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
+                if (headers != null)
+                {
+                    foreach (var header in headers)
+                        request.Headers[header.Key] = header.Value;
+                }
+                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
+                {
+                    Stream responseStream = response.GetResponseStream();
+                    StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);
+                    return streamReader.ReadToEndAsync();
+                }
+            }
+            catch (Exception ex)
+            {
+                return Task.FromResult(ex.Message);
+            }
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/LocationEnum/LocationStatusEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/LocationEnum/LocationStatusEnum.cs"
index c753fd8..795aaa8 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/LocationEnum/LocationStatusEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/LocationEnum/LocationStatusEnum.cs"
@@ -30,10 +30,5 @@
         [Description("鏈夎揣")]
         InStock = 2,
 
-
-        PalletLock = 98,
-
-        [Description("绌烘墭鐩�")]
-        Pallet = 99
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/LocationEnum/LocationTypeEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/LocationEnum/LocationTypeEnum.cs"
new file mode 100644
index 0000000..b4a8710
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/LocationEnum/LocationTypeEnum.cs"
@@ -0,0 +1,42 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_Common.LocationEnum
+{
+    public enum LocationTypeEnum
+    {
+        /// <summary>
+        /// 姝e父璐т綅 
+        /// </summary>
+        [Description("姝e父璐т綅")]
+        Normal = 1,
+
+        /// <summary>
+        /// 涓婃枡璐т綅
+        /// </summary>
+        [Description("涓婃枡璐т綅")]
+        Feeding= 2,
+
+        /// <summary>
+        /// 鍏ュ簱鍙h揣浣�
+        /// </summary>
+        [Description("鍏ュ簱鍙h揣浣�")]
+        In = 3,
+
+        /// <summary>
+        /// 绌鸿溅鍑哄簱鍙h揣浣�
+        /// </summary>
+        [Description("绌鸿溅鍑哄簱鍙h揣浣�")]
+        OutEmpty = 4,
+
+        /// <summary>
+        /// 绐戠倝涓婃枡鏈鸿揣浣�
+        /// </summary>
+        [Description("绐戠倝涓婃枡鏈鸿揣浣�")]
+        OutWorkUnit = 5
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/ServiceLog/ServiceLogger.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/ServiceLog/ServiceLogger.cs"
new file mode 100644
index 0000000..a96a858
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/ServiceLog/ServiceLogger.cs"
@@ -0,0 +1,78 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_Common.ServiceLog
+{
+    public class ServiceLogger
+    {
+        private static ReaderWriterLockSlim LogWriteLock = new ReaderWriterLockSlim();
+
+        private static string folderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Log\\" + DateTime.Now.ToString("yyyy-MM-dd"));
+
+        private static int size = 10485760;
+
+        private static string ext = ".log";
+
+        public static void WriteLogToFile(string fileName, string log)
+        {
+            try
+            {
+                LogWriteLock.EnterWriteLock();
+                if (!Directory.Exists(folderPath))
+                {
+                    Directory.CreateDirectory(folderPath);
+                }
+
+                string path = Path.Combine(folderPath, GetLastAccessFileName(fileName));
+                DateTime now = DateTime.Now;
+                string contents = $"銆恵now}銆憑Environment.NewLine}{log}";
+                File.AppendAllText(path, contents);
+            }
+            catch
+            {
+            }
+            finally
+            {
+                LogWriteLock.ExitWriteLock();
+            }
+        }
+
+        private static string GetLogFilePath(string folderPath, string fileName)
+        {
+            string fileName2 = fileName;
+            List<FileInfo> list = (from fi in new DirectoryInfo(folderPath).GetFiles()
+                                   where fi.Name.ToLower().Contains(fileName2.ToLower()) && fi.Extension.ToLower() == ext.ToLower() && fi.Length < size
+                                   select fi into d
+                                   orderby d.Name descending
+                                   select d).ToList();
+            if (list.Count > 0)
+            {
+                return list.FirstOrDefault().FullName;
+            }
+
+            return Path.Combine(folderPath, fileName2 + "_" + DateTime.Now.ToString("HH-mm-ss") + ".log");
+        }
+
+        private static string GetLastAccessFileName(string fileName)
+        {
+            string[] existLogFileNames = GetExistLogFileNames(fileName);
+            foreach (string text in existLogFileNames)
+            {
+                if (new FileInfo(text).Length < size)
+                {
+                    return text;
+                }
+            }
+
+            return fileName + "_" + DateTime.Now.ToString("HH-mm-ss") + ".log";
+        }
+
+        public static string[] GetExistLogFileNames(string fileName)
+        {
+            return Directory.GetFiles(folderPath, fileName + "*.log");
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
index 1919700..cdbea8b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs"
@@ -10,34 +10,35 @@
     public enum TaskInStatusEnum
     {
         /// <summary>
-        /// 鏂板缓鍏ュ簱浠诲姟
+        /// 鏂板缓鍏ュ簱浠诲姟 瀵瑰簲WMS璇锋眰 1001-AGV璇锋眰鏄惁鍏佽杩涘叆
         /// </summary>
         [Description("鏂板缓鍏ュ簱浠诲姟")]
         InNew = 200,
 
-        ///// <summary>
-        ///// AGV鍏ュ簱鎵ц涓�
-        ///// </summary>
-        //[Description("AGV鍏ュ簱鎵ц涓�")]
-        //AGV_InExecuting = 210,
 
-        ///// <summary>
-        ///// AGV鍏ュ簱瀹屾垚
-        ///// </summary>
-        //[Description("AGV鎼繍瀹屾垚")]
-        //AGV_InFinish = 215,
+        /// <summary>
+        /// AGV鍏ュ簱鎵ц涓� 瀵瑰簲WMS璇锋眰 3001-AGV鏀捐揣瀹屾垚
+        /// </summary>
+        [Description("AGV鍏ュ簱鎵ц涓�")]
+        AGV_InExecuting = 210,
+
+        /// <summary>
+        /// AGV鍏ュ簱瀹屾垚   瀵瑰簲WMS璇锋眰 101-鎻愬崌鏈烘彁鍗囧畬鎴�
+        /// </summary>
+        [Description("AGV鎼繍瀹屾垚")]
+        AGV_InFinish = 215,
 
         /// <summary>
         /// 杈撻�佺嚎鍏ュ簱鎵ц涓�
         /// </summary>
-        [Description("杈撻�佺嚎鍏ュ簱鎵ц涓�")]
-        Line_InExecuting = 220,
+        //[Description("杈撻�佺嚎鍏ュ簱鎵ц涓�")]
+        //Line_InExecuting = 220,
 
         /// <summary>
         /// 杈撻�佺嚎鍏ュ簱瀹屾垚
         /// </summary>
-        [Description("杈撻�佺嚎杈撻�佸畬鎴�")]
-        Line_InFinish = 225,
+        //[Description("杈撻�佺嚎杈撻�佸畬鎴�")]
+        //Line_InFinish = 225,
 
         /// <summary>
         /// 鍫嗗灈鏈哄叆搴撴墽琛屼腑
@@ -99,14 +100,14 @@
         /// <summary>
         /// 杈撻�佺嚎鍑哄簱鎵ц涓�
         /// </summary>
-        [Description("杈撻�佺嚎鍑哄簱鎵ц涓�")]
-        Line_OutExecuting = 120,
+        //[Description("杈撻�佺嚎鍑哄簱鎵ц涓�")]
+        //Line_OutExecuting = 120,
 
         /// <summary>
         /// 杈撻�佺嚎鍑哄簱瀹屾垚
         /// </summary>
-        [Description("杈撻�佺嚎杈撻�佸畬鎴�")]
-        Line_OutFinish = 125,
+        //[Description("杈撻�佺嚎杈撻�佸畬鎴�")]
+        //Line_OutFinish = 125,
 
         ///// <summary>
         ///// AGV鍑哄簱鎵ц涓�
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
index 33dfdfc..69c6a7b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
@@ -14,21 +14,7 @@
         /// </summary>
         [Description("鍏ュ簱")]
         Inbound = 200,
-        /// <summary>
-        /// 鐩樼偣鍏ュ簱
-        /// </summary>
-        [Description("鐩樼偣鍏ュ簱")]
-        InInventory = 201,
-        /// <summary>
-        /// 鍒嗘嫞鍏ュ簱
-        /// </summary>
-        [Description("鍒嗘嫞鍏ュ簱")]
-        InPick = 202,
-        /// <summary>
-        /// 璐ㄦ鍏ュ簱
-        /// </summary>
-        [Description("璐ㄦ鍏ュ簱")]
-        InQuality = 203
+       
     }
 
     public enum TaskOutboundTypeEnum
@@ -36,41 +22,42 @@
         /// <summary>
         /// 鍑哄簱
         /// </summary>
-        [Description("鍑哄簱")]
-        Outbound = 100,
+        //[Description("鍑哄簱")]
+        //Outbound = 100,
         /// <summary>
-        /// 鐩樼偣鍑哄簱
+        /// 寮傚父鍑哄簱
         /// </summary>
-        [Description("鐩樼偣鍑哄簱")]
+        [Description("寮傚父鍑哄簱")]
         OutInventory = 101,
         /// <summary>
-        /// 鍒嗘嫞鍑哄簱
+        /// 绌鸿溅鍑哄簱
         /// </summary>
-        [Description("鍒嗘嫞鍑哄簱")]
+        [Description("绌鸿溅鍑哄簱")]
         OutPick = 102,
-        /// <summary>
-        /// 璐ㄦ鍑哄簱
-        /// </summary>
-        [Description("璐ㄦ鍑哄簱")]
-        OutQuality = 103,
+
     }
 
     public enum TaskRelocationTypeEnum
     {
         /// <summary>
-        /// 搴撳唴绉诲簱
+        /// 绉诲簱
         /// </summary>
-        [Description("搴撳唴绉诲簱")]
+        [Description("绉诲簱")]
         Relocation = 300,
         /// <summary>
         /// 搴撳绉诲簱
         /// </summary>
-        [Description("搴撳绉诲簱")]
-        RelocationIn = 301
+        //[Description("搴撳绉诲簱")]
+        //RelocationIn = 301
     }
 
     public enum TaskOtherTypeEnum
     {
+        /// <summary>
+        /// 涓婃枡
+        /// </summary>
+        [Description("涓婃枡")]
+        Feed = 400,
 
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj"
index 132c02c..f958b97 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj"
@@ -6,4 +6,8 @@
     <Nullable>enable</Nullable>
   </PropertyGroup>
 
+  <ItemGroup>
+    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
+  </ItemGroup>
+
 </Project>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/DeliveryPlan.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/DeliveryPlan.cs"
new file mode 100644
index 0000000..4305268
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/DeliveryPlan.cs"
@@ -0,0 +1,19 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_DTO.TaskInfo
+{
+    public class DeliveryPlan
+    {
+        public bool isUpKiln { get; set; } = false; // 鏄惁涓轰笂绐戜换鍔�
+        public string startPlan { get; set; } // 璧峰搴撳瓨浣嶇疆
+        public string endPlan { get; set; } // 缁堢偣搴撳瓨浣嶇疆
+        public string CarId { get; set; }
+        public bool isQuit { get; set; } = true; // 鏄惁涓哄紓甯稿嚭搴�
+
+        public bool isAtomatic { get; set; } = true; // 鏄惁涓篈GV鍏ュ簱锛� true锛歛gv鍏ュ簱銆乫alse锛氭墜鍔ㄥ叆搴�
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/MESPeekBack.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/MESPeekBack.cs"
new file mode 100644
index 0000000..1b5f493
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/MESPeekBack.cs"
@@ -0,0 +1,32 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_DTO.TaskInfo
+{
+    /// <summary>
+    /// 涓婃枡璇锋眰鍥炶皟瀹炰綋
+    /// </summary>
+    public class MESPeekBack
+    {
+        public int cmd { get; set; }
+        public int task_id { get; set; }
+        public int src_rack { get; set; }
+        public int src_col { get; set; }
+        public int src_row { get; set; }
+        public int dest_rack { get; set; }
+        public int dest_col { get; set; }
+        public int dest_row { get; set; }
+        public int src_station { get; set; }
+        public int dest_station { get; set; }
+        public int size { get; set; } = 0;
+        public int weight { get; set; } = 0;
+        public string barcode { get; set; } = "";
+        public int startIndex { get; set; }
+        public int total { get; set; }
+        public string CarId { get; set; }
+        public int status { get; set; } = 6;
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/MESTaskDTO.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/MESTaskDTO.cs"
new file mode 100644
index 0000000..6ca9171
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/MESTaskDTO.cs"
@@ -0,0 +1,71 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_DTO.TaskInfo
+{
+    /// <summary>
+    /// WCS鐢熸垚浠诲姟鍏ュ弬瀹炰綋绫�
+    /// </summary>
+    public class MESTaskDTO
+    {
+        /// <summary>
+        /// 浠诲姟绫诲瀷  鑷姩鍏ュ簱鐢宠-1001  鎵嬪姩鍏ュ簱锛圓GV鏀捐揣瀹屾垚锛�-3001  鍏ュ簱-101 ; 绉诲簱锛堢Щ搴擄紝鍑哄簱鍏辩敤锛�-103;寮傚父鍑哄簱锛堥��搴擄級-102; 绌鸿溅鍑哄簱 -102; 涓婃枡-104
+        /// </summary>
+        public int cmd { get; set; }
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        public int task_id { get; set; }
+        /// <summary>
+        /// 璧峰琛�
+        /// </summary>
+        public int src_rack { get; set; }
+        /// <summary>
+        /// 璧峰鍒�
+        /// </summary>
+        public int src_col { get; set; }
+        /// <summary>
+        /// 璧峰灞�
+        /// </summary>
+        public int src_row { get; set; }
+        /// <summary>
+        /// 鐩爣琛�
+        /// </summary>
+        public int dest_rack { get; set; }
+        /// <summary>
+        /// 鐩爣鍒�
+        /// </summary>
+        public int dest_col { get; set; }
+        /// <summary>
+        /// 鐩爣灞�
+        /// </summary>
+        public int dest_row { get; set; }
+        /// <summary>
+        /// 婧愮珯鐐�
+        /// </summary>
+        public int src_station { get; set; }
+        /// <summary>
+        /// 鐩爣绔欑偣
+        /// </summary>
+        public int dest_station { get; set; }
+        public int size { get; set; } = 0;
+        public int weight { get; set; } = 0;
+        public string barcode { get; set; } = "";
+        /// <summary>
+        /// 褰撳墠鏂欒溅灞傛暟
+        /// </summary>
+        public int startIndex { get; set; }
+        /// <summary>
+        /// 鎬诲眰鏁�
+        /// </summary>
+        public int total { get; set; }
+        /// <summary>
+        /// 鏂欒溅鍙�
+        /// </summary>
+        public string CarId { get; set; }
+        public int status { get; set; } = 6;
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
index aad8fe0..132957d 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs"
@@ -55,6 +55,14 @@
         /// <returns>杩斿洖澶勭悊缁撴灉</returns>
         WebResponseContent ReceiveWMSTask([NotNull] List<WMSTaskDTO> taskDTOs);
 
+
+        /// <summary>
+        /// 鎺ユ敹MES浠诲姟淇℃伅
+        /// </summary>
+        /// <param name="taskDTO">MES浠诲姟瀵硅薄闆嗗悎</param>
+        /// <returns>杩斿洖澶勭悊缁撴灉</returns>
+        WebResponseContent ReceiveMESTask([NotNull] MESTaskDTO taskDTO);
+
         /// <summary>
         /// 鏍规嵁鎵樼洏鍙枫�佽捣濮嬪湴鍧�鍚慦MS璇锋眰浠诲姟
         /// </summary>
@@ -96,12 +104,40 @@
         Dt_Task? QuertStackerCraneTask(string deviceNo, TaskTypeGroup? taskTypeGroup = null);
 
         /// <summary>
-        /// 鏍规嵁璁惧缂栧彿銆佸綋鍓嶅湴鍧�鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鏂板鐨勪换鍔�
+        /// 鏍规嵁璁惧缂栧彿鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鏂板鐨勪换鍔�
         /// </summary>
         /// <param name="deviceNo">璁惧缂栧彿</param>
         /// <param name="currentAddress">褰撳墠鍦板潃</param>
         /// <returns>杩斿洖浠诲姟瀹炰綋瀵硅薄锛屽彲鑳戒负null</returns>
-        Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "");
+        Dt_Task QueryStackerCraneTask(string deviceNo);
+
+        /// <summary>
+        /// 鏌ヨ灏忓爢鍨涙満浠诲姟
+        /// </summary>
+        /// <returns></returns>
+        Dt_Task QueryStackerCraneTask();
+
+
+        /// <summary>
+        /// 鏌ヨ灏忓爢鍨涙満鍑哄簱瀹屾垚浠诲姟
+        /// </summary>
+        /// <returns></returns>
+        Dt_Task QueryStackerCraneFinishTask();
+
+        /// <summary>
+        /// 鏌ヨ鍏ュ簱浠诲姟 瀵瑰簲WMS璇锋眰 1001-AGV璇锋眰鏄惁鍏佽杩涘叆
+        /// </summary>
+        /// <param name="deviceNo"></param>
+        /// <returns></returns>
+        Dt_Task QueryStackerCraneTaskByAGVRequest(string deviceNo);
+
+
+        /// <summary>
+        /// 瀵瑰簲WMS璇锋眰 3001-AGV鏀捐揣瀹屾垚
+        /// </summary>
+        /// <param name="deviceNo"></param>
+        /// <returns></returns>
+        Dt_Task QueryStackerCraneTaskByAGVPutFinish(string deviceNo);
 
         /// <summary>
         /// 鏍规嵁璁惧缂栧彿銆佸綋鍓嶅湴鍧�鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鍏ュ簱绫诲瀷鐨勬柊澧炵殑浠诲姟
@@ -137,9 +173,18 @@
         /// <summary>
         /// 鏇存柊浠诲姟鐘舵�佷俊鎭紝骞跺悓姝ヨ嚦WMS
         /// </summary>
-        /// <param name="taskNum">浠诲姟鍙�</param>
+        /// <param name="taskId">浠诲姟鍙�</param>
         /// <param name="status">浠诲姟鐘舵��</param>
-        void UpdateTaskStatus(int taskNum, int status);
+        void UpdateTaskStatus(int taskId, int status);
+
+
+        /// <summary>
+        /// 鏇存柊浠诲姟鐘舵�佷俊鎭拰鏃х殑浠诲姟鍙凤紙1001锛�3001鏃朵竴鏍蜂换鍔″彿锛�
+        /// </summary>
+        /// <param name="taskId">浠诲姟ID</param>
+        /// <param name="taskId">WMS涓婁竴鐜妭(3001)鐨勪换鍔″彿</param>
+        /// <param name="status">浠诲姟鐘舵��</param>
+        void UpdateTaskStatus(int taskId, int oldtaskId, int status);
 
         /// <summary>
         /// 灏嗕换鍔$姸鎬佷慨鏀逛负涓嬩竴涓姸鎬�
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/Comm/ResponseModel.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/Comm/ResponseModel.cs"
new file mode 100644
index 0000000..2623a63
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/Comm/ResponseModel.cs"
@@ -0,0 +1,14 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_Model.Models.Comm
+{
+    public class ResponseModel
+    {
+        public int Status { get; set; }
+        public string Message { get; set; }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs"
index d036b37..80046c8 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs"
@@ -104,7 +104,7 @@
         public string CurrentAddress { get; set; }
 
         /// <summary>
-        /// 涓嬩竴鍦板潃
+        /// 涓嬩竴鍦板潃锛堝叆搴撴椂WMS鍙�3001鏃剁敤浜庡瓨鏂颁换鍔″彿锛�
         /// </summary>
         [ImporterHeader(Name = "涓嬩竴鍦板潃")]
         [ExporterHeader(DisplayName = "涓嬩竴鍦板潃")]
@@ -128,7 +128,7 @@
         public int Grade { get; set; }
 
         /// <summary>
-        /// WMS浠诲姟涓婚敭
+        /// WMS浠诲姟涓婚敭 1琛ㄧず鎵嬪姩鍏ュ簱
         /// </summary>
         [ImporterHeader(Name = "WMS浠诲姟涓婚敭")]
         [ExporterHeader(DisplayName = "WMS浠诲姟涓婚敭")]
@@ -144,7 +144,7 @@
         public DateTime? Dispatchertime { get; set; }
 
         /// <summary>
-        /// 澶囨敞
+        /// 澶囨敞  鐢ㄤ簬瀛樹笂鏂欐枡杞︾殑鎬诲眰鏁板拰褰撳墠灞傛暟 鏍煎紡锛氭�诲眰鏁�-褰撳墠灞傛暟
         /// </summary>
         [ImporterHeader(Name = "澶囨敞")]
         [ExporterHeader(DisplayName = "澶囨敞")]
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Basic/LocationInfoController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Basic/LocationInfoController.cs"
index 2384093..d74a557 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Basic/LocationInfoController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Basic/LocationInfoController.cs"
@@ -22,7 +22,7 @@
             _repository = repository;
         }
 
-        [HttpPost, Route("InitializationLocation")]
+        [HttpPost, Route("InitializationLocation"),AllowAnonymous]
         public WebResponseContent InitializationLocation([FromBody] InitializationLocationDTO initializationLocationDTO)
         {
             return Service.InitializationLocation(initializationLocationDTO);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
index fc5ab5c..15295f4 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs"
@@ -1,6 +1,7 @@
 锘縰sing Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
+using System.Diagnostics.CodeAnalysis;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.BaseController;
 using WIDESEAWCS_DTO.TaskInfo;
@@ -48,5 +49,16 @@
         {
             return Service.RollbackTaskStatusToLast(taskNum);
         }
+
+        /// <summary>
+        /// 鎺ユ敹WMS浠诲姟淇℃伅
+        /// </summary>
+        /// <param name="taskDTO">MES浠诲姟瀵硅薄</param>
+        /// <returns>杩斿洖澶勭悊缁撴灉</returns>
+        [HttpPost, Route("/WCS/V1/CMD"), AllowAnonymous]
+        public WebResponseContent ReceiveMESTask([FromBody] MESTaskDTO taskDTO)
+        {
+            return Service.ReceiveMESTask(taskDTO);
+        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json"
index b3cf9d2..d42ff50 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json"
@@ -23,5 +23,8 @@
   },
   "ApiName": "WIDESEA",
   "ExpMinutes": 120,
-  "QuartzJobAutoStart": true
+  "QuartzJobAutoStart": true,
+  "MESApi": "http://10.0.250.12:8888/agv/v1/CMD",
+  "ConveyorLineApi": "http://10.0.250.12:8888/wcs/goBack"//绌鸿溅鍑哄簱浠诲姟淇℃伅鑾峰彇鍦板潃
+
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_StockRepository/StockInfoRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_StockRepository/StockInfoRepository.cs"
index dc0d8ec..064841b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_StockRepository/StockInfoRepository.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_StockRepository/StockInfoRepository.cs"
@@ -101,7 +101,8 @@
         {
             //ISugarQueryable<string> locationCodes = Db.Queryable<Dt_LocationInfo>().Where(x => x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Pallet.ObjToInt() && (x.EnalbeStatus == LocationEnalbeStatusEnum.OnlyOut.ObjToInt() || LocationEnalbeStatusEnum.Normal.ObjToInt() == x.EnalbeStatus)).Select(x => x.LocationCode);
 
-            return Db.Queryable<Dt_StockInfo>().Where(x => x.StockStatus == StockStatusEmun.宸插叆搴�.ObjToInt() && SqlFunc.Subqueryable<Dt_LocationInfo>().Where(v => v.LocationCode == x.LocationCode && v.RoadwayNo == roadwayNo && v.LocationStatus == LocationStatusEnum.Pallet.ObjToInt() && (v.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || EnableStatusEnum.Normal.ObjToInt() == v.EnableStatus)).Any()).OrderBy(x => x.ModifyDate).First();
+            //return Db.Queryable<Dt_StockInfo>().Where(x => x.StockStatus == StockStatusEmun.宸插叆搴�.ObjToInt() && SqlFunc.Subqueryable<Dt_LocationInfo>().Where(v => v.LocationCode == x.LocationCode && v.RoadwayNo == roadwayNo && v.LocationStatus == LocationStatusEnum.Pallet.ObjToInt() && (v.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || EnableStatusEnum.Normal.ObjToInt() == v.EnableStatus)).Any()).OrderBy(x => x.ModifyDate).First();
+            return null;
         }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Common/ApiInvoke.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Common/ApiInvoke.cs"
new file mode 100644
index 0000000..366bd53
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Common/ApiInvoke.cs"
@@ -0,0 +1,53 @@
+锘縰sing Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Common;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_DTO.TaskInfo;
+using static System.Net.WebRequestMethods;
+
+namespace WIDESEAWCS_TaskInfoService
+{
+    public class ApiInvoke
+    {
+        public static MESResponse SendTaskCMD(MESSendCMD sendCmd)
+        {
+
+            string postData = sendCmd.Serialize();
+            string url = AppSettings.Configuration.GetSection("MESApi").Value;
+            string response = "";
+            try
+            {
+                response = HttpManager.HttpPostAsync(url, postData).Result;
+                MESResponse res  = JsonConvert.DeserializeObject<MESResponse>(response);
+                return res;
+            }
+            catch (Exception ex)
+            {
+                throw new Exception(ex.Message);
+            }
+        }
+
+        public static MESResponse DeliveryPlanCMD(DeliveryPlan sendCmd)
+        {
+
+            string postData = sendCmd.Serialize();
+            string url = AppSettings.Configuration.GetSection("ConveyorLineApi").Value;
+            string response = "";
+            try
+            {
+                response = HttpManager.HttpPostAsync(url, postData).Result;
+                MESResponse res = JsonConvert.DeserializeObject<MESResponse>(response);
+                return res;
+            }
+            catch (Exception ex)
+            {
+                throw new Exception(ex.Message);
+            }
+        }
+
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Common/MESResponse.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Common/MESResponse.cs"
new file mode 100644
index 0000000..a2c31d7
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Common/MESResponse.cs"
@@ -0,0 +1,15 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_TaskInfoService
+{
+    public class MESResponse
+    {
+        public int code { get; set; }
+        public string message { get; set; }
+        public object data {  get; set; }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Common/MESSendCMD.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Common/MESSendCMD.cs"
new file mode 100644
index 0000000..e2a5dfc
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Common/MESSendCMD.cs"
@@ -0,0 +1,28 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_TaskInfoService
+{
+    /// <summary>
+    /// 浠诲姟瀹屾垚鍥炰紶MES瀹炰綋绫�
+    /// </summary>
+    public class MESSendCMD
+    {
+        /// <summary>
+        /// 浠诲姟绫诲瀷 
+        /// </summary>
+        public int cmd { get; set; }
+        /// <summary>
+        /// 鍒�
+        /// </summary>
+        public int task_id { get; set; }
+        public int status { get; set; }
+
+
+
+
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs"
index 9d23f8a..ded5cef 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs"
@@ -74,9 +74,9 @@
                 };
                 BaseDal.AddData(taskExecuteDetail);
             }
-            catch (Exception ex)
+            catch (Exception)
             {
-
+                throw;
             }
         }
 
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
index 231fa5d..423a9af 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs"
@@ -18,6 +18,7 @@
 using AutoMapper;
 using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
 using SqlSugar;
+using SqlSugar.Extensions;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
@@ -26,11 +27,16 @@
 using System.Reflection;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEAWCS_Common.LocationEnum;
+using WIDESEAWCS_Common.ServiceLog;
 using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.BaseRepository;
 using WIDESEAWCS_Core.BaseServices;
 using WIDESEAWCS_Core.Enums;
+using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_IBasicRepository;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Model.Models;
@@ -44,7 +50,9 @@
         private readonly IRouterService _routerService;
         private readonly ITaskExecuteDetailService _taskExecuteDetailService;
         private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository;
+        private readonly ILocationInfoRepository _locationInfoRepository;
         private readonly IMapper _mapper;
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
 
         private Dictionary<string, OrderByType> _taskOrderBy = new()
             {
@@ -58,12 +66,18 @@
 
         public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList();
 
-        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper) : base(BaseDal)
+        public List<int> TaskRelocationboundTypes => typeof(TaskRelocationTypeEnum).GetEnumIndexList();
+
+        public List<int> TaskOtherboundTypes => typeof(TaskOtherTypeEnum).GetEnumIndexList();
+
+        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ILocationInfoRepository locationInfoRepository, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
         {
             _routerService = routerService;
             _taskExecuteDetailService = taskExecuteDetailService;
             _taskExecuteDetailRepository = taskExecuteDetailRepository;
             _mapper = mapper;
+            _locationInfoRepository = locationInfoRepository;
+            _unitOfWorkManage = unitOfWorkManage;
         }
 
         /// <summary>
@@ -122,6 +136,313 @@
             return content;
         }
 
+
+        /// <summary>
+        /// 鎺ユ敹MES浠诲姟淇℃伅
+        /// </summary>
+        /// <param name="taskDTO">MES浠诲姟瀵硅薄</param>
+        /// <returns>杩斿洖澶勭悊缁撴灉</returns>
+        public WebResponseContent ReceiveMESTask([NotNull] MESTaskDTO taskDTO)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+               // ServiceLogger.WriteLogToFile("");
+                Dt_Task task = new Dt_Task();
+                Dt_Task taskinfo = BaseDal.QueryFirst(x => x.TaskNum == taskDTO.task_id);
+                if(taskDTO.cmd==101)//濡傛灉鏄�101鎸夋棫鐨勪换鍔″彿鍘绘煡
+                {
+                    taskinfo = BaseDal.QueryFirst(x => x.TaskNum == taskDTO.weight);
+                }
+
+                if (taskDTO.cmd!=3001&& taskDTO.cmd != 101 && taskinfo != null)
+                {
+                    return content = WebResponseContent.Instance.Error($"浠诲姟鍙烽噸澶嶏紝浠诲姟鍙凤細{taskDTO.task_id}");
+                }
+                Dt_LocationInfo locationsrc = _locationInfoRepository.QueryFirst(x => x.Remark == taskDTO.src_station.ToString());
+                Dt_LocationInfo locationdsc = _locationInfoRepository.QueryFirst(x => x.Remark == taskDTO.dest_station.ToString());
+                switch (taskDTO.cmd)
+                {
+                    case 1001://AGV璇锋眰鍏ュ簱
+                        task.TaskType = (int)TaskInboundTypeEnum.Inbound;
+                        task.TaskState = (int)TaskInStatusEnum.InNew;
+                        task.Roadway = "SC01";
+                        task.Grade = 2;
+                        task.WMSId = 0;//琛ㄧず鑷姩鍏ュ簱
+                        if (locationsrc != null)
+                        {
+                            task.SourceAddress = locationsrc.LocationCode;
+                        }
+                        else
+                        {
+                            return content = WebResponseContent.Instance.Error($"WCS鏈煡璇㈠埌婧愮珯鐐瑰搴旂殑搴撲綅锛屾簮绔欑偣锛歿taskDTO.dest_station.ToString()}");
+                        }
+                        break;
+                    case 3001://AGV鏀捐揣瀹屾垚 WMS鍙�3001鐨勫悓鏃朵細鍐欐彁鍗囦俊鍙�
+                        if (BaseDal.QueryFirst(x => x.TaskNum == taskDTO.task_id) == null)//鎵嬪姩鍏ュ簱鐩存帴鍙�3001锛岄渶瑕佺敓鎴愪换鍔★紝鍥犱负娌℃湁1001鐜妭
+                        {
+
+                            task.TaskType = (int)TaskInboundTypeEnum.Inbound;
+                            task.TaskState = (int)TaskInStatusEnum.AGV_InExecuting;
+                            task.Roadway = "SC01";
+                            task.WMSId = 1;//琛ㄧず鎵嬪姩鍏ュ簱
+                            task.Grade = 2;
+                            if (locationsrc != null)
+                            {
+                                task.SourceAddress = locationsrc.LocationCode;
+                            }
+                            else
+                            {
+                                return content = WebResponseContent.Instance.Error($"WCS鏈煡璇㈠埌婧愮珯鐐瑰搴旂殑搴撲綅锛屾簮绔欑偣锛歿taskDTO.dest_station.ToString()}");
+                            }
+                        }
+                        else
+                        {
+                            if (taskinfo != null)
+                            {
+                                UpdateTaskStatus(taskinfo.TaskId, (int)TaskInStatusEnum.AGV_InExecuting);
+                                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"AGV鍏ュ簱鎵ц涓�");
+                                return content = WebResponseContent.Instance.OK($"AGV鍏ュ簱鎵ц涓紙鑷姩3001锛夋洿鏂扮姸鎬佹垚鍔燂紝浠诲姟鍙凤細{taskinfo.TaskId}");
+                            }
+                            else
+                            {
+                                return content = WebResponseContent.Instance.Error($"AGV鍏ュ簱鎵ц涓紙鑷姩3001锛夋洿鏂扮姸鎬佹椂锛屾煡璇笉鍒颁换鍔″彿");
+
+                            }
+                        }
+                        break;
+                    case 101://鎻愬崌鏈烘彁鍗囧畬鎴� 
+                        if (taskinfo != null)
+                        {
+                            //鏇存柊浠诲姟琛ㄤ腑NextAddress瀛楁涓烘柊鐨勪换鍔″彿   taskDTO.weight-鏃х殑浠诲姟鍙�   taskDTO.task_id-鏂扮殑浠诲姟鍙�
+                            UpdateTaskStatus(taskinfo.TaskId, taskDTO.task_id, (int)TaskInStatusEnum.AGV_InFinish);
+                            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"AGV鎼繍瀹屾垚");
+                            return content = WebResponseContent.Instance.OK($"AGV鎼繍瀹屾垚锛�101锛夋洿鏂扮姸鎬佹垚鍔燂紝浠诲姟鍙凤細{taskinfo.TaskId}");
+                        }
+                        else
+                        {
+                            return content = WebResponseContent.Instance.Error($"AGV鎼繍瀹屾垚锛�101锛夋洿鏂扮姸鎬佹椂锛屾煡璇笉鍒颁换鍔″彿");
+                        }
+                        break;
+
+                    case 103://浜у搧绉诲簱锛堢Щ搴擄紝鍑哄簱锛�
+                        task.TaskType= (int)TaskRelocationTypeEnum.Relocation;
+                        task.TaskState = (int)TaskOutStatusEnum.OutNew;
+                        task.Roadway = "SC01";
+                        task.Grade = 1;
+                        break;
+                    case 102:
+                        if(taskDTO.dest_station ==1003)//绌鸿溅鍑哄簱  鏆傚瓨浣�-->杈撻�佺嚎
+                        {
+                            task.TaskType = (int)TaskOutboundTypeEnum.OutPick;
+                            task.TaskState = (int)TaskOutStatusEnum.OutNew;
+                            task.Roadway = "SC01";
+                            task.Grade = 1;
+                        }
+                        else if(taskDTO.dest_station ==1001|| taskDTO.dest_station == 1002)//寮傚父鍑哄簱
+                        {
+                            task.TaskType = (int)TaskOutboundTypeEnum.OutInventory;
+                            task.TaskState = (int)TaskOutStatusEnum.OutNew;
+                            task.Roadway = "SC01";
+                            task.Grade = 1;
+                        }
+                        if (locationdsc != null)
+                        {
+                            task.TargetAddress = locationdsc.LocationCode;
+                        }
+                        else
+                        {
+                           return  content = WebResponseContent.Instance.Error($"WCS鏈煡璇㈠埌鐩爣绔欑偣瀵瑰簲鐨勫簱浣嶏紝鐩爣绔欑偣锛歿taskDTO.dest_station.ToString()}");
+                        }
+                        break;
+                    case 104://缁勭珛鏈轰笂鏂�  鏆傚瓨浣�-->缁勭珛鏈�
+                        {
+                            task.TaskType = (int)TaskOtherTypeEnum.Feed;
+                            task.TaskState = (int)TaskOutStatusEnum.OutNew;
+                            task.Grade = 1;
+                            task.Remark = taskDTO.total.ToString()+"-"+taskDTO.startIndex.ToString();//鍙栨�诲眰鏁板拰褰撳墠灞傛暟
+                            //涓嶄細浼犵粍绔嬫満涓婃枡绔欑偣锛屽彧浼氫紶鏆傚瓨搴撲綅锛岄渶鏍规嵁鏆傚瓨搴撲綅鍘绘煡璐т綅琛ㄤ腑鐨勭粍绔嬫満绔欑偣搴撲綅鍙�
+
+                            Dt_LocationInfo locationtemp = _locationInfoRepository.QueryFirst(x => x.Row==taskDTO.src_rack&&x.Column==taskDTO.src_col&&x.Layer==taskDTO.src_row);
+                            if (locationtemp != null)
+                            {
+                                task.TargetAddress = locationtemp.Remark;
+                            }
+                            else
+                            {
+                              return  content = WebResponseContent.Instance.Error($"WCS鏈煡璇㈠埌鐩爣绔欑偣瀵瑰簲鐨勫簱浣嶏紝鐩爣绔欑偣锛歿task.TargetAddress.ToString()}");
+                            }
+                            //鏍规嵁鐩爣鍦板潃锛堢粍绔嬫満锛夋煡璇㈤粯璁ょ殑鎵ц浠诲姟鐨勫皬鍫嗗灈鏈虹紪鍙�
+                            Dt_LocationInfo locationtemp2 = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress.ToString());
+                            if (locationtemp2 != null)
+                            {
+                                task.Roadway = locationtemp2.Remark.Trim();//纭畾榛樿鎵ц浠诲姟鐨勫皬鍫嗗灈鏈虹紪鍙�
+                            }
+                            else
+                            {
+                                return content = WebResponseContent.Instance.Error($"WCS鏈煡璇㈠埌缁勭珛鏈哄搴旂殑榛樿灏忓爢鍨涙満閰嶇疆");
+                            }
+                            
+                        }
+
+                        break;
+                    default:
+                        break;
+                }
+
+                task.TaskNum = taskDTO.task_id;
+                task.PalletCode = taskDTO.CarId;
+                task.Roadway = "SC01";
+                if (string.IsNullOrEmpty(task.SourceAddress))//濡傛灉涓嶆槸绔欑偣锛岀洿鎺ュ彇琛屽垪灞�
+                {
+                    task.SourceAddress = $"SC01-{taskDTO.src_rack.ToString().PadLeft(3, '0')}-{taskDTO.src_col.ToString().PadLeft(3, '0')}-{taskDTO.src_row.ToString().PadLeft(3, '0')}";
+                }
+                if(string.IsNullOrEmpty(task.TargetAddress))//濡傛灉涓嶆槸绔欑偣锛岀洿鎺ュ彇琛屽垪灞�
+                {
+                    task.TargetAddress = $"SC01-{taskDTO.dest_rack.ToString().PadLeft(3, '0')}-{taskDTO.dest_col.ToString().PadLeft(3, '0')}-{taskDTO.dest_row.ToString().PadLeft(3, '0')}";
+                }
+                task.Creater = "MES";
+
+                //鍒ゆ柇璐т綅鐘舵��
+                Dt_LocationInfo srcLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+                Dt_LocationInfo tarLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+                if (srcLocation != null && tarLocation != null)
+                {
+                    if (srcLocation.EnableStatus == (int)EnableStatusEnum.Disable)
+                    {
+                        return content = WebResponseContent.Instance.Error($"婧愬湴鍧�宸茬鐢細{srcLocation.LocationCode}");
+                    }
+                    if (tarLocation.EnableStatus == (int)EnableStatusEnum.Disable)
+                    {
+                        return content = WebResponseContent.Instance.Error($"鐩爣鍦板潃宸茬鐢細{tarLocation.LocationCode}");
+                    }
+                    if (taskDTO.cmd != 101)//鍏ュ簱鏃朵笉闇�瑕佸垽鏂槸鍚﹂攣瀹氾紝閿佸畾鐘舵�佹槸鍦ㄧ敓鎴愪换鍔℃椂閿佸畾
+                    {
+                       
+                        if (taskinfo != null && taskDTO.cmd==3001&&taskinfo.WMSId==1)//濡傛灉鏄墜鍔ㄥ叆搴擄紝鍙�3001锛屼細鐢熸垚浠诲姟锛岄渶瑕佸垽鏂簱浣嶆槸鍚﹂攣瀹�;鑷姩妯″紡鍙�1001鐨勬椂鍊欏氨鐢熸垚浜嗕换鍔★紝鍐嶅彂3001灏变笉闇�瑕佸垽鏂槸鍚﹂攣瀹氫簡
+                        {
+                            if (srcLocation.LocationStatus == (int)LocationStatusEnum.Lock)
+                            {
+                                return content = WebResponseContent.Instance.Error($"婧愬湴鍧�宸查攣瀹氾細{srcLocation.LocationCode}");
+                            }
+                            if (tarLocation.LocationStatus == (int)LocationStatusEnum.Lock)
+                            {
+                                return content = WebResponseContent.Instance.Error($"鐩爣鍦板潃宸查攣瀹氾細{tarLocation.LocationCode}");
+                            }
+                        }
+                    }
+                    if (task.TaskType == (int)TaskInboundTypeEnum.Inbound)//鍏ュ簱  璺緞锛氭彁鍗囨満搴撲綅-->搴撲綅
+                    {
+                        //WCS鏌ヨ搴撲綅鐘舵�佹槸鍚︿负鈥滅┖闂测�濆苟涓旀湭绂佺敤锛岄攣瀹氬簱浣嶄慨鏀瑰簱浣嶇姸鎬佷负鈥滈攣瀹氣�濓紝鐢熸垚WCS浜у搧鍏ュ簱浠诲姟锛屽姞鍏CS浠诲姟闃熷垪涓��          
+                        if (tarLocation.LocationStatus != (int)LocationStatusEnum.Free)
+                        {
+                            return content = WebResponseContent.Instance.Error($"鍏ュ簱-鐩爣鍦板潃涓嶆槸绌洪棽鐘舵�侊細{tarLocation.LocationCode}");
+                        }
+                        //srcLocation.LocationStatus = (int)LocationStatusEnum.Lock;
+                        tarLocation.LocationStatus = (int)LocationStatusEnum.Lock;
+
+                        //if (srcLocation.LocationStatus != (int)LocationStatusEnum.Free)
+                        //{
+                        //    return content = WebResponseContent.Instance.Error($"鍏ュ簱-婧愬湴鍧�涓嶆槸绌洪棽鐘舵�侊細{srcLocation.LocationCode}");
+                        //}
+
+
+
+                    }
+                    else if (task.TaskType == (int)TaskRelocationTypeEnum.Relocation)  //浜у搧绉诲簱锛堢Щ搴擄紝鍑哄簱鍏辩敤锛�  璺緞锛氬簱浣�-->搴撲綅/鏆傚瓨搴撲綅
+                    {
+                        //WCS鏌ヨ搴撲綅鐘舵�佹槸鍚︿负鈥滄湁璐р�濓紝搴撲綅/鏆傚瓨搴撲綅鏄惁鈥滅┖闂测��
+                        if (srcLocation.LocationStatus != (int)LocationStatusEnum.InStock)
+                        {
+                            return content = WebResponseContent.Instance.Error($"绉诲簱-婧愬湴鍧�涓嶆槸鏈夎揣鐘舵�侊細{srcLocation.LocationCode}");
+                        }
+                        if(tarLocation.LocationStatus != (int)LocationStatusEnum.Free)
+                        {
+                            return content = WebResponseContent.Instance.Error($"绉诲簱-鐩爣鍦板潃涓嶆槸绌洪棽鐘舵�侊細{srcLocation.LocationCode}");
+                        }
+                        srcLocation.LocationStatus = (int)LocationStatusEnum.Lock;
+                        tarLocation.LocationStatus = (int)LocationStatusEnum.Lock;
+
+                    }
+                    else if (task.TaskType == (int)TaskOutboundTypeEnum.OutInventory)  //寮傚父鍑哄簱锛堥��搴擄級 璺緞锛氬簱浣�-->鎻愬崌鏈哄簱浣�  
+                    {
+                        //WCS鏌ヨ搴撲綅鐘舵�佹槸鍚︿负鈥滄湁璐р��
+                        if (srcLocation.LocationStatus != (int)LocationStatusEnum.InStock)
+                        {
+                            return content = WebResponseContent.Instance.Error($"寮傚父鍑哄簱-婧愬湴鍧�涓嶆槸鏈夎揣鐘舵�侊細{srcLocation.LocationCode}");
+                        }
+                        srcLocation.LocationStatus = (int)LocationStatusEnum.Lock;
+                        //tarLocation.LocationStatus = (int)LocationStatusEnum.Lock;
+                        //if (tarLocation.LocationStatus != (int)LocationStatusEnum.Free)
+                        //{
+                        //    return content = WebResponseContent.Instance.Error($"寮傚父鍑哄簱-鐩爣鍦板潃涓嶆槸绌洪棽鐘舵�侊細{srcLocation.LocationCode}");
+                        //}
+
+                    }
+                    else if (task.TaskType == (int)TaskOutboundTypeEnum.OutPick)  //绌鸿溅鍑哄簱  璺緞锛氭殏瀛樺簱浣�-->杈撻�佺嚎 
+                    {
+                        //WCS鏌ヨ鏆傚瓨搴撲綅鏄惁鈥滄湁璐р��
+                        if (srcLocation.LocationStatus != (int)LocationStatusEnum.InStock)
+                        {
+                            return content = WebResponseContent.Instance.Error($"绌鸿溅鍑哄簱-婧愬湴鍧�涓嶆槸鏈夎揣鐘舵�侊細{srcLocation.LocationCode}");
+                        }
+                        //srcLocation.LocationStatus = (int)LocationStatusEnum.Lock;
+                        //tarLocation.LocationStatus = (int)LocationStatusEnum.Lock;
+                        //if (tarLocation.LocationStatus != (int)LocationStatusEnum.Free)
+                        //{
+                        //    return content = WebResponseContent.Instance.Error($"绌鸿溅鍑哄簱-鐩爣鍦板潃涓嶆槸绌洪棽鐘舵�侊細{srcLocation.LocationCode}");
+                        //}
+                    }
+                    else if (task.TaskType == (int)TaskOtherTypeEnum.Feed)  //涓婃枡    璺緞锛氭殏瀛樹綅-->缁勭珛鏈�   
+                    {
+                        //WCS鏌ヨ鏆傚瓨搴撲綅鏄惁鈥滄湁璐р��
+                        if (srcLocation.LocationStatus != (int)LocationStatusEnum.InStock)
+                        {
+                            return content = WebResponseContent.Instance.Error($"涓婃枡浠诲姟-婧愬湴鍧�涓嶆槸鏈夎揣鐘舵�侊細{srcLocation.LocationCode}");
+                        }
+                        //srcLocation.LocationStatus = (int)LocationStatusEnum.Lock;
+                        //tarLocation.LocationStatus = (int)LocationStatusEnum.Lock;
+
+                    }
+
+                }
+                else
+                {
+                    return content = WebResponseContent.Instance.Error($"搴撲綅鍦板潃涓嶅瓨鍦紝浠诲姟鍙�:{task.TaskNum}");
+                }
+
+                
+
+                try
+                {
+                    //寮�鍚簨鐗�
+                    _unitOfWorkManage.BeginTran();
+                    _locationInfoRepository.UpdateData(tarLocation);
+                    _locationInfoRepository.UpdateData(srcLocation);
+                    BaseDal.AddData(task);
+                    Dt_Task tasktemp=  BaseDal.QueryFirst(x => x.TaskNum ==task.TaskNum);
+                    _taskExecuteDetailService.AddTaskExecuteDetail(tasktemp.TaskId, "鎺ユ敹MES浠诲姟");
+                    //鎻愪氦浜嬪姟
+                    _unitOfWorkManage.CommitTran();
+ 
+                }
+                catch (Exception)
+                {
+                    _unitOfWorkManage.RollbackTran();
+                    throw;
+                }
+
+                content = WebResponseContent.Instance.OK("鎴愬姛",task);
+                
+            }
+            catch (Exception ex)
+            {
+                content = WebResponseContent.Instance.Error($"浠诲姟鎺ユ敹閿欒,閿欒淇℃伅:{ex.Message}");
+            }
+            return content;
+
+        }
+
         /// <summary>
         /// 鏍规嵁鎵樼洏鍙枫�佽捣濮嬪湴鍧�鍚慦MS璇锋眰浠诲姟
         /// </summary>
@@ -155,6 +476,8 @@
             return content;
         }
 
+
+
         /// <summary>
         /// 鏍规嵁璁惧缂栧彿銆佸綋鍓嶅湴鍧�鏌ヨ杈撻�佺嚎鏈墽琛岀殑浠诲姟
         /// </summary>
@@ -174,7 +497,8 @@
         /// <returns></returns>
         public Dt_Task QueryExecutingConveyorLineTask(int taskNum, string nextAddress)
         {
-            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy);
+            //return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy);
+            return null;
         }
 
         /// <summary>
@@ -185,7 +509,8 @@
         /// <returns></returns>
         public Dt_Task QueryCompletedConveyorLineTask(int taskNum, string currentAddress)
         {
-            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy);
+            //return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy);
+            return null;
         }
 
         /// <summary>
@@ -196,28 +521,64 @@
         /// <returns></returns>
         public Dt_Task? QuertStackerCraneTask(string deviceNo, TaskTypeGroup? taskTypeGroup = null)
         {
-            if(taskTypeGroup == null)
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
-            if(taskTypeGroup.Value == TaskTypeGroup.InboundGroup)
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy);
-            if(taskTypeGroup.Value == TaskTypeGroup.OutbondGroup)
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
+            //if(taskTypeGroup == null)
+            //    return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
+            //if(taskTypeGroup.Value == TaskTypeGroup.InboundGroup)
+            //    return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy);
+            //if(taskTypeGroup.Value == TaskTypeGroup.OutbondGroup)
+            //    return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
             return null;
         }
 
         /// <summary>
-        /// 鏍规嵁璁惧缂栧彿銆佸綋鍓嶅湴鍧�鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鏂板鐨勪换鍔�
+        /// 鏍规嵁璁惧缂栧彿 鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鏂板鐨勪换鍔�
         /// </summary>
         /// <param name="deviceNo">璁惧缂栧彿</param>
         /// <param name="currentAddress">褰撳墠鍦板潃</param>
         /// <returns>杩斿洖浠诲姟瀹炰綋瀵硅薄锛屽彲鑳戒负null</returns>
-        public Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "")
+        public Dt_Task QueryStackerCraneTask(string deviceNo)
         {
-            if (string.IsNullOrEmpty(currentAddress))
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
-            else
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
+            return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.AGV_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew || TaskRelocationboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew || TaskOtherboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
         }
+
+        /// <summary>
+        /// 鏌ヨ灏忓爢鍨涙満浠诲姟
+        /// </summary>
+        /// <returns></returns>
+        public Dt_Task QueryStackerCraneTask()
+        {
+            return BaseDal.QueryFirst(x => (x.Roadway =="SC02"|| x.Roadway == "SC03")&& x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
+        }
+
+        /// <summary>
+        /// 鏌ヨ灏忓爢鍨涙満鍑哄簱瀹屾垚浠诲姟
+        /// </summary>
+        /// <returns></returns>
+        public Dt_Task QueryStackerCraneFinishTask()
+        {
+            return BaseDal.QueryFirst(x => (x.Roadway == "SC02" || x.Roadway == "SC03") && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish, TaskOrderBy);
+        }
+
+        /// <summary>
+        /// 鏌ヨ鍏ュ簱浠诲姟 瀵瑰簲WMS璇锋眰 1001-AGV璇锋眰鏄惁鍏佽杩涘叆
+        /// </summary>
+        /// <param name="deviceNo"></param>
+        /// <returns></returns>
+        public Dt_Task QueryStackerCraneTaskByAGVRequest(string deviceNo)
+        {
+            return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew), TaskOrderBy);
+        }
+        /// <summary>
+        /// 瀵瑰簲WMS璇锋眰 3001-AGV鏀捐揣瀹屾垚
+        /// </summary>
+        /// <param name="deviceNo"></param>
+        /// <returns></returns>
+        public Dt_Task QueryStackerCraneTaskByAGVPutFinish(string deviceNo)
+        {
+            return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.AGV_InExecuting), TaskOrderBy);
+        }
+
+
 
         /// <summary>
         /// 鏍规嵁璁惧缂栧彿銆佸綋鍓嶅湴鍧�鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鍏ュ簱绫诲瀷鐨勬柊澧炵殑浠诲姟
@@ -227,10 +588,11 @@
         /// <returns>杩斿洖浠诲姟瀹炰綋瀵硅薄锛屽彲鑳戒负null</returns>
         public Dt_Task QueryStackerCraneInTask(string deviceNo, string currentAddress = "")
         {
-            if (string.IsNullOrEmpty(currentAddress))
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy);
-            else
-                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.CurrentAddress == currentAddress, TaskOrderBy);
+            //if (string.IsNullOrEmpty(currentAddress))
+            //    return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy);
+            //else
+            //    return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.CurrentAddress == currentAddress, TaskOrderBy);
+            return null;
         }
 
         /// <summary>
@@ -296,13 +658,32 @@
         /// <summary>
         /// 鏇存柊浠诲姟鐘舵�佷俊鎭紝骞跺悓姝ヨ嚦WMS
         /// </summary>
-        /// <param name="taskNum">浠诲姟鍙�</param>
+        /// <param name="taskId">浠诲姟ID</param>
         /// <param name="status">浠诲姟鐘舵��</param>
-        public void UpdateTaskStatus(int taskNum, int status)
+        public void UpdateTaskStatus(int taskId, int status)
         {
-            Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
+            Dt_Task task = BaseDal.QueryFirst(x => x.TaskId == taskId);
             if (task == null) return;
             task.TaskState = status;
+            task.Modifier = "System";
+            task.ModifyDate = DateTime.Now;
+            BaseDal.UpdateData(task);
+        }
+
+
+        /// <summary>
+        /// 鏇存柊浠诲姟鐘舵�佷俊鎭拰鏂扮殑浠诲姟鍙凤紙1001锛�3001鏃朵竴鏍蜂换鍔″彿锛�
+        /// </summary>
+        /// <param name="taskId">浠诲姟ID</param>
+        /// <param name="newtaskId">WMS鏂�(101)鐨勪换鍔″彿</param>
+        /// <param name="status">浠诲姟鐘舵��</param>
+        public void UpdateTaskStatus(int taskId,int newtaskId, int status)
+        {
+            Dt_Task task = BaseDal.QueryFirst(x => x.TaskId == taskId);
+            if (task == null) return;
+            task.TaskState = status;
+            task.Modifier = "System";
+            task.NextAddress = newtaskId.ToString();
             task.ModifyDate = DateTime.Now;
             BaseDal.UpdateData(task);
         }
@@ -359,7 +740,7 @@
                     int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                     task.TaskState = nextStatus;
 
-                    if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish)
+                    //if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish)
                     {
                         Random random = new Random();
                         task.CurrentAddress = task.NextAddress;
@@ -440,55 +821,173 @@
                 Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                 if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�");
 
+                //寮傚父鍑哄簱銆佺┖杞﹀嚭搴� 缁堢偣涓嶄竴鏍�  1,寮傚父鍑哄簱锛堥��搴擄級 璺緞锛氬簱浣�-->鎻愬崌鏈哄簱浣�   2,绌鸿溅鍑哄簱  璺緞锛氭殏瀛樺簱浣�-->杈撻�佺嚎
                 if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
-                {
-                    List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress);
-                    if (!routers.Any()) return WebResponseContent.Instance.Error($"鏈壘鍒拌澶囪矾鐢变俊鎭�");
+                {   
+                    try
+                    {
+                        Dt_LocationInfo srcLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+                        srcLocation.LocationStatus = (int)LocationStatusEnum.Free;
+                        UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.SC_OutFinish);
+                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�");
 
-                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
-                    task.TaskState = nextStatus;
-                    task.CurrentAddress = task.NextAddress;
-                    task.NextAddress = routers.FirstOrDefault().ChildPosi;
-                    task.ModifyDate = DateTime.Now;
-                    task.Modifier = "System";
-                    BaseDal.UpdateData(task);
+                        //寮�鍚簨鐗�
+                        _unitOfWorkManage.BeginTran();
+                        UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.OutFinish);
+                        _locationInfoRepository.UpdateData(srcLocation);
+                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍑哄簱浠诲姟瀹屾垚");
+                        //鎻愪氦浜嬪姟
+                        _unitOfWorkManage.CommitTran();
+                        //鍑哄簱瀹屾垚锛屽洖浼燱MS
+                        //鍥炰紶鍒癢MS
+                        MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = task.TaskNum, status = 6 };
+                        MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
+                        if (res != null && res.code != 0)
+                        {
+                            content = WebResponseContent.Instance.Error($"澶у爢鍨涙満瀹屾垚鍑哄簱浠诲姟鍚庡洖浼燤ES澶辫触锛�,浠诲姟鍙�:銆恵taskNum}銆�,澶辫触淇℃伅:銆恵res.message}銆�");
+                        }
 
-                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�");
-                    //todo 鍚屾鍒癢MS
+                    }
+                    catch (Exception ex)
+                    {
+                        _unitOfWorkManage.RollbackTran();
+                        content = WebResponseContent.Instance.Error($"澶у爢鍨涙満鎵ц鍑哄簱浠诲姟澶辫触锛�,浠诲姟鍙�:銆恵taskNum}銆�,澶辫触淇℃伅:銆恵ex.Message}銆�");
+                    }
 
-                    //鏆備笉鑰冭檻澶氫釜鍑哄簱鍙�
+
+
                 }
+                //鍏ュ簱 璺緞锛氭彁鍗囨満搴撲綅-->搴撲綅
                 else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
                 {
-                    //todo 
-                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
-                    task.TaskState = nextStatus;
-                    task.ModifyDate = DateTime.Now;
-                    task.Modifier = "System";
-                    BaseDal.UpdateData(task);
-                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄叆搴撳畬鎴�");
-
-                    WMSTaskDTO taskDTO = new WMSTaskDTO()
+                    try
                     {
-                        TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
-                        Grade = 1,
-                        PalletCode = task.PalletCode + "S",
-                        RoadWay = "SC01",
-                        SourceAddress = task.TargetAddress,
-                        TargetAddress = "CLOutAreaA",
-                        TaskState = (int)TaskOutStatusEnum.OutNew,
-                        Id = 0,
-                        TaskType = (int)TaskOutboundTypeEnum.Outbound
-                    };
+                        Dt_LocationInfo tarLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+                        tarLocation.LocationStatus = (int)LocationStatusEnum.InStock;//搴撲綅鐘舵�佹洿鏂颁负鏈夎揣
 
-                    content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
+                        UpdateTaskStatus(task.TaskId, (int)TaskInStatusEnum.SC_InFinish);
+
+                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄叆搴撳畬鎴�");
+                        //寮�鍚簨鐗�
+                        _unitOfWorkManage.BeginTran();
+
+                        UpdateTaskStatus(task.TaskId, (int)TaskInStatusEnum.InFinish);
+                 
+                        _locationInfoRepository.UpdateData(tarLocation);
+                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍏ュ簱浠诲姟瀹屾垚");
+                        //鎻愪氦浜嬪姟
+                        _unitOfWorkManage.CommitTran();
+
+                        //鍏ュ簱瀹屾垚锛屽洖浼燤ES  鍏ュ簱瀹屾垚鍥炰紶task.NextAddress 涔嬪墠101璇锋眰鏃跺瓨鐨勬柊浠诲姟鍙�
+                        MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = int.Parse(task.NextAddress), status = 6 };
+                        MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
+                        if (res != null && res.code != 0)
+                        {
+                            content = WebResponseContent.Instance.Error($"澶у爢鍨涙満瀹屾垚鍏ュ簱浠诲姟鍚庡洖浼燤ES澶辫触锛�,浠诲姟鍙�:銆恵taskNum}銆�,澶辫触淇℃伅:銆恵res.message}銆�");
+                        }
+
+                    }
+                    catch (Exception ex)
+                    {
+                        _unitOfWorkManage.RollbackTran();
+                        content = WebResponseContent.Instance.Error($"澶у爢鍨涙満鎵ц鍏ュ簱浠诲姟澶辫触锛�,浠诲姟鍙�:銆恵taskNum}銆�,澶辫触淇℃伅:銆恵ex.Message}銆�");
+                    }
                 }
-                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
+                //绉诲簱浠诲姟锛堢Щ搴擄紝鍑哄簱鍏辩敤锛� 璺緞锛氬簱浣�-->搴撲綅/鏆傚瓨搴撲綅
+                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
                 {
-                    //todo 璋冪敤WMS绉诲簱瀹屾垚
+                    try
+                    {
+                        Dt_LocationInfo srcLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+                        srcLocation.LocationStatus = (int)LocationStatusEnum.Free;
+
+                        Dt_LocationInfo tarLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+                        srcLocation.LocationStatus = (int)LocationStatusEnum.InStock;
+                        UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.SC_OutFinish);
+                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�");
+
+                        //寮�鍚簨鐗�
+                        _unitOfWorkManage.BeginTran();
+                        UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.OutFinish);
+                        _locationInfoRepository.UpdateData(srcLocation);
+                        _locationInfoRepository.UpdateData(tarLocation);
+                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍑哄簱浠诲姟瀹屾垚");
+                        //鎻愪氦浜嬪姟
+                        _unitOfWorkManage.CommitTran();
+                        //绉诲簱瀹屾垚锛屽洖浼燤ES
+                        //鍥炰紶鍒癢MS
+                        MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = task.TaskNum, status = 6 };
+                        MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
+                        if (res != null && res.code != 0)
+                        {
+                            content = WebResponseContent.Instance.Error($"澶у爢鍨涙満瀹屾垚鍑哄簱浠诲姟鍚庡洖浼燤ES澶辫触锛�,浠诲姟鍙�:銆恵taskNum}銆�,澶辫触淇℃伅:銆恵res.message}銆�");
+                        }
+
+                    }
+                    catch (Exception ex)
+                    {
+                        _unitOfWorkManage.RollbackTran();
+                        content = WebResponseContent.Instance.Error($"澶у爢鍨涙満鎵ц鍑哄簱浠诲姟澶辫触锛�,浠诲姟鍙�:銆恵taskNum}銆�,澶辫触淇℃伅:銆恵ex.Message}銆�");
+                    }
                 }
+                //涓婃枡
                 else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup)
                 {
+                    try
+                    {
+                        Dt_LocationInfo srcLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+                        //srcLocation.LocationStatus = (int)LocationStatusEnum.Free;
+                        
+
+                        //寮�鍚簨鐗�
+                        _unitOfWorkManage.BeginTran();
+                        UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.SC_OutFinish);
+                        _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�");
+                        //UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.OutFinish);
+                        //_locationInfoRepository.UpdateData(srcLocation);
+                        //_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍑哄簱浠诲姟瀹屾垚");
+                        //鎻愪氦浜嬪姟
+                        _unitOfWorkManage.CommitTran();
+                        //涓婃枡瀹屾垚锛屽洖浼燱MS
+                        MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = task.TaskNum, status = 6 };
+                        MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
+                        if (res != null && res.code != 0)
+                        {
+                            content = WebResponseContent.Instance.Error($"灏忓爢鍨涙満瀹屾垚鍑哄簱浠诲姟鍚庡洖浼燤ES澶辫触锛�,浠诲姟鍙�:銆恵taskNum}銆�,澶辫触淇℃伅:銆恵res.message}銆�");
+                        }
+                        else
+                        {
+                            //鍒ゆ柇鏄惁瀹屾垚鐨勬渶鍚庝竴灞傦紝鑷姩鐢熸垚绌鸿溅鍑哄簱浠诲姟
+                            string[] Levels = task.Remark.Split("-");
+                            if (Levels.Length == 2)
+                            {
+                                if (!string.IsNullOrEmpty(Levels[0])&& !string.IsNullOrEmpty(Levels[1]))
+                                {
+                                    //濡傛灉褰撳墠鎻愬彇灞傛暟绛変簬鎬诲眰鏂欙紝鍒欒〃绀烘枡杞︽墍鏈夌殑灞傛暟鍙栧畬
+                                    if(Convert.ToInt16(Levels[0])== Convert.ToInt16(Levels[1]))
+                                    {
+                                        string[] SourceCodes = task.SourceAddress.Split("-");
+                                        string startPlan = "";
+                                        if (SourceCodes.Length == 4)
+                                        {
+                                            startPlan= "101"+ SourceCodes[2].Substring(1,2);
+                                        }
+                                        DeliveryPlan send = new DeliveryPlan { startPlan = startPlan, isQuit = false, CarId = task.PalletCode };
+                                        ApiInvoke.DeliveryPlanCMD(send);//鍥炶皟MES鎺ュ彛鐢熸垚绌鸿溅鍑哄簱浠诲姟
+                                 
+                                    }
+                                   
+                                }
+                              
+                            }
+                        }
+
+                    }
+                    catch (Exception ex)
+                    {
+                        _unitOfWorkManage.RollbackTran();
+                        content = WebResponseContent.Instance.Error($"灏忓爢鍨涙満鎵ц鍑哄簱浠诲姟澶辫触锛�,浠诲姟鍙�:銆恵taskNum}銆�,澶辫触淇℃伅:銆恵ex.Message}銆�");
+                    }
 
                 }
                 else
@@ -594,5 +1093,8 @@
             }
             return content;
         }
+
+
+
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WIDESEAWCS_TaskInfoService.csproj" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WIDESEAWCS_TaskInfoService.csproj"
index f1fe745..56602af 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WIDESEAWCS_TaskInfoService.csproj"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WIDESEAWCS_TaskInfoService.csproj"
@@ -8,6 +8,7 @@
 
 	<ItemGroup>
 		<ProjectReference Include="..\WIDESEAWCS_BasicInfoService\WIDESEAWCS_BasicInfoService.csproj" />
+		<ProjectReference Include="..\WIDESEAWCS_IBasicRepository\WIDESEAWCS_IBasicRepository.csproj" />
 		<ProjectReference Include="..\WIDESEAWCS_ITaskInfoService\WIDESEAWCS_ITaskInfoService.csproj" />
 	</ItemGroup>
 
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
index 1f79946..3e63582 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
@@ -1,4 +1,5 @@
-锘縰sing Microsoft.AspNetCore.Components.Routing;
+锘縰sing HslCommunication;
+using Microsoft.AspNetCore.Components.Routing;
 using Quartz;
 using System;
 using System.Collections.Generic;
@@ -7,40 +8,48 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Communicator;
 using WIDESEAWCS_Core.Enums;
+using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_IBasicRepository;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_QuartzJob;
 using WIDESEAWCS_QuartzJob.DeviceBase;
+using WIDESEAWCS_QuartzJob.DTO;
 using WIDESEAWCS_QuartzJob.Models;
 using WIDESEAWCS_QuartzJob.Service;
+using WIDESEAWCS_QuartzJob.StackerCrane;
 using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
+using WIDESEAWCS_TaskInfoService;
 using WIDESEAWCS_Tasks.StackerCraneJob;
 
 namespace WIDESEAWCS_Tasks
 {
     [DisallowConcurrentExecution]
-    public class CommonStackerCraneJob : IJob
+    public class CommonStackerCraneJob : JobBase, IJob
     {
         private readonly ITaskService _taskService;
         private readonly ITaskExecuteDetailService _taskExecuteDetailService;
         private readonly ITaskRepository _taskRepository;
         private readonly IRouterService _routerService;
+        private readonly ILocationInfoRepository _locationInfoRepository;
 
-        public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService)
+        public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService,  ILocationInfoRepository locationInfoRepository)
         {
             _taskService = taskService;
             _taskExecuteDetailService = taskExecuteDetailService;
             _taskRepository = taskRepository;
             _routerService = routerService;
+            _locationInfoRepository = locationInfoRepository;
         }
 
         public Task Execute(IJobExecutionContext context)
         {
+            CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
             try
-            {
-                CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
+            {  
                 if (commonStackerCrane != null)
                 {
                     if (!commonStackerCrane.IsEventSubscribed)
@@ -51,7 +60,7 @@
                     if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal)
                     {
                         commonStackerCrane.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆�
-
+                        
                         if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
                         {
                             Dt_Task? task = GetTask(commonStackerCrane);
@@ -63,8 +72,22 @@
                                     bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand);
                                     if (sendFlag)
                                     {
-                                        commonStackerCrane.LastTaskType = task.TaskType;
-                                        _taskService.UpdateTaskStatusToNext(task.TaskNum);
+                                      
+                                        if (task.TaskType == (int)TaskInboundTypeEnum.Inbound)
+                                        {
+                                            _taskService.UpdateTaskStatus(task.TaskId, (int)TaskInStatusEnum.SC_InExecuting);
+                                            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄叆搴撴墽琛屼腑");
+                                        }
+                                        else if(task.TaskType == (int)TaskOutboundTypeEnum.OutInventory|| task.TaskType == (int)TaskOutboundTypeEnum.OutPick|| task.TaskType == (int)TaskRelocationTypeEnum.Relocation)
+                                        {
+                                            _taskService.UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.SC_OutExecuting);
+                                            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撴墽琛屼腑");
+                                        }
+                                    }
+                                    else
+                                    {
+                                        _taskService.UpdateTaskExceptionMessage(task.TaskNum, "鍫嗗灈鏈烘墽琛屼换鍔″懡浠ゅけ璐ワ紒");
+                                        WriteDebug(nameof(CommonStackerCraneJob), "鍫嗗灈鏈烘墽琛屼换鍔″懡浠ゅけ璐ワ紒");
                                     }
                                 }
                             }
@@ -74,8 +97,154 @@
             }
             catch (Exception ex)
             {
-                Console.WriteLine(nameof(CommonStackerCraneJob) + ":" + ex.ToString());
+                WriteError(nameof(CommonStackerCraneJob), "澶у爢鍨涙満鎵ц浠诲姟寮傚父锛�",ex);
             }
+
+
+            //鏌ヨ鎻愬崌鏈�/缁勭珛鏈轰俊鍙�
+            //Task.Run(delegate
+            //{
+                try
+                {
+                   
+                    if (commonStackerCrane != null)
+                    {
+                        Dt_Task? task1001 = _taskService.QueryStackerCraneTaskByAGVRequest("SC01");
+                        if (task1001 != null)
+                        {
+                            //璇诲彇鎻愬崌鏈轰俊鍙凤紝纭畾鏄惁鍙互杩涘叆
+                            int IsAllow = 0;
+                            if (task1001.SourceAddress == "SC01-002-000-001")//WMS 1001绔欑偣
+                            {
+                                IsAllow = commonStackerCrane.Communicator.Read<short>("DB2.0.0");
+                            }
+                            else if (task1001.SourceAddress == "SC01-002-000-002")//WMS 1002绔欑偣
+                            {
+                                IsAllow = commonStackerCrane.Communicator.Read<short>("DB2.8.0");
+                            }
+                            if (IsAllow == 1)//濡傛灉涓�1锛屽垯鍏佽AGV杩涘叆锛屽洖浼燱MS
+                            {
+                                MESSendCMD sendcmd = new MESSendCMD { cmd = 2001, task_id = task1001.TaskNum, status = 6 };
+                                MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
+                                if (res != null && res.code != 0)
+                                {
+                                    WriteDebug(nameof(CommonStackerCraneJob), $"鎻愬崌鏈烘彁鍗囧畬鎴愶紝鍥炰紶WMS澶辫触锛佷换鍔″彿{task1001.TaskNum}");
+                                }
+                            }
+                        }
+                        Dt_Task? task3001 = _taskService.QueryStackerCraneTaskByAGVPutFinish("SC01");
+                        if (task3001 != null)
+                        {
+                            int IsFinish = 0;
+                            int IsWriteOne = 0;
+                            int IsWriteTwo = 0;
+                            if (task3001.SourceAddress == "SC01-002-000-001")//WMS 1001绔欑偣
+                            {
+                                //鍐欏叆鎻愬崌淇℃伅
+                                IsWriteOne = commonStackerCrane.Communicator.Read<short>("DB1.0.0");
+                                if(IsWriteOne == 0) 
+                                {
+                                  
+                                    commonStackerCrane.Communicator.Write<short>("DB1.0.0", 1);
+                                }
+                                //璇诲彇鎻愬崌鏈轰俊鍙凤紝纭畾鏄惁鎻愬崌瀹屾垚
+                               
+                                commonStackerCrane.Communicator.Read<short>("DB2.2.0");
+                            }
+                            else if (task3001.SourceAddress == "SC01-002-000-002")//WMS 1002绔欑偣
+                            {
+                                //鍐欏叆鎻愬崌淇℃伅
+                                IsWriteTwo = commonStackerCrane.Communicator.Read<short>("DB1.6.0");
+                                if (IsWriteTwo == 0)
+                                {
+                                    commonStackerCrane.Communicator.Write<short>("DB1.6.0", 1);
+                                }    
+                                //璇诲彇鎻愬崌鏈轰俊鍙凤紝纭畾鏄惁鎻愬崌瀹屾垚
+                                IsFinish = commonStackerCrane.Communicator.Read<short>("DB2.10.0");
+                            }
+                            if (IsFinish == 1)//濡傛灉涓�1锛屽垯琛ㄧず鎻愬崌瀹屾垚锛屽洖浼燱MS
+                            {
+                                MESSendCMD sendcmd = new MESSendCMD { cmd = 2002, task_id = task3001.TaskNum, status = 6 };
+                                MESResponse res = ApiInvoke.SendTaskCMD(sendcmd);
+                                if (res != null && res.code != 0)
+                                {
+                                    WriteDebug(nameof(CommonStackerCraneJob), $"鎻愬崌鏈烘彁鍗囧畬鎴愶紝鍥炰紶WMS澶辫触锛佷换鍔″彿{task3001.TaskNum}");
+                                }
+
+                            }
+                        }
+
+                        //灏忓爢鍨涙満鍑哄簱瀹屾垚浠诲姟
+                        Dt_Task? taskSmall = _taskService.QueryStackerCraneFinishTask();
+                        if(taskSmall != null)
+                        {
+                            //鏍规嵁浠诲姟婧愬湴鍧�纭畾鍐欏叆PLC浣嶇疆 Depth
+                            Dt_LocationInfo location = _locationInfoRepository.QueryFirst(x=>x.LocationCode==taskSmall.SourceAddress);
+                            if(location != null)
+                            {
+                                string[] Levels = taskSmall.Remark.Split("-");
+                                if (Levels.Length == 2)
+                                {
+                                    if (!string.IsNullOrEmpty(Levels[0]) && !string.IsNullOrEmpty(Levels[1]))
+                                    {
+                                        int level = Convert.ToInt16(Levels[0]) - Convert.ToInt16(Levels[1]);
+                                        //鍓╀綑灞傛暟鍐欏叆
+                                        bool issuccess = commonStackerCrane.Communicator.Write<short>("DB28." + location.Depth + ".0", Convert.ToInt16(level));
+                                        //濡傛灉褰撳墠鎻愬彇灞傛暟绛変簬鎬诲眰鏁帮紝鍒欒〃绀烘枡杞︽墍鏈夌殑灞傛暟鍙栧畬
+                                        if (level == 0)
+                                        {
+                                            //婧愬湴鍧�锛堟殏瀛樹綅锛夊搴旂殑鐩爣鍦板潃锛堢粍绔嬫満锛塴ocation.Remark 
+                                            if (!string.IsNullOrEmpty(location.Remark))
+                                            {
+                                                //鏍规嵁鐩爣鍦板潃鏌ヨ缁勭珛鏈虹珯鐐逛俊鎭紝鑾峰彇鍐欏叆鏁磋溅瀹屾垚鐨凞B鍧� Depth
+                                                Dt_LocationInfo location2 = _locationInfoRepository.QueryFirst(x => x.LocationCode == location.Remark);
+                                                //鏁磋溅瀹屾垚鍐欏叆
+                                                bool issuccess2 = commonStackerCrane.Communicator.Write<short>("DB28." + location.Depth+".0", 1);
+                                                if (issuccess2&&issuccess)
+                                                {
+                                                    _taskService.UpdateTaskStatus(taskSmall.TaskId, (int)TaskOutStatusEnum.OutFinish);
+                                                    _taskExecuteDetailService.AddTaskExecuteDetail(taskSmall.TaskId, $"鍑哄簱浠诲姟瀹屾垚");
+                                                }
+                                                else
+                                                {
+                                                    WriteDebug(nameof(CommonStackerCraneJob), $"鏁磋溅瀹屾垚淇″彿鍐欏叆澶辫触锛佷换鍔″彿{taskSmall.TaskNum}");
+                                                }
+                                            }
+
+                                        }
+                                        else
+                                        {
+
+                                            if (issuccess)
+                                            {
+                                                _taskService.UpdateTaskStatus(taskSmall.TaskId, (int)TaskOutStatusEnum.OutFinish);
+                                                _taskExecuteDetailService.AddTaskExecuteDetail(taskSmall.TaskId, $"鍑哄簱浠诲姟瀹屾垚");
+                                            }
+                                            else
+                                            {
+                                                WriteDebug(nameof(CommonStackerCraneJob), $"鍓╀綑灞傛暟淇″彿鍐欏叆澶辫触锛佷换鍔″彿{taskSmall.TaskNum}");
+                                            }
+                                        }
+
+                                    }
+                                }
+                            }
+                            
+                        }
+
+
+                    }
+                }
+                catch (Exception ex)
+                {
+                    WriteError(nameof(CommonStackerCraneJob), "鏌ヨ鎴栧啓鍏LC鐘舵�佸け璐ワ紒", ex);
+                }
+             
+
+            //});
+
+
+
             return Task.CompletedTask;
         }
 
@@ -106,47 +275,7 @@
         private Dt_Task? GetTask(CommonStackerCrane commonStackerCrane)
         {
             Dt_Task task;
-            if (commonStackerCrane.LastTaskType == null)
-            {
-                task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
-            }
-            else
-            {
-                if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
-                {
-                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
-                    if (task == null)
-                    {
-                        task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
-                    }
-                }
-                else
-                {
-                    task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
-                }
-            }
-
-            if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
-            {
-                if (OutTaskStationIsOccupied(task) != null)
-                {
-                    return task;
-                }
-                else
-                {
-                    List<string> otherOutStaionCodes = _routerService.QueryNextRoutes(commonStackerCrane.DeviceCode, task.NextAddress).Select(x => x.ChildPosi).ToList();
-                    List<Dt_Task> tasks = _taskService.QueryStackerCraneOutTasks(commonStackerCrane.DeviceCode, otherOutStaionCodes);
-                    foreach (var item in tasks)
-                    {
-                        if (OutTaskStationIsOccupied(task) != null)
-                        {
-                            return task;
-                        }
-                    }
-                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
-                }
-            }
-
+            task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
             return task;
         }
 
@@ -195,94 +324,35 @@
             stackerCraneTaskCommand.TaskNum = task.TaskNum;
             stackerCraneTaskCommand.WorkType = 1;
             stackerCraneTaskCommand.TrayType = 0;
-            if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//鍒ゆ柇鏄惁鏄叆搴撲换鍔�
+            string[] SourceCodes = task.SourceAddress.Split("-");
+            if (SourceCodes.Length == 4)
             {
-                List<Dt_Router> routers = _routerService.QueryNextRoutes(task.CurrentAddress, task.Roadway);
-                if (routers.Count > 0)
-                {
-                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(routers.FirstOrDefault().SrmRow);
-                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(routers.FirstOrDefault().SrmColumn);
-                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(routers.FirstOrDefault().SrmLayer);
-
-                    string[] targetCodes = task.NextAddress.Split("-");
-                    if (targetCodes.Length == 3)
-                    {
-                        stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
-                        stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
-                        stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
-                    }
-                    else
-                    {
-                        //鏁版嵁閰嶇疆閿欒
-                        _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍏ュ簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.NextAddress}銆�");
-                        return null;
-                    }
-                }
-                else
-                {
-                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鍙栬揣绔欏彴淇℃伅");
-                    return null;
-                }
+                stackerCraneTaskCommand.StartRow = Convert.ToInt16(SourceCodes[1]);
+                stackerCraneTaskCommand.StartColumn = Convert.ToInt16(SourceCodes[2]);
+                stackerCraneTaskCommand.StartLayer = Convert.ToInt16(SourceCodes[3]);
             }
-            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
+            else
             {
-                List<Dt_Router> routers = _routerService.QueryNextRoutes(task.Roadway, task.TargetAddress);
-                if (routers.Count > 0)
-                {
-                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(routers.FirstOrDefault().SrmRow);
-                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(routers.FirstOrDefault().SrmColumn);
-                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(routers.FirstOrDefault().SrmLayer);
-
-                    string[] sourceCodes = task.CurrentAddress.Split("-");
-                    if (sourceCodes.Length == 3)
-                    {
-                        stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
-                        stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
-                        stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
-                    }
-                    else
-                    {
-                        //鏁版嵁閰嶇疆閿欒
-                        _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鍑哄簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
-                        return null;
-                    }
-                }
-                else
-                {
-                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒扮珯鍙般�恵task.NextAddress}銆戜俊鎭紝鏃犳硶鑾峰彇瀵瑰簲鐨勫爢鍨涙満鏀捐揣绔欏彴淇℃伅");
-                    return null;
-                }
+                //鏁版嵁閰嶇疆閿欒
+                _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"浠诲姟婧愬湴鍧�閰嶇疆閿欒锛�");
+                return null;
             }
-            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
+            string[] targetCodes = task.TargetAddress.Split("-");
+            if (targetCodes.Length == 4)
             {
-                string[] targetCodes = task.NextAddress.Split("-");
-                if (targetCodes.Length == 3)
-                {
-                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
-                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
-                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
-                }
-                else
-                {
-                    //鏁版嵁閰嶇疆閿欒
-                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟缁堢偣閿欒锛岃捣鐐癸細銆恵task.NextAddress}銆�");
-                    return null;
-                }
-                string[] sourceCodes = task.CurrentAddress.Split("-");
-                if (sourceCodes.Length == 3)
-                {
-                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
-                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
-                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
-                }
-                else
-                {
-                    //鏁版嵁閰嶇疆閿欒
-                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"绉诲簱浠诲姟璧风偣閿欒锛岃捣鐐癸細銆恵task.CurrentAddress}銆�");
-                    return null;
-                }
+                stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[1]);
+                stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[2]);
+                stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[3]);
+            }
+            else
+            {
+                //鏁版嵁閰嶇疆閿欒
+                _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"浠诲姟鐩爣鍦板潃閰嶇疆閿欒");
+                return null;
             }
             return stackerCraneTaskCommand;
         }
+
+
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/DoubleStackerCraneJob.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/DoubleStackerCraneJob.cs"
new file mode 100644
index 0000000..318452b
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/DoubleStackerCraneJob.cs"
@@ -0,0 +1,303 @@
+锘縰sing HslCommunication;
+using Microsoft.AspNetCore.Components.Routing;
+using Quartz;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Communicator;
+using WIDESEAWCS_Core.Enums;
+using WIDESEAWCS_IBasicRepository;
+using WIDESEAWCS_ITaskInfoRepository;
+using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model.Models;
+using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_QuartzJob.DeviceBase;
+using WIDESEAWCS_QuartzJob.DTO;
+using WIDESEAWCS_QuartzJob.Models;
+using WIDESEAWCS_QuartzJob.Repository;
+using WIDESEAWCS_QuartzJob.Service;
+using WIDESEAWCS_QuartzJob.StackerCrane;
+using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
+using WIDESEAWCS_TaskInfoService;
+using WIDESEAWCS_Tasks.StackerCraneJob;
+
+namespace WIDESEAWCS_Tasks
+{
+    [DisallowConcurrentExecution]
+    public class DoubleStackerCraneJob : JobBase, IJob
+    {
+        private readonly ITaskService _taskService;
+        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
+        private readonly ITaskRepository _taskRepository;
+        private readonly IRouterService _routerService;
+        private readonly IDeviceInfoService _deviceInfoService;
+        private readonly IDeviceInfoRepository _deviceInfoRepository;
+        private readonly ILocationInfoRepository _locationInfoRepository;
+
+        public DoubleStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IDeviceInfoService deviceInfoService, IDeviceInfoRepository deviceInfoRepository, ILocationInfoRepository locationInfoRepository)
+        {
+            _taskService = taskService;
+            _taskExecuteDetailService = taskExecuteDetailService;
+            _taskRepository = taskRepository;
+            _routerService = routerService;
+            _deviceInfoService = deviceInfoService;
+            _deviceInfoRepository = deviceInfoRepository;
+            _locationInfoRepository = locationInfoRepository;
+        }
+
+        public Task Execute(IJobExecutionContext context)
+        {
+            try
+            {
+                CommonStackerCrane? stackerCraneOne = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "SC02") as CommonStackerCrane;
+                CommonStackerCrane? stackerCraneTwo = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "SC03") as CommonStackerCrane;
+
+                Dt_DeviceInfo deviceSC02= _deviceInfoRepository.QueryFirst(x => x.DeviceCode == "SC02");
+                Dt_DeviceInfo deviceSC03 = _deviceInfoRepository.QueryFirst(x => x.DeviceCode == "SC03");
+                if(deviceSC02.DeviceStatus=="0")
+                {
+                    stackerCraneOne = null;
+                }
+                if(deviceSC03.DeviceStatus=="0")
+                {
+                    stackerCraneTwo = null;
+                }
+                Dt_Task? task = GetTask();
+                if (task != null)
+                {
+                    CommonStackerCrane? StackerCrane= GetStrackerCrane(task, stackerCraneOne, stackerCraneTwo);
+                    if(StackerCrane != null)
+                    {
+                        StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
+                        if (stackerCraneTaskCommand != null)
+                        {
+                            bool sendFlag = StackerCrane.SendCommand(stackerCraneTaskCommand); ;
+                            if (sendFlag)
+                            {
+                                _taskService.UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.SC_OutExecuting);
+                                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撴墽琛屼腑");
+
+                            }
+                            else
+                            {
+                                _taskService.UpdateTaskExceptionMessage(task.TaskNum, "鍫嗗灈鏈烘墽琛屼换鍔″懡浠ゅけ璐ワ紒");
+                                WriteDebug(nameof(CommonStackerCraneJob), "鍫嗗灈鏈烘墽琛屼换鍔″懡浠ゅけ璐ワ紒");
+                            }
+                        }
+
+                    }
+                    else
+                    {
+                        WriteDebug(nameof(CommonStackerCraneJob), "鏈煡璇㈠埌褰撳墠鍙互鎵ц涓婃枡浠诲姟鐨勫皬鍫嗗灈鏈猴紒");
+                    }
+                  
+                }
+
+            }
+            catch (Exception ex)
+            {
+                WriteError(nameof(CommonStackerCraneJob), "灏忓爢鍨涙満鎵ц浠诲姟寮傚父锛�", ex);
+            }
+            return Task.CompletedTask;
+        }
+
+        /// <summary>
+        /// 浠诲姟瀹屾垚浜嬩欢璁㈤槄鐨勬柟娉�
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, WIDESEAWCS_QuartzJob.StackerCrane.StackerCraneTaskCompletedEventArgs e)
+        {
+            CommonStackerCrane? commonStackerCrane = sender as CommonStackerCrane;
+            if (commonStackerCrane != null)
+            {
+                if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
+                {
+                    Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
+                    _taskService.StackCraneTaskCompleted(e.TaskNum);
+                    commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
+                }
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇浠诲姟
+        /// </summary>
+        /// <param name="commonStackerCrane">鍫嗗灈鏈哄璞�</param>
+        /// <returns></returns>
+        private Dt_Task? GetTask()
+        {
+            Dt_Task task;
+            task = _taskService.QueryStackerCraneTask();
+            return task;
+        }
+
+        /// <summary>
+        /// 鏌ヨ涓婃枡鐨勫爢鍨涙満,鍏堟煡璇㈤粯璁ゅ爢鍨涙満锛屽鏋滀笉姝e父锛屽啀鏌ヨ鍙﹀涓�鍙板爢鍨涙満锛屽鏋滈兘涓嶆甯歌繑鍥瀗ull
+        /// </summary>
+        /// <returns></returns>
+        private CommonStackerCrane? GetStrackerCrane(Dt_Task task, CommonStackerCrane stackerCraneOne, CommonStackerCrane stackerCraneTwo)
+        {
+            if(task.Roadway=="SC02")
+            {
+                if (stackerCraneOne != null)
+                {
+                    if (!stackerCraneOne.IsEventSubscribed)
+                    {
+                        stackerCraneOne.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//璁㈤槄浠诲姟瀹屾垚浜嬩欢
+                    }
+                    if (stackerCraneOne.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && stackerCraneOne.StackerCraneStatusValue == StackerCraneStatus.Normal)
+                    {
+                        stackerCraneOne.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆�
+                        if (stackerCraneOne.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
+                        {
+                            return stackerCraneOne;
+                        }
+
+                    }
+                    else//涓嶈兘姝e父宸ヤ綔鐘舵��
+                    {
+                        if (stackerCraneTwo != null)
+                        {
+                            if (!stackerCraneTwo.IsEventSubscribed)
+                            {
+                                stackerCraneTwo.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//璁㈤槄浠诲姟瀹屾垚浜嬩欢
+                            }
+                            if (stackerCraneTwo.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && stackerCraneTwo.StackerCraneStatusValue == StackerCraneStatus.Normal)
+                            {
+                                stackerCraneTwo.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆�
+                                if (stackerCraneTwo.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
+                                {
+                                    return stackerCraneTwo;
+                                }
+                            }
+
+                        }
+
+
+                    }
+                }
+            }
+            else if (task.Roadway=="SC03")
+            {
+                if (stackerCraneTwo != null)
+                {
+                    if (!stackerCraneTwo.IsEventSubscribed)
+                    {
+                        stackerCraneTwo.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//璁㈤槄浠诲姟瀹屾垚浜嬩欢
+                    }
+                    if (stackerCraneTwo.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && stackerCraneOne.StackerCraneStatusValue == StackerCraneStatus.Normal)
+                    {
+                        stackerCraneTwo.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆�
+                        if (stackerCraneTwo.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
+                        {
+                            return stackerCraneTwo;
+                        }
+                    }
+                    else
+                    {
+                        if (stackerCraneOne != null)
+                        {
+                            if (!stackerCraneOne.IsEventSubscribed)
+                            {
+                                stackerCraneOne.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//璁㈤槄浠诲姟瀹屾垚浜嬩欢
+                            }
+                            if (stackerCraneOne.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && stackerCraneTwo.StackerCraneStatusValue == StackerCraneStatus.Normal)
+                            {
+                                stackerCraneOne.CheckStackerCraneTaskCompleted();//闃叉浠诲姟瀹屾垚浜嬩欢鐩戞祴瓒呮椂锛屽啀鎵嬪姩瑙﹀彂涓�娆�
+                                if (stackerCraneOne.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
+                                {
+                                    return stackerCraneOne;
+                                }
+                            }
+                        }
+
+                    }
+                }
+
+            }
+            return null;
+        }
+
+
+
+        /// <summary>
+        /// 浠诲姟瀹炰綋杞崲鎴愬懡浠odel
+        /// </summary>
+        /// <param name="task">浠诲姟瀹炰綋</param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public StackerCraneTaskCommand? ConvertToStackerCraneTaskCommand([NotNull] Dt_Task task)
+        {
+            StackerCraneTaskCommand stackerCraneTaskCommand = new StackerCraneTaskCommand();
+
+            stackerCraneTaskCommand.Barcode = task.PalletCode;
+            stackerCraneTaskCommand.TaskNum = task.TaskNum;
+            stackerCraneTaskCommand.WorkType = 1;
+            if(string.IsNullOrEmpty(task.Remark))//鎬诲眰鏁板拰灞傛暟鏄惁涓虹┖
+            {
+                return null;
+            }
+            string[] Levels = task.Remark.Split("-");
+            if (Levels.Length == 2)
+            {
+                //鎵樼洏绫诲瀷 1:9灞�   2:4灞�
+                if (!string.IsNullOrEmpty(Levels[0]))
+                {
+                    if (Levels[0].ToString()=="9")
+                    {
+                        stackerCraneTaskCommand.TrayType = 1;
+                    }
+                    else 
+                    {
+                        stackerCraneTaskCommand.TrayType = 2;
+                    }   
+                }
+                //鏂欒溅鍏蜂綋鐨勫眰鏁�
+                if (!string.IsNullOrEmpty(Levels[1]))
+                {  
+                   stackerCraneTaskCommand.StartLayer =Convert.ToInt16(Levels[1]);
+                }
+            }
+            else
+            {
+                return null;
+            }
+
+
+            string[] SourceCodes = task.SourceAddress.Split("-");
+            if (SourceCodes.Length == 4)
+            {
+                stackerCraneTaskCommand.StartRow = Convert.ToInt16(SourceCodes[1]);
+                stackerCraneTaskCommand.StartColumn = Convert.ToInt16(SourceCodes[2]);
+               // stackerCraneTaskCommand.StartLayer = Convert.ToInt16(SourceCodes[3]);
+            }
+            else
+            {
+                //鏁版嵁閰嶇疆閿欒
+                _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"浠诲姟婧愬湴鍧�閰嶇疆閿欒锛�");
+                return null;
+            }
+            string[] targetCodes = task.TargetAddress.Split("-");
+            if (targetCodes.Length == 4)
+            {
+                stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[1]);
+                stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[2]);
+                stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[3]);
+            }
+            else
+            {
+                //鏁版嵁閰嶇疆閿欒
+                _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"浠诲姟鐩爣鍦板潃閰嶇疆閿欒");
+                return null;
+            }
+            return stackerCraneTaskCommand;
+        }
+
+
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/WIDESEAWCS_Tasks.csproj" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/WIDESEAWCS_Tasks.csproj"
index 74eaf30..a8572e6 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/WIDESEAWCS_Tasks.csproj"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/WIDESEAWCS_Tasks.csproj"
@@ -7,7 +7,7 @@
 	</PropertyGroup>
 
 	<ItemGroup>
-	  <PackageReference Include="WIDESEAWCS_QuartzJob" Version="2.0.4" />
+	  <PackageReference Include="WIDESEAWCS_QuartzJob" Version="2.1.0" />
 	</ItemGroup>
 
 	<ItemGroup>
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/PLC\345\234\260\345\235\200.png" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/PLC\345\234\260\345\235\200.png"
new file mode 100644
index 0000000..20b86b1
--- /dev/null
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/PLC\345\234\260\345\235\200.png"
Binary files differ
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\345\205\245\345\272\223\347\224\237\346\210\220\344\273\273\345\212\241\346\212\245\346\226\207.txt" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\345\205\245\345\272\223\347\224\237\346\210\220\344\273\273\345\212\241\346\212\245\346\226\207.txt"
new file mode 100644
index 0000000..fc7f914
--- /dev/null
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\345\205\245\345\272\223\347\224\237\346\210\220\344\273\273\345\212\241\346\212\245\346\226\207.txt"
@@ -0,0 +1,19 @@
+{
+    "cmd": 101,
+    "task_id": 7871,
+    "src_rack": 2,
+    "src_col": 0,
+    "src_row": 1,
+    "dest_rack": 2,
+    "dest_col": 5,
+    "dest_row": 3,
+    "src_station": 0,
+    "dest_station": 0,
+    "size": 0,
+    "weight": 0,
+    "barcode": "",
+    "startIndex": 0,
+    "total": 9,
+    "carId": "8044",
+    "status": 2
+}
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\345\240\206\345\236\233\346\234\272\351\200\232\344\277\241\345\215\217\350\256\256.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\345\240\206\345\236\233\346\234\272\351\200\232\344\277\241\345\215\217\350\256\256.xlsx"
new file mode 100644
index 0000000..bdb14e2
--- /dev/null
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\345\240\206\345\236\233\346\234\272\351\200\232\344\277\241\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\241\271\347\233\256\345\233\276\347\272\270/\345\272\223\344\275\215.png" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\345\272\223\344\275\215.png"
new file mode 100644
index 0000000..b8d1144
--- /dev/null
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\345\272\223\344\275\215.png"
Binary files differ
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\345\274\202\345\270\270\345\207\272\345\272\223\347\224\237\346\210\220\344\273\273\345\212\241\346\212\245\346\226\207.txt" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\345\274\202\345\270\270\345\207\272\345\272\223\347\224\237\346\210\220\344\273\273\345\212\241\346\212\245\346\226\207.txt"
new file mode 100644
index 0000000..a7cfa25
--- /dev/null
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\345\274\202\345\270\270\345\207\272\345\272\223\347\224\237\346\210\220\344\273\273\345\212\241\346\212\245\346\226\207.txt"
@@ -0,0 +1,19 @@
+{
+    "cmd": 102,
+    "task_id": 7872,
+    "src_rack": 2,
+    "src_col": 5,
+    "src_row": 2,
+    "dest_rack":0 ,
+    "dest_col":0 ,
+    "dest_row":0 ,
+    "src_station": 0,
+    "dest_station": 1001,
+    "size": 0,
+    "weight": 0,
+    "barcode": "",
+    "startIndex": 0,
+    "total": 9,
+    "carId": "8044",
+    "status": 2
+}
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\346\231\272\346\261\207\345\245\207\347\255\226\351\203\255\345\272\227\345\260\226\345\261\261\351\241\271\347\233\256\351\200\232\346\270\205\345\215\2251031.xls" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\346\231\272\346\261\207\345\245\207\347\255\226\351\203\255\345\272\227\345\260\226\345\261\261\351\241\271\347\233\256\351\200\232\346\270\205\345\215\2251031.xls"
index cf6cbd7..801977f 100644
--- "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\346\231\272\346\261\207\345\245\207\347\255\226\351\203\255\345\272\227\345\260\226\345\261\261\351\241\271\347\233\256\351\200\232\346\270\205\345\215\2251031.xls"
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\346\231\272\346\261\207\345\245\207\347\255\226\351\203\255\345\272\227\345\260\226\345\261\261\351\241\271\347\233\256\351\200\232\346\270\205\345\215\2251031.xls"
Binary files differ
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\346\265\201\347\250\213\345\233\2761.png" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\346\265\201\347\250\213\345\233\2761.png"
new file mode 100644
index 0000000..d4f5572
--- /dev/null
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\346\265\201\347\250\213\345\233\2761.png"
Binary files differ
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\346\265\201\347\250\213\345\233\2762.png" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\346\265\201\347\250\213\345\233\2762.png"
new file mode 100644
index 0000000..38d8674
--- /dev/null
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\346\265\201\347\250\213\345\233\2762.png"
Binary files differ
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\346\265\201\347\250\213\350\257\264\346\230\216.doc" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\346\265\201\347\250\213\350\257\264\346\230\216.doc"
new file mode 100644
index 0000000..937a5de
--- /dev/null
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\346\265\201\347\250\213\350\257\264\346\230\216.doc"
Binary files differ
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\347\273\204\347\253\213\346\234\272\344\270\212\346\226\231\345\211\251\344\275\231\345\261\202\346\225\260\345\233\236\345\206\231\357\274\210DB28\357\274\211.png" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\347\273\204\347\253\213\346\234\272\344\270\212\346\226\231\345\211\251\344\275\231\345\261\202\346\225\260\345\233\236\345\206\231\357\274\210DB28\357\274\211.png"
new file mode 100644
index 0000000..5fe94cb
--- /dev/null
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\347\273\204\347\253\213\346\234\272\344\270\212\346\226\231\345\211\251\344\275\231\345\261\202\346\225\260\345\233\236\345\206\231\357\274\210DB28\357\274\211.png"
Binary files differ
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\351\203\255\345\272\227\351\241\271\347\233\256\345\256\236\346\226\275\345\267\245\344\275\234\345\256\211\346\216\222\345\217\212\350\277\233\345\272\246\347\256\241\347\220\206\350\241\250-\347\254\2541\345\221\250-2024.11.13.xlsx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\351\203\255\345\272\227\351\241\271\347\233\256\345\256\236\346\226\275\345\267\245\344\275\234\345\256\211\346\216\222\345\217\212\350\277\233\345\272\246\347\256\241\347\220\206\350\241\250-\347\254\2541\345\221\250-2024.11.13.xlsx"
new file mode 100644
index 0000000..32d16e6
--- /dev/null
+++ "b/\351\241\271\347\233\256\350\265\204\346\226\231/\351\241\271\347\233\256\345\233\276\347\272\270/\351\203\255\345\272\227\351\241\271\347\233\256\345\256\236\346\226\275\345\267\245\344\275\234\345\256\211\346\216\222\345\217\212\350\277\233\345\272\246\347\256\241\347\220\206\350\241\250-\347\254\2541\345\221\250-2024.11.13.xlsx"
Binary files differ

--
Gitblit v1.9.3