From aefdecd0aa3226b7d00d1dc764241b82658b3be8 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期五, 06 三月 2026 10:41:02 +0800
Subject: [PATCH] 添加机器人客户端;更新 WCS 缓存及任务

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs                                                                            |   16 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Cache/RedisCacheService.cs                                                                   |   28 
 Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v18/DocumentLayout.json                                                                        |  431 ++++-
 Code/机械手客户端/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/C569B8B80C5D3640BC534EFC4D2E9EFE/EEF5B4E6C1E13E5E42E047DE7B74D577 |   81 +
 Code/机械手客户端/RobotClient/Program.cs                                                                                                              |  399 +++++
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotBarcodeGenerator.cs                                                                   |   28 
 Code/机械手客户端/RobotClient/Properties/launchSettings.json                                                                                          |   10 
 Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/CodeChunks.db                                                    |    0 
 Code/机械手客户端/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/BE43EC63E499EE468C0161FA83175A2D/340C5AFE3B0C2AB455087AFF43725D6E |    2 
 Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.json                                                                        |  235 ++-
 Code/机械手客户端/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/state.mpack                                                       |    0 
 Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs                                                                              |   74 +
 Code/机械手客户端/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/957CD3507E75254DAB50B67D1CAD4ABB/57E558275472B567970CA987458436D5 |   68 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Options/RedisOptions.cs                                                                      |    6 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs                                                                      |  207 ++
 Code/WCS/WIDESEAWCS_Server/.claude/settings.local.json                                                                                          |   10 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotSocketState.cs                                                                        |   89 +
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotClientManager.cs                                                                      |  149 ++
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs                                                                           |  108 +
 Code/机械手客户端/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/BE43EC63E499EE468C0161FA83175A2D/57E558275472B567970CA987458436D5 |    2 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json                                                                                   |    5 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Cache/HybridCacheService.cs                                                                  |   98 +
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Cache/CacheSyncBackgroundService.cs                                                          |    9 
 Code/机械手客户端/RobotClient/.dockerignore                                                                                                           |   30 
 Code/机械手客户端/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/957CD3507E75254DAB50B67D1CAD4ABB/89EE95323C118AB5E5FA0B5FC9E372D8 |   68 
 Code/机械手客户端/RobotClient/RobotClient.csproj                                                                                                      |   16 
 Code/机械手客户端/RobotClient/.vs/RobotClient.slnx/copilot-chat/bef6627e/sessions/36c312bd-395e-4534-89ed-c65ca163a4e7                                |    0 
 Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs                                                                               |   91 +
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotMessageHandler.cs                                                                     |  275 +++
 Code/机械手客户端/RobotClient/.vs/RobotClient.slnx/v18/DocumentLayout.backup.json                                                                     |   49 
 Code/机械手客户端/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/C569B8B80C5D3640BC534EFC4D2E9EFE/57E558275472B567970CA987458436D5 |   81 +
 Code/机械手客户端/RobotClient/RobotClient.slnx                                                                                                        |    3 
 Code/机械手客户端/RobotClient/.vs/RobotClient.slnx/v18/DocumentLayout.json                                                                            |   49 
 Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/18.0.988.22099/SemanticSymbols.db                                               |    0 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs                                                                                |  616 +-------
 Code/机械手客户端/RobotClient/CLAUDE.md                                                                                                               |   83 +
 Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.backup.json                                                                 |  211 +-
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs                                                                         |    2 
 Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs                                                             |   11 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotStateManager.cs                                                                       |  123 +
 Code/机械手客户端/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/E6DFDF72DCCF3C46ABA29988BCD5456A/57E558275472B567970CA987458436D5 |   92 +
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Caches/ICacheService.cs                                                                              |   18 
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Caches/MemoryCacheService.cs                                                                         |   22 
 Code/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs                                                                             |    8 
 Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs                                                                            |  139 +
 Code/机械手客户端/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/E6DFDF72DCCF3C46ABA29988BCD5456A/F977376DB3B74CAF672118CAACA4BA95 |   92 +
 Code/机械手客户端/RobotClient/Dockerfile                                                                                                              |   28 
 47 files changed, 3,353 insertions(+), 809 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Server/.claude/settings.local.json b/Code/WCS/WIDESEAWCS_Server/.claude/settings.local.json
new file mode 100644
index 0000000..5970394
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/.claude/settings.local.json
@@ -0,0 +1,10 @@
+{
+  "permissions": {
+    "allow": [
+      "Bash(dotnet new:*)",
+      "Bash(dotnet add:*)",
+      "Bash(dotnet test:*)",
+      "Bash(dotnet build WIDESEAWCS_Server.sln --nologo -v q)"
+    ]
+  }
+}
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 d87a3a9..aeece22 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 ecb39d9..4f764c8 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 1b17578..d2e73d4 100644
--- a/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v18/DocumentLayout.json
+++ b/Code/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v18/DocumentLayout.json
@@ -3,20 +3,60 @@
   "WorkspaceRootPath": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\",
   "Documents": [
     {
+      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_core\\http\\http\\httpclienthelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\http\\http\\httpclienthelper.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\\robottaskprocessor.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\robotjob\\robottaskprocessor.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\\robotmessagehandler.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\robotjob\\robotmessagehandler.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\\conveyorlinenewjob\\commonconveyorlinenewjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinenewjob\\commonconveyorlinenewjob.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:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_tasks\\socketserver\\tcpsocketserver.clients.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.clients.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_common\\taskenum\\taskenumhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\taskenum\\taskenumhelper.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:{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\\routerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\service\\routerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_common\\taskenum\\tasktypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\taskenum\\tasktypeenum.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\\robotstatemanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\robotjob\\robotstatemanager.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\\robotclientmanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\robotjob\\robotclientmanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{F9886971-C3B2-4334-B014-D5109F2041DE}|WIDESEAWCS_RedisService\\WIDESEAWCS_RedisService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_redisservice\\cache\\hybridcacheservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{F9886971-C3B2-4334-B014-D5109F2041DE}|WIDESEAWCS_RedisService\\WIDESEAWCS_RedisService.csproj|solutionrelative:wideseawcs_redisservice\\cache\\hybridcacheservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{F9886971-C3B2-4334-B014-D5109F2041DE}|WIDESEAWCS_RedisService\\WIDESEAWCS_RedisService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_redisservice\\connection\\redisconnectionmanager.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{F9886971-C3B2-4334-B014-D5109F2041DE}|WIDESEAWCS_RedisService\\WIDESEAWCS_RedisService.csproj|solutionrelative:wideseawcs_redisservice\\connection\\redisconnectionmanager.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}",
@@ -27,28 +67,32 @@
       "RelativeMoniker": "D:0:0:{F9886971-C3B2-4334-B014-D5109F2041DE}|WIDESEAWCS_RedisService\\WIDESEAWCS_RedisService.csproj|solutionrelative:wideseawcs_redisservice\\extensions\\redisservicesetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{F9886971-C3B2-4334-B014-D5109F2041DE}|WIDESEAWCS_RedisService\\WIDESEAWCS_RedisService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_redisservice\\cache\\rediscacheservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{F9886971-C3B2-4334-B014-D5109F2041DE}|WIDESEAWCS_RedisService\\WIDESEAWCS_RedisService.csproj|solutionrelative:wideseawcs_redisservice\\cache\\rediscacheservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_common\\httpenum\\configkey.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\httpenum\\configkey.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\\redis\u4F7F\u7528\u6848\u4F8B.md||{EFC0BB08-EA7D-40C6-A696-C870411A895B}",
-      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\redis\u4F7F\u7528\u6848\u4F8B.md||{EFC0BB08-EA7D-40C6-A696-C870411A895B}"
+      "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_common\\redis\\redisname.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\redis\\redisname.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\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\program.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.server.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.server.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_core\\http\\http\\httpclienthelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\http\\http\\httpclienthelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_core\\http\\httprequesthelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\http\\httprequesthelper.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\\conveyorlinenewjob\\conveyorline\\checkpalletposition.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinenewjob\\conveyorline\\checkpalletposition.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_common\\httpenum\\baseapi.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\httpenum\\baseapi.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\\conveyorlinenewjob\\commonconveyorlinenewjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinenewjob\\commonconveyorlinenewjob.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:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|d:\\git\\shanmeixinnengyuan\\code\\wcs\\wideseawcs_server\\wideseawcs_common\\redis\\redisprefix.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\redis\\redisprefix.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     }
   ],
   "DocumentGroupContainers": [
@@ -58,7 +102,7 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 14,
+          "SelectedChildIndex": 10,
           "Children": [
             {
               "$type": "Bookmark",
@@ -74,156 +118,289 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 1,
-              "Title": "TcpSocketServer.Clients.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SocketServer\\TcpSocketServer.Clients.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\SocketServer\\TcpSocketServer.Clients.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SocketServer\\TcpSocketServer.Clients.cs",
-              "RelativeToolTip": "WIDESEAWCS_Tasks\\SocketServer\\TcpSocketServer.Clients.cs",
-              "ViewState": "AgIAAEkAAAAAAAAAAAAIwAkAAAAZAAAAAAAAAA==",
+              "DocumentIndex": 6,
+              "Title": "TaskEnumHelper.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\TaskEnum\\TaskEnumHelper.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Common\\TaskEnum\\TaskEnumHelper.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\TaskEnum\\TaskEnumHelper.cs",
+              "RelativeToolTip": "WIDESEAWCS_Common\\TaskEnum\\TaskEnumHelper.cs",
+              "ViewState": "AgIAABQAAAAAAAAAAAAgwDUAAAAIAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-03-02T04:08:38.428Z",
+              "WhenOpened": "2026-03-05T07:09:01.343Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
               "DocumentIndex": 3,
-              "Title": "RedisConnectionManager.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_RedisService\\Connection\\RedisConnectionManager.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_RedisService\\Connection\\RedisConnectionManager.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_RedisService\\Connection\\RedisConnectionManager.cs",
-              "RelativeToolTip": "WIDESEAWCS_RedisService\\Connection\\RedisConnectionManager.cs",
-              "ViewState": "AgIAAD0AAAAAAAAAAAAuwE8AAAAIAAAAAAAAAA==",
+              "Title": "RobotMessageHandler.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RobotJob\\RobotMessageHandler.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\RobotJob\\RobotMessageHandler.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RobotJob\\RobotMessageHandler.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\RobotJob\\RobotMessageHandler.cs",
+              "ViewState": "AgIAAMgAAAAAAAAAAAAMwNIAAABHAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-03-02T03:52:53.567Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 2,
-              "Title": "HybridCacheService.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_RedisService\\Cache\\HybridCacheService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_RedisService\\Cache\\HybridCacheService.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_RedisService\\Cache\\HybridCacheService.cs",
-              "RelativeToolTip": "WIDESEAWCS_RedisService\\Cache\\HybridCacheService.cs",
-              "ViewState": "AgIAAOkAAAAAAAAAAAAqwPoAAAAjAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-03-02T03:39:18.734Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 5,
-              "Title": "RedisServiceSetup.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_RedisService\\Extensions\\RedisServiceSetup.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_RedisService\\Extensions\\RedisServiceSetup.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_RedisService\\Extensions\\RedisServiceSetup.cs",
-              "RelativeToolTip": "WIDESEAWCS_RedisService\\Extensions\\RedisServiceSetup.cs",
-              "ViewState": "AgIAADgAAAAAAAAAAAAmwCIAAAAMAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-03-02T03:33:54.548Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 8,
-              "Title": "Program.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Program.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Program.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Program.cs",
-              "RelativeToolTip": "WIDESEAWCS_Server\\Program.cs",
-              "ViewState": "AgIAACQAAAAAAAAAAAAqwDYAAAAeAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-03-02T03:16:21.765Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 6,
-              "Title": "RedisCacheService.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_RedisService\\Cache\\RedisCacheService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_RedisService\\Cache\\RedisCacheService.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_RedisService\\Cache\\RedisCacheService.cs",
-              "RelativeToolTip": "WIDESEAWCS_RedisService\\Cache\\RedisCacheService.cs",
-              "ViewState": "AgIAABoAAAAAAAAAAAAmwCkAAAAoAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-03-02T03:06:06.952Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 7,
-              "Title": "Redis\u4F7F\u7528\u6848\u4F8B.md",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Redis\u4F7F\u7528\u6848\u4F8B.md",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Redis\u4F7F\u7528\u6848\u4F8B.md",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Redis\u4F7F\u7528\u6848\u4F8B.md",
-              "RelativeToolTip": "WIDESEAWCS_Server\\Redis\u4F7F\u7528\u6848\u4F8B.md",
-              "ViewState": "AgIAAAgBAAAAAAAAAAAAABcBAAAPAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001818|",
-              "WhenOpened": "2026-03-02T02:59:29.028Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 9,
-              "Title": "HttpClientHelper.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Http\\HTTP\\HttpClientHelper.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Http\\HTTP\\HttpClientHelper.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Http\\HTTP\\HttpClientHelper.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\Http\\HTTP\\HttpClientHelper.cs",
-              "ViewState": "AgIAABQAAAAAAAAAAADwvygAAABLAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-03-02T02:58:50.075Z",
+              "WhenOpened": "2026-03-05T03:25:13.299Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
               "DocumentIndex": 10,
-              "Title": "CheckPalletPosition.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineNewJob\\ConveyorLine\\CheckPalletPosition.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineNewJob\\ConveyorLine\\CheckPalletPosition.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineNewJob\\ConveyorLine\\CheckPalletPosition.cs",
-              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineNewJob\\ConveyorLine\\CheckPalletPosition.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAYAAAAeAAAAAAAAAA==",
+              "Title": "TaskTypeEnum.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\TaskEnum\\TaskTypeEnum.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Common\\TaskEnum\\TaskTypeEnum.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\TaskEnum\\TaskTypeEnum.cs",
+              "RelativeToolTip": "WIDESEAWCS_Common\\TaskEnum\\TaskTypeEnum.cs",
+              "ViewState": "AgIAACEAAAAAAAAAAADwvzwAAAAYAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-28T08:42:47.236Z",
+              "WhenOpened": "2026-03-05T03:17:26.276Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 4,
+              "DocumentIndex": 2,
+              "Title": "RobotTaskProcessor.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RobotJob\\RobotTaskProcessor.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\RobotJob\\RobotTaskProcessor.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RobotJob\\RobotTaskProcessor.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\RobotJob\\RobotTaskProcessor.cs",
+              "ViewState": "AgIAAIgAAAAAAAAAAAD4v54AAAApAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-05T02:51:55.934Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 15,
+              "Title": "RedisServiceSetup.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_RedisService\\Extensions\\RedisServiceSetup.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_RedisService\\Extensions\\RedisServiceSetup.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_RedisService\\Extensions\\RedisServiceSetup.cs",
+              "RelativeToolTip": "WIDESEAWCS_RedisService\\Extensions\\RedisServiceSetup.cs",
+              "ViewState": "AgIAABkAAAAAAAAAAAAtwDYAAAA5AAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-03T07:51:50.169Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 7,
+              "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": "AgIAAD0AAAAAAAAAAAAMwEcAAAAdAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-03T03:03:26.246Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 19,
+              "Title": "HttpRequestHelper.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Http\\HttpRequestHelper.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Http\\HttpRequestHelper.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Http\\HttpRequestHelper.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\Http\\HttpRequestHelper.cs",
+              "ViewState": "AgIAAJ0AAAAAAAAAAADwv7AAAAAiAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-03T02:38:46.736Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
+              "Title": "TaskService.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
+              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
+              "ViewState": "AgIAAHcBAAAAAAAAAAAMwJABAAAVAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-03T02:28:05.416Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 20,
+              "Title": "BaseAPI.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\HttpEnum\\BaseAPI.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Common\\HttpEnum\\BaseAPI.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\HttpEnum\\BaseAPI.cs",
+              "RelativeToolTip": "WIDESEAWCS_Common\\HttpEnum\\BaseAPI.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAABoAAAAWAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-03T02:22:49.339Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 16,
+              "Title": "ConfigKey.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\HttpEnum\\ConfigKey.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Common\\HttpEnum\\ConfigKey.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\HttpEnum\\ConfigKey.cs",
+              "RelativeToolTip": "WIDESEAWCS_Common\\HttpEnum\\ConfigKey.cs",
+              "ViewState": "AgIAABEAAAAAAAAAAADwvwkAAAASAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-03T02:19:51.695Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 1,
+              "Title": "HttpClientHelper.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Http\\HTTP\\HttpClientHelper.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Http\\HTTP\\HttpClientHelper.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Http\\HTTP\\HttpClientHelper.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\Http\\HTTP\\HttpClientHelper.cs",
+              "ViewState": "AgIAAFgAAAAAAAAAAAD4v1sAAAAtAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-03T02:13:21.506Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 17,
+              "Title": "RedisName.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\Redis\\RedisName.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Common\\Redis\\RedisName.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\Redis\\RedisName.cs",
+              "RelativeToolTip": "WIDESEAWCS_Common\\Redis\\RedisName.cs",
+              "ViewState": "AgIAAAwAAAAAAAAAAAAswBwAAAAfAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-03T01:52:46.175Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 22,
+              "Title": "RedisPrefix.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\Redis\\RedisPrefix.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Common\\Redis\\RedisPrefix.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\Redis\\RedisPrefix.cs",
+              "RelativeToolTip": "WIDESEAWCS_Common\\Redis\\RedisPrefix.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAA4AAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-03T01:50:08.45Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 9,
+              "Title": "RouterService.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\RouterService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Service\\RouterService.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\RouterService.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Service\\RouterService.cs",
+              "ViewState": "AgIAAKoAAAAAAAAAAAAawMEAAABrAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-02T10:10:38.22Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 13,
+              "Title": "HybridCacheService.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_RedisService\\Cache\\HybridCacheService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_RedisService\\Cache\\HybridCacheService.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_RedisService\\Cache\\HybridCacheService.cs",
+              "RelativeToolTip": "WIDESEAWCS_RedisService\\Cache\\HybridCacheService.cs",
+              "ViewState": "AgIAAHUCAAAAAAAAAAAswI4CAABaAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-02T10:04:18.563Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 21,
+              "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": "AgIAAHoAAAAAAAAAAAAswIgAAABBAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-02T09:22:53.922Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 18,
+              "Title": "TcpSocketServer.Server.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SocketServer\\TcpSocketServer.Server.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\SocketServer\\TcpSocketServer.Server.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\SocketServer\\TcpSocketServer.Server.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\SocketServer\\TcpSocketServer.Server.cs",
+              "ViewState": "AgIAABEAAAAAAAAAAAAhwCMAAAAbAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-02T09:11:28.744Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 8,
+              "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": "AgIAADMAAAAAAAAAAAAgwEgAAAAZAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-02T09:07:48.915Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 14,
               "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": "AgIAACUAAAAAAAAAAAAYwCsAAAAeAAAAAAAAAA==",
+              "ViewState": "AgIAADoAAAAAAAAAAAAYwE4AAAAbAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
-              "WhenOpened": "2026-02-28T05:50:10.851Z",
-              "EditorCaption": ""
+              "WhenOpened": "2026-02-28T05:50:10.851Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 11,
+              "DocumentIndex": 4,
               "Title": "CommonConveyorLineNewJob.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineNewJob\\CommonConveyorLineNewJob.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineNewJob\\CommonConveyorLineNewJob.cs",
               "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineNewJob\\CommonConveyorLineNewJob.cs",
               "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineNewJob\\CommonConveyorLineNewJob.cs",
-              "ViewState": "AgIAAEoAAAAAAAAAAAAAwGAAAABTAAAAAAAAAA==",
+              "ViewState": "AgIAAEAAAAAAAAAAAAAswHgAAAAcAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2026-02-28T05:48:06.526Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 0,
+              "DocumentIndex": 11,
+              "Title": "RobotStateManager.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RobotJob\\RobotStateManager.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\RobotJob\\RobotStateManager.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RobotJob\\RobotStateManager.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\RobotJob\\RobotStateManager.cs",
+              "ViewState": "AgIAAFoAAAAAAAAAAAAmwAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-05T02:50:08.257Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 12,
+              "Title": "RobotClientManager.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RobotJob\\RobotClientManager.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\RobotJob\\RobotClientManager.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RobotJob\\RobotClientManager.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\RobotJob\\RobotClientManager.cs",
+              "ViewState": "AgIAADYAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-05T01:55:28.903Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 5,
               "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": "AgIAADgAAAAAAAAAAAAtwEIAAAAPAAAAAAAAAA==",
+              "ViewState": "AgIAAGMAAAAAAAAAAAAcwHYAAABVAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2026-02-05T05:38:04.031Z",
               "EditorCaption": ""
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs
index ccf165e..81b46d6 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs
@@ -32,7 +32,7 @@
                 return TaskTypeGroup.OutbondGroup;
             }
             // 灏濊瘯灏嗕换鍔$被鍨嬭浆鎹负TaskInStatusEnum鏋氫妇绫诲瀷锛屽鏋滄垚鍔燂紝杩斿洖InboundGroup
-            else if (!int.TryParse(Enum.Parse<TaskOutboundTypeEnum>(taskTypeStr).ToString(), out result))
+            else if (!int.TryParse(Enum.Parse<TaskInStatusEnum>(taskTypeStr).ToString(), out result))
             {
                 return TaskTypeGroup.InboundGroup;
             }
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs
index 561e503..5e259a7 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs
@@ -28,7 +28,13 @@
         /// 璐ㄦ鍏ュ簱
         /// </summary>
         [Description("璐ㄦ鍏ュ簱")]
-        InQuality = 203
+        InQuality = 203,
+
+        /// <summary>
+        /// 绌虹鍏ュ簱
+        /// </summary>
+        [Description("绌虹鍏ュ簱")]
+        InEmpty = 600,
     }
 
     public enum TaskOutboundTypeEnum
@@ -53,6 +59,12 @@
         /// </summary>
         [Description("璐ㄦ鍑哄簱")]
         OutQuality = 103,
+
+        /// <summary>
+        /// 绌虹鍑哄簱
+        /// </summary>
+        [Description("绌虹鍑哄簱")]
+        OutEmpty = 140,
     }
 
     public enum TaskRelocationTypeEnum
@@ -98,4 +110,98 @@
         [Description("鎹㈢洏浠诲姟")]
         SplitPallet = 520
     }
+
+    public enum TaskTypeEnum
+    {
+        /// <summary>
+        /// 棰嗘枡鍑哄簱
+        /// </summary>
+        [Description("棰嗘枡鍑哄簱")]
+        Outbound = 100,
+        /// <summary>
+        /// 鐩樼偣鍑哄簱
+        /// </summary>
+        [Description("鐩樼偣鍑哄簱")]
+        OutInventory = 110,
+        /// <summary>
+        /// 鍒嗘嫞鍑哄簱
+        /// </summary>
+        [Description("鍒嗘嫞鍑哄簱")]
+        OutPick = 120,
+        /// <summary>
+        /// 璐ㄦ鍑哄簱
+        /// </summary>
+        [Description("璐ㄦ鍑哄簱")]
+        OutQuality = 130,
+
+        /// <summary>
+        /// 绌虹鍑哄簱
+        /// </summary>
+        [Description("绌虹鍑哄簱")]
+        OutEmpty = 140,
+
+        /// <summary>
+        /// MES鍑哄簱
+        /// </summary>
+        [Description("MES鍑哄簱")]
+        MesOutbound = 200,
+
+        /// <summary>
+        /// MES鎵嬪姩鍑哄簱
+        /// </summary>
+        [Description("MES鎵嬪姩鍑哄簱")]
+        MesHandOutbound = 210,
+
+        /// <summary>
+        /// MES鎵嬪姩鎷i�夊嚭搴�
+        /// </summary>
+        [Description("MES鎵嬪姩鎷i�夊嚭搴�")]
+        MesHandPickOutbound = 220,
+
+        /// <summary>
+        /// 閲囪喘鍏ュ簱
+        /// </summary>
+        [Description("閲囪喘鍏ュ簱")]
+        Inbound = 510,
+        /// <summary>
+        /// 鐩樼偣鍏ュ簱
+        /// </summary>
+        [Description("鐩樼偣鍏ュ簱")]
+        InInventory = 520,
+        /// <summary>
+        /// 鍒嗘嫞鍏ュ簱
+        /// </summary>
+        [Description("鍒嗘嫞鍏ュ簱")]
+        InPick = 530,
+        /// <summary>
+        /// 璐ㄦ鍏ュ簱
+        /// </summary>
+        [Description("璐ㄦ鍏ュ簱")]
+        InQuality = 540,
+
+        /// <summary>
+        /// 鐢熶骇閫�鏂�
+        /// </summary>
+        [Description("鐢熶骇閫�鏂�")]
+        ProductionReturn = 550,
+
+        /// <summary>
+        /// MES閫�鏂�
+        /// </summary>
+        [Description("MES閫�鏂�")]
+        MesMatReturn = 560,
+
+        /// <summary>
+        /// 绌虹鍏ュ簱
+        /// </summary>
+        [Description("绌虹鍏ュ簱")]
+        InEmpty = 600,
+
+        /// <summary>
+        /// 宸烽亾鍐呯Щ搴�
+        /// </summary>
+        [Description("宸烽亾鍐呯Щ搴�")]
+        Relocation = 900
+
+    }
 }
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Caches/ICacheService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Caches/ICacheService.cs
index 85ef381..1600ebb 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Caches/ICacheService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Caches/ICacheService.cs
@@ -247,6 +247,24 @@
         bool TryUpdateIfChanged<T>(string key, T newValue, int expireSeconds = -1) where T : class;
 
         /// <summary>
+        /// 瀹夊叏鏇存柊锛氫粎褰撳唴瀛樼紦瀛樹腑鐨勫�间笌expectedVersion鍖归厤鏃舵墠鏇存柊
+        /// 闃叉骞跺彂鍐欏叆鏃舵棫鍊艰鐩栨柊鍊硷紙閫傜敤浜庡绾跨▼/澶氳繘绋嬪満鏅級
+        /// </summary>
+        /// <typeparam name="T">鍊肩被鍨�</typeparam>
+        /// <param name="key">缂撳瓨閿�</param>
+        /// <param name="newValue">鏂板��</param>
+        /// <param name="expectedVersion">鏈熸湜鐨勭増鏈紙閫氬父鏄棫瀵硅薄鐨勬煇涓睘鎬у�硷紝濡傛椂闂存埑锛�</param>
+        /// <param name="versionExtractor">浠庡璞℃彁鍙栫増鏈彿鐨勫嚱鏁�</param>
+        /// <param name="expireSeconds">杩囨湡鏃堕棿锛堢锛�</param>
+        /// <returns>鏄惁鏇存柊鎴愬姛</returns>
+        bool TrySafeUpdate<T>(
+            string key,
+            T newValue,
+            object? expectedVersion,
+            Func<T, object?> versionExtractor,
+            int expireSeconds = -1) where T : class;
+
+        /// <summary>
         /// 鑾峰彇鎴栨坊鍔狅細Key瀛樺湪鍒欒繑鍥炵幇鏈夊�硷紝涓嶅瓨鍦ㄥ垯娣诲姞骞惰繑鍥炴柊鍊�
         /// </summary>
         string GetOrAdd(string key, string value, int expireSeconds = -1);
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Caches/MemoryCacheService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Caches/MemoryCacheService.cs
index a1c7c18..1daeb3a 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Caches/MemoryCacheService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Caches/MemoryCacheService.cs
@@ -392,6 +392,28 @@
             return true;
         }
 
+        public bool TrySafeUpdate<T>(
+            string key,
+            T newValue,
+            object? expectedVersion,
+            Func<T, object?> versionExtractor,
+            int expireSeconds = -1) where T : class
+        {
+            var existing = Get<T>(key);
+            if (existing == null) return false;
+
+            // 妫�鏌ョ増鏈槸鍚﹀尮閰�
+            var currentVersion = versionExtractor(existing);
+            if (!Equals(currentVersion, expectedVersion))
+            {
+                return false; // 鐗堟湰涓嶅尮閰嶏紝鎷掔粷鏇存柊
+            }
+
+            Remove(key);
+            AddObject(key, newValue, expireSeconds);
+            return true;
+        }
+
         public string GetOrAdd(string key, string value, int expireSeconds = -1)
         {
             var existing = _cache.Get(key)?.ToString();
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Cache/CacheSyncBackgroundService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Cache/CacheSyncBackgroundService.cs
index c366493..7110510 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Cache/CacheSyncBackgroundService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Cache/CacheSyncBackgroundService.cs
@@ -132,6 +132,15 @@
                     try
                     {
                         var keyStr = redisKey.ToString();
+
+                        // 璺宠繃鎺掗櫎鐨刱ey鍓嶇紑锛堝璁惧鐘舵�佺瓑棰戠箒鍙樺姩鐨勬暟鎹級
+                        if (_options.SyncExcludePrefixes.Any(prefix => keyStr.StartsWith(prefix, StringComparison.Ordinal)))
+                        {
+                            _logger.LogTrace("璺宠繃鎺掗櫎鐨刱ey: {Key}", keyStr);
+                            skippedCount++;
+                            continue;
+                        }
+
                         _trackedKeys.AddOrUpdate(keyStr, true, (_, _) => true);
 
                         // 鑾峰彇Redis涓殑鍊�
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Cache/HybridCacheService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Cache/HybridCacheService.cs
index c991362..36f0375 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Cache/HybridCacheService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Cache/HybridCacheService.cs
@@ -573,6 +573,104 @@
             }
         }
 
+        /// <summary>
+        /// 瀹夊叏鏇存柊锛氫粎褰撳唴瀛樼紦瀛樹腑鐨勫�间笌expectedVersion鍖归厤鏃舵墠鏇存柊
+        /// 闃叉骞跺彂鍐欏叆鏃舵棫鍊艰鐩栨柊鍊�
+        /// </summary>
+        /// <typeparam name="T">鍊肩被鍨�</typeparam>
+        /// <param name="key">缂撳瓨閿�</param>
+        /// <param name="newValue">鏂板��</param>
+        /// <param name="expectedVersion">鏈熸湜鐨勭増鏈紙閫氬父鏄棫瀵硅薄鐨勫搱甯屽�兼垨鏃堕棿鎴筹級</param>
+        /// <param name="versionExtractor">浠庡璞℃彁鍙栫増鏈彿鐨勫嚱鏁�</param>
+        /// <param name="expireSeconds">杩囨湡鏃堕棿</param>
+        /// <returns>鏄惁鏇存柊鎴愬姛</returns>
+        public bool TrySafeUpdate<T>(
+            string key,
+            T newValue,
+            object? expectedVersion,
+            Func<T, object?> versionExtractor,
+            int expireSeconds = -1) where T : class
+        {
+            var fullKey = BuildKey(key);
+
+            // 浠嶳edis鑾峰彇褰撳墠鍊�
+            string? existingJson = null;
+            T? existingValue = default;
+            if (RedisAvailable)
+            {
+                try
+                {
+                    var value = _connectionManager.GetDatabase().StringGet(fullKey);
+                    if (!value.IsNullOrEmpty)
+                    {
+                        existingJson = value.ToString();
+                        existingValue = _serializer.Deserialize<T>(existingJson);
+                    }
+                }
+                catch { }
+            }
+
+            // 濡傛灉Redis涓嶅彲鐢紝浠庡唴瀛樼紦瀛樿幏鍙�
+            if (existingValue == null && _options.EnableL1Cache)
+            {
+                if (_memoryCache.TryGetValue(fullKey, out string? cached) && cached != null)
+                {
+                    existingValue = _serializer.Deserialize<T>(cached);
+                    existingJson = cached;
+                }
+                else
+                {
+                    return false;
+                }
+            }
+
+            // 妫�鏌ョ増鏈槸鍚﹀尮閰�
+            if (existingValue != null)
+            {
+                var currentVersion = versionExtractor(existingValue);
+                if (!Equals(currentVersion, expectedVersion))
+                {
+                    _logger.LogWarning("TrySafeUpdate鐗堟湰涓嶅尮閰�, key={Key}, expected={Expected}, current={Current}",
+                        key, expectedVersion, currentVersion);
+                    return false; // 鐗堟湰涓嶅尮閰嶏紝鎷掔粷鏇存柊
+                }
+            }
+
+            // 鐗堟湰鍖归厤锛屾墽琛屾洿鏂�
+            var newJson = _serializer.Serialize(newValue);
+
+            // 鍏堝啓鍏edis
+            if (RedisAvailable)
+            {
+                try
+                {
+                    var expiry = expireSeconds > 0 ? TimeSpan.FromSeconds(expireSeconds) : (TimeSpan?)null;
+                    if (!_connectionManager.GetDatabase().StringSet(fullKey, newJson, expiry))
+                    {
+                        _logger.LogWarning("Redis TrySafeUpdate鍐欏叆澶辫触, key={Key}", key);
+                        return _options.FallbackToMemory && _options.EnableL1Cache;
+                    }
+                    else
+                    {
+                        _logger.LogInformation("Redis TrySafeUpdate鍐欏叆鎴愬姛, key={Key}", key);
+                    }
+                }
+                catch (Exception ex)
+                {
+                    _logger.LogWarning(ex, "Redis TrySafeUpdate鍐欏叆澶辫触, key={Key}", key);
+                    return _options.FallbackToMemory && _options.EnableL1Cache;
+                }
+            }
+
+            // 鏇存柊鍐呭瓨缂撳瓨
+            if (_options.EnableL1Cache)
+            {
+                SetMemoryCache(fullKey, newJson, expireSeconds, false);
+            }
+
+            return true;
+        }
+
         public object? Get(Type type, string key)
         {
             var fullKey = BuildKey(key);
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Cache/RedisCacheService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Cache/RedisCacheService.cs
index f52aa42..f52cc84 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Cache/RedisCacheService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Cache/RedisCacheService.cs
@@ -365,6 +365,34 @@
             return Db.StringSet(fullKey, newJson, expiry, When.Exists);
         }
 
+        public bool TrySafeUpdate<T>(
+            string key,
+            T newValue,
+            object? expectedVersion,
+            Func<T, object?> versionExtractor,
+            int expireSeconds = -1) where T : class
+        {
+            var fullKey = BuildKey(key);
+            var existing = Db.StringGet(fullKey);
+            if (existing.IsNullOrEmpty) return false;
+
+            // 鍙嶅簭鍒楀寲鐜版湁鍊�
+            var existingValue = _serializer.Deserialize<T>(existing.ToString()!);
+            if (existingValue == null) return false;
+
+            // 妫�鏌ョ増鏈槸鍚﹀尮閰�
+            var currentVersion = versionExtractor(existingValue);
+            if (!Equals(currentVersion, expectedVersion))
+            {
+                return false; // 鐗堟湰涓嶅尮閰嶏紝鎷掔粷鏇存柊
+            }
+
+            // 鐗堟湰鍖归厤锛屾墽琛屾洿鏂�
+            var newJson = _serializer.Serialize(newValue);
+            var expiry = expireSeconds > 0 ? TimeSpan.FromSeconds(expireSeconds) : (TimeSpan?)null;
+            return Db.StringSet(fullKey, newJson, expiry, When.Exists);
+        }
+
         public string GetOrAdd(string key, string value, int expireSeconds = -1)
         {
             var fullKey = BuildKey(key);
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Options/RedisOptions.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Options/RedisOptions.cs
index 0bfb5a8..1f002be 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Options/RedisOptions.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_RedisService/Options/RedisOptions.cs
@@ -46,6 +46,12 @@
         /// </summary>
         public int SyncBatchSize { get; set; } = 1000;
 
+        /// <summary>
+        /// 鑷姩鍚屾鎺掗櫎鐨刱ey鍓嶇紑鍒楄〃锛堣繖浜沰ey涓嶄細琚嚜鍔ㄥ悓姝ヨ鐩栵級
+        /// 渚嬪锛歔"wcs:SocketDevices:"] 琛ㄧず璁惧鐘舵�佷笉浼氳鑷姩鍚屾
+        /// </summary>
+        public List<string> SyncExcludePrefixes { get; set; } = new();
+
         public MonitoringOptions Monitoring { get; set; } = new();
 
         public EvictionOptions Eviction { get; set; } = new();
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
index 7f04fdd..b0bc7d6 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
@@ -75,10 +75,11 @@
     "SerializerType": "Newtonsoft", //搴忓垪鍖栨柟寮忥細Newtonsoft
     "FallbackToMemory": true, //Redis涓嶅彲鐢ㄦ椂鏄惁闄嶇骇鍒板唴瀛樼紦瀛�
     "KeyPrefix": "wcs:", //鍏ㄥ眬Key鍓嶇紑锛岀敤浜庨殧绂讳笉鍚岀郴缁熺殑鏁版嵁
-    "EnableL1Cache": true, //鏄惁鍚敤L1鍐呭瓨缂撳瓨灞傘�傜鐢ㄥ悗鍙娇鐢≧edis锛岄�傜敤浜庨渶瑕佸閮ㄤ慨鏀筊edis鏁版嵁鐨勫満鏅�
-    "EnableAutoSync": true, //鏄惁鍚敤Redis鍒板唴瀛樼紦瀛樼殑鑷姩鍚屾
+    "EnableL1Cache": false, //鏄惁鍚敤L1鍐呭瓨缂撳瓨灞傘�傜鐢ㄥ悗鍙娇鐢≧edis锛岄�傜敤浜庨渶瑕佸閮ㄤ慨鏀筊edis鏁版嵁鐨勫満鏅�
+    "EnableAutoSync": false, //鏄惁鍚敤Redis鍒板唴瀛樼紦瀛樼殑鑷姩鍚屾
     "SyncIntervalSeconds": 30, //鑷姩鍚屾闂撮殧鏃堕棿锛堢锛夛紝寤鸿30-60绉�
     "SyncBatchSize": 1000, //鍚屾鏃跺崟娆℃壒閲忚幏鍙栫殑Redis key鏁伴噺涓婇檺
+    "SyncExcludePrefixes": [ "wcs:Code:SocketDevices:" ], //鎺掗櫎璁惧鐘舵�乲ey涓嶅弬涓庤嚜鍔ㄥ悓姝ワ紙闃叉瑕嗙洊鏈湴淇敼锛�
     "Monitoring": {
       "Enabled": false, //鏄惁鍚敤鐩戞帶
       "SlowLogThresholdMs": 100, //鎱㈡煡璇㈤槇鍊硷紙姣锛�
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
index 288f717..4ebcb83 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -103,13 +103,13 @@
                     }
                     else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                     {
-                        List<Dt_Router> routers = _routerService.QueryNextRoutes(item.SourceAddress, item.TargetAddress);
+                        Dt_Router routers = _routerService.QueryNextRoute(item.SourceAddress);
                         //鏆備笉鑰冭檻澶氳矾寰�
-                        if (routers.Count > 0)
+                        if (!routers.IsNullOrEmpty())
                         {
                             task.TaskState = (int)TaskInStatusEnum.InNew;
                             task.CurrentAddress = item.SourceAddress;
-                            task.NextAddress = routers.FirstOrDefault().ChildPosi;
+                            task.NextAddress = routers.ChildPosi;
                         }
                     }
                     tasks.Add(task);
@@ -118,7 +118,7 @@
 
                 _taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskNum).ToList(), "鎺ユ敹WMS浠诲姟");
 
-                content = WebResponseContent.Instance.OK("鎴愬姛");
+                content = WebResponseContent.Instance.OK("鎴愬姛", tasks);
             }
             catch (Exception ex)
             {
@@ -397,6 +397,14 @@
                         task.TargetAddress = wmsTargetAddress;
                         task.CurrentAddress = task.NextAddress;
                     }
+                    else
+                    {
+                        //_httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.GetTasksLocation), taskDto.ToJson(), nameof(ConfigKey.GetTasksLocation));
+                        //if (!result.IsSuccess && !result.Data.Status)
+                        //{
+                        //    return WebResponseContent.Instance.Error($"璋冪敤WMS鎺ュ彛鑾峰彇浠诲姟鐩爣鍦板潃澶辫触,浠诲姟鍙�:銆恵task.TaskNum}銆�,閿欒淇℃伅:銆恵content.Message}銆�");
+                        //}
+                    }
                 }
                 else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup)
                 {
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotBarcodeGenerator.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotBarcodeGenerator.cs
new file mode 100644
index 0000000..1dc1bcd
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotBarcodeGenerator.cs
@@ -0,0 +1,28 @@
+namespace WIDESEAWCS_Tasks
+{
+    /// <summary>
+    /// 鏈烘鎵嬫潯鐮佺敓鎴愬櫒 - 璐熻矗鐢熸垚鎵樼洏鏉$爜
+    /// </summary>
+    public static class RobotBarcodeGenerator
+    {
+        /// <summary>
+        /// 鐢熸垚鎵樼洏鏉$爜
+        /// </summary>
+        /// <param name="prefix">鏉$爜鍓嶇紑锛岄粯璁や负绌�</param>
+        /// <returns>鐢熸垚鐨勬潯鐮佸瓧绗︿覆</returns>
+        public static string GenerateTrayBarcode(string prefix = "")
+        {
+            // 褰撳墠鏃ユ湡
+            string datePart = DateTime.Now.ToString("yyyyMMdd");
+
+            // 鏃堕棿鎴筹紙鏃跺垎绉掞級
+            string timePart = DateTime.Now.ToString("HHmmss");
+
+            // 闅忔満鏁�
+            string randomPart = Random.Shared.Next(100, 1000).ToString();
+
+            // 缁勫悎锛氬墠缂� + 鏃ユ湡 + 鏃堕棿 + 闅忔満鏁�
+            return prefix + datePart + timePart + randomPart;
+        }
+    }
+}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotClientManager.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotClientManager.cs
new file mode 100644
index 0000000..2e372bf
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotClientManager.cs
@@ -0,0 +1,149 @@
+using System.Collections.Concurrent;
+using System.Net.Sockets;
+using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_Tasks.SocketServer;
+
+namespace WIDESEAWCS_Tasks
+{
+    /// <summary>
+    /// 鏈烘鎵嬪鎴风杩炴帴绠$悊鍣� - 璐熻矗TCP瀹㈡埛绔繛鎺ョ鐞嗗拰浜嬩欢璁㈤槄
+    /// </summary>
+    public class RobotClientManager
+    {
+        private readonly TcpSocketServer _tcpSocket;
+        private readonly RobotStateManager _stateManager;
+
+        // 璺熻釜宸茬粡鍚姩 HandleClientAsync 鐨勫鎴风
+        private static readonly ConcurrentDictionary<string, bool> _handleClientStarted = new();
+        private static int _eventSubscribedFlag;
+
+        public event EventHandler<RobotSocketState>? OnClientDisconnected;
+
+        public RobotClientManager(TcpSocketServer tcpSocket, RobotStateManager stateManager)
+        {
+            _tcpSocket = tcpSocket;
+            _stateManager = stateManager;
+        }
+
+        /// <summary>
+        /// 纭繚瀹㈡埛绔凡杩炴帴骞惰闃呮秷鎭簨浠�
+        /// </summary>
+        /// <param name="ipAddress">璁惧IP鍦板潃</param>
+        /// <param name="robotCrane">鏈哄櫒浜鸿澶囦俊鎭�</param>
+        /// <returns>瀹㈡埛绔槸鍚﹀彲鐢紙宸茶繛鎺ヤ笖娑堟伅澶勭悊宸插惎鍔級</returns>
+        public bool EnsureClientSubscribed(string ipAddress, RobotCraneDevice robotCrane)
+        {
+            // 妫�鏌ユ槸鍚︽湁璇ュ鎴风杩炴帴
+            var clientIds = _tcpSocket.GetClientIds();
+            bool isClientConnected = clientIds.Contains(ipAddress);
+
+            if (!isClientConnected)
+            {
+                // 瀹㈡埛绔湭杩炴帴锛屾竻鐞� HandleClientAsync 鐘舵��
+                _handleClientStarted.TryRemove(ipAddress, out _);
+                return false;
+            }
+
+            // 璁㈤槄涓�娆� robot 浜嬩欢锛堝叏灞�涓�娆★級- message浜嬩欢鐢盧obotJob璁㈤槄
+            if (System.Threading.Interlocked.CompareExchange(ref _eventSubscribedFlag, 1, 0) == 0)
+            {
+                _tcpSocket.RobotReceived += OnRobotReceived;
+                Console.WriteLine($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] 鏈哄櫒浜篢CP鏂紑浜嬩欢宸茶闃�");
+            }
+
+            // 鑾峰彇TcpClient
+            TcpClient? tcpClient = null;
+            _tcpSocket._clients.TryGetValue(ipAddress, out tcpClient);
+
+            if (tcpClient == null)
+            {
+                // isClientConnected涓簍rue浣嗘棤娉曡幏鍙杢cpClient锛屽垪琛ㄥ彲鑳戒笉鍚屾
+                _handleClientStarted.TryRemove(ipAddress, out _);
+                return false;
+            }
+
+            // 妫�鏌ユ槸鍚﹀凡缁忎负杩欎釜瀹㈡埛绔惎鍔ㄨ繃 HandleClientAsync
+            bool alreadyStarted = _handleClientStarted.TryGetValue(ipAddress, out _);
+
+            if (!alreadyStarted)
+            {
+                Console.WriteLine($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] 鍚姩瀹㈡埛绔秷鎭鐞�: {ipAddress}");
+
+                // 閲嶆柊鑾峰彇鏈�鏂扮殑 state 瀵硅薄
+                var latestStateForSubscribe = _stateManager.GetState(ipAddress);
+                if (latestStateForSubscribe != null)
+                {
+                    // 鏍囪涓哄凡鍚姩
+                    _handleClientStarted[ipAddress] = true;
+
+                    _ = _tcpSocket.HandleClientAsync(tcpClient, robotCrane.IPAddress, _tcpSocket._cts.Token, latestStateForSubscribe)
+                        .ContinueWith(t =>
+                        {
+                            if (t.IsFaulted)
+                            {
+                                Console.WriteLine($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] HandleClientAsync error: {t.Exception?.GetBaseException().Message}");
+                                // 鍙戠敓閿欒鏃讹紝绉婚櫎鍚姩鏍囧織锛屽厑璁镐笅娆¢噸璇�
+                                _handleClientStarted.TryRemove(ipAddress, out _);
+                            }
+                        }, TaskContinuationOptions.OnlyOnFaulted);
+
+                    // 鏇存柊 IsEventSubscribed 鐘舵��
+                    _stateManager.TryUpdateStateSafely(ipAddress, s =>
+                    {
+                        s.IsEventSubscribed = true;
+                        return s;
+                    });
+                }
+            }
+
+            return true;
+        }
+
+        /// <summary>
+        /// 浜嬩欢锛氬鎴风鏂紑杩炴帴鏃惰Е鍙�
+        /// </summary>
+        private Task<string?> OnRobotReceived(string clientId)
+        {
+            // 瀹㈡埛绔柇寮�杩炴帴锛屾竻鐞� HandleClientAsync 鍚姩鏍囧織
+            _handleClientStarted.TryRemove(clientId, out _);
+
+            _stateManager.TryUpdateStateSafely(clientId, state =>
+            {
+                state.IsEventSubscribed = false;
+                state.CurrentAction = "";
+                state.OperStatus = "";
+                state.RobotArmObject = 0;
+                state.RobotControlMode = 0;
+                state.RobotRunMode = 0;
+                return state;
+            });
+
+            // 瑙﹀彂鏂紑杩炴帴浜嬩欢
+            OnClientDisconnected?.Invoke(this, _stateManager.GetState(clientId) ?? new RobotSocketState { IPAddress = clientId });
+
+            return Task.FromResult<string?>(null);
+        }
+
+        /// <summary>
+        /// 妫�鏌ュ鎴风鏄惁宸茶繛鎺�
+        /// </summary>
+        public bool IsClientConnected(string ipAddress)
+        {
+            var clientIds = _tcpSocket.GetClientIds();
+            return clientIds.Contains(ipAddress);
+        }
+
+        /// <summary>
+        /// 鍙戦�佹秷鎭埌瀹㈡埛绔�
+        /// </summary>
+        public async Task<bool> SendToClientAsync(string ipAddress, string message)
+        {
+            return await _tcpSocket.SendToClientAsync(ipAddress, message);
+        }
+
+        /// <summary>
+        /// 鑾峰彇TcpSocketServer寮曠敤锛堢敤浜嶳obotJob鐩存帴璁块棶锛�
+        /// </summary>
+        public TcpSocketServer TcpSocket => _tcpSocket;
+    }
+}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
index bd3d436..028248c 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotJob.cs
@@ -1,19 +1,8 @@
-锘縰sing HslCommunication;
-using Newtonsoft.Json;
-using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
 using Quartz;
-using System.Net;
-using System.Net.Sockets;
-using System.Threading.Tasks;
 using WIDESEA_Core;
-using WIDESEAWCS_Common;
-using WIDESEAWCS_Common.HttpEnum;
 using WIDESEAWCS_Common.TaskEnum;
-using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.Caches;
 using WIDESEAWCS_Core.Helper;
-using WIDESEAWCS_DTO.Stock;
-using WIDESEAWCS_DTO.TaskInfo;
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_QuartzJob;
@@ -21,34 +10,55 @@
 
 namespace WIDESEAWCS_Tasks
 {
+    /// <summary>
+    /// 鏈烘鎵嬩换鍔′綔涓� - 璐熻矗鍗忚皟鏈烘鎵嬪鎴风杩炴帴銆佹秷鎭鐞嗗拰浠诲姟鎵ц
+    /// </summary>
     [DisallowConcurrentExecution]
     public class RobotJob : IJob
     {
         private const int MaxTaskTotalNum = 48;
 
-        private readonly TcpSocketServer _TcpSocket;
+        private static int _messageSubscribedFlag;
 
-        //private static readonly ConcurrentDictionary<string, RobotSocketState> _socketStates = new();
-        private static int _eventSubscribedFlag;
-
-        private readonly ITaskService _taskService;
+        private readonly RobotClientManager _clientManager;
+        private readonly RobotStateManager _stateManager;
+        private readonly RobotMessageHandler _messageHandler;
+        private readonly RobotTaskProcessor _taskProcessor;
         private readonly IRobotTaskService _robotTaskService;
-        private readonly ICacheService _cache;
-        private readonly HttpClientHelper _httpClientHelper;
 
-        private static IRobotTaskService _latestRobotTaskService = null!;
-        private static ITaskService _latestTaskService = null!;
-
-        public RobotJob(TcpSocketServer TcpSocket, IRobotTaskService RobottaskService, ITaskService TaskService, ICacheService cache, HttpClientHelper httpClientHelper)
+        public RobotJob(
+            TcpSocketServer tcpSocket,
+            IRobotTaskService robotTaskService,
+            ITaskService taskService,
+            ICacheService cache,
+            HttpClientHelper httpClientHelper)
         {
-            _TcpSocket = TcpSocket;
-            _robotTaskService = RobottaskService;
-            _taskService = TaskService;
-            _cache = cache;
-            _httpClientHelper = httpClientHelper;
+            _robotTaskService = robotTaskService;
 
-            _latestRobotTaskService = RobottaskService;
-            _latestTaskService = TaskService;
+            // 鍒濆鍖栫鐞嗗櫒
+            _stateManager = new RobotStateManager(cache);
+            _taskProcessor = new RobotTaskProcessor(tcpSocket, _stateManager, robotTaskService, taskService, httpClientHelper);
+            _clientManager = new RobotClientManager(tcpSocket, _stateManager);
+            _messageHandler = new RobotMessageHandler(tcpSocket, _stateManager, cache, robotTaskService, _taskProcessor);
+
+            // 璁㈤槄瀹㈡埛绔鐞嗗櫒鐨勪簨浠�
+            _clientManager.OnClientDisconnected += OnClientDisconnected;
+
+            // 璁㈤槄TCP鏈嶅姟鍣ㄧ殑娑堟伅浜嬩欢锛堝叏灞�鍙闃呬竴娆★級
+            if (System.Threading.Interlocked.CompareExchange(ref _messageSubscribedFlag, 1, 0) == 0)
+            {
+                tcpSocket.MessageReceived += _messageHandler.HandleMessageReceivedAsync;
+                Console.WriteLine($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] 鏈哄櫒浜篢CP娑堟伅浜嬩欢宸茶闃�");
+            }
+        }
+
+        /// <summary>
+        /// 瀹㈡埛绔柇寮�杩炴帴鏃剁殑澶勭悊
+        /// </summary>
+        private void OnClientDisconnected(object? sender, RobotSocketState state)
+        {
+            // 鍙互鍦ㄨ繖閲屾坊鍔犳柇寮�杩炴帴鍚庣殑澶勭悊閫昏緫
+            Console.WriteLine($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] 瀹㈡埛绔凡鏂紑杩炴帴: {state.IPAddress}");
         }
 
         public async Task Execute(IJobExecutionContext context)
@@ -63,512 +73,118 @@
             string ipAddress = robotCrane.IPAddress;
 
             // 鑾峰彇鎴栧垱寤虹姸鎬�
-            RobotSocketState state = _cache.GetOrAdd($"{RedisPrefix.Code}:{RedisName.SocketDevices}:{ipAddress}", _ => new RobotSocketState
-            {
-                IPAddress = ipAddress,
-                RobotCrane = robotCrane
-            });
-
-            // 鏇存柊璁惧淇℃伅
+            RobotSocketState state = _stateManager.GetOrCreateState(ipAddress, robotCrane);
             state.RobotCrane = robotCrane;
 
             try
             {
-                // 妫�鏌ユ槸鍚︽湁璇ュ鎴风杩炴帴
-                var clientIds = _TcpSocket.GetClientIds();
-                if (!clientIds.Contains(ipAddress))
+                // 纭繚瀹㈡埛绔凡杩炴帴骞惰闃呮秷鎭簨浠�
+                if (!_clientManager.EnsureClientSubscribed(ipAddress, robotCrane))
                 {
-                    return;
+                    return; // 瀹㈡埛绔湭杩炴帴鎴栬闃呭け璐ワ紝璺宠繃鏈鎵ц
                 }
 
-                // 璁㈤槄涓�娆� message 浜嬩欢锛堝叏灞�涓�娆★級
-                if (Interlocked.CompareExchange(ref _eventSubscribedFlag, 1, 0) == 0)
-                {
-                    _TcpSocket.MessageReceived += _TcpSocket_MessageReceived;
-                    _TcpSocket.RobotReceived += _TcpSocket_RobotReceived;
-                }
-
-                if (!state.IsEventSubscribed)
-                {
-                    if (_TcpSocket._clients.TryGetValue(ipAddress, out TcpClient client))
-                    {
-                        _ = _TcpSocket.HandleClientAsync(client, robotCrane.IPAddress, _TcpSocket._cts.Token, state)
-                            .ContinueWith(t =>
-                            {
-                                if (t.IsFaulted)
-                                    Console.WriteLine($"HandleClientAsync error: {t.Exception?.GetBaseException().Message}");
-                            }, TaskContinuationOptions.OnlyOnFaulted);
-                        state.IsEventSubscribed = true;
-
-                        // 鏇存柊缂撳瓨涓殑鐘舵��
-                        _cache.TryUpdateIfChanged($"{RedisPrefix.Code}:{RedisName.SocketDevices}:{ipAddress}", state);
-                    }
-                }
-
-                // 鑾峰彇浠诲姟骞剁紦瀛樺埌鐘舵�佷腑
-                Dt_RobotTask? task = GetTask(robotCrane);
+                // 鑾峰彇浠诲姟骞跺鐞�
+                Dt_RobotTask? task = _taskProcessor.GetTask(robotCrane);
                 if (task != null)
                 {
-                    if (task.RobotTaskTotalNum <= MaxTaskTotalNum)
+                    // 姣忔鍒ゆ柇鍓嶉噸鏂颁粠缂撳瓨鑾峰彇鏈�鏂扮姸鎬�
+                    var latestState = _stateManager.GetState(ipAddress);
+                    if (latestState == null) return;
+
+                    if (latestState.RobotTaskTotalNum < MaxTaskTotalNum)
                     {
-                        // 澶勭悊姝e湪鎵ц鐨勪换鍔�
-                        if (state.RobotRunMode == 2 && state.RobotControlMode == 1 && state.OperStatus != "Running")
-                        {
-                            if (state.CurrentAction == "PickFinished" && state.RobotArmObject == 1 && task.RobotTaskState == TaskRobotStatusEnum.RobotPickFinish.GetHashCode())
-                            {
-                                string taskString = $"Putbattery,{task.RobotTargetAddress}";
-                                bool result = await _TcpSocket.SendToClientAsync(ipAddress, taskString);
-                                if (result)
-                                {
-                                    task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
-                                    await _robotTaskService.UpdateRobotTaskAsync(task);
-                                }
-                            }
-                            else if (state.CurrentAction == "PutFinished" && state.RobotArmObject == 0 && task.RobotTaskState == TaskRobotStatusEnum.RobotPutFinish.GetHashCode())
-                            {
-                                task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
-                                await _robotTaskService.UpdateRobotTaskAsync(task);
-                            }
-                            else if (state.OperStatus == "Homed" && state.RobotArmObject == 0 && task.RobotTaskState != TaskRobotStatusEnum.RobotExecuting.GetHashCode())
-                            {
-                                // 闅忔満鐢熸垚涓ゅぉ鎵樼洏鏉$爜瀛樻斁鍒颁袱涓彉閲忛噷闈�
-                                // 瀹氫箟鍓嶇紑锛堜緥濡傦細TRAY浠h〃鎵樼洏锛�
-                                // 缁勭洏璇诲彇绾夸綋鏉$爜
-                                if (task.RobotTaskType == RobotTaskTypeEnum.GroupPallet.GetHashCode())
-                                {
-                                    string prefix = "TRAY";
-
-                                    // 鐢熸垚涓や釜鎵樼洏鏉$爜
-                                    string trayBarcode1 = GenerateTrayBarcode(state, prefix);
-                                    string trayBarcode2 = GenerateTrayBarcode(state, prefix);
-                                    if (!trayBarcode1.IsNullOrEmpty() && !trayBarcode2.IsNullOrEmpty())
-                                    {
-
-                                        await SendSocketRobotPickAsync(task, state);
-                                    }
-                                }
-                                else // 鎹㈢洏鐩存帴鍙戦�佸彇璐у湴鍧�
-                                {
-                                    await SendSocketRobotPickAsync(task, state);
-                                }
-                            }
-
-                            if (state.CurrentTask.IsNullOrEmpty() && state.ToJson() != task.ToJson())
-                            {
-                                state.IsSplitPallet = task.RobotTaskType == RobotTaskTypeEnum.SplitPallet.GetHashCode();
-                                state.IsGroupPallet = task.RobotTaskType == RobotTaskTypeEnum.GroupPallet.GetHashCode() || task.RobotTaskType == RobotTaskTypeEnum.ChangePallet.GetHashCode();
-                                state.CurrentTask = task;
-                                // 鏇存柊缂撳瓨涓殑鐘舵��
-                                _cache.TryUpdateIfChanged($"{RedisPrefix.Code}:{RedisName.SocketDevices}:{ipAddress}", state);
-                            }
-                        }
+                        await ProcessTaskAsync(latestState, task, ipAddress);
                     }
                 }
             }
             catch (Exception)
             {
+                // 寮傚父澶勭悊宸插湪鍚勭粍浠朵腑澶勭悊
             }
-            finally
-            {
-                // 鍙�夛細鍦ㄨ繖閲屽鐞嗕换浣曢渶瑕佸湪浠诲姟瀹屾垚鍚庢墽琛岀殑娓呯悊宸ヤ綔
-            }
-        }
-
-        //涓存椂娴嬭瘯鐢�
-        private static string GenerateTrayBarcode(RobotSocketState state, string prefix = "")
-        {
-            // 褰撳墠鏃ユ湡
-            string datePart = DateTime.Now.ToString("yyyyMMdd");
-
-            // 鏃堕棿鎴筹紙鏃跺垎绉掞級
-            string timePart = DateTime.Now.ToString("HHmmss");
-
-            // 闅忔満鏁�
-            string randomPart = Random.Shared.Next(100, 1000).ToString();
-
-            // 缁勫悎锛氬墠缂� + 鏃ユ湡 + 鏃堕棿 + 闅忔満鏁�
-            var barCode = prefix + datePart + timePart + randomPart;
-            state.CellBarcode.Add(barCode);
-
-            return barCode;
         }
 
         /// <summary>
-        ///  浜嬩欢锛氬鎴风鏂紑杩炴帴鏃惰Е鍙�
+        /// 澶勭悊鏈烘鎵嬩换鍔�
         /// </summary>
-        /// <param name="clientId"></param>
-        /// <returns></returns>
-        private Task<string?> _TcpSocket_RobotReceived(string clientId)
+        private async Task ProcessTaskAsync(RobotSocketState latestState, Dt_RobotTask task, string ipAddress)
         {
-            var robotSocketState = _cache.Get<RobotSocketState>($"{RedisPrefix.Code}:{RedisName.SocketDevices}:{clientId}");
-            robotSocketState.IsEventSubscribed = false;
-            robotSocketState.CurrentAction = "";
-            robotSocketState.OperStatus = "";
-            robotSocketState.RobotArmObject = 0;
-            robotSocketState.RobotControlMode = 0;
-            robotSocketState.RobotRunMode = 0;
-            _cache.TryUpdateIfChanged($"{RedisPrefix.Code}:{RedisName.SocketDevices}:{clientId}", robotSocketState);
-            return Task.FromResult<string?>(null);
-        }
-
-        /// <summary>
-        /// 浜嬩欢锛氭敹鍒版秷鎭椂瑙﹀彂
-        /// </summary>
-        /// <param name="message"></param>
-        /// <param name="isJson"></param>
-        /// <param name="client"></param>
-        /// <param name="state"></param>
-        /// <returns></returns>
-        private async Task<string?> _TcpSocket_MessageReceived(string message, bool isJson, TcpClient client, RobotSocketState state)
-        {
-            if (!(bool)(_cache?.TryGetValue($"{RedisPrefix.Code}:{RedisName.SocketDevices}:{client.Client.RemoteEndPoint}", out state)))
-                return null;
-
-            string messageLower = message.ToLowerInvariant();
-
-            if (await IsSimpleCommandAsync(messageLower, state))
+            // 澶勭悊姝e湪鎵ц鐨勪换鍔�
+            if (latestState.RobotRunMode == 2 && latestState.RobotControlMode == 1 && latestState.OperStatus != "Running")
             {
-                await _TcpSocket.SendMessageAsync(client, message);
-            }
-            else if (IsPrefixCommand(messageLower))
-            {
-                try
+                // 鍙栬揣瀹屾垚鐘舵�佸鐞�
+                if ((latestState.CurrentAction == "PickFinished" || latestState.CurrentAction == "AllPickFinished") && latestState.RobotArmObject == 1 &&
+                    task.RobotTaskState == TaskRobotStatusEnum.RobotPickFinish.GetHashCode())
                 {
-                    var parts = message.Split(',');
-                    if (parts.Length >= 1 && state.CurrentTask != null)
-                    {
-                        var cmd = parts[0].ToLowerInvariant();
-                        int[] positions = parts.Skip(1)
-                           .Select(p => int.TryParse(p, out int value) ? value : (int?)null)
-                           .Where(v => v.HasValue && v.Value != 0)
-                           .Select(v => v!.Value)
-                           .ToArray();
-
-                        var task = await _latestRobotTaskService.Repository.QueryFirstAsync(x => x.RobotTaskId == state.CurrentTask.RobotTaskId);
-
-                        if (cmd.StartsWith("pickfinished"))
-                        {
-                            if (state.IsSplitPallet)
-                            {
-                                var stockDTO = BuildStockDTO(state, positions);
-                                state.LastPickPositions = positions;
-
-                                var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.SplitPalletAsync), stockDTO.ToJson());
-
-                                if (result.Data.Status && result.IsSuccess)
-                                {
-                                    state.CurrentAction = "PickFinished";
-                                }
-                            }
-                            else
-                            {
-                                state.CurrentAction = "PickFinished";
-                            }
-
-                            state.LastPickPositions = positions;
-                            task.RobotTaskState = TaskRobotStatusEnum.RobotPickFinish.GetHashCode();
-                            await _latestRobotTaskService.Repository.UpdateDataAsync(task);
-                        }
-                        else if (cmd.StartsWith("putfinished"))
-                        {
-                            bool putSuccess = true;
-                            if (state.IsGroupPallet)
-                            {
-                                state.LastPutPositions = positions;
-                                var stockDTO = BuildStockDTO(state, positions);
-                                var configKey = state.CurrentTask?.RobotTaskType == RobotTaskTypeEnum.ChangePallet.GetHashCode()
-                                    ? nameof(ConfigKey.ChangePalletAsync) : nameof(ConfigKey.GroupPalletAsync);
-
-                                var result = _httpClientHelper.Post<WebResponseContent>(configKey, stockDTO.ToJson());
-                                putSuccess = result.Data.Status && result.IsSuccess;
-                            }
-
-                            if (putSuccess)
-                            {
-                                state.CurrentAction = "PutFinished";
-                                state.RobotTaskTotalNum += positions.Length;
-                                task.RobotTaskTotalNum += positions.Length;
-                            }
-
-                            task.RobotTaskState = TaskRobotStatusEnum.RobotPutFinish.GetHashCode();
-                            await _latestRobotTaskService.Repository.UpdateDataAsync(task);
-                        }
-
-                        await _TcpSocket.SendMessageAsync(client, message);
-                    }
+                    await HandlePickFinishedStateAsync(latestState, task, ipAddress);
                 }
-                catch (Exception ex)
+                // 鏀捐揣瀹屾垚鐘舵�佸鐞�
+                else if ((latestState.CurrentAction == "PutFinished" || latestState.CurrentAction == "AllPutFinished") && latestState.OperStatus == "Homed" &&
+                    latestState.RobotArmObject == 0 &&
+                    (task.RobotTaskState == TaskRobotStatusEnum.RobotPutFinish.GetHashCode() ||
+                    task.RobotTaskState != TaskRobotStatusEnum.RobotExecuting.GetHashCode()))
                 {
-                    Console.WriteLine($"RobotJob MessageReceived Error: {ex.Message}");
+                    await HandlePutFinishedStateAsync(latestState, task, ipAddress);
                 }
             }
-
-            // 鏇存柊缂撳瓨涓殑鐘舵��
-            _cache.TryUpdateIfChanged($"{RedisPrefix.Code}:{RedisName.SocketDevices}:{state.IPAddress}", state);
-
-            return null;
         }
 
         /// <summary>
-        /// 鏈烘鎵嬬畝鍗曞懡浠ゅ鐞�
+        /// 澶勭悊鍙栬揣瀹屾垚鐘舵��
         /// </summary>
-        /// <param name="message"></param>
-        /// <param name="state"></param>
-        /// <returns></returns>
-        private async Task<bool> IsSimpleCommandAsync(string message, RobotSocketState state)
+        private async Task HandlePickFinishedStateAsync(RobotSocketState latestState, Dt_RobotTask task, string ipAddress)
         {
-            switch (message)
-            {
-                case "homing":
-                    state.OperStatus = "Homing";
-                    return true;
-
-                case "homed":
-                    state.OperStatus = "Homed";
-                    return true;
-
-                case "picking":
-                    state.CurrentAction = "Picking";
-                    return true;
-
-                case "puting":
-                    state.CurrentAction = "Putting";
-                    return true;
-
-                case "allpickfinished": // 鍙栬揣瀹屾垚
-                    state.CurrentAction = "AllPickFinished";
-                    if (state.CurrentTask?.RobotTaskType == RobotTaskTypeEnum.SplitPallet.GetHashCode() || state.CurrentTask?.RobotTaskType == RobotTaskTypeEnum.ChangePallet.GetHashCode())
-                    {
-                        await HandleInboundTaskAsync(state, useSourceAddress: true);
-                    }
-                    return true;
-
-                case "allputfinished": // 鏀捐揣瀹屾垚
-                    state.CurrentAction = "AllPutFinished";
-                    if (state.CurrentTask?.RobotTaskType == RobotTaskTypeEnum.GroupPallet.GetHashCode() || state.CurrentTask?.RobotTaskType == RobotTaskTypeEnum.ChangePallet.GetHashCode())
-                    {
-                        await HandleInboundTaskAsync(state, useSourceAddress: false);
-                    }
-                    return true;
-
-                case "running":
-                    state.OperStatus = "Running";
-                    return true;
-
-                case "pausing":
-                    state.OperStatus = "Pausing";
-                    return true;
-
-                case "warming":
-                    state.OperStatus = "Warming";
-                    return true;
-
-                case "emstoping":
-                    state.OperStatus = "Emstoping";
-                    return true;
-
-                case "runmode,1":
-                    state.RobotRunMode = 1;
-                    return true;
-
-                case "runmode,2":
-                    state.RobotRunMode = 2;
-                    return true;
-
-                case "controlmode,1":
-                    state.RobotControlMode = 1;
-                    return true;
-
-                case "controlmode,2":
-                    state.RobotControlMode = 2;
-                    return true;
-
-                case "armobject,1":
-                    state.RobotArmObject = 1;
-                    return true;
-
-                case "armobject,0":
-                    state.RobotArmObject = 0;
-                    return true;
-
-                default:
-                    return false;
-            }
-        }
-
-        private async Task HandleInboundTaskAsync(RobotSocketState state, bool useSourceAddress)
-        {
-            var currentTask = state.CurrentTask;
-            if (currentTask == null)
-            {
-                return;
-            }
-
-            string roadway = currentTask.RobotRoadway == "1" ? "GWSC001" : currentTask.RobotRoadway == "2" ? "HCSC001" : "SC001";
-            int warehouseId = currentTask.RobotRoadway == "1" ? 1 : currentTask.RobotRoadway == "2" ? 2 : 3;
-
-            CreateTaskDto taskDto = new CreateTaskDto
-            {
-                PalletCode = currentTask.RobotTargetAddressPalletCode ?? string.Empty,
-                SourceAddress = currentTask.RobotSourceAddress ?? string.Empty,
-                TargetAddress = currentTask.RobotTargetAddress ?? string.Empty,
-                Roadway = roadway,
-                WarehouseId = warehouseId,
-                PalletType = 1,
-                TaskType = 4
-            };
-            var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.CreateTaskInboundAsync), taskDto.ToJson());
-            if (!result.Data.Status && result.IsSuccess)
-            {
-                return;
-            }
-
-            WMSTaskDTO taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(result.Data.ToString() ?? string.Empty) ?? new WMSTaskDTO();
-            var content = _latestTaskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
-            if (!content.Status) return;
-
-            var taskInfo = _latestTaskService.QueryByTaskNum(taskDTO.TaskNum);
-            if (taskInfo == null) return;
-
-            string targetAddress = useSourceAddress ? taskDTO.SourceAddress : taskDTO.TargetAddress;
-
-            IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceProDTOs.Any(d => d.DeviceChildCode == targetAddress));
-            device?.Communicator.Write(nameof(ConveyorLineDBNameNew.Target), taskInfo.NextAddress);
-            device?.Communicator.Write(nameof(ConveyorLineDBNameNew.TaskNo), taskDTO.TaskNum);
-            device?.Communicator.Write(nameof(ConveyorLineDBNameNew.WCS_STB), 1);
-        }
-
-        /// <summary>
-        /// 鏈烘鎵嬪墠缂�鍛戒护澶勭悊
-        /// </summary>
-        /// <param name="message"></param>
-        /// <returns></returns>
-        private static bool IsPrefixCommand(string message)
-        {
-            return message.StartsWith("pickfinished") || message.StartsWith("putfinished");
-        }
-
-        private static StockDTO BuildStockDTO(RobotSocketState state, int[] positions)
-        {
-            string sss = state.ToJson();
-            return 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.RobotTaskTotalNum > 0 ? state.RobotTaskTotalNum + positions.Length : positions.Length,
-                        Channel = x,
-                        CellBarcode = state.CellBarcode?.Count > 0 ? state.CellBarcode[x - 1] : ""
-                    })
-                    .ToList()
-            };
-        }
-
-        private Dt_RobotTask? GetTask(RobotCraneDevice robotCrane)
-        {
-            return _robotTaskService.QueryRobotCraneTask(robotCrane.DeviceCode);
-        }
-
-        /// <summary>
-        /// 鍙戦�佹満姊版墜鍙栬揣鍛戒护
-        /// </summary>
-        /// <param name="task"></param>
-        /// <param name="state"></param>
-        /// <returns></returns>
-        private async Task SendSocketRobotPickAsync(Dt_RobotTask task, RobotSocketState state)
-        {
-            string taskString = $"Pickbattery,{task.RobotSourceAddress}";
-            // 鍙戦�佷换鍔℃寚浠�
-            bool result = await _TcpSocket.SendToClientAsync(state.IPAddress, taskString);
+            string taskString = $"Putbattery,{task.RobotTargetAddress}";
+            bool result = await _clientManager.SendToClientAsync(ipAddress, taskString);
             if (result)
             {
-                // TODO 澶勭悊鎴愬姛鍙戦�佷换鍔℃寚浠ゅ悗鐨勯�昏緫
                 task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
-                result = await _robotTaskService.UpdateRobotTaskAsync(task);
-                // 鏇存柊缂撳瓨涓殑鐘舵��
-                _cache.TryUpdateIfChanged($"{RedisPrefix.Code}:{RedisName.SocketDevices}:{state.IPAddress}", state);
+
+                // 閲嶆柊鑾峰彇鏈�鏂扮姸鎬佸苟鏇存柊
+                var stateToUpdate = _stateManager.GetState(ipAddress);
+                if (stateToUpdate != null)
+                {
+                    stateToUpdate.CurrentTask = task;
+                    if (_stateManager.TryUpdateStateSafely(ipAddress, stateToUpdate))
+                        await _robotTaskService.UpdateRobotTaskAsync(task);
+                }
+            }
+        }
+
+        /// <summary>
+        /// 澶勭悊鏀捐揣瀹屾垚鐘舵��
+        /// </summary>
+        private async Task HandlePutFinishedStateAsync(RobotSocketState latestState, Dt_RobotTask task, string ipAddress)
+        {
+            // 閲嶆柊鑾峰彇鏈�鏂扮姸鎬�
+            var stateForUpdate = _stateManager.GetState(ipAddress);
+            if (stateForUpdate == null) return;
+
+            if (!stateForUpdate.IsSplitPallet && !stateForUpdate.IsGroupPallet)
+            {
+                stateForUpdate.IsSplitPallet = task.RobotTaskType == RobotTaskTypeEnum.SplitPallet.GetHashCode();
+                stateForUpdate.IsGroupPallet = task.RobotTaskType == RobotTaskTypeEnum.GroupPallet.GetHashCode() ||
+                    task.RobotTaskType == RobotTaskTypeEnum.ChangePallet.GetHashCode();
+            }
+
+            if (task.RobotTaskType == RobotTaskTypeEnum.GroupPallet.GetHashCode())
+            {
+                string prefix = "TRAY";
+
+                // 鐢熸垚涓や釜鎵樼洏鏉$爜
+                string trayBarcode1 = RobotBarcodeGenerator.GenerateTrayBarcode(prefix);
+                string trayBarcode2 = RobotBarcodeGenerator.GenerateTrayBarcode(prefix);
+                if (!trayBarcode1.IsNullOrEmpty() && !trayBarcode2.IsNullOrEmpty())
+                {
+                    stateForUpdate.CellBarcode.Add(trayBarcode1);
+                    stateForUpdate.CellBarcode.Add(trayBarcode2);
+                    await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate);
+                }
+            }
+            else // 浠诲姟寮�濮嬫墽琛岀洿鎺ュ彂閫佸彇璐у湴鍧�
+            {
+                await _taskProcessor.SendSocketRobotPickAsync(task, stateForUpdate);
             }
         }
     }
-
-    public class RobotSocketState
-    {
-        public string IPAddress { get; set; } = string.Empty;
-
-        /// <summary>
-        /// 鏄惁宸茶闃呮秷鎭簨浠�
-        /// </summary>
-        public bool IsEventSubscribed { get; set; }
-
-        /// <summary>
-        /// 鏈烘鎵嬭繍琛屾ā寮�
-        /// </summary>
-        public int? RobotRunMode { get; set; }
-
-        /// <summary>
-        /// 鏈烘鎵嬫帶鍒舵ā寮�
-        /// </summary>
-        public int? RobotControlMode { get; set; }
-
-        /// <summary>
-        /// 鏈烘鎵嬫槸鍚︽姄鍙栫墿鏂欙紝0-鏃犵墿鏂欙紝1-鏈夌墿鏂�
-        /// </summary>
-        public int? RobotArmObject { get; set; }
-
-        /// <summary>
-        /// 鏈烘鎵嬭澶囦俊鎭�
-        /// </summary>
-        public RobotCraneDevice? RobotCrane { get; set; }
-
-        /// <summary>
-        /// 褰撳墠鍔ㄤ綔
-        /// </summary>
-        public string? CurrentAction { get; set; }
-
-        /// <summary>
-        /// 褰撳墠鐘舵��
-        /// </summary>
-        public string? OperStatus { get; set; }
-
-        /// <summary>
-        /// 鍙栬揣瀹屾垚浣嶇疆
-        /// </summary>
-        public int[]? LastPickPositions { get; set; }
-
-        /// <summary>
-        /// 鏀捐揣瀹屾垚浣嶇疆
-        /// </summary>
-        public int[]? LastPutPositions { get; set; }
-
-        /// <summary>
-        /// 鎶撳彇浣嶇疆鏉$爜
-        /// </summary>
-        public List<string> CellBarcode { get; set; }
-
-        /// <summary>
-        /// 褰撳墠鎶撳彇浠诲姟
-        /// </summary>
-        public Dt_RobotTask? CurrentTask { get; set; }
-
-        /// <summary>
-        /// 鏄惁闇�瑕佹媶鐩�
-        /// </summary>
-        public bool IsSplitPallet { get; set; }
-
-        /// <summary>
-        /// 鏄惁闇�瑕佺粍鐩�
-        /// </summary>
-        public bool IsGroupPallet { get; set; }
-
-        /// <summary>
-        /// 浠诲姟鎬绘暟
-        /// </summary>
-        public int RobotTaskTotalNum { get; set; }
-    }
-}
\ No newline at end of file
+}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotMessageHandler.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotMessageHandler.cs
new file mode 100644
index 0000000..36b521f
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotMessageHandler.cs
@@ -0,0 +1,275 @@
+using System.Net.Sockets;
+using WIDESEAWCS_Common;
+using WIDESEAWCS_Common.HttpEnum;
+using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Core.Caches;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_DTO.Stock;
+using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model.Models;
+using WIDESEAWCS_Tasks.SocketServer;
+
+namespace WIDESEAWCS_Tasks
+{
+    /// <summary>
+    /// 鏈烘鎵嬫秷鎭鐞嗗櫒 - 璐熻矗澶勭悊鏉ヨ嚜TCP瀹㈡埛绔殑娑堟伅
+    /// </summary>
+    public class RobotMessageHandler
+    {
+        private readonly TcpSocketServer _tcpSocket;
+        private readonly RobotStateManager _stateManager;
+        private readonly ICacheService _cache;
+        private readonly IRobotTaskService _robotTaskService;
+        private readonly RobotTaskProcessor _taskProcessor;
+
+        public RobotMessageHandler(
+            TcpSocketServer tcpSocket,
+            RobotStateManager stateManager,
+            ICacheService cache,
+            IRobotTaskService robotTaskService,
+            RobotTaskProcessor taskProcessor)
+        {
+            _tcpSocket = tcpSocket;
+            _stateManager = stateManager;
+            _cache = cache;
+            _robotTaskService = robotTaskService;
+            _taskProcessor = taskProcessor;
+        }
+
+        /// <summary>
+        /// 澶勭悊鎺ユ敹鍒扮殑娑堟伅
+        /// </summary>
+        public async Task<string?> HandleMessageReceivedAsync(string message, bool isJson, TcpClient client, RobotSocketState state)
+        {
+            if (!(_cache?.TryGetValue($"{RedisPrefix.Code}:{RedisName.SocketDevices}:{client.Client.RemoteEndPoint}", out state)) ?? false)
+                return null;
+
+            string messageLower = message.ToLowerInvariant();
+
+            if (await IsSimpleCommandAsync(messageLower, state))
+            {
+                await _tcpSocket.SendMessageAsync(client, message);
+                if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
+                    return null;
+            }
+            else if (IsPrefixCommand(messageLower))
+            {
+                await HandlePrefixCommandAsync(message, state, client);
+            }
+
+            return null;
+        }
+
+        /// <summary>
+        /// 澶勭悊鍓嶇紑鍛戒护锛坧ickfinished, putfinished锛�
+        /// </summary>
+        private async Task HandlePrefixCommandAsync(string message, RobotSocketState state, TcpClient client)
+        {
+            try
+            {
+                var parts = message.Split(',');
+                if (parts.Length >= 1 && state.CurrentTask != null)
+                {
+                    var cmd = parts[0].ToLowerInvariant();
+                    int[] positions = parts.Skip(1)
+                       .Select(p => int.TryParse(p, out int value) ? value : (int?)null)
+                       .Where(v => v.HasValue && v.Value != 0)
+                       .Select(v => v!.Value)
+                       .ToArray();
+
+                    var task = await _robotTaskService.Repository.QueryFirstAsync(x => x.RobotTaskId == state.CurrentTask.RobotTaskId);
+
+                    if (cmd.StartsWith("pickfinished"))
+                    {
+                        await HandlePickFinishedAsync(state, positions, task, client);
+                    }
+                    else if (cmd.StartsWith("putfinished"))
+                    {
+                        await HandlePutFinishedAsync(state, positions, task, client);
+                    }
+
+                    await _tcpSocket.SendMessageAsync(client, message);
+                }
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine($"RobotJob MessageReceived Error: {ex.Message}");
+            }
+        }
+
+        /// <summary>
+        /// 澶勭悊鍙栬揣瀹屾垚鍛戒护
+        /// </summary>
+        private async Task HandlePickFinishedAsync(RobotSocketState state, int[] positions, Dt_RobotTask? task, TcpClient client)
+        {
+            if (state.IsSplitPallet)
+            {
+                var stockDTO = RobotTaskProcessor.BuildStockDTO(state, positions);
+                state.LastPickPositions = positions;
+
+                var result = _taskProcessor.PostSplitPalletAsync(stockDTO);
+
+                if (result.Data.Status && result.IsSuccess)
+                {
+                    state.CurrentAction = "PickFinished";
+                }
+            }
+            else
+            {
+                state.CurrentAction = "PickFinished";
+            }
+
+            state.LastPickPositions = positions;
+            if (task != null)
+            {
+                task.RobotTaskState = TaskRobotStatusEnum.RobotPickFinish.GetHashCode();
+                if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
+                    await _robotTaskService.Repository.UpdateDataAsync(task);
+            }
+        }
+
+        /// <summary>
+        /// 澶勭悊鏀捐揣瀹屾垚鍛戒护
+        /// </summary>
+        private async Task HandlePutFinishedAsync(RobotSocketState state, int[] positions, Dt_RobotTask? task, TcpClient client)
+        {
+            bool putSuccess = true;
+            if (state.IsGroupPallet)
+            {
+                state.LastPutPositions = positions;
+                var stockDTO = RobotTaskProcessor.BuildStockDTO(state, positions);
+                var configKey = state.CurrentTask?.RobotTaskType == RobotTaskTypeEnum.ChangePallet.GetHashCode()
+                    ? nameof(ConfigKey.ChangePalletAsync) : nameof(ConfigKey.GroupPalletAsync);
+
+                var result = _taskProcessor.PostGroupPalletAsync(configKey, stockDTO);
+                putSuccess = result.Data.Status && result.IsSuccess;
+            }
+
+            if (putSuccess)
+            {
+                state.CurrentAction = "PutFinished";
+                state.RobotTaskTotalNum += positions.Length;
+                if (task != null)
+                {
+                    task.RobotTaskTotalNum += positions.Length;
+                }
+            }
+
+            if (task != null)
+            {
+                task.RobotTaskState = TaskRobotStatusEnum.RobotPutFinish.GetHashCode();
+                if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
+                    await _robotTaskService.Repository.UpdateDataAsync(task);
+            }
+        }
+
+        /// <summary>
+        /// 鏈烘鎵嬬畝鍗曞懡浠ゅ鐞�
+        /// </summary>
+        private async Task<bool> IsSimpleCommandAsync(string message, RobotSocketState state)
+        {
+            RobotTaskTypeEnum? GetRobotTaskType() => state.CurrentTask != null ? (RobotTaskTypeEnum)state.CurrentTask.RobotTaskType : null;
+            switch (message)
+            {
+                case "homing":
+                    state.OperStatus = "Homing";
+                    return true;
+
+                case "homed":
+                    state.OperStatus = "Homed";
+                    return true;
+
+                case "picking":
+                    state.CurrentAction = "Picking";
+                    return true;
+
+                case "puting":
+                    state.CurrentAction = "Putting";
+                    return true;
+
+                case "allpickfinished": // 鍙栬揣瀹屾垚
+                    state.CurrentAction = "AllPickFinished";
+                    var robotTaskType = GetRobotTaskType();
+
+                    if (robotTaskType == RobotTaskTypeEnum.SplitPallet || robotTaskType == RobotTaskTypeEnum.ChangePallet)
+                    {
+                        if (await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: true))
+                        {
+                            _taskProcessor.DeleteTask(state.CurrentTask.RobotTaskId);
+                            return true;
+                        }
+                    }
+                    return false;
+
+                case "allputfinished": // 鏀捐揣瀹屾垚
+                    state.CurrentAction = "AllPutFinished";
+                    robotTaskType = GetRobotTaskType();
+
+                    if (robotTaskType == RobotTaskTypeEnum.GroupPallet || robotTaskType == RobotTaskTypeEnum.ChangePallet)
+                    {
+                        if (await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: false))
+                        {
+                            _taskProcessor.DeleteTask(state.CurrentTask.RobotTaskId);
+                            state.CurrentTask = null;
+                            state.RobotTaskTotalNum = 0;
+                            state.CellBarcode = new List<string>();
+                            return true;
+                        }
+                    }
+                    return false;
+
+                case "running":
+                    state.OperStatus = "Running";
+                    return true;
+
+                case "pausing":
+                    state.OperStatus = "Pausing";
+                    return true;
+
+                case "warming":
+                    state.OperStatus = "Warming";
+                    return true;
+
+                case "emstoping":
+                    state.OperStatus = "Emstoping";
+                    return true;
+
+                case "runmode,1":
+                    state.RobotRunMode = 1;
+                    return true;
+
+                case "runmode,2":
+                    state.RobotRunMode = 2;
+                    return true;
+
+                case "controlmode,1":
+                    state.RobotControlMode = 1;
+                    return true;
+
+                case "controlmode,2":
+                    state.RobotControlMode = 2;
+                    return true;
+
+                case "armobject,1":
+                    state.RobotArmObject = 1;
+                    return true;
+
+                case "armobject,0":
+                    state.RobotArmObject = 0;
+                    return true;
+
+                default:
+                    return false;
+            }
+        }
+
+        /// <summary>
+        /// 鍒ゆ柇鏄惁涓哄墠缂�鍛戒护
+        /// </summary>
+        private static bool IsPrefixCommand(string message)
+        {
+            return message.StartsWith("pickfinished") || message.StartsWith("putfinished");
+        }
+    }
+}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotSocketState.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotSocketState.cs
new file mode 100644
index 0000000..d4077a5
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotSocketState.cs
@@ -0,0 +1,89 @@
+using WIDESEAWCS_Model.Models;
+using WIDESEAWCS_QuartzJob;
+
+namespace WIDESEAWCS_Tasks
+{
+    /// <summary>
+    /// 鏈烘鎵婼ocket閫氫俊鐘舵��
+    /// </summary>
+    public class RobotSocketState
+    {
+        public string IPAddress { get; set; } = string.Empty;
+
+        /// <summary>
+        /// 鐗堟湰鍙凤紝鐢ㄤ簬闃叉骞跺彂鏇存柊鏃舵棫鍊艰鐩栨柊鍊�
+        /// 姣忔淇敼鐘舵�佹椂閮藉簲璇ユ洿鏂版鍊�
+        /// </summary>
+        public long Version { get; set; } = DateTime.UtcNow.Ticks;
+
+        /// <summary>
+        /// 鏄惁宸茶闃呮秷鎭簨浠�
+        /// </summary>
+        public bool IsEventSubscribed { get; set; }
+
+        /// <summary>
+        /// 鏈烘鎵嬭繍琛屾ā寮�
+        /// </summary>
+        public int? RobotRunMode { get; set; }
+
+        /// <summary>
+        /// 鏈烘鎵嬫帶鍒舵ā寮�
+        /// </summary>
+        public int? RobotControlMode { get; set; }
+
+        /// <summary>
+        /// 鏈烘鎵嬫槸鍚︽姄鍙栫墿鏂欙紝0-鏃犵墿鏂欙紝1-鏈夌墿鏂�
+        /// </summary>
+        public int? RobotArmObject { get; set; }
+
+        /// <summary>
+        /// 鏈烘鎵嬭澶囦俊鎭�
+        /// </summary>
+        public RobotCraneDevice? RobotCrane { get; set; }
+
+        /// <summary>
+        /// 褰撳墠鍔ㄤ綔
+        /// </summary>
+        public string? CurrentAction { get; set; }
+
+        /// <summary>
+        /// 褰撳墠鐘舵��
+        /// </summary>
+        public string? OperStatus { get; set; }
+
+        /// <summary>
+        /// 鍙栬揣瀹屾垚浣嶇疆
+        /// </summary>
+        public int[]? LastPickPositions { get; set; }
+
+        /// <summary>
+        /// 鏀捐揣瀹屾垚浣嶇疆
+        /// </summary>
+        public int[]? LastPutPositions { get; set; }
+
+        /// <summary>
+        /// 鎶撳彇浣嶇疆鏉$爜
+        /// </summary>
+        public List<string> CellBarcode { get; set; } = new List<string>();
+
+        /// <summary>
+        /// 褰撳墠鎶撳彇浠诲姟
+        /// </summary>
+        public Dt_RobotTask? CurrentTask { get; set; }
+
+        /// <summary>
+        /// 鏄惁闇�瑕佹媶鐩�
+        /// </summary>
+        public bool IsSplitPallet { get; set; }
+
+        /// <summary>
+        /// 鏄惁闇�瑕佺粍鐩�
+        /// </summary>
+        public bool IsGroupPallet { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鎬绘暟
+        /// </summary>
+        public int RobotTaskTotalNum { get; set; }
+    }
+}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotStateManager.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotStateManager.cs
new file mode 100644
index 0000000..9500fd7
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotStateManager.cs
@@ -0,0 +1,123 @@
+using Newtonsoft.Json;
+using WIDESEAWCS_Common;
+using WIDESEAWCS_Core.Caches;
+using WIDESEAWCS_QuartzJob;
+
+namespace WIDESEAWCS_Tasks
+{
+    /// <summary>
+    /// 鏈烘鎵嬬姸鎬佺鐞嗗櫒 - 璐熻矗RobotSocketState鐨勫畨鍏ㄦ洿鏂板拰鍏嬮殕
+    /// </summary>
+    public class RobotStateManager
+    {
+        private readonly ICacheService _cache;
+
+        public RobotStateManager(ICacheService cache)
+        {
+            _cache = cache;
+        }
+
+        /// <summary>
+        /// 瀹夊叏鏇存柊RobotSocketState缂撳瓨锛岄槻姝㈠苟鍙戣鐩�
+        /// </summary>
+        /// <param name="ipAddress">璁惧IP鍦板潃</param>
+        /// <param name="updateAction">鏇存柊鐘舵�佺殑濮旀墭锛堜紶鍏ュ綋鍓嶇姸鎬侊紝杩斿洖淇敼鍚庣殑鏂扮姸鎬侊級</param>
+        /// <returns>鏄惁鏇存柊鎴愬姛</returns>
+        public bool TryUpdateStateSafely(string ipAddress, Func<RobotSocketState, RobotSocketState> updateAction)
+        {
+            var cacheKey = GetCacheKey(ipAddress);
+            var currentState = _cache.Get<RobotSocketState>(cacheKey);
+
+            if (currentState == null)
+            {
+                return false;
+            }
+
+            // 浣跨敤褰撳墠瀛樺偍鐨勭増鏈彿浣滀负鏈熸湜鐗堟湰
+            var expectedVersion = currentState.Version;
+
+            // 鍒涘缓鐘舵�佸壇鏈繘琛屼慨鏀癸紙閬垮厤淇敼鍘熷璞″紩鐢級
+            var stateCopy = CloneState(currentState);
+            var newState = updateAction(stateCopy);
+            newState.Version = DateTime.UtcNow.Ticks;
+
+            return _cache.TrySafeUpdate(
+                cacheKey,
+                newState,
+                expectedVersion,
+                s => s.Version
+            );
+        }
+
+        /// <summary>
+        /// 瀹夊叏鏇存柊RobotSocketState缂撳瓨锛堢畝鍗曠増鏈級
+        /// </summary>
+        /// <param name="ipAddress">璁惧IP鍦板潃</param>
+        /// <param name="newState">鏂扮姸鎬侊紙浼氳鏇存柊Version瀛楁锛�</param>
+        /// <returns>鏄惁鏇存柊鎴愬姛</returns>
+        public bool TryUpdateStateSafely(string ipAddress, RobotSocketState newState)
+        {
+            var cacheKey = GetCacheKey(ipAddress);
+            var currentState = _cache.Get<RobotSocketState>(cacheKey);
+
+            if (currentState == null)
+            {
+                // 褰撳墠涓嶅瓨鍦紝鐩存帴娣诲姞
+                newState.Version = DateTime.UtcNow.Ticks;
+                _cache.AddObject(cacheKey, newState);
+                return true;
+            }
+
+            // 浣跨敤褰撳墠瀛樺偍鐨勭増鏈彿浣滀负鏈熸湜鐗堟湰
+            var expectedVersion = currentState.Version;
+
+            // 鏇存柊鏂扮姸鎬佺殑鐗堟湰鍙蜂负鏈�鏂版椂闂存埑
+            newState.Version = DateTime.UtcNow.Ticks;
+
+            return _cache.TrySafeUpdate(
+                cacheKey,
+                newState,
+                expectedVersion,
+                s => s.Version
+            );
+        }
+
+        /// <summary>
+        /// 鍏嬮殕RobotSocketState瀵硅薄锛堝垱寤烘繁鎷疯礉锛�
+        /// </summary>
+        public RobotSocketState CloneState(RobotSocketState source)
+        {
+            // 浣跨敤搴忓垪鍖�/鍙嶅簭鍒楀寲杩涜娣辨嫹璐�
+            var json = JsonConvert.SerializeObject(source);
+            return JsonConvert.DeserializeObject<RobotSocketState>(json) ?? new RobotSocketState { IPAddress = source.IPAddress };
+        }
+
+        /// <summary>
+        /// 鑾峰彇Redis缂撳瓨閿�
+        /// </summary>
+        public static string GetCacheKey(string ipAddress)
+        {
+            return $"{RedisPrefix.Code}:{RedisName.SocketDevices}:{ipAddress}";
+        }
+
+        /// <summary>
+        /// 浠庣紦瀛樿幏鍙栫姸鎬�
+        /// </summary>
+        public RobotSocketState? GetState(string ipAddress)
+        {
+            return _cache.Get<RobotSocketState>(GetCacheKey(ipAddress));
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎴栧垱寤虹姸鎬�
+        /// </summary>
+        public RobotSocketState GetOrCreateState(string ipAddress, RobotCraneDevice robotCrane)
+        {
+            return _cache.GetOrAdd(GetCacheKey(ipAddress), _ => new RobotSocketState
+            {
+                IPAddress = ipAddress,
+                RobotCrane = robotCrane
+            });
+        }
+    }
+}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
new file mode 100644
index 0000000..f379baa
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/RobotTaskProcessor.cs
@@ -0,0 +1,207 @@
+using Newtonsoft.Json;
+using WIDESEA_Core;
+using WIDESEAWCS_Common;
+using WIDESEAWCS_Common.HttpEnum;
+using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_DTO.Stock;
+using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model.Models;
+using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_Tasks.SocketServer;
+
+namespace WIDESEAWCS_Tasks
+{
+    /// <summary>
+    /// 鏈烘鎵嬩换鍔″鐞嗗櫒 - 璐熻矗鏈烘鎵嬩换鍔℃墽琛屽拰澶勭悊
+    /// </summary>
+    public class RobotTaskProcessor
+    {
+        private readonly TcpSocketServer _tcpSocket;
+        private readonly RobotStateManager _stateManager;
+        private readonly IRobotTaskService _robotTaskService;
+        private readonly ITaskService _taskService;
+        private readonly HttpClientHelper _httpClientHelper;
+
+        public RobotTaskProcessor(
+            TcpSocketServer tcpSocket,
+            RobotStateManager stateManager,
+            IRobotTaskService robotTaskService,
+            ITaskService taskService,
+            HttpClientHelper httpClientHelper)
+        {
+            _tcpSocket = tcpSocket;
+            _stateManager = stateManager;
+            _robotTaskService = robotTaskService;
+            _taskService = taskService;
+            _httpClientHelper = httpClientHelper;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏈烘鎵嬩换鍔�
+        /// </summary>
+        public Dt_RobotTask? GetTask(RobotCraneDevice robotCrane)
+        {
+            return _robotTaskService.QueryRobotCraneTask(robotCrane.DeviceCode);
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏈烘鎵嬩换鍔�
+        /// </summary>
+        public bool? DeleteTask(int ID)
+        {
+            return _robotTaskService.Repository.DeleteDataById(ID);
+        }
+
+        /// <summary>
+        /// 鍙戦�佹満姊版墜鍙栬揣鍛戒护
+        /// </summary>
+        public async Task SendSocketRobotPickAsync(Dt_RobotTask task, RobotSocketState state)
+        {
+            string taskString = $"Pickbattery,{task.RobotSourceAddress}";
+            // 鍙戦�佷换鍔℃寚浠�
+            bool result = await _tcpSocket.SendToClientAsync(state.IPAddress, taskString);
+            if (result)
+            {
+                task.RobotTaskState = TaskRobotStatusEnum.RobotExecuting.GetHashCode();
+                state.CurrentTask = task;
+
+                // 鏇存柊缂撳瓨涓殑鐘舵�侊紙浣跨敤瀹夊叏鏇存柊闃叉骞跺彂瑕嗙洊锛�
+                if (_stateManager.TryUpdateStateSafely(state.IPAddress, state))
+                    await _robotTaskService.UpdateRobotTaskAsync(task);
+            }
+        }
+
+        /// <summary>
+        /// 澶勭悊鍏ュ簱浠诲姟
+        /// </summary>
+        public async Task<bool> HandleInboundTaskAsync(RobotSocketState state, bool useSourceAddress)
+        {
+            var currentTask = state.CurrentTask;
+            if (currentTask == null)
+            {
+                return false;
+            }
+
+            string roadway = currentTask.RobotSourceAddressLineCode;
+            int warehouseId = currentTask.RobotRoadway == "ZYRB1" ? 1 : currentTask.RobotRoadway == "HPRB001" ? 2 : 3;
+
+            int taskType = 0;
+            string SourceAddress = currentTask.RobotTargetAddressLineCode;
+            string TargetAddress = currentTask.RobotSourceAddressLineCode;
+            string PalletCode = string.Empty;
+            // 鐩存帴杞崲涓烘灇涓剧被鍨嬭繘琛屾瘮杈�
+            var robotTaskType = (RobotTaskTypeEnum)currentTask.RobotTaskType;
+
+            if (useSourceAddress)
+            {
+                switch (robotTaskType)
+                {
+                    case RobotTaskTypeEnum.GroupPallet:
+                        return false;
+
+                    case RobotTaskTypeEnum.ChangePallet:
+                    case RobotTaskTypeEnum.SplitPallet:
+                        taskType = TaskTypeEnum.InEmpty.GetHashCode();
+                        PalletCode = currentTask.RobotSourceAddressPalletCode;
+                        break;
+                }
+            }
+            else
+            {
+                switch (robotTaskType)
+                {
+                    case RobotTaskTypeEnum.ChangePallet:
+                    case RobotTaskTypeEnum.GroupPallet:
+                        taskType = TaskTypeEnum.Inbound.GetHashCode();
+                        PalletCode = currentTask.RobotTargetAddressPalletCode;
+                        break;
+
+                    case RobotTaskTypeEnum.SplitPallet:
+                        return true;
+                }
+            }
+
+            CreateTaskDto taskDto = new CreateTaskDto
+            {
+                PalletCode = PalletCode,
+                SourceAddress = SourceAddress ?? string.Empty,
+                TargetAddress = TargetAddress ?? string.Empty,
+                Roadway = roadway,
+                WarehouseId = warehouseId,
+                PalletType = 1,
+                TaskType = taskType
+            };
+            var result = _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.CreateTaskInboundAsync), taskDto.ToJson());
+            if (!result.Data.Status && result.IsSuccess)
+            {
+                return false;
+            }
+
+            WMSTaskDTO taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(result.Data.Data.ToJson() ?? string.Empty) ?? new WMSTaskDTO();
+            var content = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
+            if (!content.Status) return false;
+
+            var taskInfo = JsonConvert.DeserializeObject<Dt_Task>(content.Data.ToJson() ?? string.Empty) ?? new Dt_Task();
+
+            string sourceAddress = taskDTO.SourceAddress;
+
+            IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceProDTOs.Any(d => d.DeviceChildCode == sourceAddress));
+            if (device != null)
+            {
+                CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+                conveyorLine.SetValue(ConveyorLineDBNameNew.Target, taskInfo.NextAddress, sourceAddress);
+                conveyorLine.SetValue(ConveyorLineDBNameNew.TaskNo, taskInfo.TaskNum, sourceAddress);
+                conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_STB, 1, sourceAddress);
+
+                if (_taskService.UpdateTaskStatusToNext(taskInfo).Status)
+                {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        /// <summary>
+        /// 鏋勫缓搴撳瓨DTO
+        /// </summary>
+        public static StockDTO BuildStockDTO(RobotSocketState state, int[] positions)
+        {
+            return 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.RobotTaskTotalNum > 0 ? state.RobotTaskTotalNum + positions.Length : positions.Length,
+                        Channel = x,
+                        CellBarcode = state.CellBarcode?.Count > 0 ? state.CellBarcode[x - 1] : ""
+                    })
+                    .ToList()
+            };
+        }
+
+        /// <summary>
+        /// 璋冪敤鎷嗙洏API
+        /// </summary>
+        public HttpResponseResult<WebResponseContent> PostSplitPalletAsync(StockDTO stockDTO)
+        {
+            return _httpClientHelper.Post<WebResponseContent>(nameof(ConfigKey.SplitPalletAsync), stockDTO.ToJson());
+        }
+
+        /// <summary>
+        /// 璋冪敤缁勭洏鎴栨崲鐩楢PI
+        /// </summary>
+        public HttpResponseResult<WebResponseContent> PostGroupPalletAsync(string configKey, StockDTO stockDTO)
+        {
+            return _httpClientHelper.Post<WebResponseContent>(configKey, stockDTO.ToJson());
+        }
+    }
+}
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 84b0fd5..0542a28 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
@@ -7,36 +7,64 @@
       "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\taskservice.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:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_common\\taskenum\\tasktypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\taskenum\\tasktypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "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:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|solutionrelative:widesea_itaskinfoservice\\itaskservice.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\\task\\createtaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\task\\createtaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_core\\baserepository\\repositorybase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\baserepository\\repositorybase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_common\\stockenum\\stockstatusemun.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\stockenum\\stockstatusemun.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_core\\baserepository\\irepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\baserepository\\irepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "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:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\stock\\stockcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\stock\\stockcontroller.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\\istockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{49716D78-720D-475D-948C-0FC6C5F079E5}|WIDESEA_IStockService\\WIDESEA_IStockService.csproj|solutionrelative:widesea_istockservice\\istockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_core\\baseservices\\servicebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\baseservices\\servicebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_core\\baseservices\\iservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\baseservices\\iservice.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:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_model\\models\\stock\\dt_stockinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\stock\\dt_stockinfo.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\\task\\createtaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\task\\createtaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|solutionrelative:widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_common\\stockenum\\stockstatusemun.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\stockenum\\stockstatusemun.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{5F260E03-095A-4870-8419-5B72CB62929E}|WIDESEA_IBasicService\\WIDESEA_IBasicService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_ibasicservice\\ilocationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -45,18 +73,6 @@
     {
       "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_common\\locationenum\\locationstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\locationenum\\locationstatusenum.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\\istockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{49716D78-720D-475D-948C-0FC6C5F079E5}|WIDESEA_IStockService\\WIDESEA_IStockService.csproj|solutionrelative:widesea_istockservice\\istockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\stock\\stockcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\stock\\stockcontroller.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:{7DC26D42-D8EE-46F0-BA66-A13457086885}|WIDESEA_StockService\\WIDESEA_StockService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_stockservice\\stockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -87,10 +103,6 @@
       "RelativeMoniker": "D:0:0:{7DC26D42-D8EE-46F0-BA66-A13457086885}|WIDESEA_StockService\\WIDESEA_StockService.csproj|solutionrelative:widesea_stockservice\\stockviewservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_core\\baserepository\\irepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\baserepository\\irepository.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\\gradingmachine\\inputdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\gradingmachine\\inputdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
@@ -106,21 +118,8 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 24,
+          "SelectedChildIndex": 27,
           "Children": [
-            {
-              "$type": "Document",
-              "DocumentIndex": 6,
-              "Title": "StockStatusEmun.cs",
-              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\StockEnum\\StockStatusEmun.cs",
-              "RelativeDocumentMoniker": "WIDESEA_Common\\StockEnum\\StockStatusEmun.cs",
-              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\StockEnum\\StockStatusEmun.cs",
-              "RelativeToolTip": "WIDESEA_Common\\StockEnum\\StockStatusEmun.cs",
-              "ViewState": "AgIAACQAAAAAAAAAAAAgwDoAAAAeAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-28T06:15:43.313Z",
-              "EditorCaption": ""
-            },
             {
               "$type": "Bookmark",
               "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
@@ -135,7 +134,56 @@
             },
             {
               "$type": "Document",
+              "DocumentIndex": 1,
+              "Title": "TaskTypeEnum.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
+              "RelativeDocumentMoniker": "WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
+              "RelativeToolTip": "WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
+              "ViewState": "AgIAAIAAAAAAAAAAAAAYwKAAAAAXAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-05T06:53:48.328Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 11,
+              "Title": "IService.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseServices\\IService.cs",
+              "RelativeDocumentMoniker": "WIDESEA_Core\\BaseServices\\IService.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseServices\\IService.cs",
+              "RelativeToolTip": "WIDESEA_Core\\BaseServices\\IService.cs",
+              "ViewState": "AgIAAAYAAAAAAAAAAAASwCoAAAAbAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-03T08:25:43.974Z"
+            },
+            {
+              "$type": "Document",
               "DocumentIndex": 10,
+              "Title": "ServiceBase.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseServices\\ServiceBase.cs",
+              "RelativeDocumentMoniker": "WIDESEA_Core\\BaseServices\\ServiceBase.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseServices\\ServiceBase.cs",
+              "RelativeToolTip": "WIDESEA_Core\\BaseServices\\ServiceBase.cs",
+              "ViewState": "AgIAAAEAAAAAAAAAAAAAANcBAAA3AAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-03T08:32:27.552Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 15,
+              "Title": "StockStatusEmun.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\StockEnum\\StockStatusEmun.cs",
+              "RelativeDocumentMoniker": "WIDESEA_Common\\StockEnum\\StockStatusEmun.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\StockEnum\\StockStatusEmun.cs",
+              "RelativeToolTip": "WIDESEA_Common\\StockEnum\\StockStatusEmun.cs",
+              "ViewState": "AgIAACQAAAAAAAAAAAAgwDoAAAAeAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-02-28T06:15:43.313Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 17,
               "Title": "LocationStatusEnum.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\LocationEnum\\LocationStatusEnum.cs",
               "RelativeDocumentMoniker": "WIDESEA_Common\\LocationEnum\\LocationStatusEnum.cs",
@@ -147,31 +195,31 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 13,
+              "DocumentIndex": 12,
               "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": "AgIAAAkAAAAAAAAAAAAAABUAAAA0AAAAAAAAAA==",
+              "ViewState": "AgIAAAcAAAAAAAAAAAAewBkAAAAfAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2026-02-26T06:24:13.287Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 12,
+              "DocumentIndex": 8,
               "Title": "StockController.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Stock\\StockController.cs",
               "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Stock\\StockController.cs",
               "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Stock\\StockController.cs",
               "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Stock\\StockController.cs",
-              "ViewState": "AgIAADQAAAAAAAAAAAAIwDwAAAA5AAAAAAAAAA==",
+              "ViewState": "AgIAABwAAAAAAAAAAAAAACoAAAAJAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2026-02-26T06:16:05.674Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 15,
+              "DocumentIndex": 19,
               "Title": "Program.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Program.cs",
               "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Program.cs",
@@ -183,7 +231,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 18,
+              "DocumentIndex": 22,
               "Title": "HttpResponseResult.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Helper\\HTTP\\HttpResponseResult.cs",
               "RelativeDocumentMoniker": "WIDESEA_Core\\Helper\\HTTP\\HttpResponseResult.cs",
@@ -195,7 +243,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 17,
+              "DocumentIndex": 21,
               "Title": "HttpRequestConfig.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Helper\\HTTP\\HttpRequestConfig.cs",
               "RelativeDocumentMoniker": "WIDESEA_Core\\Helper\\HTTP\\HttpRequestConfig.cs",
@@ -207,7 +255,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 16,
+              "DocumentIndex": 20,
               "Title": "HttpClientHelper.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Helper\\HTTP\\HttpClientHelper.cs",
               "RelativeDocumentMoniker": "WIDESEA_Core\\Helper\\HTTP\\HttpClientHelper.cs",
@@ -219,7 +267,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 23,
+              "DocumentIndex": 26,
               "Title": "OutPutDto.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\GradingMachine\\OutPutDto.cs",
               "RelativeDocumentMoniker": "WIDESEA_DTO\\GradingMachine\\OutPutDto.cs",
@@ -231,7 +279,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 22,
+              "DocumentIndex": 25,
               "Title": "InputDto.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\GradingMachine\\InputDto.cs",
               "RelativeDocumentMoniker": "WIDESEA_DTO\\GradingMachine\\InputDto.cs",
@@ -243,32 +291,33 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 5,
+              "DocumentIndex": 3,
               "Title": "RepositoryBase.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseRepository\\RepositoryBase.cs",
               "RelativeDocumentMoniker": "WIDESEA_Core\\BaseRepository\\RepositoryBase.cs",
               "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseRepository\\RepositoryBase.cs",
               "RelativeToolTip": "WIDESEA_Core\\BaseRepository\\RepositoryBase.cs",
-              "ViewState": "AgIAALgDAAAAAAAAAAAawMsDAAAZAAAAAAAAAA==",
+              "ViewState": "AgIAALoDAAAAAAAAAAAawM0DAAA+AAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2026-02-14T08:55:16.1Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 21,
+              "DocumentIndex": 4,
               "Title": "IRepository.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseRepository\\IRepository.cs",
               "RelativeDocumentMoniker": "WIDESEA_Core\\BaseRepository\\IRepository.cs",
               "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseRepository\\IRepository.cs",
               "RelativeToolTip": "WIDESEA_Core\\BaseRepository\\IRepository.cs",
-              "ViewState": "AgIAAIIBAAAAAAAAAAAWwLMBAAASAAAAAAAAAA==",
+              "ViewState": "AgIAAKEBAAAAAAAAAAAewLMBAAASAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-14T08:53:36.522Z"
+              "WhenOpened": "2026-02-14T08:53:36.522Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 20,
+              "DocumentIndex": 24,
               "Title": "StockViewService.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockService\\StockViewService.cs",
               "RelativeDocumentMoniker": "WIDESEA_StockService\\StockViewService.cs",
@@ -280,7 +329,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 9,
+              "DocumentIndex": 16,
               "Title": "ILocationInfoService.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_IBasicService\\ILocationInfoService.cs",
               "RelativeDocumentMoniker": "WIDESEA_IBasicService\\ILocationInfoService.cs",
@@ -292,7 +341,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 19,
+              "DocumentIndex": 23,
               "Title": "LocationInfoService.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\LocationInfoService.cs",
               "RelativeDocumentMoniker": "WIDESEA_BasicService\\LocationInfoService.cs",
@@ -304,20 +353,19 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 7,
+              "DocumentIndex": 13,
               "Title": "Dt_StockInfo.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
               "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
               "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
               "RelativeToolTip": "WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
-              "ViewState": "AgIAAEAAAAAAAAAAAAAkwFIAAAAuAAAAAAAAAA==",
+              "ViewState": "AgIAABYAAAAAAAAAAAAAwCcAAAArAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-11T01:38:37.887Z",
-              "EditorCaption": ""
+              "WhenOpened": "2026-02-11T01:38:37.887Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 14,
+              "DocumentIndex": 18,
               "Title": "StockInfoService.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockService\\StockInfoService.cs",
               "RelativeDocumentMoniker": "WIDESEA_StockService\\StockInfoService.cs",
@@ -329,45 +377,45 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 11,
+              "DocumentIndex": 9,
               "Title": "IStockInfoService.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStockService\\IStockInfoService.cs",
               "RelativeDocumentMoniker": "WIDESEA_IStockService\\IStockInfoService.cs",
               "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStockService\\IStockInfoService.cs",
               "RelativeToolTip": "WIDESEA_IStockService\\IStockInfoService.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAACsAAAAzAAAAAAAAAA==",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAuwAgAAAAiAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2026-02-11T01:21:54.522Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 3,
+              "DocumentIndex": 5,
               "Title": "TaskController.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
               "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
               "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
               "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
-              "ViewState": "AgIAAD0AAAAAAAAAAAAUwFUAAABJAAAAAAAAAA==",
+              "ViewState": "AgIAABAAAAAAAAAAAAAgwCIAAAAIAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2026-02-09T01:23:19.844Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 8,
+              "DocumentIndex": 2,
               "Title": "CreateTaskDto.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Task\\CreateTaskDto.cs",
               "RelativeDocumentMoniker": "WIDESEA_DTO\\Task\\CreateTaskDto.cs",
               "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Task\\CreateTaskDto.cs",
               "RelativeToolTip": "WIDESEA_DTO\\Task\\CreateTaskDto.cs",
-              "ViewState": "AgIAABsAAAAAAAAAAAAywA4AAAARAAAAAAAAAA==",
+              "ViewState": "AgIAAC0AAAAAAAAAAAAUwDwAAAAcAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2026-02-06T07:58:13.932Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 4,
+              "DocumentIndex": 14,
               "Title": "ITaskService.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
               "RelativeDocumentMoniker": "WIDESEA_ITaskInfoService\\ITaskService.cs",
@@ -375,8 +423,7 @@
               "RelativeToolTip": "WIDESEA_ITaskInfoService\\ITaskService.cs",
               "ViewState": "AgIAAEAAAAAAAAAAAAAUwFEAAAAVAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-06T07:00:19.697Z",
-              "EditorCaption": ""
+              "WhenOpened": "2026-02-06T07:00:19.697Z"
             },
             {
               "$type": "Document",
@@ -386,14 +433,14 @@
               "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\TaskService.cs",
               "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
               "RelativeToolTip": "WIDESEA_TaskInfoService\\TaskService.cs",
-              "ViewState": "AgIAAAEBAAAAAAAAAAAxwPABAAAAAAAAAAAAAA==",
+              "ViewState": "AgIAADoAAAAAAAAAAAAgwEMAAAARAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2026-02-06T06:34:59.734Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 1,
+              "DocumentIndex": 7,
               "Title": "StockDTO.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\StockDTO.cs",
               "RelativeDocumentMoniker": "WIDESEA_DTO\\Stock\\StockDTO.cs",
@@ -406,13 +453,13 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 2,
+              "DocumentIndex": 6,
               "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": "AgIAAAAAAAAAAAAAAAAAAD8AAAApAAAAAAAAAA==",
+              "ViewState": "AgIAADAAAAAAAAAAAAAawC4AAAA7AAAAAAAAAA==",
               "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 7935bb9..5a3dc57 100644
--- a/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.json
+++ b/Code/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v18/DocumentLayout.json
@@ -3,40 +3,76 @@
   "WorkspaceRootPath": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\",
   "Documents": [
     {
-      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\taskservice.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:{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:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\taskinfo\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{7D7534D4-51D9-46DC-A6B7-6430042F4E12}|WIDESEA_TaskInfoService\\WIDESEA_TaskInfoService.csproj|solutionrelative:widesea_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{CE0DB91F-5A68-448E-A419-4C26B5039F51}|WIDESEA_ITaskInfoService\\WIDESEA_ITaskInfoService.csproj|solutionrelative:widesea_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
+      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_common\\taskenum\\taskstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\taskenum\\taskstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{7DC26D42-D8EE-46F0-BA66-A13457086885}|WIDESEA_StockService\\WIDESEA_StockService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_stockservice\\stockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{7DC26D42-D8EE-46F0-BA66-A13457086885}|WIDESEA_StockService\\WIDESEA_StockService.csproj|solutionrelative:widesea_stockservice\\stockinfoservice.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\\istockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{49716D78-720D-475D-948C-0FC6C5F079E5}|WIDESEA_IStockService\\WIDESEA_IStockService.csproj|solutionrelative:widesea_istockservice\\istockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_common\\taskenum\\tasktypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\taskenum\\tasktypeenum.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\\task\\createtaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\task\\createtaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
       "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_core\\baserepository\\repositorybase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\baserepository\\repositorybase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_common\\stockenum\\stockstatusemun.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\stockenum\\stockstatusemun.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_core\\baserepository\\irepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\baserepository\\irepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "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:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\stock\\stockcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\stock\\stockcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_core\\baseservices\\servicebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\baseservices\\servicebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_core\\baseservices\\iservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\baseservices\\iservice.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:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_model\\models\\stock\\dt_stockinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{00CE9885-9F24-4B6C-A7E8-0DE8C9ED7128}|WIDESEA_Model\\WIDESEA_Model.csproj|solutionrelative:widesea_model\\models\\stock\\dt_stockinfo.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\\task\\createtaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\task\\createtaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_common\\stockenum\\stockstatusemun.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\stockenum\\stockstatusemun.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{5F260E03-095A-4870-8419-5B72CB62929E}|WIDESEA_IBasicService\\WIDESEA_IBasicService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_ibasicservice\\ilocationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -45,22 +81,6 @@
     {
       "AbsoluteMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_common\\locationenum\\locationstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{AF8F3D65-1D75-4B8F-AFD9-4150E591C44D}|WIDESEA_Common\\WIDESEA_Common.csproj|solutionrelative:widesea_common\\locationenum\\locationstatusenum.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\\istockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{49716D78-720D-475D-948C-0FC6C5F079E5}|WIDESEA_IStockService\\WIDESEA_IStockService.csproj|solutionrelative:widesea_istockservice\\istockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\stock\\stockcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\stock\\stockcontroller.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:{7DC26D42-D8EE-46F0-BA66-A13457086885}|WIDESEA_StockService\\WIDESEA_StockService.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_stockservice\\stockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{7DC26D42-D8EE-46F0-BA66-A13457086885}|WIDESEA_StockService\\WIDESEA_StockService.csproj|solutionrelative:widesea_stockservice\\stockinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_wmsserver\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -87,10 +107,6 @@
       "RelativeMoniker": "D:0:0:{7DC26D42-D8EE-46F0-BA66-A13457086885}|WIDESEA_StockService\\WIDESEA_StockService.csproj|solutionrelative:widesea_stockservice\\stockviewservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|d:\\git\\shanmeixinnengyuan\\code\\wms\\widesea_wmsserver\\widesea_core\\baserepository\\irepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{111BD7AA-9749-4506-9772-79F9EF14754C}|WIDESEA_Core\\WIDESEA_Core.csproj|solutionrelative:widesea_core\\baserepository\\irepository.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\\gradingmachine\\inputdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{929DF936-042C-4EEC-8722-A831FC2F0AEA}|WIDESEA_DTO\\WIDESEA_DTO.csproj|solutionrelative:widesea_dto\\gradingmachine\\inputdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
@@ -106,8 +122,21 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 24,
+          "SelectedChildIndex": 25,
           "Children": [
+            {
+              "$type": "Document",
+              "DocumentIndex": 3,
+              "Title": "TaskStatusEnum.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskStatusEnum.cs",
+              "RelativeDocumentMoniker": "WIDESEA_Common\\TaskEnum\\TaskStatusEnum.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskStatusEnum.cs",
+              "RelativeToolTip": "WIDESEA_Common\\TaskEnum\\TaskStatusEnum.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAALgAAAAhAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-05T09:14:24.547Z",
+              "EditorCaption": ""
+            },
             {
               "$type": "Bookmark",
               "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
@@ -123,6 +152,43 @@
             {
               "$type": "Document",
               "DocumentIndex": 6,
+              "Title": "TaskTypeEnum.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
+              "RelativeDocumentMoniker": "WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
+              "RelativeToolTip": "WIDESEA_Common\\TaskEnum\\TaskTypeEnum.cs",
+              "ViewState": "AgIAAIAAAAAAAAAAAAAYwKAAAAAXAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-05T06:53:48.328Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 14,
+              "Title": "IService.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseServices\\IService.cs",
+              "RelativeDocumentMoniker": "WIDESEA_Core\\BaseServices\\IService.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseServices\\IService.cs",
+              "RelativeToolTip": "WIDESEA_Core\\BaseServices\\IService.cs",
+              "ViewState": "AgIAAAYAAAAAAAAAAAASwCoAAAAbAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-03T08:25:43.974Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 13,
+              "Title": "ServiceBase.cs",
+              "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseServices\\ServiceBase.cs",
+              "RelativeDocumentMoniker": "WIDESEA_Core\\BaseServices\\ServiceBase.cs",
+              "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseServices\\ServiceBase.cs",
+              "RelativeToolTip": "WIDESEA_Core\\BaseServices\\ServiceBase.cs",
+              "ViewState": "AgIAAAEAAAAAAAAAAAAAANcBAAA3AAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-03-03T08:32:27.552Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 17,
               "Title": "StockStatusEmun.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\StockEnum\\StockStatusEmun.cs",
               "RelativeDocumentMoniker": "WIDESEA_Common\\StockEnum\\StockStatusEmun.cs",
@@ -134,7 +200,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 10,
+              "DocumentIndex": 19,
               "Title": "LocationStatusEnum.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Common\\LocationEnum\\LocationStatusEnum.cs",
               "RelativeDocumentMoniker": "WIDESEA_Common\\LocationEnum\\LocationStatusEnum.cs",
@@ -146,13 +212,13 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 13,
+              "DocumentIndex": 15,
               "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": "AgIAAAkAAAAAAAAAAAAAABUAAAA0AAAAAAAAAA==",
+              "ViewState": "AgIAAAcAAAAAAAAAAAAewBkAAAAfAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2026-02-26T06:24:13.287Z"
             },
@@ -164,13 +230,13 @@
               "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Stock\\StockController.cs",
               "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Stock\\StockController.cs",
               "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Stock\\StockController.cs",
-              "ViewState": "AgIAADQAAAAAAAAAAAAIwDwAAAA5AAAAAAAAAA==",
+              "ViewState": "AgIAABwAAAAAAAAAAAAAACoAAAAJAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2026-02-26T06:16:05.674Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 15,
+              "DocumentIndex": 20,
               "Title": "Program.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Program.cs",
               "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Program.cs",
@@ -182,7 +248,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 18,
+              "DocumentIndex": 23,
               "Title": "HttpResponseResult.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Helper\\HTTP\\HttpResponseResult.cs",
               "RelativeDocumentMoniker": "WIDESEA_Core\\Helper\\HTTP\\HttpResponseResult.cs",
@@ -194,7 +260,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 17,
+              "DocumentIndex": 22,
               "Title": "HttpRequestConfig.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Helper\\HTTP\\HttpRequestConfig.cs",
               "RelativeDocumentMoniker": "WIDESEA_Core\\Helper\\HTTP\\HttpRequestConfig.cs",
@@ -206,7 +272,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 16,
+              "DocumentIndex": 21,
               "Title": "HttpClientHelper.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\Helper\\HTTP\\HttpClientHelper.cs",
               "RelativeDocumentMoniker": "WIDESEA_Core\\Helper\\HTTP\\HttpClientHelper.cs",
@@ -218,7 +284,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 23,
+              "DocumentIndex": 27,
               "Title": "OutPutDto.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\GradingMachine\\OutPutDto.cs",
               "RelativeDocumentMoniker": "WIDESEA_DTO\\GradingMachine\\OutPutDto.cs",
@@ -230,7 +296,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 22,
+              "DocumentIndex": 26,
               "Title": "InputDto.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\GradingMachine\\InputDto.cs",
               "RelativeDocumentMoniker": "WIDESEA_DTO\\GradingMachine\\InputDto.cs",
@@ -242,31 +308,33 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 5,
+              "DocumentIndex": 8,
               "Title": "RepositoryBase.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseRepository\\RepositoryBase.cs",
               "RelativeDocumentMoniker": "WIDESEA_Core\\BaseRepository\\RepositoryBase.cs",
               "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseRepository\\RepositoryBase.cs",
               "RelativeToolTip": "WIDESEA_Core\\BaseRepository\\RepositoryBase.cs",
-              "ViewState": "AgIAALgDAAAAAAAAAAAawMsDAAAZAAAAAAAAAA==",
+              "ViewState": "AgIAALoDAAAAAAAAAAAawM0DAAA+AAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-14T08:55:16.1Z"
+              "WhenOpened": "2026-02-14T08:55:16.1Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 21,
+              "DocumentIndex": 9,
               "Title": "IRepository.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseRepository\\IRepository.cs",
               "RelativeDocumentMoniker": "WIDESEA_Core\\BaseRepository\\IRepository.cs",
               "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Core\\BaseRepository\\IRepository.cs",
               "RelativeToolTip": "WIDESEA_Core\\BaseRepository\\IRepository.cs",
-              "ViewState": "AgIAAIIBAAAAAAAAAAAWwLMBAAASAAAAAAAAAA==",
+              "ViewState": "AgIAAKEBAAAAAAAAAAAewLMBAAASAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-14T08:53:36.522Z"
+              "WhenOpened": "2026-02-14T08:53:36.522Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 20,
+              "DocumentIndex": 25,
               "Title": "StockViewService.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockService\\StockViewService.cs",
               "RelativeDocumentMoniker": "WIDESEA_StockService\\StockViewService.cs",
@@ -278,7 +346,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 9,
+              "DocumentIndex": 18,
               "Title": "ILocationInfoService.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_IBasicService\\ILocationInfoService.cs",
               "RelativeDocumentMoniker": "WIDESEA_IBasicService\\ILocationInfoService.cs",
@@ -290,7 +358,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 19,
+              "DocumentIndex": 24,
               "Title": "LocationInfoService.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_BasicService\\LocationInfoService.cs",
               "RelativeDocumentMoniker": "WIDESEA_BasicService\\LocationInfoService.cs",
@@ -302,92 +370,97 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 7,
+              "DocumentIndex": 16,
               "Title": "Dt_StockInfo.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
               "RelativeDocumentMoniker": "WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
               "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
               "RelativeToolTip": "WIDESEA_Model\\Models\\Stock\\Dt_StockInfo.cs",
-              "ViewState": "AgIAAEAAAAAAAAAAAAAkwFIAAAAuAAAAAAAAAA==",
+              "ViewState": "AgIAABYAAAAAAAAAAAAAwCcAAAArAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2026-02-11T01:38:37.887Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 14,
+              "DocumentIndex": 4,
               "Title": "StockInfoService.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockService\\StockInfoService.cs",
               "RelativeDocumentMoniker": "WIDESEA_StockService\\StockInfoService.cs",
               "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_StockService\\StockInfoService.cs",
               "RelativeToolTip": "WIDESEA_StockService\\StockInfoService.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAABUAAAA0AAAAAAAAAA==",
+              "ViewState": "AgIAAAsAAAAAAAAAAAAMwB0AAAAuAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-11T01:23:56.94Z"
+              "WhenOpened": "2026-02-11T01:23:56.94Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 11,
+              "DocumentIndex": 5,
               "Title": "IStockInfoService.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStockService\\IStockInfoService.cs",
               "RelativeDocumentMoniker": "WIDESEA_IStockService\\IStockInfoService.cs",
               "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStockService\\IStockInfoService.cs",
               "RelativeToolTip": "WIDESEA_IStockService\\IStockInfoService.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAACsAAAAzAAAAAAAAAA==",
+              "ViewState": "AgIAAAMAAAAAAAAAAAAMwAgAAAAiAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-11T01:21:54.522Z"
+              "WhenOpened": "2026-02-11T01:21:54.522Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 3,
+              "DocumentIndex": 0,
               "Title": "TaskController.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
               "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
               "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
               "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\TaskInfo\\TaskController.cs",
-              "ViewState": "AgIAAD0AAAAAAAAAAAAUwFUAAABJAAAAAAAAAA==",
+              "ViewState": "AgIAAFMAAAAAAAAAAAAcwGQAAAAJAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-09T01:23:19.844Z"
+              "WhenOpened": "2026-02-09T01:23:19.844Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 8,
+              "DocumentIndex": 7,
               "Title": "CreateTaskDto.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Task\\CreateTaskDto.cs",
               "RelativeDocumentMoniker": "WIDESEA_DTO\\Task\\CreateTaskDto.cs",
               "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Task\\CreateTaskDto.cs",
               "RelativeToolTip": "WIDESEA_DTO\\Task\\CreateTaskDto.cs",
-              "ViewState": "AgIAABsAAAAAAAAAAAAywA4AAAARAAAAAAAAAA==",
+              "ViewState": "AgIAAC0AAAAAAAAAAAAUwDwAAAAcAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-06T07:58:13.932Z"
+              "WhenOpened": "2026-02-06T07:58:13.932Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 4,
+              "DocumentIndex": 2,
               "Title": "ITaskService.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
               "RelativeDocumentMoniker": "WIDESEA_ITaskInfoService\\ITaskService.cs",
               "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_ITaskInfoService\\ITaskService.cs",
               "RelativeToolTip": "WIDESEA_ITaskInfoService\\ITaskService.cs",
-              "ViewState": "AgIAAEAAAAAAAAAAAAAUwFEAAAAVAAAAAAAAAA==",
+              "ViewState": "AgIAAE8AAAAAAAAAAAAgwFwAAAAfAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-06T07:00:19.697Z"
+              "WhenOpened": "2026-02-06T07:00:19.697Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 0,
+              "DocumentIndex": 1,
               "Title": "TaskService.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
               "RelativeDocumentMoniker": "WIDESEA_TaskInfoService\\TaskService.cs",
               "ToolTip": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_TaskInfoService\\TaskService.cs",
               "RelativeToolTip": "WIDESEA_TaskInfoService\\TaskService.cs",
-              "ViewState": "AgIAANcAAAAAAAAAAAAgwBYBAABGAAAAAAAAAA==",
+              "ViewState": "AgIAACIBAAAAAAAAAAAuwGMBAAAAAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2026-02-06T06:34:59.734Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 1,
+              "DocumentIndex": 11,
               "Title": "StockDTO.cs",
               "DocumentMoniker": "D:\\Git\\ShanMeiXinNengYuan\\Code\\WMS\\WIDESEA_WMSServer\\WIDESEA_DTO\\Stock\\StockDTO.cs",
               "RelativeDocumentMoniker": "WIDESEA_DTO\\Stock\\StockDTO.cs",
@@ -395,19 +468,21 @@
               "RelativeToolTip": "WIDESEA_DTO\\Stock\\StockDTO.cs",
               "ViewState": "AgIAACMAAAAAAAAAAAAAADYAAAAuAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-06T02:56:51.397Z"
+              "WhenOpened": "2026-02-06T02:56:51.397Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 2,
+              "DocumentIndex": 10,
               "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": "AgIAAAAAAAAAAAAAAAAAAD8AAAApAAAAAAAAAA==",
+              "ViewState": "AgIAADAAAAAAAAAAAAAawC4AAAA7AAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2026-02-06T01:53:49.077Z"
+              "WhenOpened": "2026-02-06T01:53:49.077Z",
+              "EditorCaption": ""
             }
           ]
         }
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs
index fdea881..8463482 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs
@@ -112,4 +112,143 @@
         [Description("鎻愬崌鏈烘墽琛屼腑")]
         HT_Executing = 110,
     }
+
+    public enum TaskInStatusEnum
+    {
+        /// <summary>
+        /// 鏂板缓鍏ュ簱浠诲姟
+        /// </summary>
+        [Description("鏂板缓鍏ュ簱浠诲姟")]
+        InNew = 200,
+
+        ///// <summary>
+        ///// AGV鍏ュ簱鎵ц涓�
+        ///// </summary>
+        //[Description("AGV鍏ュ簱鎵ц涓�")]
+        //AGV_InExecuting = 210,
+
+        ///// <summary>
+        ///// AGV鍏ュ簱瀹屾垚
+        ///// </summary>
+        //[Description("AGV鎼繍瀹屾垚")]
+        //AGV_InFinish = 215,
+
+        /// <summary>
+        /// 杈撻�佺嚎鍏ュ簱鎵ц涓�
+        /// </summary>
+        [Description("杈撻�佺嚎鍏ュ簱鎵ц涓�")]
+        Line_InExecuting = 220,
+
+        /// <summary>
+        /// 杈撻�佺嚎鍏ュ簱瀹屾垚
+        /// </summary>
+        [Description("杈撻�佺嚎杈撻�佸畬鎴�")]
+        Line_InFinish = 225,
+
+        /// <summary>
+        /// 鍫嗗灈鏈哄叆搴撴墽琛屼腑
+        /// </summary>
+        [Description("鍫嗗灈鏈哄叆搴撴墽琛屼腑")]
+        SC_InExecuting = 230,
+
+        /// <summary>
+        /// 鍫嗗灈鏈哄叆搴撳畬鎴�
+        /// </summary>
+        [Description("鍫嗗灈鏈哄叆搴撳畬鎴�")]
+        SC_InFinish = 235,
+
+        /// <summary>
+        /// 鍏ュ簱浠诲姟瀹屾垚
+        /// </summary>
+        [Description("鍏ュ簱浠诲姟瀹屾垚")]
+        InFinish = 290,
+
+        /// <summary>
+        /// 鍏ュ簱浠诲姟鎸傝捣
+        /// </summary>
+        [Description("鍏ュ簱浠诲姟鎸傝捣")]
+        InPending = 297,
+
+        /// <summary>
+        /// 鍏ュ簱浠诲姟鍙栨秷
+        /// </summary>
+        [Description("鍏ュ簱浠诲姟鍙栨秷")]
+        InCancel = 298,
+
+        /// <summary>
+        /// 鍏ュ簱浠诲姟寮傚父
+        /// </summary>
+        [Description("鍏ュ簱浠诲姟寮傚父")]
+        InException = 299,
+    }
+
+    public enum TaskOutStatusEnum
+    {
+        /// <summary>
+        /// 鏂板缓鍑哄簱浠诲姟
+        /// </summary>
+        [Description("鏂板缓鍑哄簱浠诲姟")]
+        OutNew = 100,
+
+        /// <summary>
+        /// 鍫嗗灈鏈哄嚭搴撴墽琛屼腑
+        /// </summary>
+        [Description("鍫嗗灈鏈哄嚭搴撴墽琛屼腑")]
+        SC_OutExecuting = 110,
+
+        /// <summary>
+        /// 鍫嗗灈鏈哄嚭搴撳畬鎴�
+        /// </summary>
+        [Description("鍫嗗灈鏈哄嚭搴撳畬鎴�")]
+        SC_OutFinish = 115,
+
+        /// <summary>
+        /// 杈撻�佺嚎鍑哄簱鎵ц涓�
+        /// </summary>
+        [Description("杈撻�佺嚎鍑哄簱鎵ц涓�")]
+        Line_OutExecuting = 120,
+
+        /// <summary>
+        /// 杈撻�佺嚎鍑哄簱瀹屾垚
+        /// </summary>
+        [Description("杈撻�佺嚎杈撻�佸畬鎴�")]
+        Line_OutFinish = 125,
+
+        ///// <summary>
+        ///// AGV鍑哄簱鎵ц涓�
+        ///// </summary>
+        //[Description("AGV鍑哄簱鎵ц涓�")]
+        //AGV_OutExecuting = 130,
+
+        ///// <summary>
+        ///// AGV鍑哄簱瀹屾垚
+        ///// </summary>
+        //[Description("AGV鎼繍瀹屾垚")]
+        //AGV_OutFinish = 135,
+
+        /// <summary>
+        /// 鍑哄簱浠诲姟瀹屾垚
+        /// </summary>
+        [Description("鍑哄簱浠诲姟瀹屾垚")]
+        OutFinish = 190,
+
+        /// <summary>
+        /// 鍑哄簱浠诲姟鎸傝捣
+        /// </summary>
+        [Description("鍑哄簱浠诲姟鎸傝捣")]
+        OutPending = 197,
+
+        /// <summary>
+        /// 鍑哄簱浠诲姟鍙栨秷
+        /// </summary>
+        [Description("鍑哄簱浠诲姟鍙栨秷")]
+        OutCancel = 198,
+
+        /// <summary>
+        /// 鍑哄簱浠诲姟寮傚父
+        /// </summary>
+        [Description("鍑哄簱浠诲姟寮傚父")]
+        OutException = 199,
+    }
+
 }
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs
index 1013730..c1f49bc 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs
@@ -101,6 +101,80 @@
         
     }
 
+    public enum TaskInboundTypeEnum
+    {
+        /// <summary>
+        /// 鍏ュ簱
+        /// </summary>
+        [Description("鍏ュ簱")]
+        Inbound = 200,
+        /// <summary>
+        /// 鐩樼偣鍏ュ簱
+        /// </summary>
+        [Description("鐩樼偣鍏ュ簱")]
+        InInventory = 201,
+        /// <summary>
+        /// 鍒嗘嫞鍏ュ簱
+        /// </summary>
+        [Description("鍒嗘嫞鍏ュ簱")]
+        InPick = 202,
+        /// <summary>
+        /// 璐ㄦ鍏ュ簱
+        /// </summary>
+        [Description("璐ㄦ鍏ュ簱")]
+        InQuality = 203,
+
+        /// <summary>
+        /// 绌虹鍏ュ簱
+        /// </summary>
+        [Description("绌虹鍏ュ簱")]
+        InEmpty = 600,
+    }
+
+    public enum TaskOutboundTypeEnum
+    {
+        /// <summary>
+        /// 鍑哄簱
+        /// </summary>
+        [Description("鍑哄簱")]
+        Outbound = 100,
+        /// <summary>
+        /// 鐩樼偣鍑哄簱
+        /// </summary>
+        [Description("鐩樼偣鍑哄簱")]
+        OutInventory = 101,
+        /// <summary>
+        /// 鍒嗘嫞鍑哄簱
+        /// </summary>
+        [Description("鍒嗘嫞鍑哄簱")]
+        OutPick = 102,
+        /// <summary>
+        /// 璐ㄦ鍑哄簱
+        /// </summary>
+        [Description("璐ㄦ鍑哄簱")]
+        OutQuality = 103,
+
+        /// <summary>
+        /// 绌虹鍑哄簱
+        /// </summary>
+        [Description("绌虹鍑哄簱")]
+        OutEmpty = 140,
+    }
+
+    public enum TaskRelocationTypeEnum
+    {
+        /// <summary>
+        /// 搴撳唴绉诲簱
+        /// </summary>
+        [Description("搴撳唴绉诲簱")]
+        Relocation = 300,
+        /// <summary>
+        /// 搴撳绉诲簱
+        /// </summary>
+        [Description("搴撳绉诲簱")]
+        RelocationIn = 301
+    }
+
     public enum TaskTypeGroup
     {
         /// <summary>
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
index 4dfe3a3..f6c2b0e 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -86,6 +86,14 @@
         Task<WebResponseContent> GetOutBoundTrayTaskAsync(CreateTaskDto taskDto);
 
         /// <summary>
+        /// 淇敼浠诲姟鐘舵�侊紙鏍规嵁浠诲姟ID淇敼涓烘寚瀹氱姸鎬侊級
+        /// </summary>
+        /// <param name="taskId"></param>
+        /// <param name="newStatus"></param>
+        /// <returns></returns>
+        Task<WebResponseContent> UpdateTaskByStatusAsync(int taskId, int newStatus);
+
+        /// <summary>
         /// 鍫嗗灈鏈哄彇鏀捐揣瀹屾垚鍚庣墿娴侀�氱煡鍖栨垚鍒嗗鏌滃畬鎴愪俊鍙�
         /// </summary>
         /// <param name="input"></param>
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
index 2a799c9..5606824 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -1,5 +1,4 @@
 锘縰sing AutoMapper;
-using Microsoft.AspNetCore.Components.Forms;
 using SqlSugar;
 using System.Text.Json;
 using WIDESEA_Common.LocationEnum;
@@ -8,7 +7,6 @@
 using WIDESEA_Core;
 using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.BaseServices;
-using WIDESEA_Core.Helper;
 using WIDESEA_DTO;
 using WIDESEA_DTO.Task;
 using WIDESEA_IBasicService;
@@ -49,6 +47,8 @@
             _httpClientHelper = httpClientHelper;
         }
 
+        #region WCS閫昏緫澶勭悊
+
         /// <summary>
         /// 鍒涘缓浠诲姟锛堢粍鐩樺叆搴撲换鍔°�佺┖鎵樼洏鍥炲簱浠诲姟锛�
         /// </summary>
@@ -56,9 +56,13 @@
         {
             try
             {
+                WebResponseContent content = await GetTasksByPalletCodeAsync(taskDto.PalletCode);
+                if (content.Status)
+                {
+                    return content;
+                }
+
                 if (string.IsNullOrWhiteSpace(taskDto.PalletCode) ||
-                    string.IsNullOrWhiteSpace(taskDto.SourceAddress) ||
-                    string.IsNullOrWhiteSpace(taskDto.TargetAddress) ||
                     string.IsNullOrWhiteSpace(taskDto.Roadway))
                 {
                     return WebResponseContent.Instance.Error("鏃犳晥鐨勪换鍔¤鎯�");
@@ -69,14 +73,22 @@
                     return WebResponseContent.Instance.Error("鏃犳晥鐨勪换鍔¤鎯�");
                 }
 
+                // 浣跨敤 switch 琛ㄨ揪寮忔槧灏勪换鍔$被鍨�
+                int taskInboundType = taskDto.TaskType switch
+                {
+                    TaskTypeEnum.Inbound => TaskInboundTypeEnum.Inbound.GetHashCode(),
+                    TaskTypeEnum.InEmpty => TaskInboundTypeEnum.InEmpty.GetHashCode(),
+                    _ => 0 // 鐞嗚涓婁笉浼氳蛋鍒拌繖閲岋紝鍥犱负宸茬粡楠岃瘉杩囦簡
+                };
+
                 var task = new Dt_Task
                 {
-                    TaskNum = 0,
+                    TaskNum = await BaseDal.GetTaskNo(),
                     PalletCode = taskDto.PalletCode,
                     PalletType = taskDto.PalletType,
                     Roadway = taskDto.Roadway,
-                    TaskType = taskDto.TaskType.GetHashCode(),
-                    TaskStatus = TaskStatusEnum.New.GetHashCode(),
+                    TaskType = taskInboundType,
+                    TaskStatus = TaskInStatusEnum.InNew.GetHashCode(),
                     SourceAddress = taskDto.SourceAddress,
                     TargetAddress = taskDto.TargetAddress,
                     CurrentAddress = taskDto.SourceAddress,
@@ -259,6 +271,12 @@
         {
             try
             {
+                WebResponseContent content = await GetTasksByPalletCodeAsync(taskDto.PalletCode);
+                if (content.Status)
+                {
+                    return content;
+                }
+
                 //var tasks = await BaseDal.QueryAsync(s => s.PalletCode == palletCode);
                 //if (tasks == null || !tasks.Any())
                 //    return WebResponseContent.Instance.Error("鏈壘鍒板搴旂殑浠诲姟");
@@ -280,8 +298,9 @@
         {
             try
             {
+
                 var stockInfo = await _stockInfoService.Repository.QueryFirstAsync(x => x.LocationDetails.WarehouseId == taskDto.WarehouseId && x.LocationDetails.LocationStatus == LocationStatusEnum.InStock.GetHashCode() && x.StockStatus == StockStatusEmun.绌烘墭鐩樺簱瀛�.GetHashCode());
-                if(stockInfo == null)
+                if (stockInfo == null)
                     return WebResponseContent.Instance.Error("鏈壘鍒板搴旂殑搴撳瓨淇℃伅");
 
                 var task = new Dt_Task()
@@ -300,7 +319,7 @@
                     TaskNum = await BaseDal.GetTaskNo(),
                     Creater = "system",
                 };
-                 var taskDtos = _mapper.Map<List<WMSTaskDTO>>(task);
+                var taskDtos = _mapper.Map<List<WMSTaskDTO>>(task);
                 return WebResponseContent.Instance.OK("鏌ヨ鎴愬姛", taskDtos);
             }
             catch (Exception ex)
@@ -308,6 +327,55 @@
                 return WebResponseContent.Instance.Error($"鏌ヨ浠诲姟澶辫触: {ex.Message}");
             }
         }
+
+        /// <summary>
+        /// 淇敼浠诲姟鐘舵�侊紙鏍规嵁浠诲姟ID淇敼涓烘寚瀹氱姸鎬侊級
+        /// </summary>
+        /// <param name="taskId"></param>
+        /// <param name="newStatus"></param>
+        /// <returns></returns>
+        public async Task<WebResponseContent> UpdateTaskByStatusAsync(int taskId, int newStatus)
+        {
+            try
+            {
+                var tasks = await BaseDal.QueryFirstAsync(s => s.TaskId == taskId);
+                if (tasks == null)
+                    return WebResponseContent.Instance.Error("鏈壘鍒板搴旂殑浠诲姟");
+
+                tasks.TaskStatus = newStatus;
+                await BaseDal.UpdateDataAsync(tasks);
+
+                return WebResponseContent.Instance.OK("淇敼鎴愬姛", tasks);
+            }
+            catch (Exception ex)
+            { 
+                return WebResponseContent.Instance.Error($"淇敼澶辫触: {ex.Message}");
+            }
+        }
+
+
+        /// <summary>
+        /// 鏌ユ壘鎵樼洏鏄惁鏈変换鍔�
+        /// </summary>
+        /// <param name="palletCode"></param>
+        /// <returns></returns>
+        private async Task<WebResponseContent> GetTasksByPalletCodeAsync(string palletCode)
+        {
+            try
+            {
+                var tasks = await BaseDal.QueryFirstAsync(s => s.PalletCode == palletCode);
+                if (tasks == null)
+                    return WebResponseContent.Instance.Error("鏈壘鍒板搴旂殑浠诲姟");
+                var taskDtos = _mapper.Map<List<WMSTaskDTO>>(tasks);
+                return WebResponseContent.Instance.OK("鏌ヨ鎴愬姛", taskDtos);
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error($"鏌ヨ浠诲姟澶辫触: {ex.Message}");
+            }
+        }
+
+        #endregion WCS閫昏緫澶勭悊
 
         #region 鍒嗗鏌滄帴鍙�
 
@@ -436,7 +504,6 @@
                     var result = await BaseDal.AddDataAsync(taskList) > 0;
                     var wmstaskDto = result ? _mapper.Map<WMSTaskDTO>(taskList) : null;
 
-
                     var httpResponse = _httpClientHelper.Post<WebResponseContent>("http://logistics-service/api/logistics/notifyoutbound", JsonSerializer.Serialize(wmstaskDto)).Data;
                     if (result && httpResponse != null)
                     {
@@ -491,6 +558,6 @@
             }
         }
 
-        #endregion
+        #endregion 鍒嗗鏌滄帴鍙�
     }
-}
+}
\ No newline at end of file
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
index b743efb..6ece3ee 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
@@ -101,6 +101,17 @@
         }
 
         /// <summary>
+        /// 淇敼浠诲姟鐘舵�侊紙鏍规嵁浠诲姟ID淇敼涓烘寚瀹氱姸鎬侊級
+        /// </summary>
+        /// <param name="taskDto"></param>
+        /// <returns></returns>
+        [HttpGet, HttpPost, Route("UpdateTaskByStatus"), AllowAnonymous]
+        public async Task<WebResponseContent?> UpdateTaskByStatusAsync([FromBody] int taskId, int newStatus)
+        {
+            return await Service.UpdateTaskByStatusAsync(taskId, newStatus);
+        }
+
+        /// <summary>
         /// 鍫嗗灈鏈哄彇鏀捐揣瀹屾垚鍚庣墿娴侀�氱煡鍖栨垚鍒嗗鏌滃畬鎴愪俊鍙�
         /// </summary>
         /// <param name="input"></param>
diff --git "a/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.dockerignore" "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.dockerignore"
new file mode 100644
index 0000000..fe1152b
--- /dev/null
+++ "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.dockerignore"
@@ -0,0 +1,30 @@
+**/.classpath
+**/.dockerignore
+**/.env
+**/.git
+**/.gitignore
+**/.project
+**/.settings
+**/.toolstarget
+**/.vs
+**/.vscode
+**/*.*proj.user
+**/*.dbmdl
+**/*.jfm
+**/azds.yaml
+**/bin
+**/charts
+**/docker-compose*
+**/Dockerfile*
+**/node_modules
+**/npm-debug.log
+**/obj
+**/secrets.dev.yaml
+**/values.dev.yaml
+LICENSE
+README.md
+!**/.gitignore
+!.git/HEAD
+!.git/config
+!.git/packed-refs
+!.git/refs/heads/**
\ No newline at end of file
diff --git "a/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/957CD3507E75254DAB50B67D1CAD4ABB/57E558275472B567970CA987458436D5" "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/957CD3507E75254DAB50B67D1CAD4ABB/57E558275472B567970CA987458436D5"
new file mode 100644
index 0000000..dc0b60b
--- /dev/null
+++ "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/957CD3507E75254DAB50B67D1CAD4ABB/57E558275472B567970CA987458436D5"
@@ -0,0 +1,68 @@
+锘縰sing System.Net;
+using System.Net.Sockets;
+using System.Text;
+
+var options = ClientOptions.FromArgs(args);
+
+Console.WriteLine($"鍑嗗鍚姩 {options.ClientCount} 涓鎴风锛岃繛鎺ュ埌 {options.ServerHost}:{options.ServerPort}");
+
+var tasks = Enumerable.Range(0, options.ClientCount)
+    .Select(i => RunClientAsync(i + 1, options))
+    .ToArray();
+
+await Task.WhenAll(tasks);
+
+static async Task RunClientAsync(int clientId, ClientOptions options)
+{
+    var localPort = options.StartLocalPort + clientId - 1;
+
+    using var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+    client.Bind(new IPEndPoint(IPAddress.Any, localPort));
+
+    await client.ConnectAsync(options.ServerHost, options.ServerPort);
+    Console.WriteLine($"瀹㈡埛绔�#{clientId} 宸茶繛鎺ワ紝鏈湴绔彛: {localPort}");
+
+    var text = $"Hello from client #{clientId}";
+    var sendBuffer = Encoding.UTF8.GetBytes(text);
+    await client.SendAsync(sendBuffer, SocketFlags.None);
+
+    var receiveBuffer = new byte[1024];
+    var length = await client.ReceiveAsync(receiveBuffer, SocketFlags.None);
+    if (length > 0)
+    {
+        var response = Encoding.UTF8.GetString(receiveBuffer, 0, length);
+        Console.WriteLine($"瀹㈡埛绔�#{clientId} 鏀跺埌: {response}");
+    }
+
+    client.Shutdown(SocketShutdown.Both);
+}
+
+file sealed class ClientOptions
+{
+    public int ClientCount { get; init; } = 1;
+    public string ServerHost { get; init; } = "127.0.0.1";
+    public int ServerPort { get; init; } = 5000;
+    public int StartLocalPort { get; init; } = 6000;
+
+    public static ClientOptions FromArgs(string[] args)
+    {
+        var map = args
+            .Select(v => v.Split('=', 2, StringSplitOptions.TrimEntries))
+            .Where(parts => parts.Length == 2)
+            .ToDictionary(parts => parts[0].TrimStart('-', '/').ToLowerInvariant(), parts => parts[1]);
+
+        return new ClientOptions
+        {
+            ClientCount = GetInt(map, "count", 1),
+            ServerHost = GetString(map, "host", "127.0.0.1"),
+            ServerPort = GetInt(map, "serverport", 5000),
+            StartLocalPort = GetInt(map, "localport", 6000)
+        };
+    }
+
+    private static int GetInt(Dictionary<string, string> map, string key, int defaultValue)
+        => map.TryGetValue(key, out var value) && int.TryParse(value, out var number) ? number : defaultValue;
+
+    private static string GetString(Dictionary<string, string> map, string key, string defaultValue)
+        => map.TryGetValue(key, out var value) && !string.IsNullOrWhiteSpace(value) ? value : defaultValue;
+}
diff --git "a/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/957CD3507E75254DAB50B67D1CAD4ABB/89EE95323C118AB5E5FA0B5FC9E372D8" "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/957CD3507E75254DAB50B67D1CAD4ABB/89EE95323C118AB5E5FA0B5FC9E372D8"
new file mode 100644
index 0000000..dc0b60b
--- /dev/null
+++ "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/957CD3507E75254DAB50B67D1CAD4ABB/89EE95323C118AB5E5FA0B5FC9E372D8"
@@ -0,0 +1,68 @@
+锘縰sing System.Net;
+using System.Net.Sockets;
+using System.Text;
+
+var options = ClientOptions.FromArgs(args);
+
+Console.WriteLine($"鍑嗗鍚姩 {options.ClientCount} 涓鎴风锛岃繛鎺ュ埌 {options.ServerHost}:{options.ServerPort}");
+
+var tasks = Enumerable.Range(0, options.ClientCount)
+    .Select(i => RunClientAsync(i + 1, options))
+    .ToArray();
+
+await Task.WhenAll(tasks);
+
+static async Task RunClientAsync(int clientId, ClientOptions options)
+{
+    var localPort = options.StartLocalPort + clientId - 1;
+
+    using var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+    client.Bind(new IPEndPoint(IPAddress.Any, localPort));
+
+    await client.ConnectAsync(options.ServerHost, options.ServerPort);
+    Console.WriteLine($"瀹㈡埛绔�#{clientId} 宸茶繛鎺ワ紝鏈湴绔彛: {localPort}");
+
+    var text = $"Hello from client #{clientId}";
+    var sendBuffer = Encoding.UTF8.GetBytes(text);
+    await client.SendAsync(sendBuffer, SocketFlags.None);
+
+    var receiveBuffer = new byte[1024];
+    var length = await client.ReceiveAsync(receiveBuffer, SocketFlags.None);
+    if (length > 0)
+    {
+        var response = Encoding.UTF8.GetString(receiveBuffer, 0, length);
+        Console.WriteLine($"瀹㈡埛绔�#{clientId} 鏀跺埌: {response}");
+    }
+
+    client.Shutdown(SocketShutdown.Both);
+}
+
+file sealed class ClientOptions
+{
+    public int ClientCount { get; init; } = 1;
+    public string ServerHost { get; init; } = "127.0.0.1";
+    public int ServerPort { get; init; } = 5000;
+    public int StartLocalPort { get; init; } = 6000;
+
+    public static ClientOptions FromArgs(string[] args)
+    {
+        var map = args
+            .Select(v => v.Split('=', 2, StringSplitOptions.TrimEntries))
+            .Where(parts => parts.Length == 2)
+            .ToDictionary(parts => parts[0].TrimStart('-', '/').ToLowerInvariant(), parts => parts[1]);
+
+        return new ClientOptions
+        {
+            ClientCount = GetInt(map, "count", 1),
+            ServerHost = GetString(map, "host", "127.0.0.1"),
+            ServerPort = GetInt(map, "serverport", 5000),
+            StartLocalPort = GetInt(map, "localport", 6000)
+        };
+    }
+
+    private static int GetInt(Dictionary<string, string> map, string key, int defaultValue)
+        => map.TryGetValue(key, out var value) && int.TryParse(value, out var number) ? number : defaultValue;
+
+    private static string GetString(Dictionary<string, string> map, string key, string defaultValue)
+        => map.TryGetValue(key, out var value) && !string.IsNullOrWhiteSpace(value) ? value : defaultValue;
+}
diff --git "a/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/BE43EC63E499EE468C0161FA83175A2D/340C5AFE3B0C2AB455087AFF43725D6E" "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/BE43EC63E499EE468C0161FA83175A2D/340C5AFE3B0C2AB455087AFF43725D6E"
new file mode 100644
index 0000000..3751555
--- /dev/null
+++ "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/BE43EC63E499EE468C0161FA83175A2D/340C5AFE3B0C2AB455087AFF43725D6E"
@@ -0,0 +1,2 @@
+锘�// See https://aka.ms/new-console-template for more information
+Console.WriteLine("Hello, World!");
diff --git "a/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/BE43EC63E499EE468C0161FA83175A2D/57E558275472B567970CA987458436D5" "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/BE43EC63E499EE468C0161FA83175A2D/57E558275472B567970CA987458436D5"
new file mode 100644
index 0000000..3751555
--- /dev/null
+++ "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/BE43EC63E499EE468C0161FA83175A2D/57E558275472B567970CA987458436D5"
@@ -0,0 +1,2 @@
+锘�// See https://aka.ms/new-console-template for more information
+Console.WriteLine("Hello, World!");
diff --git "a/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/C569B8B80C5D3640BC534EFC4D2E9EFE/57E558275472B567970CA987458436D5" "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/C569B8B80C5D3640BC534EFC4D2E9EFE/57E558275472B567970CA987458436D5"
new file mode 100644
index 0000000..bd17540
--- /dev/null
+++ "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/C569B8B80C5D3640BC534EFC4D2E9EFE/57E558275472B567970CA987458436D5"
@@ -0,0 +1,81 @@
+锘縰sing System.Net;
+using System.Net.Sockets;
+using System.Text;
+
+var options = ClientOptions.FromArgs(args);
+
+Console.WriteLine($"鍑嗗鍚姩 {options.ClientCount} 涓鎴风锛岃繛鎺ュ埌 {options.ServerHost}:{options.ServerPort}");
+
+var tasks = Enumerable.Range(0, options.ClientCount)
+    .Select(i => RunClientAsync(i + 1, options))
+    .ToArray();
+
+await Task.WhenAll(tasks);
+
+static async Task RunClientAsync(int clientId, ClientOptions options)
+{
+    var localPort = options.StartLocalPort + clientId - 1;
+
+    using var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+    client.Bind(new IPEndPoint(IPAddress.Any, localPort));
+
+    await client.ConnectAsync(options.ServerHost, options.ServerPort);
+    Console.WriteLine($"瀹㈡埛绔�#{clientId} 宸茶繛鎺ワ紝鏈湴绔彛: {localPort}");
+
+    await WriteMessageAsync(client, clientId, $"Hello from client #{clientId}");
+    await ReadMessageAsync(client, clientId);
+
+    client.Shutdown(SocketShutdown.Both);
+}
+
+static async Task WriteMessageAsync(Socket client, int clientId, string message)
+{
+    var framedMessage = $"<START>{message}<END>";
+    var sendBuffer = Encoding.UTF8.GetBytes(framedMessage);
+    await client.SendAsync(sendBuffer, SocketFlags.None);
+    Console.WriteLine($"瀹㈡埛绔�#{clientId} 鍙戦��: {framedMessage}");
+}
+
+static async Task ReadMessageAsync(Socket client, int clientId)
+{
+    var receiveBuffer = new byte[1024];
+    var length = await client.ReceiveAsync(receiveBuffer, SocketFlags.None);
+    if (length <= 0)
+    {
+        Console.WriteLine($"瀹㈡埛绔�#{clientId} 鏈帴鏀跺埌鏁版嵁");
+        return;
+    }
+
+    var response = Encoding.UTF8.GetString(receiveBuffer, 0, length);
+    Console.WriteLine($"瀹㈡埛绔�#{clientId} 鏀跺埌: {response}");
+}
+
+file sealed class ClientOptions
+{
+    public int ClientCount { get; init; } = 1;
+    public string ServerHost { get; init; } = "127.0.0.1";
+    public int ServerPort { get; init; } = 5000;
+    public int StartLocalPort { get; init; } = 6000;
+
+    public static ClientOptions FromArgs(string[] args)
+    {
+        var map = args
+            .Select(v => v.Split('=', 2, StringSplitOptions.TrimEntries))
+            .Where(parts => parts.Length == 2)
+            .ToDictionary(parts => parts[0].TrimStart('-', '/').ToLowerInvariant(), parts => parts[1]);
+
+        return new ClientOptions
+        {
+            ClientCount = GetInt(map, "count", 1),
+            ServerHost = GetString(map, "host", "127.0.0.1"),
+            ServerPort = GetInt(map, "serverport", 5000),
+            StartLocalPort = GetInt(map, "localport", 6000)
+        };
+    }
+
+    private static int GetInt(Dictionary<string, string> map, string key, int defaultValue)
+        => map.TryGetValue(key, out var value) && int.TryParse(value, out var number) ? number : defaultValue;
+
+    private static string GetString(Dictionary<string, string> map, string key, string defaultValue)
+        => map.TryGetValue(key, out var value) && !string.IsNullOrWhiteSpace(value) ? value : defaultValue;
+}
diff --git "a/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/C569B8B80C5D3640BC534EFC4D2E9EFE/EEF5B4E6C1E13E5E42E047DE7B74D577" "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/C569B8B80C5D3640BC534EFC4D2E9EFE/EEF5B4E6C1E13E5E42E047DE7B74D577"
new file mode 100644
index 0000000..bd17540
--- /dev/null
+++ "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/C569B8B80C5D3640BC534EFC4D2E9EFE/EEF5B4E6C1E13E5E42E047DE7B74D577"
@@ -0,0 +1,81 @@
+锘縰sing System.Net;
+using System.Net.Sockets;
+using System.Text;
+
+var options = ClientOptions.FromArgs(args);
+
+Console.WriteLine($"鍑嗗鍚姩 {options.ClientCount} 涓鎴风锛岃繛鎺ュ埌 {options.ServerHost}:{options.ServerPort}");
+
+var tasks = Enumerable.Range(0, options.ClientCount)
+    .Select(i => RunClientAsync(i + 1, options))
+    .ToArray();
+
+await Task.WhenAll(tasks);
+
+static async Task RunClientAsync(int clientId, ClientOptions options)
+{
+    var localPort = options.StartLocalPort + clientId - 1;
+
+    using var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+    client.Bind(new IPEndPoint(IPAddress.Any, localPort));
+
+    await client.ConnectAsync(options.ServerHost, options.ServerPort);
+    Console.WriteLine($"瀹㈡埛绔�#{clientId} 宸茶繛鎺ワ紝鏈湴绔彛: {localPort}");
+
+    await WriteMessageAsync(client, clientId, $"Hello from client #{clientId}");
+    await ReadMessageAsync(client, clientId);
+
+    client.Shutdown(SocketShutdown.Both);
+}
+
+static async Task WriteMessageAsync(Socket client, int clientId, string message)
+{
+    var framedMessage = $"<START>{message}<END>";
+    var sendBuffer = Encoding.UTF8.GetBytes(framedMessage);
+    await client.SendAsync(sendBuffer, SocketFlags.None);
+    Console.WriteLine($"瀹㈡埛绔�#{clientId} 鍙戦��: {framedMessage}");
+}
+
+static async Task ReadMessageAsync(Socket client, int clientId)
+{
+    var receiveBuffer = new byte[1024];
+    var length = await client.ReceiveAsync(receiveBuffer, SocketFlags.None);
+    if (length <= 0)
+    {
+        Console.WriteLine($"瀹㈡埛绔�#{clientId} 鏈帴鏀跺埌鏁版嵁");
+        return;
+    }
+
+    var response = Encoding.UTF8.GetString(receiveBuffer, 0, length);
+    Console.WriteLine($"瀹㈡埛绔�#{clientId} 鏀跺埌: {response}");
+}
+
+file sealed class ClientOptions
+{
+    public int ClientCount { get; init; } = 1;
+    public string ServerHost { get; init; } = "127.0.0.1";
+    public int ServerPort { get; init; } = 5000;
+    public int StartLocalPort { get; init; } = 6000;
+
+    public static ClientOptions FromArgs(string[] args)
+    {
+        var map = args
+            .Select(v => v.Split('=', 2, StringSplitOptions.TrimEntries))
+            .Where(parts => parts.Length == 2)
+            .ToDictionary(parts => parts[0].TrimStart('-', '/').ToLowerInvariant(), parts => parts[1]);
+
+        return new ClientOptions
+        {
+            ClientCount = GetInt(map, "count", 1),
+            ServerHost = GetString(map, "host", "127.0.0.1"),
+            ServerPort = GetInt(map, "serverport", 5000),
+            StartLocalPort = GetInt(map, "localport", 6000)
+        };
+    }
+
+    private static int GetInt(Dictionary<string, string> map, string key, int defaultValue)
+        => map.TryGetValue(key, out var value) && int.TryParse(value, out var number) ? number : defaultValue;
+
+    private static string GetString(Dictionary<string, string> map, string key, string defaultValue)
+        => map.TryGetValue(key, out var value) && !string.IsNullOrWhiteSpace(value) ? value : defaultValue;
+}
diff --git "a/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/E6DFDF72DCCF3C46ABA29988BCD5456A/57E558275472B567970CA987458436D5" "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/E6DFDF72DCCF3C46ABA29988BCD5456A/57E558275472B567970CA987458436D5"
new file mode 100644
index 0000000..5bae94a
--- /dev/null
+++ "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/E6DFDF72DCCF3C46ABA29988BCD5456A/57E558275472B567970CA987458436D5"
@@ -0,0 +1,92 @@
+锘縰sing System.Net;
+using System.Net.Sockets;
+using System.Text;
+
+var options = ClientOptions.FromArgs(args);
+
+Console.WriteLine($"鍑嗗鍚姩 {options.ClientCount} 涓鎴风锛岃繛鎺ュ埌 {options.ServerHost}:{options.ServerPort}");
+
+var tasks = Enumerable.Range(0, options.ClientCount)
+    .Select(i => RunClientAsync(i + 1, options))
+    .ToArray();
+
+await Task.WhenAll(tasks);
+
+static async Task RunClientAsync(int clientId, ClientOptions options)
+{
+    var localPort = options.StartLocalPort + clientId - 1;
+
+    using var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+    client.Bind(new IPEndPoint(IPAddress.Any, localPort));
+
+    await client.ConnectAsync(options.ServerHost, options.ServerPort);
+    Console.WriteLine($"瀹㈡埛绔�#{clientId} 宸茶繛鎺ワ紝鏈湴绔彛: {localPort}");
+
+
+    await WriteMessageAsync(client, clientId, $"Homed");
+    await WriteMessageAsync(client, clientId, $"Runmodemode,2");
+    await WriteMessageAsync(client, clientId, $"Armobject,0");
+    await WriteMessageAsync(client, clientId, $"Controlmode,1");
+
+    await ReadMessageAsync(client, clientId);
+    client.Shutdown(SocketShutdown.Both);
+}
+
+static async Task WriteMessageAsync(Socket client, int clientId, string message)
+{
+    var framedMessage = $"<START>{message}<END>";
+    var sendBuffer = Encoding.UTF8.GetBytes(framedMessage);
+    await client.SendAsync(sendBuffer, SocketFlags.None);
+    Console.WriteLine($"瀹㈡埛绔�#{clientId} 鍙戦��: {framedMessage}");
+}
+
+static async Task ReadMessageAsync(Socket client, int clientId)
+{
+    var receiveBuffer = new byte[1024];
+    var length = await client.ReceiveAsync(receiveBuffer, SocketFlags.None);
+    if (length <= 0)
+    {
+        Console.WriteLine($"瀹㈡埛绔�#{clientId} 鏈帴鏀跺埌鏁版嵁");
+        return;
+    }
+
+    var response = Encoding.UTF8.GetString(receiveBuffer, 0, length);
+    if (!response.StartsWith("<START>") || !response.EndsWith("<END>"))
+    {
+        Console.WriteLine($"瀹㈡埛绔�#{clientId} 鏀跺埌鏃犳晥娑堟伅锛堢己灏戞秷鎭ご鎴栨秷鎭熬锛夛紝宸插拷鐣�");
+        return;
+    }
+
+    var content = response["<START>".Length..^"<END>".Length];
+    Console.WriteLine($"瀹㈡埛绔�#{clientId} 鏀跺埌: {content}");
+}
+
+file sealed class ClientOptions
+{
+    public int ClientCount { get; init; } = 1;
+    public string ServerHost { get; init; } = "127.0.0.1";
+    public int ServerPort { get; init; } = 2000;
+    public int StartLocalPort { get; init; } = 62312;
+
+    public static ClientOptions FromArgs(string[] args)
+    {
+        var map = args
+            .Select(v => v.Split('=', 2, StringSplitOptions.TrimEntries))
+            .Where(parts => parts.Length == 2)
+            .ToDictionary(parts => parts[0].TrimStart('-', '/').ToLowerInvariant(), parts => parts[1]);
+
+        return new ClientOptions
+        {
+            ClientCount = GetInt(map, "count", 1),
+            ServerHost = GetString(map, "host", "127.0.0.1"),
+            ServerPort = GetInt(map, "serverport", 2000),
+            StartLocalPort = GetInt(map, "localport", 62312)
+        };
+    }
+
+    private static int GetInt(Dictionary<string, string> map, string key, int defaultValue)
+        => map.TryGetValue(key, out var value) && int.TryParse(value, out var number) ? number : defaultValue;
+
+    private static string GetString(Dictionary<string, string> map, string key, string defaultValue)
+        => map.TryGetValue(key, out var value) && !string.IsNullOrWhiteSpace(value) ? value : defaultValue;
+}
diff --git "a/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/E6DFDF72DCCF3C46ABA29988BCD5456A/F977376DB3B74CAF672118CAACA4BA95" "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/E6DFDF72DCCF3C46ABA29988BCD5456A/F977376DB3B74CAF672118CAACA4BA95"
new file mode 100644
index 0000000..5bae94a
--- /dev/null
+++ "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/E6DFDF72DCCF3C46ABA29988BCD5456A/F977376DB3B74CAF672118CAACA4BA95"
@@ -0,0 +1,92 @@
+锘縰sing System.Net;
+using System.Net.Sockets;
+using System.Text;
+
+var options = ClientOptions.FromArgs(args);
+
+Console.WriteLine($"鍑嗗鍚姩 {options.ClientCount} 涓鎴风锛岃繛鎺ュ埌 {options.ServerHost}:{options.ServerPort}");
+
+var tasks = Enumerable.Range(0, options.ClientCount)
+    .Select(i => RunClientAsync(i + 1, options))
+    .ToArray();
+
+await Task.WhenAll(tasks);
+
+static async Task RunClientAsync(int clientId, ClientOptions options)
+{
+    var localPort = options.StartLocalPort + clientId - 1;
+
+    using var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+    client.Bind(new IPEndPoint(IPAddress.Any, localPort));
+
+    await client.ConnectAsync(options.ServerHost, options.ServerPort);
+    Console.WriteLine($"瀹㈡埛绔�#{clientId} 宸茶繛鎺ワ紝鏈湴绔彛: {localPort}");
+
+
+    await WriteMessageAsync(client, clientId, $"Homed");
+    await WriteMessageAsync(client, clientId, $"Runmodemode,2");
+    await WriteMessageAsync(client, clientId, $"Armobject,0");
+    await WriteMessageAsync(client, clientId, $"Controlmode,1");
+
+    await ReadMessageAsync(client, clientId);
+    client.Shutdown(SocketShutdown.Both);
+}
+
+static async Task WriteMessageAsync(Socket client, int clientId, string message)
+{
+    var framedMessage = $"<START>{message}<END>";
+    var sendBuffer = Encoding.UTF8.GetBytes(framedMessage);
+    await client.SendAsync(sendBuffer, SocketFlags.None);
+    Console.WriteLine($"瀹㈡埛绔�#{clientId} 鍙戦��: {framedMessage}");
+}
+
+static async Task ReadMessageAsync(Socket client, int clientId)
+{
+    var receiveBuffer = new byte[1024];
+    var length = await client.ReceiveAsync(receiveBuffer, SocketFlags.None);
+    if (length <= 0)
+    {
+        Console.WriteLine($"瀹㈡埛绔�#{clientId} 鏈帴鏀跺埌鏁版嵁");
+        return;
+    }
+
+    var response = Encoding.UTF8.GetString(receiveBuffer, 0, length);
+    if (!response.StartsWith("<START>") || !response.EndsWith("<END>"))
+    {
+        Console.WriteLine($"瀹㈡埛绔�#{clientId} 鏀跺埌鏃犳晥娑堟伅锛堢己灏戞秷鎭ご鎴栨秷鎭熬锛夛紝宸插拷鐣�");
+        return;
+    }
+
+    var content = response["<START>".Length..^"<END>".Length];
+    Console.WriteLine($"瀹㈡埛绔�#{clientId} 鏀跺埌: {content}");
+}
+
+file sealed class ClientOptions
+{
+    public int ClientCount { get; init; } = 1;
+    public string ServerHost { get; init; } = "127.0.0.1";
+    public int ServerPort { get; init; } = 2000;
+    public int StartLocalPort { get; init; } = 62312;
+
+    public static ClientOptions FromArgs(string[] args)
+    {
+        var map = args
+            .Select(v => v.Split('=', 2, StringSplitOptions.TrimEntries))
+            .Where(parts => parts.Length == 2)
+            .ToDictionary(parts => parts[0].TrimStart('-', '/').ToLowerInvariant(), parts => parts[1]);
+
+        return new ClientOptions
+        {
+            ClientCount = GetInt(map, "count", 1),
+            ServerHost = GetString(map, "host", "127.0.0.1"),
+            ServerPort = GetInt(map, "serverport", 2000),
+            StartLocalPort = GetInt(map, "localport", 62312)
+        };
+    }
+
+    private static int GetInt(Dictionary<string, string> map, string key, int defaultValue)
+        => map.TryGetValue(key, out var value) && int.TryParse(value, out var number) ? number : defaultValue;
+
+    private static string GetString(Dictionary<string, string> map, string key, string defaultValue)
+        => map.TryGetValue(key, out var value) && !string.IsNullOrWhiteSpace(value) ? value : defaultValue;
+}
diff --git "a/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/state.mpack" "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/state.mpack"
new file mode 100644
index 0000000..db6a5d2
--- /dev/null
+++ "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/CopilotSnapshots/BD12C3365E39344589EDC65CA163A4E7/state.mpack"
Binary files differ
diff --git "a/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/RobotClient.slnx/copilot-chat/bef6627e/sessions/36c312bd-395e-4534-89ed-c65ca163a4e7" "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/RobotClient.slnx/copilot-chat/bef6627e/sessions/36c312bd-395e-4534-89ed-c65ca163a4e7"
new file mode 100644
index 0000000..5d0d42d
--- /dev/null
+++ "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/RobotClient.slnx/copilot-chat/bef6627e/sessions/36c312bd-395e-4534-89ed-c65ca163a4e7"
Binary files differ
diff --git "a/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/RobotClient.slnx/v18/DocumentLayout.backup.json" "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/RobotClient.slnx/v18/DocumentLayout.backup.json"
new file mode 100644
index 0000000..e70c512
--- /dev/null
+++ "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/RobotClient.slnx/v18/DocumentLayout.backup.json"
@@ -0,0 +1,49 @@
+{
+  "Version": 1,
+  "WorkspaceRootPath": "C:\\Users\\29028\\Desktop\\\u673A\u68B0\u624B\u5BA2\u6237\u7AEF\\RobotClient\\",
+  "Documents": [
+    {
+      "AbsoluteMoniker": "D:0:0:{B1C3E674-86D3-6DBD-F67F-E7F395016C7C}|RobotClient.csproj|c:\\users\\29028\\desktop\\\u673A\u68B0\u624B\u5BA2\u6237\u7AEF\\robotclient\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{B1C3E674-86D3-6DBD-F67F-E7F395016C7C}|RobotClient.csproj|solutionrelative:program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    }
+  ],
+  "DocumentGroupContainers": [
+    {
+      "Orientation": 0,
+      "VerticalTabListWidth": 256,
+      "DocumentGroups": [
+        {
+          "DockedWidth": 200,
+          "SelectedChildIndex": 3,
+          "Children": [
+            {
+              "$type": "Bookmark",
+              "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{40ea2e6b-2121-4bb8-a43e-c83c04b51041}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
+              "Title": "Program.cs",
+              "DocumentMoniker": "C:\\Users\\29028\\Desktop\\\u673A\u68B0\u624B\u5BA2\u6237\u7AEF\\RobotClient\\Program.cs",
+              "RelativeDocumentMoniker": "Program.cs",
+              "ToolTip": "C:\\Users\\29028\\Desktop\\\u673A\u68B0\u624B\u5BA2\u6237\u7AEF\\RobotClient\\Program.cs",
+              "RelativeToolTip": "Program.cs",
+              "ViewState": "AgIAAPwAAAAAAAAAAAAowBgBAABBAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-02-27T07:38:54.023Z",
+              "EditorCaption": ""
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git "a/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/RobotClient.slnx/v18/DocumentLayout.json" "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/RobotClient.slnx/v18/DocumentLayout.json"
new file mode 100644
index 0000000..e70c512
--- /dev/null
+++ "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/.vs/RobotClient.slnx/v18/DocumentLayout.json"
@@ -0,0 +1,49 @@
+{
+  "Version": 1,
+  "WorkspaceRootPath": "C:\\Users\\29028\\Desktop\\\u673A\u68B0\u624B\u5BA2\u6237\u7AEF\\RobotClient\\",
+  "Documents": [
+    {
+      "AbsoluteMoniker": "D:0:0:{B1C3E674-86D3-6DBD-F67F-E7F395016C7C}|RobotClient.csproj|c:\\users\\29028\\desktop\\\u673A\u68B0\u624B\u5BA2\u6237\u7AEF\\robotclient\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{B1C3E674-86D3-6DBD-F67F-E7F395016C7C}|RobotClient.csproj|solutionrelative:program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    }
+  ],
+  "DocumentGroupContainers": [
+    {
+      "Orientation": 0,
+      "VerticalTabListWidth": 256,
+      "DocumentGroups": [
+        {
+          "DockedWidth": 200,
+          "SelectedChildIndex": 3,
+          "Children": [
+            {
+              "$type": "Bookmark",
+              "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{40ea2e6b-2121-4bb8-a43e-c83c04b51041}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
+              "Title": "Program.cs",
+              "DocumentMoniker": "C:\\Users\\29028\\Desktop\\\u673A\u68B0\u624B\u5BA2\u6237\u7AEF\\RobotClient\\Program.cs",
+              "RelativeDocumentMoniker": "Program.cs",
+              "ToolTip": "C:\\Users\\29028\\Desktop\\\u673A\u68B0\u624B\u5BA2\u6237\u7AEF\\RobotClient\\Program.cs",
+              "RelativeToolTip": "Program.cs",
+              "ViewState": "AgIAAPwAAAAAAAAAAAAowBgBAABBAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2026-02-27T07:38:54.023Z",
+              "EditorCaption": ""
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git "a/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/CLAUDE.md" "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/CLAUDE.md"
new file mode 100644
index 0000000..4a65701
--- /dev/null
+++ "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/CLAUDE.md"
@@ -0,0 +1,83 @@
+# CLAUDE.md
+
+This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
+
+## Project Overview
+
+RobotClient is a .NET 8.0 TCP client simulator for a robotic arm control system. It creates multiple concurrent TCP connections to a server, simulating robotic arm clients that can send/receive control commands and status messages.
+
+## Build and Run Commands
+
+```bash
+# Build the project
+dotnet build
+
+# Run with default settings (1 client, connects to 127.0.0.1:2000)
+dotnet run
+
+# Run with custom options (format: key=value)
+dotnet run -- count=5 host=192.168.1.100 serverport=3000 localport=50000 reconnect=false
+
+# Build Docker image
+docker build -t robot-client .
+
+# Run in Docker
+docker run -it robot-client
+```
+
+### Command-Line Options
+
+| Option | Default | Description |
+|--------|---------|-------------|
+| `count` | 1 | Number of client connections to create |
+| `host` | 127.0.0.1 | Server host address |
+| `serverport` | 2000 | Server port |
+| `localport` | 62312 | Starting local port (each client uses localport + clientId) |
+| `reconnect` | true | Enable automatic reconnection |
+| `reconnectinterval` | 5000 | Reconnect delay in milliseconds |
+| `maxreconnect` | -1 | Max reconnect attempts (-1 = infinite) |
+
+## Architecture
+
+The entire application is contained in `Program.cs` using C# top-level statements. The architecture follows a multi-client concurrent pattern:
+
+### Core Components
+
+1. **ClientOptions** (line 358-397): Configuration parser that processes command-line arguments into a strongly-typed options object.
+
+2. **RunClientAsync** (line 23-50): Entry point for each client. Binds to a local port, establishes initial connection, spawns a background listener with reconnection logic, and sends initialization commands.
+
+3. **ConnectAsync** (line 52-67): Low-level TCP connection using `Socket` with explicit local port binding.
+
+4. **RunWithReconnectAsync** (line 69-134): Wrapper around the message listener that handles automatic reconnection with configurable limits and delays.
+
+5. **ListenServerMessagesAsync** (line 181-234): Continuous receive loop that buffers incoming data and parses framed messages. Properly cleans up sockets on disconnect.
+
+6. **TryReadFramedMessages** (line 236-293): Parses messages using `<START>content<END>` framing protocol. Handles partial messages and buffers incomplete data. Contains simulated robot commands:
+   - `Pickbattery,1` 鈫� Simulates picking operation (5 seconds)
+   - `Putbattery,1` 鈫� Simulates placing operation (5 seconds)
+
+7. **SendLoopAsync** (line 295-356): Interactive console input loop allowing manual commands to specific clients using format `clientId:message` (e.g., `1:Status`). Type `exit` to quit.
+
+### Initialization Sequence
+
+Each client sends these commands on connection/startup:
+1. `Homed` 鈫� Wait 500ms
+2. `Runmode,2` 鈫� Wait 500ms
+3. `Armobject,0` 鈫� Wait 500ms
+4. `Controlmode,1`
+
+### Protocol
+
+All messages use the frame format: `<START>message<END>`
+
+- UTF-8 encoded
+- Message boundaries are explicit, allowing streaming
+- Invalid data before `<START>` is discarded
+- Cache limits 10KB to prevent memory exhaustion
+
+### Thread Safety
+
+- `ConcurrentDictionary<int, Socket>` tracks active client connections
+- Each client runs its own background Task for receiving messages
+- Socket cleanup happens in `finally` blocks to prevent resource leaks
diff --git "a/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/Dockerfile" "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/Dockerfile"
new file mode 100644
index 0000000..5da3c0f
--- /dev/null
+++ "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/Dockerfile"
@@ -0,0 +1,28 @@
+# 璇峰弬闃� https://aka.ms/customizecontainer 浠ヤ簡瑙e浣曡嚜瀹氫箟璋冭瘯瀹瑰櫒锛屼互鍙� Visual Studio 濡備綍浣跨敤姝� Dockerfile 鐢熸垚鏄犲儚浠ユ洿蹇湴杩涜璋冭瘯銆�
+
+# 姝ら樁娈电敤浜庡湪蹇�熸ā寮�(榛樿涓鸿皟璇曢厤缃�)涓嬩粠 VS 杩愯鏃�
+FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base
+USER $APP_UID
+WORKDIR /app
+
+
+# 姝ら樁娈电敤浜庣敓鎴愭湇鍔¢」鐩�
+FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+ARG BUILD_CONFIGURATION=Release
+WORKDIR /src
+COPY ["RobotClient.csproj", "."]
+RUN dotnet restore "./RobotClient.csproj"
+COPY . .
+WORKDIR "/src/."
+RUN dotnet build "./RobotClient.csproj" -c $BUILD_CONFIGURATION -o /app/build
+
+# 姝ら樁娈电敤浜庡彂甯冭澶嶅埗鍒版渶缁堥樁娈电殑鏈嶅姟椤圭洰
+FROM build AS publish
+ARG BUILD_CONFIGURATION=Release
+RUN dotnet publish "./RobotClient.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
+
+# 姝ら樁娈靛湪鐢熶骇涓娇鐢紝鎴栧湪甯歌妯″紡涓嬩粠 VS 杩愯鏃朵娇鐢�(鍦ㄤ笉浣跨敤璋冭瘯閰嶇疆鏃朵负榛樿鍊�)
+FROM base AS final
+WORKDIR /app
+COPY --from=publish /app/publish .
+ENTRYPOINT ["dotnet", "RobotClient.dll"]
\ No newline at end of file
diff --git "a/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/Program.cs" "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/Program.cs"
new file mode 100644
index 0000000..f765a8a
--- /dev/null
+++ "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/Program.cs"
@@ -0,0 +1,399 @@
+锘縰sing System.Net;
+using System.Net.Sockets;
+using System.Text;
+using System.Collections.Concurrent;
+
+var options = ClientOptions.FromArgs(args);
+var cts = new CancellationTokenSource();
+var clients = new ConcurrentDictionary<int, Socket>();
+
+Console.WriteLine($"鍑嗗鍚姩 {options.ClientCount} 涓鎴风锛岃繛鎺ュ埌 {options.ServerHost}:{options.ServerPort}");
+
+// 鍚姩鎵�鏈夊鎴风杩炴帴浠诲姟
+var connectTasks = Enumerable.Range(0, options.ClientCount)
+    .Select(i => RunClientAsync(i + 1, options, clients, cts.Token))
+    .ToArray();
+
+// 绛夊緟鎵�鏈夊鎴风杩炴帴瀹屾垚
+await Task.WhenAll(connectTasks);
+
+// 鍚姩鍙戦�佸惊鐜紙涓庣洃鍚换鍔″苟琛岃繍琛岋級
+await SendLoopAsync(clients, cts);
+
+static async Task RunClientAsync(int clientId, ClientOptions options, ConcurrentDictionary<int, Socket> clients, CancellationToken cancellationToken)
+{
+    var localPort = options.StartLocalPort + clientId - 1;
+
+    // 楠岃瘉绔彛鑼冨洿
+    if (localPort > 65535)
+    {
+        Console.WriteLine($"閿欒: 瀹㈡埛绔�#{clientId} 鐨勬湰鍦扮鍙� {localPort} 瓒呭嚭鏈夋晥鑼冨洿");
+        return;
+    }
+
+    // 棣栨杩炴帴
+    var client = await ConnectAsync(clientId, options, localPort, cancellationToken);
+    if (client == null)
+    {
+        return;
+    }
+
+    clients[clientId] = client;
+
+    // 鍚姩甯﹂噸杩炲姛鑳界殑鐩戝惉浠诲姟锛堝悗鍙拌繍琛岋紝涓嶉樆濉烇級
+    _ = Task.Run(() => RunWithReconnectAsync(clientId, options, localPort, clients, cancellationToken), cancellationToken);
+
+    // 鍙戦�佸垵濮嬪寲娑堟伅
+    await InitializeClientAsync(client, clientId);
+
+    // 绔嬪嵆杩斿洖锛岃涓荤嚎绋嬬户缁墽琛� SendLoopAsync
+}
+
+static async Task<Socket?> ConnectAsync(int clientId, ClientOptions options, int localPort, CancellationToken cancellationToken)
+{
+    try
+    {
+        var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+        // 鍏佽閲嶇敤鏈湴绔彛锛岃В鍐抽噸杩炴椂绔彛琚崰鐢ㄧ殑闂
+        client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
+        client.Bind(new IPEndPoint(IPAddress.Any, localPort));
+        await client.ConnectAsync(options.ServerHost, options.ServerPort);
+        Console.WriteLine($"瀹㈡埛绔�#{clientId} 宸茶繛鎺ワ紝鏈湴绔彛: {localPort}");
+        return client;
+    }
+    catch (Exception ex)
+    {
+        Console.WriteLine($"瀹㈡埛绔�#{clientId} 杩炴帴澶辫触: {ex.Message}");
+        return null;
+    }
+}
+
+static async Task RunWithReconnectAsync(int clientId, ClientOptions options, int localPort, ConcurrentDictionary<int, Socket> clients, CancellationToken cancellationToken)
+{
+    var reconnectCount = 0;
+
+    while (!cancellationToken.IsCancellationRequested)
+    {
+        Socket? client = null;
+        try
+        {
+            // 鑾峰彇褰撳墠杩炴帴鐨� Socket锛堝鏋滃瓨鍦級
+            if (clients.TryGetValue(clientId, out client))
+            {
+                // 鐩戝惉娑堟伅锛岀洿鍒拌繛鎺ユ柇寮�
+                // ListenServerMessagesAsync 鐨� finally 浼氳嚜鍔ㄦ竻鐞嗘柇寮�鐨� Socket
+                await ListenServerMessagesAsync(client, clientId, cancellationToken, clients);
+            }
+
+            // 杩炴帴宸叉柇寮�锛岃繘鍏ラ噸杩為�昏緫
+            reconnectCount++;
+
+            // 妫�鏌ユ槸鍚﹀惎鐢ㄩ噸杩�
+            if (!options.EnableReconnect)
+            {
+                Console.WriteLine($"瀹㈡埛绔�#{clientId} 閲嶈繛宸茬鐢紝閫�鍑�");
+                return;
+            }
+
+            // 妫�鏌ラ噸杩炴鏁伴檺鍒�
+            if (options.MaxReconnectAttempts > 0 && reconnectCount > options.MaxReconnectAttempts)
+            {
+                Console.WriteLine($"瀹㈡埛绔�#{clientId} 宸茶揪鍒版渶澶ч噸杩炴鏁� ({options.MaxReconnectAttempts})锛岄��鍑�");
+                return;
+            }
+
+            // 绛夊緟閲嶈繛闂撮殧
+            Console.WriteLine($"瀹㈡埛绔�#{clientId} 绛夊緟 {options.ReconnectIntervalMs / 1000} 绉掑悗閲嶈繛... (绗� {reconnectCount} 娆�)");
+            await Task.Delay(options.ReconnectIntervalMs, cancellationToken);
+
+            // 灏濊瘯閲嶆柊杩炴帴
+            client = await ConnectAsync(clientId, options, localPort, cancellationToken);
+            if (client == null)
+            {
+                continue;
+            }
+
+            // 灏嗘柊 Socket 鍔犲叆瀛楀吀
+            clients[clientId] = client;
+
+            // 閲嶆柊鍒濆鍖�
+            await InitializeClientAsync(client, clientId);
+            Console.WriteLine($"瀹㈡埛绔�#{clientId} 閲嶈繛鎴愬姛锛屽凡閲嶆柊鍒濆鍖�");
+        }
+        catch (OperationCanceledException)
+        {
+            // 姝e父鍙栨秷
+            return;
+        }
+        catch (Exception ex)
+        {
+            Console.WriteLine($"瀹㈡埛绔�#{clientId} 杩愯寮傚父: {ex.Message}");
+            clients.TryRemove(clientId, out _);
+            try { client?.Shutdown(SocketShutdown.Both); } catch { }
+            try { client?.Dispose(); } catch { }
+        }
+    }
+}
+
+static async Task InitializeClientAsync(Socket client, int clientId)
+{
+    await Task.Delay(5000);
+    await WriteMessageAsync(client, clientId, "Homed");
+    await Task.Delay(500);
+
+    await WriteMessageAsync(client, clientId, "Runmode,2");
+    await Task.Delay(500);
+
+    await WriteMessageAsync(client, clientId, "Armobject,0");
+    await Task.Delay(500);
+
+    await WriteMessageAsync(client, clientId, "Controlmode,1");
+}
+
+static async Task WriteMessageAsync(Socket client, int clientId, string message)
+{
+    var framedMessage = $"<START>{message}<END>";
+    var sendBuffer = Encoding.UTF8.GetBytes(framedMessage);
+    await client.SendAsync(sendBuffer, SocketFlags.None);
+    Console.WriteLine($"瀹㈡埛绔�#{clientId} 鍙戦��: {framedMessage}");
+}
+
+static async Task ReadMessageAsync(Socket client, int clientId)
+{
+    var receiveBuffer = new byte[1024];
+    var length = await client.ReceiveAsync(receiveBuffer, SocketFlags.None);
+    if (length <= 0)
+    {
+        Console.WriteLine($"瀹㈡埛绔�#{clientId} 鏈帴鏀跺埌鏁版嵁");
+        return;
+    }
+
+    var response = Encoding.UTF8.GetString(receiveBuffer, 0, length);
+    if (!response.StartsWith("<START>") || !response.EndsWith("<END>"))
+    {
+        Console.WriteLine($"瀹㈡埛绔�#{clientId} 鏀跺埌鏃犳晥娑堟伅锛堢己灏戞秷鎭ご鎴栨秷鎭熬锛夛紝宸插拷鐣�");
+        return;
+    }
+
+    var content = response["<START>".Length..^"<END>".Length];
+    Console.WriteLine($"瀹㈡埛绔�#{clientId} 鏀跺埌: {content}");
+
+   
+}
+
+static async Task ListenServerMessagesAsync(Socket client, int clientId, CancellationToken cancellationToken, ConcurrentDictionary<int, Socket> clients)
+{
+    var receiveBuffer = new byte[1024];
+    var cache = new StringBuilder();
+
+    try
+    {
+        while (!cancellationToken.IsCancellationRequested)
+        {
+            int length;
+            try
+            {
+                length = await client.ReceiveAsync(receiveBuffer, SocketFlags.None, cancellationToken);
+            }
+            catch (SocketException)
+            {
+                Console.WriteLine($"瀹㈡埛绔�#{clientId} 涓庢湇鍔$鏂紑杩炴帴");
+                return;
+            }
+            catch (ObjectDisposedException)
+            {
+                Console.WriteLine($"瀹㈡埛绔�#{clientId} Socket 宸茶閲婃斁");
+                return;
+            }
+
+            if (length <= 0)
+            {
+                Console.WriteLine($"瀹㈡埛绔�#{clientId} 涓庢湇鍔$鏂紑杩炴帴");
+                return;
+            }
+
+            cache.Append(Encoding.UTF8.GetString(receiveBuffer, 0, length));
+            await TryReadFramedMessages(cache, clientId, client);
+        }
+    }
+    catch (OperationCanceledException)
+    {
+        // 姝e父鍙栨秷锛屼笉闇�瑕佽褰曢敊璇�
+    }
+    catch (Exception ex)
+    {
+        Console.WriteLine($"瀹㈡埛绔�#{clientId} 鎺ユ敹娑堟伅寮傚父: {ex.Message}");
+    }
+    finally
+    {
+        // 杩炴帴鏂紑鏃讹紝浠庡瓧鍏镐腑绉婚櫎杩欎釜 Socket锛堝鏋滆繕鏄綋鍓嶇殑璇濓級
+        clients.TryRemove(clientId, out var removed);
+        if (removed == client)
+        {
+            try { client.Shutdown(SocketShutdown.Both); } catch { }
+            try { client.Dispose(); } catch { }
+        }
+    }
+}
+
+static async Task TryReadFramedMessages(StringBuilder cache, int clientId, Socket client)
+{
+    const string start = "<START>";
+    const string end = "<END>";
+
+    while (true)
+    {
+        var text = cache.ToString();
+        var startIndex = text.IndexOf(start, StringComparison.Ordinal);
+        if (startIndex < 0)
+        {
+            // 娌℃湁鎵惧埌 START 鏍囪锛屼繚鐣欑紦瀛樼瓑寰呮洿澶氭暟鎹�
+            // 浣嗗鏋滅紦瀛樺お澶э紝娓呯┖浠ラ槻鍐呭瓨娉勬紡
+            if (cache.Length > 10240) // 10KB 闃堝��
+            {
+                cache.Clear();
+            }
+            return;
+        }
+
+        var endIndex = text.IndexOf(end, startIndex + start.Length, StringComparison.Ordinal);
+        if (endIndex < 0)
+        {
+            // 绉婚櫎 START 涔嬪墠鐨勬棤鏁堟暟鎹�
+            if (startIndex > 0)
+            {
+                cache.Remove(0, startIndex);
+            }
+            return;
+        }
+
+        var contentStart = startIndex + start.Length;
+        var contentLength = endIndex - contentStart;
+        var content = text.Substring(contentStart, contentLength);
+        Console.WriteLine($"瀹㈡埛绔�#{clientId} 鏀跺埌: {content}");
+
+        cache.Remove(0, endIndex + end.Length);
+
+        if (content == "Pickbattery,1")
+        {
+            await WriteMessageAsync(client, clientId, "Running");
+            await Task.Delay(1000);
+            await WriteMessageAsync(client, clientId, "Picking");
+
+            //await WriteMessageAsync(client, clientId, "PickFinished,1,2,3,4");
+        }
+        else if (content == "Putbattery,1")
+        {
+            await WriteMessageAsync(client, clientId, "Running");
+            await Task.Delay(500);
+            await WriteMessageAsync(client, clientId, "Puting");
+            await Task.Delay(5000);
+
+            //await WriteMessageAsync(client, clientId, "PutFinished,1,2,3,4");
+        }
+    }
+}
+
+static async Task SendLoopAsync(ConcurrentDictionary<int, Socket> clients, CancellationTokenSource cts)
+{
+    Console.WriteLine("杈撳叆鏍煎紡: 瀹㈡埛绔紪鍙�:娑堟伅锛屼緥濡� 1:Status锛岃緭鍏� exit 閫�鍑�");
+
+    while (!cts.IsCancellationRequested)
+    {
+        var line = Console.ReadLine();
+        if (string.IsNullOrWhiteSpace(line))
+        {
+            continue;
+        }
+
+        if (line.Equals("exit", StringComparison.OrdinalIgnoreCase))
+        {
+            cts.Cancel();
+            foreach (var socket in clients.Values)
+            {
+                try
+                {
+                    socket.Shutdown(SocketShutdown.Both);
+                    socket.Dispose();
+                }
+                catch { }
+            }
+            return;
+        }
+
+        var index = line.IndexOf(':');
+        if (index <= 0 || index == line.Length - 1)
+        {
+            Console.WriteLine("杈撳叆涓嶆纭紝璇蜂娇鐢�: 瀹㈡埛绔紪鍙�:娑堟伅");
+            continue;
+        }
+
+        var idText = line[..index];
+        var message = line[(index + 1)..];
+        if (!int.TryParse(idText, out var clientId) || !clients.TryGetValue(clientId, out var client))
+        {
+            Console.WriteLine($"瀹㈡埛绔�#{idText} 涓嶅瓨鍦ㄦ垨鏈繛鎺�");
+            continue;
+        }
+
+        try
+        {
+            await WriteMessageAsync(client, clientId, message);
+        }
+        catch (ObjectDisposedException)
+        {
+            Console.WriteLine($"瀹㈡埛绔�#{clientId} 鍙戦�佸け璐�: Socket 宸插叧闂紙鍙兘姝e湪閲嶈繛涓級");
+            clients.TryRemove(clientId, out _);
+        }
+        catch (SocketException ex)
+        {
+            Console.WriteLine($"瀹㈡埛绔�#{clientId} 鍙戦�佸け璐�: {ex.Message}");
+            clients.TryRemove(clientId, out _);
+        }
+        catch (Exception ex)
+        {
+            Console.WriteLine($"瀹㈡埛绔�#{clientId} 鍙戦�佸け璐�: {ex.GetType().Name} - {ex.Message}");
+        }
+    }
+}
+
+file sealed class ClientOptions
+{
+    public int ClientCount { get; init; } = 1;
+    public string ServerHost { get; init; } = "127.0.0.1";
+    public int ServerPort { get; init; } = 2000;
+    public int StartLocalPort { get; init; } = 62312;
+    public bool EnableReconnect { get; init; } = true;
+    public int ReconnectIntervalMs { get; init; } = 5000;
+    public int MaxReconnectAttempts { get; init; } = -1; // -1 琛ㄧず鏃犻檺閲嶈瘯
+
+    public static ClientOptions FromArgs(string[] args)
+    {
+        var map = args
+            .Select(v => v.Split('=', 2, StringSplitOptions.TrimEntries))
+            .Where(parts => parts.Length == 2)
+            .ToDictionary(parts => parts[0].TrimStart('-', '/').ToLowerInvariant(), parts => parts[1]);
+
+        return new ClientOptions
+        {
+            ClientCount = GetInt(map, "count", 1),
+            ServerHost = GetString(map, "host", "127.0.0.1"),
+            ServerPort = GetInt(map, "serverport", 2000),
+            StartLocalPort = GetInt(map, "localport", 62312),
+            EnableReconnect = GetBool(map, "reconnect", true),
+            ReconnectIntervalMs = GetInt(map, "reconnectinterval", 5000),
+            MaxReconnectAttempts = GetInt(map, "maxreconnect", -1)
+        };
+    }
+
+    private static bool GetBool(Dictionary<string, string> map, string key, bool defaultValue)
+        => map.TryGetValue(key, out var value)
+        ? (bool.TryParse(value, out var result) ? result : defaultValue)
+        : defaultValue;
+
+    private static int GetInt(Dictionary<string, string> map, string key, int defaultValue)
+        => map.TryGetValue(key, out var value) && int.TryParse(value, out var number) ? number : defaultValue;
+
+    private static string GetString(Dictionary<string, string> map, string key, string defaultValue)
+        => map.TryGetValue(key, out var value) && !string.IsNullOrWhiteSpace(value) ? value : defaultValue;
+}
diff --git "a/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/Properties/launchSettings.json" "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/Properties/launchSettings.json"
new file mode 100644
index 0000000..2cf775a
--- /dev/null
+++ "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/Properties/launchSettings.json"
@@ -0,0 +1,10 @@
+{
+  "profiles": {
+    "RobotClient": {
+      "commandName": "Project"
+    },
+    "Container (Dockerfile)": {
+      "commandName": "Docker"
+    }
+  }
+}
\ No newline at end of file
diff --git "a/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/RobotClient.csproj" "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/RobotClient.csproj"
new file mode 100644
index 0000000..1a81153
--- /dev/null
+++ "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/RobotClient.csproj"
@@ -0,0 +1,16 @@
+锘�<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>net8.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
+    <DockerfileContext>.</DockerfileContext>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.23.0" />
+  </ItemGroup>
+
+</Project>
diff --git "a/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/RobotClient.slnx" "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/RobotClient.slnx"
new file mode 100644
index 0000000..9354864
--- /dev/null
+++ "b/Code/\346\234\272\346\242\260\346\211\213\345\256\242\346\210\267\347\253\257/RobotClient/RobotClient.slnx"
@@ -0,0 +1,3 @@
+<Solution>
+  <Project Path="RobotClient.csproj" />
+</Solution>

--
Gitblit v1.9.3