From f9d341542aaacdd8595154c2d0bcae89f4865fa7 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期五, 06 二月 2026 14:33:17 +0800
Subject: [PATCH] 添加HTTP助手、系统配置模型及机器人任务层

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Http/HttpRequestHelper.cs                              |  182 +++++++
 .gitignore                                                                                        |    3 
 Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v18/DocumentLayout.json                          |  220 ++------
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RobotTaskService.cs                         |   77 +++
 Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockDTO.cs                                          |   48 ++
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HttpEnum/ConfigKey.cs                                |   24 +
 项目资料/设备协议/上位系统对接/QKNY-MES-FW-MES系统设备集成接口文档-V2.35-20250711.docx                                    |    0 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_RobotTask.cs                       |  114 ++++
 Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs                                   |  266 ++++++++++
 Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/CodeChunks.db      |    0 
 Code/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockService.cs                                 |    7 
 Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/SemanticSymbols.db |    0 
 Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/SemanticSymbols.db |    0 
 Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.json                          |   56 +
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs                                  |   76 ++
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Http/Sys_Config.cs                                     |   89 +++
 Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.backup.json                   |   56 +
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HttpEnum/Category.cs                                 |   15 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/Stock/StockDTO.cs                                       |   51 ++
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json                                     |    2 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoRepository/IRobotTaskRepository.cs                 |   32 +
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/RobotTaskRepository.cs                   |   35 +
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IRobotTaskService.cs                       |   59 ++
 Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/CodeChunks.db      |    0 
 24 files changed, 1,210 insertions(+), 202 deletions(-)

diff --git a/.gitignore b/.gitignore
index 1a864b5..75836c7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -410,3 +410,6 @@
 *.db
 Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/CodeChunks.db
 Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/SemanticSymbols.db
+/Code/WMS/WIDESEA_WMSServer/.vs/CopilotSnapshots
+/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/copilot-chat
+/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18
diff --git a/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/CodeChunks.db b/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/CodeChunks.db
index bff5d57..a887584 100644
--- a/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/CodeChunks.db
+++ b/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/CodeChunks.db
Binary files differ
diff --git a/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/SemanticSymbols.db b/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/SemanticSymbols.db
index 9105d71..43eeb4a 100644
--- a/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/SemanticSymbols.db
+++ b/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/SemanticSymbols.db
Binary files differ
diff --git a/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v18/DocumentLayout.json b/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v18/DocumentLayout.json
index 43a51ff..36ce03f 100644
--- a/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v18/DocumentLayout.json
+++ b/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v18/DocumentLayout.json
@@ -3,48 +3,28 @@
   "WorkspaceRootPath": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\",
   "Documents": [
     {
-      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_tasks\\robotjob\\robotjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\robotjob\\robotjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_quartzjob\\quartznet\\quartznetextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\quartznet\\quartznetextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_quartzjob\\service\\deviceprotocoldetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\service\\deviceprotocoldetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_tasks\\socketserver\\tcpsocketserver.messaging.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\socketserver\\tcpsocketserver.messaging.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_quartzjob\\service\\ideviceprotocoldetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\service\\ideviceprotocoldetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_model\\models\\taskinfo\\dt_robottask.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|solutionrelative:wideseawcs_model\\models\\taskinfo\\dt_robottask.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_quartzjob\\stackercrane\\spec\\spetemperaturestackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\stackercrane\\spec\\spetemperaturestackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\robottaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\robottaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_quartzjob\\stackercrane\\spec\\speformationstackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\stackercrane\\spec\\speformationstackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_quartzjob\\stackercrane\\common\\commonstackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\stackercrane\\common\\commonstackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_quartzjob\\stackercrane\\istackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\stackercrane\\istackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_quartzjob\\stackercrane\\common\\istackercranebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\stackercrane\\common\\istackercranebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_quartzjob\\stackercrane\\common\\stackercranebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\stackercrane\\common\\stackercranebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_tasks\\formationstackercranejob\\formationcommonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\formationstackercranejob\\formationcommonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{7279A2AE-8D1F-4E66-A73A-01AF7927A336}|WIDESEAWCS_ITaskInfoService\\WIDESEAWCS_ITaskInfoService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_itaskinfoservice\\irobottaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{7279A2AE-8D1F-4E66-A73A-01AF7927A336}|WIDESEAWCS_ITaskInfoService\\WIDESEAWCS_ITaskInfoService.csproj|solutionrelative:wideseawcs_itaskinfoservice\\irobottaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     }
   ],
   "DocumentGroupContainers": [
@@ -54,34 +34,8 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 13,
+          "SelectedChildIndex": 7,
           "Children": [
-            {
-              "$type": "Document",
-              "DocumentIndex": 3,
-              "Title": "IDeviceProtocolDetailService.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\IDeviceProtocolDetailService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Service\\IDeviceProtocolDetailService.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\IDeviceProtocolDetailService.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Service\\IDeviceProtocolDetailService.cs",
-              "ViewState": "AgIAABMAAAAAAAAAAAAWwCkAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-05T02:09:38.844Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 2,
-              "Title": "DeviceProtocolDetailService.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DeviceProtocolDetailService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Service\\DeviceProtocolDetailService.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DeviceProtocolDetailService.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Service\\DeviceProtocolDetailService.cs",
-              "ViewState": "AgIAACgAAAAAAAAAAAAuwEIAAABPAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-05T02:02:05.669Z",
-              "EditorCaption": ""
-            },
             {
               "$type": "Bookmark",
               "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
@@ -97,119 +51,75 @@
             {
               "$type": "Document",
               "DocumentIndex": 1,
-              "Title": "QuartzNetExtension.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzNet\\QuartzNetExtension.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzNet\\QuartzNetExtension.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzNet\\QuartzNetExtension.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\QuartzNet\\QuartzNetExtension.cs",
-              "ViewState": "AgIAAEcAAAAAAAAAAAApwF8AAACaAAAAAAAAAA==",
+              "Title": "appsettings.json",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\appsettings.json",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
+              "RelativeToolTip": "WIDESEAWCS_Server\\appsettings.json",
+              "ViewState": "AgIAACEAAAAAAAAAAAAAADoAAAABAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
+              "WhenOpened": "2026-02-05T09:49:23.094Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 3,
+              "Title": "Dt_RobotTask.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_RobotTask.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_RobotTask.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_RobotTask.cs",
+              "RelativeToolTip": "WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_RobotTask.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAA8AAAAqAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-05T01:58:27.882Z",
-              "EditorCaption": ""
+              "WhenOpened": "2026-02-05T06:59:50.829Z"
             },
             {
               "$type": "Document",
               "DocumentIndex": 4,
-              "Title": "SpeTemperatureStackerCrane.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Spec\\SpeTemperatureStackerCrane.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\Spec\\SpeTemperatureStackerCrane.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Spec\\SpeTemperatureStackerCrane.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\StackerCrane\\Spec\\SpeTemperatureStackerCrane.cs",
-              "ViewState": "AgIAAHgAAAAAAAAAAAArwAAAAAAAAAAAAAAAAA==",
+              "Title": "RobotTaskService.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\RobotTaskService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\RobotTaskService.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\RobotTaskService.cs",
+              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\RobotTaskService.cs",
+              "ViewState": "AgIAADYAAAAAAAAAAAA+wEkAAAB+AAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-05T01:47:49.291Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 8,
-              "Title": "IStackerCraneBase.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\IStackerCraneBase.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\IStackerCraneBase.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\IStackerCraneBase.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\IStackerCraneBase.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAAmAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-05T01:35:31.591Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 7,
-              "Title": "IStackerCrane.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\IStackerCrane.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\IStackerCrane.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\IStackerCrane.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\StackerCrane\\IStackerCrane.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAEUAAAAVAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-05T01:33:41.091Z",
-              "EditorCaption": ""
+              "WhenOpened": "2026-02-05T06:22:00.192Z"
             },
             {
               "$type": "Document",
               "DocumentIndex": 5,
-              "Title": "SpeFormationStackerCrane.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Spec\\SpeFormationStackerCrane.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\Spec\\SpeFormationStackerCrane.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Spec\\SpeFormationStackerCrane.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\StackerCrane\\Spec\\SpeFormationStackerCrane.cs",
-              "ViewState": "AgIAAJgBAAAAAAAAAAAmwAAAAAAAAAAAAAAAAA==",
+              "Title": "IRobotTaskService.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\IRobotTaskService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_ITaskInfoService\\IRobotTaskService.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\IRobotTaskService.cs",
+              "RelativeToolTip": "WIDESEAWCS_ITaskInfoService\\IRobotTaskService.cs",
+              "ViewState": "AgIAACQAAAAAAAAAAAAAADgAAAA5AAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-05T01:32:15.17Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 10,
-              "Title": "FormationCommonStackerCraneJob.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\FormationStackerCraneJob\\FormationCommonStackerCraneJob.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\FormationStackerCraneJob\\FormationCommonStackerCraneJob.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\FormationStackerCraneJob\\FormationCommonStackerCraneJob.cs",
-              "RelativeToolTip": "WIDESEAWCS_Tasks\\FormationStackerCraneJob\\FormationCommonStackerCraneJob.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-05T01:25:52.745Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 9,
-              "Title": "StackerCraneBase.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\StackerCraneBase.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\StackerCraneBase.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\StackerCraneBase.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\StackerCraneBase.cs",
-              "ViewState": "AgIAAAMAAAAAAAAAAAAAABoAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-04T09:07:44.097Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 6,
-              "Title": "CommonStackerCrane.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\CommonStackerCrane.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\CommonStackerCrane.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\CommonStackerCrane.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\CommonStackerCrane.cs",
-              "ViewState": "AgIAAJUAAAAAAAAAAAAuwKIAAABXAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-04T09:07:35.823Z",
-              "EditorCaption": ""
+              "WhenOpened": "2026-02-05T06:20:31.002Z"
             },
             {
               "$type": "Document",
               "DocumentIndex": 0,
-              "Title": "CommonStackerCraneJob.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "ViewState": "AgIAACoAAAAAAAAAAAAkwDwAAABIAAAAAAAAAA==",
+              "Title": "RobotJob.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RobotJob\\RobotJob.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\RobotJob\\RobotJob.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RobotJob\\RobotJob.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\RobotJob\\RobotJob.cs",
+              "ViewState": "AgIAAHYAAAAAAAAAAAAMwJQAAABAAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-04T07:48:56.632Z",
+              "WhenOpened": "2026-02-05T05:38:04.031Z",
               "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 2,
+              "Title": "TcpSocketServer.Messaging.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SocketServer\\TcpSocketServer.Messaging.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\SocketServer\\TcpSocketServer.Messaging.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SocketServer\\TcpSocketServer.Messaging.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\SocketServer\\TcpSocketServer.Messaging.cs",
+              "ViewState": "AgIAABEAAAAAAAAAAADwvzYAAAAYAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-02-05T01:11:51.439Z"
             }
           ]
         }
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HttpEnum/Category.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HttpEnum/Category.cs
new file mode 100644
index 0000000..1fe845e
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HttpEnum/Category.cs
@@ -0,0 +1,15 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_Common.HttpEnum
+{
+    public enum Category
+    {
+        ERP,
+        WMS,
+        MES,
+    }
+}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HttpEnum/ConfigKey.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HttpEnum/ConfigKey.cs
new file mode 100644
index 0000000..8876d97
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HttpEnum/ConfigKey.cs
@@ -0,0 +1,24 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_Common.HttpEnum
+{
+    public enum ConfigKey
+    {
+        ERP_API_Base,
+        ERP_API_Url,
+        ERP_API_Timeout,
+
+
+        WMS_API_Base,
+        WMS_API_Url,
+        WMS_API_Timeout,
+
+        MES_API_Base,
+        MES_API_Url,
+        MES_API_Timeout
+    }
+}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Http/HttpRequestHelper.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Http/HttpRequestHelper.cs
new file mode 100644
index 0000000..74e4acf
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Http/HttpRequestHelper.cs
@@ -0,0 +1,182 @@
+using SqlSugar;
+using System.Text;
+using WIDESEAWCS_Code;
+using WIDESEAWCS_Core.Helper;
+
+namespace WIDESEAWCS_Core.Http
+{
+    public static class HttpRequestHelper
+    {
+        /// <summary>
+        /// 异步发送HTTP请求并返回响应内容
+        /// </summary>
+        /// <param name="serviceAddress">请求地址</param>
+        /// <param name="method">请求方法</param>
+        /// <param name="requestContent">请求内容</param>
+        /// <param name="contentType">内容类型</param>
+        /// <param name="timeOut">超时时间(秒)</param>
+        /// <param name="headers">请求头</param>
+        /// <returns>响应内容</returns>
+        public static async Task<string> SendAsync(string serviceAddress, HttpMethod method, string? requestContent = null, string contentType = "application/json", int timeOut = 60, Dictionary<string, string>? headers = null)
+        {
+            using HttpClient httpClient = new HttpClient();
+            httpClient.Timeout = new TimeSpan(0, 0, timeOut);
+
+            using HttpRequestMessage request = new HttpRequestMessage(method, serviceAddress);
+            if (!string.IsNullOrWhiteSpace(requestContent))
+            {
+                request.Content = new StringContent(requestContent, Encoding.UTF8, contentType);
+            }
+
+            if (headers != null)
+            {
+                foreach (var header in headers)
+                {
+                    request.Headers.TryAddWithoutValidation(header.Key, header.Value);
+                }
+            }
+
+            using HttpResponseMessage response = await httpClient.SendAsync(request);
+            string result = await response.Content.ReadAsStringAsync();
+
+            if (!response.IsSuccessStatusCode)
+            {
+                throw new Exception($"异常,响应码:{(int)response.StatusCode},原因:{response.ReasonPhrase}");
+            }
+
+            return result;
+        }
+
+        /// <summary>
+        /// 异步发送HTTP GET请求并返回响应内容
+        /// </summary>
+        public static Task<string> GetAsync(string serviceAddress, int timeOut = 60, Dictionary<string, string>? headers = null)
+        {
+            return SendAsync(serviceAddress, HttpMethod.Get, null, "application/json", timeOut, headers);
+        }
+
+        /// <summary>
+        /// 异步发送HTTP POST请求并返回响应内容
+        /// </summary>
+        public static Task<string> PostAsync(string serviceAddress, string? requestJson = null, string contentType = "application/json", int timeOut = 60, Dictionary<string, string>? headers = null)
+        {
+            return SendAsync(serviceAddress, HttpMethod.Post, requestJson, contentType, timeOut, headers);
+        }
+
+        /// <summary>
+        /// 异步发送HTTP PUT请求并返回响应内容
+        /// </summary>
+        public static Task<string> PutAsync(string serviceAddress, string? requestJson = null, string contentType = "application/json", int timeOut = 60, Dictionary<string, string>? headers = null)
+        {
+            return SendAsync(serviceAddress, HttpMethod.Put, requestJson, contentType, timeOut, headers);
+        }
+
+        /// <summary>
+        /// 异步发送HTTP DELETE请求并返回响应内容
+        /// </summary>
+        public static Task<string> DeleteAsync(string serviceAddress, int timeOut = 60, Dictionary<string, string>? headers = null)
+        {
+            return SendAsync(serviceAddress, HttpMethod.Delete, null, "application/json", timeOut, headers);
+        }
+
+        /// <summary>
+        /// 根据数据库配置发送HTTP请求并返回响应内容
+        /// </summary>
+        /// <param name="requestContent">请求内容</param>
+        /// <param name="method">请求方法</param>
+        /// <param name="category">配置分类</param>
+        /// <param name="categoryItem">配置项</param>
+        /// <param name="contentType">内容类型</param>
+        /// <param name="timeOut">超时时间(秒)</param>
+        /// <returns>响应内容</returns>
+        public static async Task<string> SendAsync(string? requestContent, HttpMethod method, string? category, string? configKey, string contentType = "application/json", int timeOut = 60)
+        {
+            ISqlSugarClient? db = App.GetService<ISqlSugarClient>();
+            if (db == null)
+            {
+                throw new InvalidOperationException("数据库服务未初始化");
+            }
+
+            var configs = await db.Ado.SqlQueryAsync<Sys_Config>(
+                "SELECT * FROM Sys_Config WHERE Category = @Category",
+                new { Category = category });
+            if (configs.IsNullOrEmpty())
+            {
+                throw new Exception($"未找到配置分类:{category}");
+            }
+
+            string address = string.Empty;
+            string servicePath = string.Empty;
+            Dictionary<string, string> configDict = new Dictionary<string, string>();
+
+            foreach (var config in configs)
+            {
+                if (config.CategoryItem == "Header")
+                {
+                    configDict[config.ConfigKey] = config.ConfigValue;
+
+                    continue;
+                }
+
+                if (config.ConfigKey == "BASE")
+                {
+                    address = config.ConfigValue;
+                    continue;
+                }
+
+                if (!string.IsNullOrWhiteSpace(configKey) && config.ConfigKey == configKey)
+                {
+                    servicePath = config.ConfigValue;
+                }
+            }
+
+            if (string.IsNullOrWhiteSpace(address))
+            {
+                throw new Exception($"未找到配置地址:{category} - BASE");
+            }
+
+            string normalizedPath = string.IsNullOrWhiteSpace(servicePath)
+                ? string.Empty
+                : (servicePath.StartsWith("/") ? servicePath : $"/{servicePath}");
+
+            string serviceAddress = $"{address}{normalizedPath}";
+            if (method == HttpMethod.Get)
+            {
+                return await GetAsync(serviceAddress, timeOut, configDict);
+            }
+
+            if (method == HttpMethod.Post)
+            {
+                return await PostAsync(serviceAddress, requestContent, contentType, timeOut, configDict);
+            }
+
+            if (method == HttpMethod.Put)
+            {
+                return await PutAsync(serviceAddress, requestContent, contentType, timeOut, configDict);
+            }
+
+            if (method == HttpMethod.Delete)
+            {
+                return await DeleteAsync(serviceAddress, timeOut, configDict);
+            }
+
+            throw new NotSupportedException($"不支持的请求方法:{method}");
+        }
+
+        /// <summary>
+        /// 按配置分类发送GET请求
+        /// </summary>
+        public static Task<string> HTTPGetAsync(string category, string? requestContent, string? configKey, int timeOut = 60)
+        {
+            return SendAsync(requestContent, HttpMethod.Get, category, configKey, "application/json", timeOut);
+        }
+
+        /// <summary>
+        /// 按配置分类发送POST请求
+        /// </summary>
+        public static Task<string> HTTPPostAsync(string category, string? requestContent, string? configKey, int timeOut = 60)
+        {
+            return SendAsync(requestContent, HttpMethod.Post, category, configKey, "application/json", timeOut);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Http/Sys_Config.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Http/Sys_Config.cs
new file mode 100644
index 0000000..65f41af
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Http/Sys_Config.cs
@@ -0,0 +1,89 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Core.Tenants;
+
+namespace WIDESEAWCS_Code
+{
+    /// <summary>
+    /// 閰嶇疆琛ㄥ疄浣�
+    /// </summary>
+    [SugarTable("Sys_Config", "缁勭粐鏋舵瀯"), MultiTenant] 
+    public class Sys_Config
+    {
+        /// <summary>
+        /// 涓婚敭ID
+        /// </summary>
+        [SugarColumn(IsIdentity = true, IsPrimaryKey = true, ColumnDescription = "涓婚敭ID")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 閰嶇疆閿�
+        /// </summary>
+        [SugarColumn(Length = 255, ColumnDescription = "閰嶇疆閿�")]
+        public string ConfigKey { get; set; }
+
+        /// <summary>
+        /// 閰嶇疆鍊�
+        /// </summary>
+        [SugarColumn(ColumnDataType = "text", ColumnDescription = "閰嶇疆鍊�")]
+        public string ConfigValue { get; set; }
+
+        /// <summary>
+        /// 鍒嗙被
+        /// </summary>
+        [SugarColumn(Length = 255, ColumnDescription = "鍒嗙被")]
+        public string Category { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(Length = 255, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+
+        /// <summary>
+        /// 鎺掑簭鐮�
+        /// </summary>
+        [SugarColumn(ColumnDescription = "鎺掑簭鐮�")]
+        public int SortCode { get; set; }
+
+        /// <summary>
+        /// 鐘舵��
+        /// </summary>
+        [SugarColumn(Length = 20, ColumnDescription = "鐘舵��")]
+        public string Status { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜�
+        /// </summary>
+        [SugarColumn(Length = 255, ColumnDescription = "鍒涘缓浜�")]
+        public string Creater { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        [SugarColumn(ColumnDescription = "鍒涘缓鏃堕棿")]
+        public DateTime CreateDate { get; set; }
+
+        /// <summary>
+        /// 淇敼浜�
+        /// </summary>
+        [SugarColumn(Length = 255, ColumnDescription = "淇敼浜�")]
+        public string Modifier { get; set; }
+
+        /// <summary>
+        /// 淇敼鏃堕棿
+        /// </summary>
+        [SugarColumn(ColumnDescription = "淇敼鏃堕棿")]
+        public DateTime ModifyDate { get; set; }
+
+        /// <summary>
+        /// 鍒嗙被椤圭洰
+        /// </summary>
+        [SugarColumn(Length = 255, ColumnDescription = "鍒嗙被椤圭洰")]
+        public string CategoryItem { get; set; } 
+    }
+}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/Stock/StockDTO.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/Stock/StockDTO.cs
new file mode 100644
index 0000000..4af00e1
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/Stock/StockDTO.cs
@@ -0,0 +1,51 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_DTO.Stock
+{
+    public class StockDTO
+    {
+        /// <summary>
+        /// 鏉ユ簮鎵樼洏鍙�
+        /// </summary>
+        public string? SourcePalletNo { get; set; }
+
+        /// <summary>
+        /// 鐩爣鎵樼洏鍙�
+        /// </summary>
+        public string? TargetPalletNo { get; set; }
+
+        /// <summary>
+        /// 鏉ユ簮绾夸綋缂栧彿
+        /// </summary>
+        public string? SourceLineNo { get; set; } = string.Empty;
+
+        /// <summary>
+        /// 鐩爣绾夸綋缂栧彿
+        /// </summary>
+        public string? TargetLineNo { get; set; } = string.Empty;
+
+        public List<StockDetailDTO> Details { get; set; } = new List<StockDetailDTO>();
+    }
+
+    public class StockDetailDTO
+    {
+        /// <summary>
+        /// 鏁伴噺
+        /// </summary>
+        public int Quantity { get; set; }
+
+        /// <summary>
+        /// 閫氶亾
+        /// </summary>
+        public int Channel { get; set; }
+
+        /// <summary>
+        /// 璐ф牸鏉$爜
+        /// </summary>
+        public string CellBarcode { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoRepository/IRobotTaskRepository.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoRepository/IRobotTaskRepository.cs
new file mode 100644
index 0000000..5599a21
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoRepository/IRobotTaskRepository.cs
@@ -0,0 +1,32 @@
+锘�#region << 鐗� 鏈� 娉� 閲� >>
+/*----------------------------------------------------------------
+ * 鍛藉悕绌洪棿锛歐IDESEAWCS_ITaskInfoRepository
+ * 鍒涘缓鑰咃細鑳$搴�
+ * 鍒涘缓鏃堕棿锛�2024/8/2 16:13:36
+ * 鐗堟湰锛歏1.0.0
+ * 鎻忚堪锛�
+ *
+ * ----------------------------------------------------------------
+ * 淇敼浜猴細
+ * 淇敼鏃堕棿锛�
+ * 鐗堟湰锛歏1.0.1
+ * 淇敼璇存槑锛�
+ * 
+ *----------------------------------------------------------------*/
+#endregion << 鐗� 鏈� 娉� 閲� >>
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Core.BaseRepository;
+using WIDESEAWCS_Model.Models;
+
+namespace WIDESEAWCS_ITaskInfoRepository
+{
+    public interface IRobotTaskRepository : IRepository<Dt_RobotTask>
+    {
+
+    }
+}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IRobotTaskService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IRobotTaskService.cs
new file mode 100644
index 0000000..bd9dd13
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/IRobotTaskService.cs
@@ -0,0 +1,59 @@
+锘�#region << 鐗� 鏈� 娉� 閲� >>
+/*----------------------------------------------------------------
+ * 鍛藉悕绌洪棿锛歐IDESEAWCS_ITaskInfoService
+ * 鍒涘缓鑰咃細鑳$搴�
+ * 鍒涘缓鏃堕棿锛�2024/8/2 16:13:36
+ * 鐗堟湰锛歏1.0.0
+ * 鎻忚堪锛�
+ *
+ * ----------------------------------------------------------------
+ * 淇敼浜猴細
+ * 淇敼鏃堕棿锛�
+ * 鐗堟湰锛歏1.0.1
+ * 淇敼璇存槑锛�
+ * 
+ *----------------------------------------------------------------*/
+#endregion << 鐗� 鏈� 娉� 閲� >>
+
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.BaseServices;
+using WIDESEAWCS_Core.Enums;
+using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_Model.Models;
+using WIDESEAWCS_Common.TaskEnum;
+
+namespace WIDESEAWCS_ITaskInfoService
+{
+    public interface IRobotTaskService : IService<Dt_RobotTask>
+    {
+        /// <summary>
+        /// 浠诲姟鎺掑簭
+        /// </summary>
+        public Dictionary<string, OrderByType> TaskOrderBy { get; set; }
+
+        /// <summary>
+        /// 鎵�鏈夊叆搴撲换鍔$被鍨�
+        /// </summary>
+        public List<int> TaskInboundTypes { get; }
+
+        /// <summary>
+        /// 鎵�鏈夊嚭搴撲换鍔$被鍨�
+        /// </summary>
+        public List<int> TaskOutboundTypes { get; }
+
+        /// <summary>
+        /// 鎵�鏈夊嚭搴撲换鍔$被鍨�
+        /// </summary>
+        public List<int> TaskRobotTypes { get; }
+
+
+        public Dt_RobotTask? QueryRobotCraneTask(string deviceCode);
+    }
+}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_RobotTask.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_RobotTask.cs
new file mode 100644
index 0000000..7cf765d
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_RobotTask.cs
@@ -0,0 +1,114 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Core.DB.Models;
+
+namespace WIDESEAWCS_Model.Models
+{
+
+    /// <summary>
+    /// 鏈哄櫒浜轰换鍔¤〃瀹炰綋
+    /// </summary>
+    [SugarTable(nameof(Dt_RobotTask), "浠诲姟淇℃伅")]
+    public class Dt_RobotTask : BaseEntity
+    {
+        /// <summary>
+        /// 鏈哄櫒浜轰换鍔D
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, ColumnDescription = "鏈哄櫒浜轰换鍔D")]
+        public int RobotTaskId { get; set; }
+
+        /// <summary>
+        /// 鏈哄櫒浜轰换鍔$紪鍙�
+        /// </summary>
+        [SugarColumn(ColumnDescription = "鏈哄櫒浜轰换鍔$紪鍙�")]
+        public int RobotTaskNum { get; set; }
+
+        /// <summary>
+        /// 鏈哄櫒浜哄贩閬�
+        /// </summary>
+        [SugarColumn(Length = 20, ColumnDescription = "鏈哄櫒浜哄贩閬�")]
+        public string RobotRoadway { get; set; }
+
+        /// <summary>
+        /// 鏈哄櫒浜轰换鍔$被鍨�
+        /// </summary>
+        [SugarColumn(ColumnDescription = "鏈哄櫒浜轰换鍔$被鍨�")]
+        public int RobotTaskType { get; set; }
+
+        /// <summary>
+        /// 鏈哄櫒浜轰换鍔$姸鎬�
+        /// </summary>
+        [SugarColumn(ColumnDescription = "鏈哄櫒浜轰换鍔$姸鎬�")]
+        public int RobotTaskState { get; set; }
+
+        /// <summary>
+        /// 鏈哄櫒浜轰换鍔℃�绘暟
+        /// </summary>
+        [SugarColumn(ColumnDescription = "鏈哄櫒浜轰换鍔℃�绘暟")]
+        public int RobotTaskTotalNum { get; set; }
+
+        /// <summary>
+        /// 鏈哄櫒浜烘潵婧愬湴鍧�
+        /// </summary>
+        [SugarColumn(Length = 20, ColumnDescription = "鏈哄櫒浜烘潵婧愬湴鍧�")]
+        public string RobotSourceAddress { get; set; }
+
+        /// <summary>
+        /// 鏈哄櫒浜虹洰鏍囧湴鍧�
+        /// </summary>
+        [SugarColumn(Length = 20, ColumnDescription = "鏈哄櫒浜虹洰鏍囧湴鍧�")]
+        public string RobotTargetAddress { get; set; }
+
+        /// <summary>
+        /// 鏈哄櫒浜烘潵婧愬湴鍧�绾夸唬鐮�
+        /// </summary>
+        [SugarColumn(Length = 20, ColumnDescription = "鏈哄櫒浜烘潵婧愬湴鍧�绾夸唬鐮�")]
+        public string RobotSourceAddressLineCode { get; set; }
+
+        /// <summary>
+        /// 鏈哄櫒浜虹洰鏍囧湴鍧�绾夸唬鐮�
+        /// </summary>
+        [SugarColumn(Length = 20, ColumnDescription = "鏈哄櫒浜虹洰鏍囧湴鍧�绾夸唬鐮�")]
+        public string RobotTargetAddressLineCode { get; set; }
+
+        /// <summary>
+        /// 鏈哄櫒浜烘潵婧愬湴鍧�绾挎墭鐩樹唬鐮�
+        /// </summary>
+        [SugarColumn(Length = 20, ColumnDescription = "鏈哄櫒浜烘潵婧愬湴鍧�绾挎墭鐩樹唬鐮�")]
+        public string RobotSourceAddressPalletCode { get; set; }
+
+        /// <summary>
+        /// 鏈哄櫒浜虹洰鏍囧湴鍧�绾挎墭鐩樹唬鐮�
+        /// </summary>
+        [SugarColumn(Length = 20, ColumnDescription = "鏈哄櫒浜虹洰鏍囧湴鍧�绾挎墭鐩樹唬鐮�")]
+        public string RobotTargetAddressPalletCode { get; set; }
+
+        /// <summary>
+        /// 鏈哄櫒浜哄紓甯镐俊鎭�
+        /// </summary>
+        [SugarColumn(ColumnDescription = "鏈哄櫒浜哄紓甯镐俊鎭�")]
+        public string RobotExceptionMessage { get; set; }
+
+        /// <summary>
+        /// 鏈哄櫒浜虹瓑绾�/浼樺厛绾�
+        /// </summary>
+        [SugarColumn(ColumnDescription = "鏈哄櫒浜虹瓑绾�/浼樺厛绾�")]
+        public int RobotGrade { get; set; }
+
+        /// <summary>
+        /// 鏈哄櫒浜鸿皟搴︽椂闂�
+        /// </summary>
+        [SugarColumn(ColumnDescription = "鏈哄櫒浜鸿皟搴︽椂闂�")]
+        public DateTime? RobotDispatchertime { get; set; }
+
+        /// <summary>
+        /// 鏈哄櫒浜哄娉�
+        /// </summary>
+        [SugarColumn(Length = 50, ColumnDescription = "鏈哄櫒浜哄娉�")]
+        public string RobotRemark { get; set; }
+    }
+}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
index a6fcc1f..c350f03 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
@@ -52,7 +52,7 @@
     "Backlog": 1000,   //鏈�澶ц繛鎺ユ暟 
     "EncodingName": "utf-8",  //缂栫爜鏂瑰紡
     "AutoDetectEncoding": true,   //鏄惁鑷姩妫�娴嬬紪鐮�
-    "IdleTimeoutSeconds": 300,   //绌洪棽瓒呮椂鏃堕棿锛屽崟浣嶇锛�0琛ㄧず涓嶈秴鏃�
+    "IdleTimeoutSeconds": 0,   //绌洪棽瓒呮椂鏃堕棿锛屽崟浣嶇锛�0琛ㄧず涓嶈秴鏃�
     "EnableHeartbeat": true,   //鏄惁鍚敤蹇冭烦妫�娴�
     "LogFilePath": "socketserver.log"  //鏃ュ織鏂囦欢璺緞
   }
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/RobotTaskRepository.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/RobotTaskRepository.cs
new file mode 100644
index 0000000..9bcf830
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/RobotTaskRepository.cs
@@ -0,0 +1,35 @@
+锘�#region << 鐗� 鏈� 娉� 閲� >>
+/*----------------------------------------------------------------
+ * 鍛藉悕绌洪棿锛歐IDESEAWCS_TaskInfoRepository
+ * 鍒涘缓鑰咃細鑳$搴�
+ * 鍒涘缓鏃堕棿锛�2024/8/2 16:13:36
+ * 鐗堟湰锛歏1.0.0
+ * 鎻忚堪锛�
+ *
+ * ----------------------------------------------------------------
+ * 淇敼浜猴細
+ * 淇敼鏃堕棿锛�
+ * 鐗堟湰锛歏1.0.1
+ * 淇敼璇存槑锛�
+ * 
+ *----------------------------------------------------------------*/
+#endregion << 鐗� 鏈� 娉� 閲� >>
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Core.BaseRepository;
+using WIDESEAWCS_ITaskInfoRepository;
+using WIDESEAWCS_Model.Models;
+
+namespace WIDESEAWCS_TaskInfoRepository
+{
+    public class RobotTaskRepository : RepositoryBase<Dt_RobotTask>, IRobotTaskRepository
+    {
+        public RobotTaskRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
+        {
+        }
+    }
+}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RobotTaskService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RobotTaskService.cs
new file mode 100644
index 0000000..ab5fb11
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RobotTaskService.cs
@@ -0,0 +1,77 @@
+锘�#region << 鐗� 鏈� 娉� 閲� >>
+
+/*----------------------------------------------------------------
+ * 鍛藉悕绌洪棿锛歐IDESEAWCS_TaskInfoService
+ * 鍒涘缓鑰咃細鑳$搴�
+ * 鍒涘缓鏃堕棿锛�2024/8/2 16:13:36
+ * 鐗堟湰锛歏1.0.0
+ * 鎻忚堪锛�
+ *
+ * ----------------------------------------------------------------
+ * 淇敼浜猴細
+ * 淇敼鏃堕棿锛�
+ * 鐗堟湰锛歏1.0.1
+ * 淇敼璇存槑锛�
+ *
+ *----------------------------------------------------------------*/
+
+#endregion << 鐗� 鏈� 娉� 閲� >>
+
+using AutoMapper;
+using SqlSugar;
+using System.Diagnostics.CodeAnalysis;
+using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.BaseServices;
+using WIDESEAWCS_Core.Enums;
+using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_ITaskInfoRepository;
+using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model.Models;
+using WIDESEAWCS_QuartzJob.Models;
+using WIDESEAWCS_QuartzJob.Service;
+
+namespace WIDESEAWCS_TaskInfoService
+{
+    public class RobotTaskService : ServiceBase<Dt_RobotTask, IRobotTaskRepository>, IRobotTaskService
+    {
+        private readonly IMapper _mapper;
+
+        private Dictionary<string, OrderByType> _taskOrderBy = new()
+            {
+                {nameof(Dt_RobotTask.RobotGrade),OrderByType.Desc },
+                {nameof(Dt_RobotTask.CreateDate),OrderByType.Asc},
+            };
+
+        public Dictionary<string, OrderByType> TaskOrderBy
+        { get { return _taskOrderBy; } set { _taskOrderBy = value; } }
+
+        public List<int> TaskInboundTypes => typeof(TaskInboundTypeEnum).GetEnumIndexList();
+
+        public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList();
+
+        public List<int> TaskRobotTypes => typeof(TaskOtherTypeEnum).GetEnumIndexList();
+
+        public RobotTaskService(IRobotTaskRepository BaseDal, IMapper mapper) : base(BaseDal)
+        {
+            _mapper = mapper;
+        }
+
+        public override WebResponseContent DeleteData(object[] keys)
+        {
+            List<int> taskKeys = new List<int>();
+            for (int i = 0; i < keys.Length; i++)
+            {
+                taskKeys.Add(Convert.ToInt32(keys[i]));
+            }
+            List<Dt_RobotTask> tasks = BaseDal.QueryData(x => taskKeys.Contains(x.RobotTaskId));
+            BaseDal.DeleteAndMoveIntoHty(tasks, OperateTypeEnum.浜哄伐鍒犻櫎);
+            return WebResponseContent.Instance.OK($"鎴愬姛鍒犻櫎{tasks.Count}鏉℃暟鎹�");
+        }
+
+        public Dt_RobotTask? QueryRobotCraneTask(string deviceCode)
+        {
+            return BaseDal.QueryFirst(x => x.RobotRoadway == deviceCode && x.RobotTaskState <= (int)TaskRobotStatusEnum.RobotExecuting, TaskOrderBy);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
index 8503c91..ddb4821 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
@@ -2,6 +2,7 @@
 using System.Collections.Concurrent;
 using System.Net.Sockets;
 using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_DTO.Stock;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Model.Models;
@@ -17,27 +18,24 @@
         private readonly TcpSocketServer _TcpSocket;
         private static readonly ConcurrentDictionary<string, RobotSocketState> _socketStates = new();
         private static int _eventSubscribedFlag;
-        private readonly ITaskService _taskService;
+        private readonly IRobotTaskService _taskService;
         private readonly ITaskExecuteDetailService _taskExecuteDetailService;
         private readonly ITaskRepository _taskRepository;
         private readonly IRouterService _routerService;
 
-        public RobotJob(TcpSocketServer TcpSocket, ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService)
+        public RobotJob(TcpSocketServer TcpSocket, IRobotTaskService taskService)
         {
             _TcpSocket = TcpSocket;
             _taskService = taskService;
-            _taskExecuteDetailService = taskExecuteDetailService;
-            _taskRepository = taskRepository;
-            _routerService = routerService;
         }
 
-        public Task Execute(IJobExecutionContext context)
+        public async Task Execute(IJobExecutionContext context)
         {
             bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
             RobotCraneDevice robotCrane = (RobotCraneDevice?)value ?? new RobotCraneDevice();
             if (!flag || robotCrane.IsNullOrEmpty())
             {
-                return Task.CompletedTask;
+                return;
             }
 
             string ipAddress = robotCrane.IPAddress;
@@ -56,7 +54,7 @@
             var clientIds = _TcpSocket.GetClientIds();
             if (!clientIds.Contains(ipAddress))
             {
-                return Task.CompletedTask;
+                return;
             }
 
             // 璁㈤槄涓�娆� message 浜嬩欢锛堝叏灞�涓�娆★級
@@ -74,13 +72,34 @@
             }
 
             // 鑾峰彇浠诲姟骞剁紦瀛樺埌鐘舵�佷腑
-            Dt_Task? task = GetTask(robotCrane);
+            Dt_RobotTask? task = GetTask(robotCrane);
             if (task != null)
             {
                 state.CurrentTask = task;
+                if (task.RobotTaskTotalNum != 48)
+                {
+                    // 澶勭悊姝e湪鎵ц鐨勪换鍔�
+                    if (state.RobotRunMode == 1 && state.RobotControlMode == 1)
+                    {
+                        await Task.Delay(1000);
+                        if ((state.CurrentAction == "Homed" || state.CurrentAction == "PickFinished" || state.CurrentAction == "PutFinished") && state.OperStatus == "Running")
+                        {
+                            // TODO 璇诲彇绾夸綋鐢垫睜鏉$爜锛屽彂閫佸彇鐢垫睜鎸囦护
+                            if (true)
+                            {
+                                // 妯℃嫙璇诲彇鏉$爜
+                                state.CellBarcode = new string[] { "CellBarcode1", "CellBarcode2", "CellBarcode3", "CellBarcode4" };
+
+                                string taskString = $"Pickbattery,{task.RobotSourceAddress}";
+                                // 鍙戦�佷换鍔℃寚浠�
+                                bool result = await _TcpSocket.SendToClientAsync(ipAddress, taskString);
+                            }
+                        }
+                    }
+                }
             }
 
-            return Task.CompletedTask;
+            return;
         }
 
         /// <summary>
@@ -133,6 +152,24 @@
                         else if (cmd.StartsWith("putfinished"))
                         {
                             state.LastPutPositions = positions;
+                            // 鍙戦�佹暟鎹粰WMS缁勭洏/鎹㈢洏
+                            StockDTO stockDTO = new StockDTO
+                            {
+                                SourceLineNo = state.CurrentTask?.RobotSourceAddressLineCode,
+                                SourcePalletNo = state.CurrentTask?.RobotSourceAddressPalletCode,
+                                TargetPalletNo = state.CurrentTask?.RobotTargetAddressPalletCode,
+                                TargetLineNo = state.CurrentTask?.RobotTargetAddressLineCode,
+                                Details = positions
+                                    .Where(x => x > 0)
+                                    .OrderBy(x => x)
+                                    .Select((x, idx) => new StockDetailDTO
+                                    {
+                                        Quantity = state.CurrentTask?.RobotTaskTotalNum ?? 1,
+                                        Channel = x > 0 ? x : throw new ArgumentOutOfRangeException(nameof(x), "Channel must be positive"),
+                                        CellBarcode = state.CellBarcode[idx]
+                                    })
+                                    .ToList()
+                            };
                             state.CurrentAction = "PutFinished";
                         }
                     }
@@ -173,10 +210,18 @@
 
                 case "allpickfinished":
                     state.CurrentAction = "AllPickFinished";
+                    if(state.CurrentTask?.RobotTaskType == 2|| state.CurrentTask?.RobotTaskType == 3)
+                    {
+                        // TODO 鏈烘鎵嬪彇璐у畬鎴愶紝鍒ゆ柇鏄惁鎹㈢洏銆佹媶鐩樹换鍔★紝鍒涘缓绌烘墭鐩樺洖搴撲换鍔�
+                    }
                     return true;
 
                 case "allputfinished":
                     state.CurrentAction = "AllPutFinished";
+                    if (state.CurrentTask?.RobotTaskType == 1 )
+                    {
+                        // TODO 鏈烘鎵嬪彇璐у畬鎴愶紝鍒ゆ柇鏄惁缁勭洏浠诲姟锛屽垱寤虹粍鐩樺叆搴撲换鍔�
+                    }
                     return true;
 
                 case "running":
@@ -199,7 +244,7 @@
                     state.RobotRunMode = 1;
                     return true;
 
-                case "runmodemode,2":
+                case "runmode,2":
                     state.RobotRunMode = 2;
                     return true;
 
@@ -234,7 +279,7 @@
             return message.StartsWith("pickfinished") || message.StartsWith("putfinished");
         }
 
-        private Dt_Task? GetTask(RobotCraneDevice robotCrane)
+        private Dt_RobotTask? GetTask(RobotCraneDevice robotCrane)
         {
             return _taskService.QueryRobotCraneTask(robotCrane.DeviceCode);
         }
@@ -290,8 +335,13 @@
         public int[]? LastPutPositions { get; set; }
 
         /// <summary>
+        /// 鎶撳彇浣嶇疆鏉$爜
+        /// </summary>
+        public string[] CellBarcode { get; set; }
+
+        /// <summary>
         /// 褰撳墠鎶撳彇浠诲姟
         /// </summary>
-        public Dt_Task? CurrentTask { get; set; }
+        public Dt_RobotTask? CurrentTask { get; set; }
     }
 }
\ No newline at end of file
diff --git a/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/CodeChunks.db b/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/CodeChunks.db
index c1f0f8e..720c276 100644
--- a/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/CodeChunks.db
+++ b/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/CodeChunks.db
Binary files differ
diff --git a/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/SemanticSymbols.db b/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/SemanticSymbols.db
index 51bbf48..290e2d4 100644
--- a/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/SemanticSymbols.db
+++ b/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/18.0.988.22099/SemanticSymbols.db
Binary files differ
diff --git a/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.backup.json b/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.backup.json
index 0bb113c..eef46cc 100644
--- a/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.backup.json
+++ b/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.backup.json
@@ -3,8 +3,16 @@
   "WorkspaceRootPath": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\",
   "Documents": [
     {
-      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_wmsserver\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
-      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
+      "AbsoluteMoniker": "D:0:0:{7DC26D42-D8EE-46F0-BA66-A13457086885}|WIDESEA_StockService\\WIDESEA_StockService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_stockservice\\stockserivce.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{7DC26D42-D8EE-46F0-BA66-A13457086885}|WIDESEA_StockService\\WIDESEA_StockService.csproj|solutionrelative:widesea_stockservice\\stockserivce.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{49716D78-720D-475D-948C-0FC6C5F079E5}|WIDESEA_IStockService\\WIDESEA_IStockService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_istockservice\\istockservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{49716D78-720D-475D-948C-0FC6C5F079E5}|WIDESEA_IStockService\\WIDESEA_IStockService.csproj|solutionrelative:widesea_istockservice\\istockservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_dto\\stock\\stockdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\stock\\stockdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     }
   ],
   "DocumentGroupContainers": [
@@ -14,7 +22,7 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 3,
+          "SelectedChildIndex": 4,
           "Children": [
             {
               "$type": "Bookmark",
@@ -25,20 +33,42 @@
               "Name": "ST:0:0:{40ea2e6b-2121-4bb8-a43e-c83c04b51041}"
             },
             {
-              "$type": "Bookmark",
-              "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
+              "$type": "Document",
+              "DocumentIndex": 2,
+              "Title": "StockDTO.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\StockDTO.cs",
+              "RelativeDocumentMoniker": "WIDESEA_DTO\\Stock\\StockDTO.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\StockDTO.cs",
+              "RelativeToolTip": "WIDESEA_DTO\\Stock\\StockDTO.cs",
+              "ViewState": "AgIAAAcAAAAAAAAAAAA9wBkAAAAWAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-02-06T02:56:51.397Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 1,
+              "Title": "IStockService.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStockService\\IStockService.cs",
+              "RelativeDocumentMoniker": "WIDESEA_IStockService\\IStockService.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStockService\\IStockService.cs",
+              "RelativeToolTip": "WIDESEA_IStockService\\IStockService.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAABkAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-02-06T02:13:53.794Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
               "DocumentIndex": 0,
-              "Title": "appsettings.json",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\appsettings.json",
-              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\appsettings.json",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\appsettings.json",
-              "RelativeToolTip": "WIDESEA_WMSServer\\appsettings.json",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAABwAAAAZAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
-              "WhenOpened": "2026-01-26T08:48:58.694Z",
+              "Title": "StockSerivce.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockService\\StockSerivce.cs",
+              "RelativeDocumentMoniker": "WIDESEA_StockService\\StockSerivce.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockService\\StockSerivce.cs",
+              "RelativeToolTip": "WIDESEA_StockService\\StockSerivce.cs",
+              "ViewState": "AgIAAFEAAAAAAAAAAAAQwFoAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-02-06T01:53:49.077Z",
               "EditorCaption": ""
             }
           ]
diff --git a/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.json b/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.json
index ab43d7c..401f092 100644
--- a/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.json
+++ b/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.json
@@ -3,8 +3,16 @@
   "WorkspaceRootPath": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\",
   "Documents": [
     {
-      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_wmsserver\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
-      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
+      "AbsoluteMoniker": "D:0:0:{7DC26D42-D8EE-46F0-BA66-A13457086885}|WIDESEA_StockService\\WIDESEA_StockService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_stockservice\\stockserivce.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{7DC26D42-D8EE-46F0-BA66-A13457086885}|WIDESEA_StockService\\WIDESEA_StockService.csproj|solutionrelative:widesea_stockservice\\stockserivce.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_dto\\stock\\stockdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\stock\\stockdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{49716D78-720D-475D-948C-0FC6C5F079E5}|WIDESEA_IStockService\\WIDESEA_IStockService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_istockservice\\istockservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{49716D78-720D-475D-948C-0FC6C5F079E5}|WIDESEA_IStockService\\WIDESEA_IStockService.csproj|solutionrelative:widesea_istockservice\\istockservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     }
   ],
   "DocumentGroupContainers": [
@@ -14,7 +22,7 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 3,
+          "SelectedChildIndex": 4,
           "Children": [
             {
               "$type": "Bookmark",
@@ -25,20 +33,42 @@
               "Name": "ST:0:0:{40ea2e6b-2121-4bb8-a43e-c83c04b51041}"
             },
             {
-              "$type": "Bookmark",
-              "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
+              "$type": "Document",
+              "DocumentIndex": 1,
+              "Title": "StockDTO.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\StockDTO.cs",
+              "RelativeDocumentMoniker": "WIDESEA_DTO\\Stock\\StockDTO.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\StockDTO.cs",
+              "RelativeToolTip": "WIDESEA_DTO\\Stock\\StockDTO.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAABYAAABBAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-02-06T02:56:51.397Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 2,
+              "Title": "IStockService.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStockService\\IStockService.cs",
+              "RelativeDocumentMoniker": "WIDESEA_IStockService\\IStockService.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStockService\\IStockService.cs",
+              "RelativeToolTip": "WIDESEA_IStockService\\IStockService.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAABsAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-02-06T02:13:53.794Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
               "DocumentIndex": 0,
-              "Title": "appsettings.json",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\appsettings.json",
-              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\appsettings.json",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\appsettings.json",
-              "RelativeToolTip": "WIDESEA_WMSServer\\appsettings.json",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAB4AAAAZAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
-              "WhenOpened": "2026-01-26T08:48:58.694Z",
+              "Title": "StockSerivce.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockService\\StockSerivce.cs",
+              "RelativeDocumentMoniker": "WIDESEA_StockService\\StockSerivce.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockService\\StockSerivce.cs",
+              "RelativeToolTip": "WIDESEA_StockService\\StockSerivce.cs",
+              "ViewState": "AgIAAO8AAAAAAAAAAAAIwB8AAAAgAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-02-06T01:53:49.077Z",
               "EditorCaption": ""
             }
           ]
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockDTO.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockDTO.cs
new file mode 100644
index 0000000..7271d09
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockDTO.cs
@@ -0,0 +1,48 @@
+锘縩amespace WIDESEA_DTO.Stock
+{
+    public class StockDTO
+    {
+        /// <summary>
+        /// 鏉ユ簮鎵樼洏鍙�
+        /// </summary>
+        public string? SourcePalletNo { get; set; }
+
+        /// <summary>
+        /// 鐩爣鎵樼洏鍙�
+        /// </summary>
+        public string? TargetPalletNo { get; set; }
+
+        /// <summary>
+        /// 鏉ユ簮绾夸綋缂栧彿
+        /// </summary>
+        public string? SourceLineNo { get; set; } = string.Empty;
+
+        /// <summary>
+        /// 鐩爣绾夸綋缂栧彿
+        /// </summary>
+        public string? TargetLineNo { get; set; } = string.Empty;
+
+        /// <summary>
+        /// 鑾峰彇鎴栬缃笌瀹炰綋鍏宠仈鐨勫簱瀛樻槑缁嗚褰曢泦鍚堛��
+        /// </summary>
+        public List<StockDetailDTO> Details { get; set; } = new List<StockDetailDTO>();
+    }
+
+    public class StockDetailDTO
+    {
+        /// <summary>
+        /// 鏁伴噺
+        /// </summary>
+        public int Quantity { get; set; }
+
+        /// <summary>
+        /// 閫氶亾
+        /// </summary>
+        public int Channel { get; set; }
+
+        /// <summary>
+        /// 璐ф牸鏉$爜
+        /// </summary>
+        public string CellBarcode { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockService.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockService.cs
index eb21726..aa5e341 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockService.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockService.cs
@@ -4,6 +4,7 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Core;
+using WIDESEA_DTO.Stock;
 
 namespace WIDESEA_IStockService
 {
@@ -16,5 +17,11 @@
         IStockInfoDetail_HtyService StockInfoDetail_HtyService { get; }
 
         IStockInfo_HtyService StockInfo_HtyService { get; }
+
+        Task<bool> GroupPallet(StockDTO stock);
+
+        Task<bool> ChangePallet(StockDTO stock);
+
+        Task<bool> SplitPallet(StockDTO stock);
     }
 }
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
index 5747dac..db183dd 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
@@ -1,13 +1,14 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+锘縰sing WIDESEA_Common.StockEnum;
+using WIDESEA_DTO.Stock;
 using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
 
 namespace WIDESEA_StockService
 {
-    public class StockSerivce:IStockService
+    /// <summary>
+    /// 搴撳瓨鏈嶅姟
+    /// </summary>
+    public class StockSerivce : IStockService
     {
         public IStockInfoDetailService StockInfoDetailService { get; }
 
@@ -16,6 +17,13 @@
 
         public IStockInfo_HtyService StockInfo_HtyService { get; }
 
+        /// <summary>
+        /// 鏋勯�犲嚱鏁�
+        /// </summary>
+        /// <param name="stockInfoDetailService">搴撳瓨鏄庣粏鏈嶅姟</param>
+        /// <param name="stockInfoService">搴撳瓨鏈嶅姟</param>
+        /// <param name="stockInfoDetail_HtyService">搴撳瓨鏄庣粏鍘嗗彶鏈嶅姟</param>
+        /// <param name="stockInfo_HtyService">搴撳瓨鍘嗗彶鏈嶅姟</param>
         public StockSerivce(IStockInfoDetailService stockInfoDetailService, IStockInfoService stockInfoService, IStockInfoDetail_HtyService stockInfoDetail_HtyService, IStockInfo_HtyService stockInfo_HtyService)
         {
             StockInfoDetailService = stockInfoDetailService;
@@ -23,5 +31,249 @@
             StockInfoDetail_HtyService = stockInfoDetail_HtyService;
             StockInfo_HtyService = stockInfo_HtyService;
         }
+
+        /// <summary>
+        /// 缁勭洏
+        /// </summary>
+        /// <param name="stock">缁勭洏鏁版嵁</param>
+        /// <returns>鏄惁鎴愬姛</returns>
+        public async Task<bool> GroupPallet(StockDTO stock)
+        {
+            // 缁勮鏄庣粏鏁版嵁
+            var now = DateTime.Now;
+            var details = stock.Details.Select(item => new Dt_StockInfoDetail()
+            {
+                MaterielCode = "鐢佃姱",
+                StockQuantity = item.Quantity,
+                Unit = "PCS",
+                Creater = "system",
+                OrderNo = "111",
+                ProductionDate = now.ToString(),
+                EffectiveDate = now.AddYears(1).ToString(),
+                SerialNumber = item.CellBarcode,
+                InboundOrderRowNo = item.Channel,
+                MaterielName = "鐢佃姱",
+                Status = StockStatusEmun.缁勭洏鏆傚瓨.GetHashCode(),
+            }).ToList();
+
+            // 濡傛灉鎵樼洏宸插瓨鍦紝鐩存帴鏂板鏄庣粏
+            var existingStock = StockInfoService.Repository.QueryFirst(s => s.PalletCode == stock.TargetPalletNo);
+            if (existingStock != null)
+            {
+                details.ForEach(detail => detail.StockId = existingStock.Id);
+                return await StockInfoDetailService.Repository.AddDataAsync(details) > 0;
+            }
+
+            // 鎵樼洏涓嶅瓨鍦ㄥ垯鍒涘缓骞跺啓鍏ユ槑缁�
+            var entity = new Dt_StockInfo()
+            {
+                PalletCode = stock.TargetPalletNo,
+                WarehouseId = 1,
+                StockStatus = 1,
+                Creater = "system",
+                Details = details
+            };
+
+            //Dt_Task dt_Task = new Dt_Task()
+            //{
+            //    TaskNum = 0,
+            //    PalletCode = stock.PalletNo,
+            //    PalletType = 1,
+            //    Roadway = "1",
+            //    TaskType = TaskTypeEnum.Inbound.GetHashCode(),
+            //    TaskStatus = TaskStatusEnum.New.GetHashCode(),
+            //    SourceAddress = stock.LineNo,
+            //    TargetAddress = "缁勭洏鍖�",
+            //    CurrentAddress = stock.LineNo,
+            //    NextAddress = "缁勭洏鍖�",
+            //    WarehouseId = 1,
+            //    Grade = 1,
+            //    Creater = "system",
+            //};
+
+            return StockInfoService.Repository.AddData(entity, x => x.Details);
+        }
+
+        /// <summary>
+        /// 鎹㈢洏
+        /// </summary>
+        /// <param name="stock">闇�瑕佹崲鐩樼殑鏄庣粏鏁版嵁</param>
+        /// <returns>鏄惁鎴愬姛</returns>
+        public async Task<bool> ChangePallet(StockDTO stock)
+        {
+            // 鍙傛暟鏍¢獙
+            if (stock == null || string.IsNullOrWhiteSpace(stock.TargetPalletNo) || string.IsNullOrWhiteSpace(stock.SourcePalletNo))
+            {
+                return false;
+            }
+
+            // 鏂版棫鎵樼洏涓�鑷翠笉澶勭悊
+            if (string.Equals(stock.SourcePalletNo, stock.TargetPalletNo, StringComparison.OrdinalIgnoreCase))
+            {
+                return false;
+            }
+
+            // 鏌ヨ婧愭墭鐩�
+            var sourceStock = StockInfoService.Repository.QueryFirst(s => s.PalletCode == stock.SourcePalletNo);
+            if (sourceStock == null)
+            {
+                return false;
+            }
+
+            // 鏌ヨ鎴栧垱寤虹洰鏍囨墭鐩�
+            var targetStock = StockInfoService.Repository.QueryFirst(s => s.PalletCode == stock.TargetPalletNo);
+            if (targetStock == null)
+            {
+                var newStock = new Dt_StockInfo()
+                {
+                    PalletCode = stock.TargetPalletNo,
+                    WarehouseId = sourceStock.WarehouseId,
+                    StockStatus = sourceStock.StockStatus,
+                    Creater = "system"
+                };
+
+                var newId = StockInfoService.Repository.AddData(newStock);
+                if (newId <= 0)
+                {
+                    return false;
+                }
+
+                targetStock = newStock;
+                targetStock.Id = newId;
+            }
+
+            // 鑾峰彇闇�瑕佽浆绉荤殑鏉$爜
+            var serialNumbers = stock.Details.Select(d => d.CellBarcode).Distinct().ToList();
+            if (!serialNumbers.Any())
+            {
+                return false;
+            }
+
+            // 鏌ヨ婧愭墭鐩樺搴旂殑鏄庣粏
+            var detailEntities = StockInfoDetailService.Repository.QueryData(d => d.StockId == sourceStock.Id && serialNumbers.Contains(d.SerialNumber));
+
+            if (!detailEntities.Any())
+            {
+                return false;
+            }
+
+            // 鍐欏叆鍘嗗彶璁板綍
+            var detailHistory = CreateDetailHistory(detailEntities, "鎹㈢洏");
+            if (await StockInfoDetail_HtyService.Repository.AddDataAsync(detailHistory) <= 0)
+            {
+                return false;
+            }
+
+            var stockHistory = CreateStockHistory(new List<Dt_StockInfo> { sourceStock, targetStock }, "鎹㈢洏");
+            if (await StockInfo_HtyService.Repository.AddDataAsync(stockHistory) <= 0)
+            {
+                return false;
+            }
+
+            // 鏇存柊鏄庣粏鐨勬墭鐩樹富閿�
+            detailEntities.ForEach(detail => detail.StockId = targetStock.Id);
+            return await StockInfoDetailService.Repository.UpdateDataAsync(detailEntities);
+        }
+
+        /// <summary>
+        /// 鎷嗙洏
+        /// </summary>
+        /// <param name="stock">闇�瑕佹媶鐩樼殑鏄庣粏鏁版嵁</param>
+        /// <returns>鏄惁鎴愬姛</returns>
+        public async Task<bool> SplitPallet(StockDTO stock)
+        {
+            // 鍙傛暟鏍¢獙
+            if (stock == null || string.IsNullOrWhiteSpace(stock.SourcePalletNo))
+            {
+                return false;
+            }
+
+            // 鏌ヨ婧愭墭鐩�
+            var sourceStock = StockInfoService.Repository.QueryFirst(s => s.PalletCode == stock.SourcePalletNo);
+            if (sourceStock == null)
+            {
+                return false;
+            }
+
+            // 鑾峰彇闇�瑕佹媶闄ょ殑鏉$爜
+            var serialNumbers = stock.Details.Select(d => d.CellBarcode).Distinct().ToList();
+            if (!serialNumbers.Any())
+            {
+                return false;
+            }
+
+            // 鏌ヨ婧愭墭鐩樺搴旂殑鏄庣粏
+            var detailEntities = StockInfoDetailService.Repository.QueryData(d => d.StockId == sourceStock.Id && serialNumbers.Contains(d.SerialNumber));
+            if (!detailEntities.Any())
+            {
+                return false;
+            }
+
+            // 鍐欏叆鍘嗗彶璁板綍
+            var detailHistory = CreateDetailHistory(detailEntities, "鎷嗙洏");
+            if (await StockInfoDetail_HtyService.Repository.AddDataAsync(detailHistory) <= 0)
+            {
+                return false;
+            }
+
+            var stockHistory = CreateStockHistory(new List<Dt_StockInfo> { sourceStock }, "鎷嗙洏");
+            if (await StockInfo_HtyService.Repository.AddDataAsync(stockHistory) <= 0)
+            {
+                return false;
+            }
+
+            // 鍒犻櫎鏄庣粏
+            return await StockInfoDetailService.Repository.DeleteDataAsync(detailEntities);
+        }
+
+        private List<Dt_StockInfoDetail_Hty> CreateDetailHistory(IEnumerable<Dt_StockInfoDetail> details, string operateType)
+        {
+            var now = DateTime.Now;
+            return details.Select(detail => new Dt_StockInfoDetail_Hty
+            {
+                SourceId = detail.Id,
+                OperateType = operateType,
+                InsertTime = now,
+                StockId = detail.StockId,
+                MaterielCode = detail.MaterielCode,
+                MaterielName = detail.MaterielName,
+                OrderNo = detail.OrderNo,
+                BatchNo = detail.BatchNo,
+                ProductionDate = detail.ProductionDate,
+                EffectiveDate = detail.EffectiveDate,
+                SerialNumber = detail.SerialNumber,
+                StockQuantity = detail.StockQuantity,
+                OutboundQuantity = detail.OutboundQuantity,
+                Status = detail.Status,
+                Unit = detail.Unit,
+                InboundOrderRowNo = detail.InboundOrderRowNo,
+                Remark = detail.Remark,
+                Creater = detail.Creater,
+                CreateDate = detail.CreateDate,
+                Modifier = detail.Modifier,
+                ModifyDate = detail.ModifyDate
+            }).ToList();
+        }
+
+        private List<Dt_StockInfo_Hty> CreateStockHistory(IEnumerable<Dt_StockInfo> stocks, string operateType)
+        {
+            var now = DateTime.Now;
+            return stocks.Select(stock => new Dt_StockInfo_Hty
+            {
+                SourceId = stock.Id,
+                OperateType = operateType,
+                InsertTime = now,
+                PalletCode = stock.PalletCode,
+                PalletType = stock.PalletType,
+                LocationCode = stock.LocationCode,
+                WarehouseId = stock.WarehouseId,
+                StockStatus = stock.StockStatus,
+                Remark = stock.Remark,
+                Creater = stock.Creater,
+                CreateDate = stock.CreateDate,
+                Modifier = stock.Modifier,
+                ModifyDate = stock.ModifyDate
+            }).ToList();
+        }
     }
-}
+}
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\350\265\204\346\226\231/\344\270\212\344\275\215\347\263\273\347\273\237\345\257\271\346\216\245/QKNY-MES-FW-MES\347\263\273\347\273\237\350\256\276\345\244\207\351\233\206\346\210\220\346\216\245\345\217\243\346\226\207\346\241\243-V2.35-20250711.docx" "b/\351\241\271\347\233\256\350\265\204\346\226\231/\350\256\276\345\244\207\345\215\217\350\256\256/\344\270\212\344\275\215\347\263\273\347\273\237\345\257\271\346\216\245/QKNY-MES-FW-MES\347\263\273\347\273\237\350\256\276\345\244\207\351\233\206\346\210\220\346\216\245\345\217\243\346\226\207\346\241\243-V2.35-20250711.docx"
similarity index 100%
rename from "\351\241\271\347\233\256\350\265\204\346\226\231/\344\270\212\344\275\215\347\263\273\347\273\237\345\257\271\346\216\245/QKNY-MES-FW-MES\347\263\273\347\273\237\350\256\276\345\244\207\351\233\206\346\210\220\346\216\245\345\217\243\346\226\207\346\241\243-V2.35-20250711.docx"
rename to "\351\241\271\347\233\256\350\265\204\346\226\231/\350\256\276\345\244\207\345\215\217\350\256\256/\344\270\212\344\275\215\347\263\273\347\273\237\345\257\271\346\216\245/QKNY-MES-FW-MES\347\263\273\347\273\237\350\256\276\345\244\207\351\233\206\346\210\220\346\216\245\345\217\243\346\226\207\346\241\243-V2.35-20250711.docx"
Binary files differ

--
Gitblit v1.9.3