From 70233af5426b0d1c343ebe87183303a34a9aaa58 Mon Sep 17 00:00:00 2001
From: hutongqing <hutongqing@hnkhzn.com>
Date: 星期三, 20 十一月 2024 09:05:38 +0800
Subject: [PATCH] WIDESEAWCS_QuartzJob更新版本

---
 WIDESEAWCS_Server/WIDESEAWCS_Core/LogHelper/QuartzLogger.cs                                         |   17 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DTO/DeviceProDTO.cs                                          |    2 
 WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneDBName.cs                            |    2 
 WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs                         |   10 
 WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/76c5396a-0ace-4299-a2e5-72dee6db0406.vsidx |    0 
 WIDESEAWCS_Server/WIDESEAWCS_Communicator/AllenBrandly/AllenBrandlyEtherNetCommunicator.cs          |  623 +++++++++
 WIDESEAWCS_Server/WIDESEAWCS_Model/ClassDiagram1.cd                                                 |    2 
 WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/DesignTimeBuild/.dtbcache.v2                                |    0 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs                                     |   51 
 WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2                                           |    0 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzNet/QuartzNetExtension.cs                              |  123 +
 WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.http                                          |    1 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Models/Dt_DeviceProtocolDetail.cs                            |    2 
 WIDESEAWCS_Server/WIDESEAWCS_Core/BaseRepository/RepositoryBase.cs                                  |    4 
 WIDESEAWCS_Server/WIDESEAWCS_Core/Seed/DBSeed.cs                                                    |    4 
 WIDESEAWCS_Client/src/views/system/Sys_Menu.vue                                                     |    1 
 WIDESEAWCS_Server/WIDESEAWCS_Server.sln                                                             |    8 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ShuttleCar/ShuttleCar.cs                                     |   14 
 WIDESEAWCS_Server/WIDESEAWCS_Communicator/Omron/OmronEtherNetCommunicator.cs                        |    2 
 WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Menu.cs                                        |    6 
 WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/005d5771-1857-4071-93b7-c64261f27980.vsidx |    0 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/WIDESEAWCS_QuartzJob.csproj                                  |    8 
 WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_RoleService.cs                                      |    2 
 WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_MenuService.cs                                    |    5 
 WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_MenuService.cs                                      |    5 
 WIDESEAWCS_Server/WIDESEAWCS_Core/DB/Models/BaseEntity.cs                                           |    4 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Models/Dt_DeviceInfo.cs                                      |    2 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzExtensions/JobSetup.cs                                 |   11 
 WIDESEAWCS_Server/WIDESEAWCS_Core/Extensions/AutofacModuleRegister.cs                               |    7 
 WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs                                                       |   60 
 WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs                                       |    1 
 WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs                                      |    8 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/IConveyorLine.cs                                |    5 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerCrane.cs                    |   18 
 WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS.xml                                                  |   28 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DeviceBase/IDevice.cs                                        |    2 
 WIDESEAWCS_Server/WIDESEAWCS_Communicator/WIDESEAWCS_Communicator.csproj                            |    4 
 WIDESEAWCS_Server/WIDESEAWCS_Core/BaseServices/ServiceBase.cs                                       |    2 
 WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs                          |    5 
 WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/43d2a2dc-30bd-423d-a9c4-af4fe86a7160.vsidx |    0 
 WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/SqlSugarAop.cs                                                |    2 
 WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ba667f09-0dbf-4db8-8382-9e90210cc581.vsidx |    0 
 WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_MenuRepository.cs                                 |   19 
 WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json                                     | 1652 ++++++++++++++---------
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ShuttleCar/IShuttleCar.cs                                    |    8 
 WIDESEAWCS_Server/WIDESEAWCS_Server/Filter/CustomProfile.cs                                         |    2 
 WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs                                                      |   16 
 WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs                            |   32 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/IStackerCrane.cs                                |    4 
 WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/cf24cbdc-994d-4c42-b0d8-a1bfa8bab80b.vsidx |    0 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/OtherDevices/IOtherDevice.cs                                 |    8 
 WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/CacheAOP.cs                                                   |   22 
 WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs                         |    3 
 WIDESEAWCS_Server/WIDESEAWCS_Core/LogHelper/Logger.cs                                               |   42 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine.cs                           |   11 
 WIDESEAWCS_Server/WIDESEAWCS_Communicator/CommunicationException.cs                                 |    5 
 WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_DictionaryService.cs                                |   18 
 WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/LogAOP.cs                                                     |    3 
 WIDESEAWCS_Server/WIDESEAWCS_Core/Attributes/SequenceAttribute.cs                                   |    4 
 WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs                                      |   31 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzNet/ISchedulerCenter.cs                                |    4 
 WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_MenuRepository.cs                               |    3 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzExtensions/QuartzJobHostedService.cs                   |   70 
 WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/SchedulerController.cs                    |  113 +
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Storage.cs                                                   |   22 
 WIDESEAWCS_Server/WIDESEAWCS_Model/ClassDiagram2.cd                                                 |   11 
 WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_User.cs                                        |   60 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/OtherDevices/OtherDevice.cs                                  |   12 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Spec/SpeStackerCrane.cs                         |   11 
 /dev/null                                                                                           |    0 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/JobBase.cs                                                   |   20 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzNet/SchedulerCenterServer.cs                           |  104 +
 WIDESEAWCS_Server/WIDESEAWCS_Core/Const/TenantConst.cs                                              |    2 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/DeviceProtocolService.cs                             |   13 
 WIDESEAWCS_Server/CodeMap1.dgml                                                                     |  713 ++++++++++
 WIDESEAWCS_Server/WIDESEAWCS_Core/Helper/UtilConvert.cs                                             |    4 
 WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json                                                |    5 
 77 files changed, 3,129 insertions(+), 969 deletions(-)

diff --git a/WIDESEAWCS_Client/src/views/system/Sys_Menu.vue b/WIDESEAWCS_Client/src/views/system/Sys_Menu.vue
index 93feed5..8ed6a6c 100644
--- a/WIDESEAWCS_Client/src/views/system/Sys_Menu.vue
+++ b/WIDESEAWCS_Client/src/views/system/Sys_Menu.vue
@@ -297,6 +297,7 @@
       createDate: "",
       creator: "",
       modifyDate: "",
+      menuType: 1
     });
 
     const actionFields = ref({
diff --git a/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v7.bin b/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v7.bin
deleted file mode 100644
index 4338499..0000000
--- a/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v7.bin
+++ /dev/null
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v7.bin b/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v7.bin
deleted file mode 100644
index 5706bf3..0000000
--- a/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v7.bin
+++ /dev/null
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/DesignTimeBuild/.dtbcache.v2 b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/DesignTimeBuild/.dtbcache.v2
index 3e9c3c5..67b553f 100644
--- a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/DesignTimeBuild/.dtbcache.v2
+++ b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/DesignTimeBuild/.dtbcache.v2
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/005d5771-1857-4071-93b7-c64261f27980.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/005d5771-1857-4071-93b7-c64261f27980.vsidx
new file mode 100644
index 0000000..2fa0c27
--- /dev/null
+++ b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/005d5771-1857-4071-93b7-c64261f27980.vsidx
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/0a2b14b5-bcfa-4464-9cf2-3935b2833bc9.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/0a2b14b5-bcfa-4464-9cf2-3935b2833bc9.vsidx
deleted file mode 100644
index 4c9714b..0000000
--- a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/0a2b14b5-bcfa-4464-9cf2-3935b2833bc9.vsidx
+++ /dev/null
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/185eebbc-5543-4370-b0ab-1dc832c3f4aa.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/185eebbc-5543-4370-b0ab-1dc832c3f4aa.vsidx
deleted file mode 100644
index a429c59..0000000
--- a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/185eebbc-5543-4370-b0ab-1dc832c3f4aa.vsidx
+++ /dev/null
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/2504b6c7-2758-4cba-a9fc-7cfaccec4015.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/2504b6c7-2758-4cba-a9fc-7cfaccec4015.vsidx
deleted file mode 100644
index 1c2da0e..0000000
--- a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/2504b6c7-2758-4cba-a9fc-7cfaccec4015.vsidx
+++ /dev/null
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/43d2a2dc-30bd-423d-a9c4-af4fe86a7160.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/43d2a2dc-30bd-423d-a9c4-af4fe86a7160.vsidx
new file mode 100644
index 0000000..bbb1bda
--- /dev/null
+++ b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/43d2a2dc-30bd-423d-a9c4-af4fe86a7160.vsidx
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/76c5396a-0ace-4299-a2e5-72dee6db0406.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/76c5396a-0ace-4299-a2e5-72dee6db0406.vsidx
new file mode 100644
index 0000000..57e4556
--- /dev/null
+++ b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/76c5396a-0ace-4299-a2e5-72dee6db0406.vsidx
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/7701956d-90bd-47ab-b9b9-97acbc7d7918.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/7701956d-90bd-47ab-b9b9-97acbc7d7918.vsidx
deleted file mode 100644
index 04112bd..0000000
--- a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/7701956d-90bd-47ab-b9b9-97acbc7d7918.vsidx
+++ /dev/null
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/a3124894-1503-4e13-963c-18af5a16a2e6.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/a3124894-1503-4e13-963c-18af5a16a2e6.vsidx
deleted file mode 100644
index a46a5e2..0000000
--- a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/a3124894-1503-4e13-963c-18af5a16a2e6.vsidx
+++ /dev/null
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/aaeb68d7-aa3b-415c-b4e2-315ac5c186d7.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/aaeb68d7-aa3b-415c-b4e2-315ac5c186d7.vsidx
deleted file mode 100644
index da9f908..0000000
--- a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/aaeb68d7-aa3b-415c-b4e2-315ac5c186d7.vsidx
+++ /dev/null
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ac605005-c203-4605-a5ef-2f13a90992a7.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ac605005-c203-4605-a5ef-2f13a90992a7.vsidx
deleted file mode 100644
index 11178bd..0000000
--- a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ac605005-c203-4605-a5ef-2f13a90992a7.vsidx
+++ /dev/null
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ba667f09-0dbf-4db8-8382-9e90210cc581.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ba667f09-0dbf-4db8-8382-9e90210cc581.vsidx
new file mode 100644
index 0000000..69dfed2
--- /dev/null
+++ b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ba667f09-0dbf-4db8-8382-9e90210cc581.vsidx
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/cf24cbdc-994d-4c42-b0d8-a1bfa8bab80b.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/cf24cbdc-994d-4c42-b0d8-a1bfa8bab80b.vsidx
new file mode 100644
index 0000000..5ac742c
--- /dev/null
+++ b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/cf24cbdc-994d-4c42-b0d8-a1bfa8bab80b.vsidx
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/d3ac7d16-c7ff-406c-b891-7c7d1f786a13.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/d3ac7d16-c7ff-406c-b891-7c7d1f786a13.vsidx
deleted file mode 100644
index 6ee8f1e..0000000
--- a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/d3ac7d16-c7ff-406c-b891-7c7d1f786a13.vsidx
+++ /dev/null
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2 b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2
index 8cf39ca..822452e 100644
--- a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2
+++ b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json
index c6a9951..e08ebbc 100644
--- a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json
+++ b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json
@@ -3,200 +3,300 @@
   "WorkspaceRootPath": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\",
   "Documents": [
     {
-      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_server\\controllers\\system\\sys_dictionarycontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\system\\sys_dictionarycontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\quartznet\\schedulercenterserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\quartznet\\schedulercenterserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\service\\dispatchinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\jobbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\jobbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{861C4D0B-A478-48DB-A0FA-AE70F5BA210A}|WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_communicator\\siemens\\siemenss7communicator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{861C4D0B-A478-48DB-A0FA-AE70F5BA210A}|WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj|solutionrelative:wideseawcs_communicator\\siemens\\siemenss7communicator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\models\\dt_deviceinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\models\\dt_deviceinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\service\\dispatchinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\service\\dispatchinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\service\\deviceinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\service\\deviceinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\models\\dt_dispatchinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\models\\dt_dispatchinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\stackercrane\\common\\commonstackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\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:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\wideseawcs_quartzjob.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\wideseawcs_quartzjob.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\quartzextensions\\quartzjobhostedservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\quartzextensions\\quartzjobhostedservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{861C4D0B-A478-48DB-A0FA-AE70F5BA210A}|WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_communicator\\basecommunicator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{861C4D0B-A478-48DB-A0FA-AE70F5BA210A}|WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj|solutionrelative:wideseawcs_communicator\\basecommunicator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\wideseawcs\\infrastructurewcs\\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:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_tasks\\testjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\testjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_core\\baseservices\\servicebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\baseservices\\servicebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_core\\baserepository\\repositorybase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\baserepository\\repositorybase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_server\\controllers\\quartzjob\\schedulercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\quartzjob\\schedulercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\quartznet\\ischedulercenter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\quartznet\\ischedulercenter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\quartzextensions\\jobsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\quartzextensions\\jobsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_tasks\\stackercranejob\\stackercranedbname.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\stackercranejob\\stackercranedbname.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_server\\filter\\customauthorizefilter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\filter\\customauthorizefilter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_server\\filter\\automapperconfig.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\filter\\automapperconfig.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_server\\filter\\customprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\filter\\customprofile.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{9E4BFF47-52BF-4FD8-9CC7-3763BF19D9E0}|WIDESEAWCS_ISystemServices\\WIDESEAWCS_ISystemServices.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_isystemservices\\isys_menuservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{9E4BFF47-52BF-4FD8-9CC7-3763BF19D9E0}|WIDESEAWCS_ISystemServices\\WIDESEAWCS_ISystemServices.csproj|solutionrelative:wideseawcs_isystemservices\\isys_menuservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_systemservices\\sys_menuservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|solutionrelative:wideseawcs_systemservices\\sys_menuservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_systemservices\\sys_roleservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|solutionrelative:wideseawcs_systemservices\\sys_roleservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{5777BDEC-4726-4425-85F2-A090524F692D}|WIDESEAWCS_SystemRepository\\WIDESEAWCS_SystemRepository.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_systemrepository\\sys_menurepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{5777BDEC-4726-4425-85F2-A090524F692D}|WIDESEAWCS_SystemRepository\\WIDESEAWCS_SystemRepository.csproj|solutionrelative:wideseawcs_systemrepository\\sys_menurepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_dto\\system\\menudto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|solutionrelative:wideseawcs_dto\\system\\menudto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{F302E6D6-5A95-4D22-8DC2-21BE2CB30275}|WIDESEAWCS_ISystemRepository\\WIDESEAWCS_ISystemRepository.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_isystemrepository\\isys_menurepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{F302E6D6-5A95-4D22-8DC2-21BE2CB30275}|WIDESEAWCS_ISystemRepository\\WIDESEAWCS_ISystemRepository.csproj|solutionrelative:wideseawcs_isystemrepository\\isys_menurepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_model\\models\\system\\sys_menu.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|solutionrelative:wideseawcs_model\\models\\system\\sys_menu.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_server\\controllers\\system\\sys_menucontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\system\\sys_menucontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_server\\wideseawcs.xml||{FA3CD31E-987B-443A-9B81-186104E8DAC1}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\wideseawcs.xml||{FA3CD31E-987B-443A-9B81-186104E8DAC1}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_server\\filter\\automappersetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\filter\\automappersetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_server\\controllers\\system\\sys_usercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\system\\sys_usercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_server\\index.html||{40D31677-CBC0-4297-A9EF-89D907823A98}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\index.html||{40D31677-CBC0-4297-A9EF-89D907823A98}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_server\\controllers\\quartzjob\\dispatchinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\quartzjob\\dispatchinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\quartzextensions\\quartzjobautofacmoduleregister.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\quartzextensions\\quartzjobautofacmoduleregister.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\quartzextensions\\quartzjobdatatablehostedservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\quartzextensions\\quartzjobdatatablehostedservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_core\\loghelper\\quartzlogger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\loghelper\\quartzlogger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\storage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\storage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_dto\\system\\vuedictionarydto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|solutionrelative:wideseawcs_dto\\system\\vuedictionarydto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_dto\\system\\userpermissions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|solutionrelative:wideseawcs_dto\\system\\userpermissions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_dto\\system\\actiondto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|solutionrelative:wideseawcs_dto\\system\\actiondto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\dto\\deviceinfodto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\dto\\deviceinfodto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\quartznet\\jobfactory.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\quartznet\\jobfactory.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\taskexecutedetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\taskexecutedetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_tasks\\shuttlecarjob\\shuttlecarjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\shuttlecarjob\\shuttlecarjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\dto\\deviceprodto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\dto\\deviceprodto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\stackercrane\\common\\commonstackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\stackercrane\\common\\commonstackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\stackercrane\\spec\\spestackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\stackercrane\\spec\\spestackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\models\\dt_deviceprotocol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\models\\dt_deviceprotocol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{861C4D0B-A478-48DB-A0FA-AE70F5BA210A}|WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_communicator\\omron\\omronethernetcommunicator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{861C4D0B-A478-48DB-A0FA-AE70F5BA210A}|WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj|solutionrelative:wideseawcs_communicator\\omron\\omronethernetcommunicator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\shuttlecar\\shuttlecar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\shuttlecar\\shuttlecar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\stackercrane\\istackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\stackercrane\\istackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\shuttlecar\\ishuttlecar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\shuttlecar\\ishuttlecar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\conveyorline\\commonconveyorline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\conveyorline\\commonconveyorline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\conveyorline\\iconveyorline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\conveyorline\\iconveyorline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\otherdevices\\iotherdevice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\otherdevices\\iotherdevice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\service\\deviceprotocoldetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\service\\deviceprotocoldetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\service\\deviceinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\service\\deviceinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\models\\dt_router.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\models\\dt_router.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\models\\dt_deviceprotocoldetail.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\models\\dt_deviceprotocoldetail.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_core\\db\\models\\baseentity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\db\\models\\baseentity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\stackercrane\\istackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\stackercrane\\istackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\stackercrane\\spec\\spestackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\stackercrane\\spec\\spestackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_core\\wideseawcs_core.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\wideseawcs_core.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{861C4D0B-A478-48DB-A0FA-AE70F5BA210A}|WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_communicator\\wideseawcs_communicator.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|",
+      "RelativeMoniker": "D:0:0:{861C4D0B-A478-48DB-A0FA-AE70F5BA210A}|WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj|solutionrelative:wideseawcs_communicator\\wideseawcs_communicator.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\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:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\service\\deviceprotocolservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\service\\deviceprotocolservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_core\\extensions\\initializationhostservicesetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\extensions\\initializationhostservicesetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_core\\hostedservice\\seeddatahostedservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\hostedservice\\seeddatahostedservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_core\\seed\\dbseed.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\seed\\dbseed.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\devicebase\\idevice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\devicebase\\idevice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\otherdevices\\otherdevice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\otherdevices\\otherdevice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\conveyorline\\commonconveyorline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\conveyorline\\commonconveyorline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\otherdevices\\iotherdevice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\otherdevices\\iotherdevice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\quartznet\\schedulercenterserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\quartznet\\schedulercenterserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\shuttlecar\\shuttlecar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\shuttlecar\\shuttlecar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\quartzextensions\\jobsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\quartzextensions\\jobsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\shuttlecar\\ishuttlecar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\shuttlecar\\ishuttlecar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\stackercrane\\stackercranetaskcompletedeventargs.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\stackercrane\\stackercranetaskcompletedeventargs.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\wideseawcs\\infrastructurewcs\\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:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\jobbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\jobbase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
-      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_dto\\taskinfo\\wmstaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|solutionrelative:wideseawcs_dto\\taskinfo\\wmstaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\attributes\\modelvalidateattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\attributes\\modelvalidateattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\attributes\\cacheattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\attributes\\cacheattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\attributes\\sequenceattirbute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\attributes\\sequenceattirbute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\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:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\seed\\dbseed.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\seed\\dbseed.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_model\\models\\taskinfo\\dt_task.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|solutionrelative:wideseawcs_model\\models\\taskinfo\\dt_task.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\aop\\sqlsugaraop.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\aop\\sqlsugaraop.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\models\\dt_deviceprotocol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\models\\dt_deviceprotocol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_tasks\\conveyorlinejob\\conveyorlinetaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\conveyorlinetaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\devicebase\\devicecommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\devicebase\\devicecommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\helper\\appsettings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\helper\\appsettings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\aop\\cacheaop.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\aop\\cacheaop.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\helper\\md5helper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\helper\\md5helper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\baseservices\\servicebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\baseservices\\servicebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\helper\\objectextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\helper\\objectextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_systemservices\\sys_dictionaryservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|solutionrelative:wideseawcs_systemservices\\sys_dictionaryservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\caches\\memorycacheservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\caches\\memorycacheservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_systemservices\\sys_userservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|solutionrelative:wideseawcs_systemservices\\sys_userservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\caches\\icacheservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\caches\\icacheservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\aop\\logaop.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\aop\\logaop.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\utilities\\modelvalidate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\utilities\\modelvalidate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\apidoc\\htmlhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\apidoc\\htmlhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\apidoc\\bytehelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\apidoc\\bytehelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{861C4D0B-A478-48DB-A0FA-AE70F5BA210A}|WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_communicator\\custommodel\\siemenscustommodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{861C4D0B-A478-48DB-A0FA-AE70F5BA210A}|WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj|solutionrelative:wideseawcs_communicator\\custommodel\\siemenscustommodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{861C4D0B-A478-48DB-A0FA-AE70F5BA210A}|WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_communicator\\custommodel\\melseccustommodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{861C4D0B-A478-48DB-A0FA-AE70F5BA210A}|WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj|solutionrelative:wideseawcs_communicator\\custommodel\\melseccustommodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{861C4D0B-A478-48DB-A0FA-AE70F5BA210A}|WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_communicator\\custommodel\\modbuscustommodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{861C4D0B-A478-48DB-A0FA-AE70F5BA210A}|WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj|solutionrelative:wideseawcs_communicator\\custommodel\\modbuscustommodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\devicebase\\datalengthattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\devicebase\\datalengthattribute.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_taskinfoservice\\taskexecutedetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\taskexecutedetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_quartzjob\\seed\\quartzjobcreatedatatabel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\seed\\quartzjobcreatedatatabel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     }
   ],
   "DocumentGroupContainers": [
@@ -206,86 +306,8 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 18,
+          "SelectedChildIndex": 11,
           "Children": [
-            {
-              "$type": "Document",
-              "DocumentIndex": 5,
-              "Title": "OmronEtherNetCommunicator.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\Omron\\OmronEtherNetCommunicator.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Communicator\\Omron\\OmronEtherNetCommunicator.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\Omron\\OmronEtherNetCommunicator.cs",
-              "RelativeToolTip": "WIDESEAWCS_Communicator\\Omron\\OmronEtherNetCommunicator.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAGMCAAAIAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-11-01T01:23:20.224Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 7,
-              "Title": "IStackerCrane.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\IStackerCrane.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\IStackerCrane.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\IStackerCrane.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\StackerCrane\\IStackerCrane.cs",
-              "ViewState": "AQIAABIAAAAAAAAAAAAAAAAAAAAAAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-11-01T01:07:53.905Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 9,
-              "Title": "IConveyorLine.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ConveyorLine\\IConveyorLine.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\ConveyorLine\\IConveyorLine.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ConveyorLine\\IConveyorLine.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\ConveyorLine\\IConveyorLine.cs",
-              "ViewState": "AQIAABgAAAAAAAAAAAAAADcAAACCAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-11-01T01:03:35.371Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 4,
-              "Title": "SpeStackerCrane.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Spec\\SpeStackerCrane.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\Spec\\SpeStackerCrane.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Spec\\SpeStackerCrane.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\StackerCrane\\Spec\\SpeStackerCrane.cs",
-              "ViewState": "AQIAAGcAAAAAAAAAAAAqwH8AAAB+AAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-11-01T01:29:42.105Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 11,
-              "Title": "OtherDevice.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\OtherDevices\\OtherDevice.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\OtherDevices\\OtherDevice.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\OtherDevices\\OtherDevice.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\OtherDevices\\OtherDevice.cs",
-              "ViewState": "AQIAAB0AAAAAAAAAAAAqwIIAAAAaAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-11-01T00:54:47.347Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 10,
-              "Title": "IOtherDevice.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\OtherDevices\\IOtherDevice.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\OtherDevices\\IOtherDevice.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\OtherDevices\\IOtherDevice.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\OtherDevices\\IOtherDevice.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAsAAAAFAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-11-01T00:53:40.762Z",
-              "EditorCaption": ""
-            },
             {
               "$type": "Bookmark",
               "Name": "ST:12:0:{2456bd12-ecf7-4988-a4a6-67d49173f565}"
@@ -304,531 +326,893 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 6,
-              "Title": "ShuttleCar.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ShuttleCar\\ShuttleCar.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\ShuttleCar\\ShuttleCar.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ShuttleCar\\ShuttleCar.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\ShuttleCar\\ShuttleCar.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAswC8AAAAIAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-11-01T00:43:46.189Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 8,
-              "Title": "IShuttleCar.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ShuttleCar\\IShuttleCar.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\ShuttleCar\\IShuttleCar.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ShuttleCar\\IShuttleCar.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\ShuttleCar\\IShuttleCar.cs",
-              "ViewState": "AQIAAAEAAAAAAAAAAAAgwDIAAACCAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-11-01T00:43:44.395Z",
-              "EditorCaption": ""
+              "DocumentIndex": 7,
+              "Title": "WIDESEAWCS_QuartzJob.csproj",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAcAAAAXAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|",
+              "WhenOpened": "2024-11-15T07:03:26.538Z"
             },
             {
               "$type": "Document",
               "DocumentIndex": 3,
-              "Title": "CommonStackerCrane.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\CommonStackerCrane.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\CommonStackerCrane.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\CommonStackerCrane.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\CommonStackerCrane.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAE4BAAAIAAAA",
+              "Title": "Dt_DeviceInfo.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceInfo.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceInfo.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceInfo.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceInfo.cs",
+              "ViewState": "AgIAABsAAAAAAAAAAAAAAEAAAAAuAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-31T11:01:23.531Z",
-              "EditorCaption": ""
+              "WhenOpened": "2024-11-11T02:36:57.223Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 2,
-              "Title": "DeviceInfoService.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+              "DocumentIndex": 6,
+              "Title": "QuartzNetExtension.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzNet\\QuartzNetExtension.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzNet\\QuartzNetExtension.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzNet\\QuartzNetExtension.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\QuartzNet\\QuartzNetExtension.cs",
+              "ViewState": "AgIAAB8AAAAAAAAAAAApwFcAAACSAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-30T03:12:38.009Z",
-              "EditorCaption": ""
+              "WhenOpened": "2024-11-15T01:36:48.189Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 1,
+              "DocumentIndex": 5,
+              "Title": "Dt_DispatchInfo.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DispatchInfo.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Models\\Dt_DispatchInfo.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DispatchInfo.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Models\\Dt_DispatchInfo.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAF8AAABBAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T02:37:35.521Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 4,
               "Title": "DispatchInfoService.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DispatchInfoService.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Service\\DispatchInfoService.cs",
               "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DispatchInfoService.cs",
               "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Service\\DispatchInfoService.cs",
-              "ViewState": "AQIAACkAAAAAAAAAAAAuwEMAAAAYAAAA",
+              "ViewState": "AgIAABYAAAAAAAAAAAArwC8AAAAaAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-30T03:12:41.805Z",
-              "EditorCaption": ""
+              "WhenOpened": "2024-11-13T01:06:37.692Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 0,
-              "Title": "Sys_DictionaryController.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_DictionaryController.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\System\\Sys_DictionaryController.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_DictionaryController.cs",
-              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\System\\Sys_DictionaryController.cs",
-              "ViewState": "AQIAAGQAAAAAAAAAAAAAAG4AAAAmAAAA",
+              "DocumentIndex": 2,
+              "Title": "SiemensS7Communicator.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\Siemens\\SiemensS7Communicator.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Communicator\\Siemens\\SiemensS7Communicator.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\Siemens\\SiemensS7Communicator.cs",
+              "RelativeToolTip": "WIDESEAWCS_Communicator\\Siemens\\SiemensS7Communicator.cs",
+              "ViewState": "AgIAAJAAAAAAAAAAAAAAwLsAAAANAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T07:01:59.572Z",
-              "EditorCaption": ""
+              "WhenOpened": "2024-11-13T06:57:16.632Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 13,
-              "Title": "SchedulerCenterServer.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzNet\\SchedulerCenterServer.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzNet\\SchedulerCenterServer.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzNet\\SchedulerCenterServer.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\QuartzNet\\SchedulerCenterServer.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAACMAAAA5AAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-31T11:23:09.39Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 14,
-              "Title": "JobSetup.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\JobSetup.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\JobSetup.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\JobSetup.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\JobSetup.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAACcAAABNAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-31T11:23:38.365Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 15,
-              "Title": "CommonConveyorLineJob.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
-              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
-              "ViewState": "AQIAACsAAAAAAAAAAAAswDkAAAAMAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-31T11:28:49.243Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 16,
-              "Title": "CommonStackerCraneJob.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "ViewState": "AQIAAB4AAAAAAAAAAAA+wCwAAABTAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-31T11:07:30.949Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 12,
-              "Title": "CommonConveyorLine.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ConveyorLine\\CommonConveyorLine.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\ConveyorLine\\CommonConveyorLine.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ConveyorLine\\CommonConveyorLine.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\ConveyorLine\\CommonConveyorLine.cs",
-              "ViewState": "AQIAAHYAAAAAAAAAAAAAAJEAAAAdAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-31T11:16:32.807Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 17,
-              "Title": "TaskService.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "ViewState": "AQIAADIAAAAAAAAAAADwvwABAABZAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T02:59:00.959Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 25,
-              "Title": "DBSeed.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Seed\\DBSeed.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Seed\\DBSeed.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Seed\\DBSeed.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\Seed\\DBSeed.cs",
-              "ViewState": "AQIAAE0AAAAAAAAAAAAmwFMAAABAAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-31T06:21:27.437Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 27,
-              "Title": "SqlSugarAop.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\AOP\\SqlSugarAop.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\AOP\\SqlSugarAop.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\AOP\\SqlSugarAop.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\AOP\\SqlSugarAop.cs",
-              "ViewState": "AQIAABQAAAAAAAAAAAAAwAAAAAAAAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-31T11:17:24.097Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 26,
-              "Title": "Dt_Task.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
-              "RelativeToolTip": "WIDESEAWCS_Model\\Models\\TaskInfo\\Dt_Task.cs",
-              "ViewState": "AQIAACMAAAAAAAAAAAAuwCwAAABDAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-31T11:17:49.628Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 19,
-              "Title": "appsettings.json",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\appsettings.json",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
-              "RelativeToolTip": "WIDESEAWCS_Server\\appsettings.json",
-              "ViewState": "AQIAAAAAAAAAAAAAAADwvxsAAAASAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
-              "WhenOpened": "2024-10-31T11:29:47.681Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 20,
-              "Title": "WMSTaskDTO.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\TaskInfo\\WMSTaskDTO.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\TaskInfo\\WMSTaskDTO.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\TaskInfo\\WMSTaskDTO.cs",
-              "RelativeToolTip": "WIDESEAWCS_DTO\\TaskInfo\\WMSTaskDTO.cs",
-              "ViewState": "AQIAABcAAAAAAAAAAAA0wAAAAAAAAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-31T11:26:44.217Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 18,
+              "DocumentIndex": 1,
               "Title": "JobBase.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\JobBase.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\JobBase.cs",
               "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\JobBase.cs",
               "RelativeToolTip": "WIDESEAWCS_QuartzJob\\JobBase.cs",
-              "ViewState": "AQIAADgAAAAAAAAAAAAQwFEAAAAwAAAA",
+              "ViewState": "AgIAAAQAAAAAAAAAAAAAAGkAAAAhAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-31T11:28:40.732Z"
+              "WhenOpened": "2024-11-11T02:31:45.652Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 23,
-              "Title": "SequenceAttirbute.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Attributes\\SequenceAttirbute.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Attributes\\SequenceAttirbute.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Attributes\\SequenceAttirbute.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\Attributes\\SequenceAttirbute.cs",
-              "ViewState": "AQIAAAMAAAAAAAAAAAAAABcAAABAAAAA",
+              "DocumentIndex": 0,
+              "Title": "SchedulerCenterServer.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzNet\\SchedulerCenterServer.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzNet\\SchedulerCenterServer.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzNet\\SchedulerCenterServer.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\QuartzNet\\SchedulerCenterServer.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAMBAAAXAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-31T06:20:11.238Z"
+              "WhenOpened": "2024-11-19T02:46:45.891Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 22,
-              "Title": "CacheAttribute.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Attributes\\CacheAttribute.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Attributes\\CacheAttribute.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Attributes\\CacheAttribute.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\Attributes\\CacheAttribute.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAABEAAAA5AAAA",
+              "DocumentIndex": 19,
+              "Title": "StackerCraneDBName.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\StackerCraneDBName.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\StackerCraneDBName.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\StackerCraneDBName.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\StackerCraneDBName.cs",
+              "ViewState": "AgIAACkAAAAAAAAAAADwv00AAAAWAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T06:44:12.196Z"
+              "WhenOpened": "2024-11-14T07:19:03.829Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 21,
-              "Title": "ModelValidateAttribute.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Attributes\\ModelValidateAttribute.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Attributes\\ModelValidateAttribute.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Attributes\\ModelValidateAttribute.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\Attributes\\ModelValidateAttribute.cs",
-              "ViewState": "AQIAAAMAAAAAAAAAAAAAAC8AAAAAAAAA",
+              "DocumentIndex": 8,
+              "Title": "QuartzJobHostedService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobHostedService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobHostedService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobHostedService.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobHostedService.cs",
+              "ViewState": "AgIAACQAAAAAAAAAAAAAAEQAAAAMAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T05:49:32.594Z"
+              "WhenOpened": "2024-11-11T02:34:48.326Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 28,
-              "Title": "Dt_DeviceProtocol.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocol.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocol.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocol.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocol.cs",
-              "ViewState": "AQIAAE4AAAAAAAAAAAAYwF0AAAAHAAAA",
+              "DocumentIndex": 9,
+              "Title": "BaseCommunicator.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\BaseCommunicator.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Communicator\\BaseCommunicator.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\BaseCommunicator.cs",
+              "RelativeToolTip": "WIDESEAWCS_Communicator\\BaseCommunicator.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAABIAAAAGAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-31T11:10:25.526Z"
+              "WhenOpened": "2024-11-11T06:53:45.876Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 31,
-              "Title": "AppSettings.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Helper\\AppSettings.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Helper\\AppSettings.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Helper\\AppSettings.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\Helper\\AppSettings.cs",
-              "ViewState": "AQIAADsAAAAAAAAAAAAYwAAAAAAAAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T07:35:41.197Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 36,
-              "Title": "Sys_DictionaryService.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_DictionaryService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_SystemServices\\Sys_DictionaryService.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_DictionaryService.cs",
-              "RelativeToolTip": "WIDESEAWCS_SystemServices\\Sys_DictionaryService.cs",
-              "ViewState": "AQIAAB4AAAAAAAAAAAAewCoAAAAXAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T07:02:40.902Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 24,
+              "DocumentIndex": 11,
               "Title": "Program.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Program.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Program.cs",
               "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Program.cs",
               "RelativeToolTip": "WIDESEAWCS_Server\\Program.cs",
-              "ViewState": "AQIAACcAAAAAAAAAAAAAAEEAAAAAAAAA",
+              "ViewState": "AgIAAC4AAAAAAAAAAAAWwEAAAAAAAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T07:30:53.392Z"
+              "WhenOpened": "2024-11-13T03:40:59.936Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 34,
+              "DocumentIndex": 12,
+              "Title": "appsettings.json",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\appsettings.json",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
+              "RelativeToolTip": "WIDESEAWCS_Server\\appsettings.json",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAABEAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
+              "WhenOpened": "2024-11-14T07:21:55.699Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 16,
+              "Title": "SchedulerController.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\QuartzJob\\SchedulerController.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\QuartzJob\\SchedulerController.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\QuartzJob\\SchedulerController.cs",
+              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\QuartzJob\\SchedulerController.cs",
+              "ViewState": "AgIAAAwAAAAAAAAAAAAAABsAAAA3AAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-14T06:22:06.737Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 18,
+              "Title": "JobSetup.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\JobSetup.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\JobSetup.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\JobSetup.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\JobSetup.cs",
+              "ViewState": "AgIAABEAAAAAAAAAAAArwCwAAAAhAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T02:30:07.656Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 10,
+              "Title": "CommonStackerCraneJob.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
+              "ViewState": "AgIAAB8AAAAAAAAAAAAAwC0AAAAUAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T06:54:07.273Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 13,
+              "Title": "TestJob.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\TestJob.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\TestJob.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\TestJob.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\TestJob.cs",
+              "ViewState": "AgIAABcAAAAAAAAAAAAMwB4AAAANAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T02:08:07.008Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 20,
+              "Title": "CustomAuthorizeFilter.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Filter\\CustomAuthorizeFilter.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Filter\\CustomAuthorizeFilter.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Filter\\CustomAuthorizeFilter.cs",
+              "RelativeToolTip": "WIDESEAWCS_Server\\Filter\\CustomAuthorizeFilter.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAYAAAAFAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-15T07:25:38.119Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 14,
               "Title": "ServiceBase.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseServices\\ServiceBase.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Core\\BaseServices\\ServiceBase.cs",
               "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseServices\\ServiceBase.cs",
               "RelativeToolTip": "WIDESEAWCS_Core\\BaseServices\\ServiceBase.cs",
-              "ViewState": "AQIAAPEAAAAAAAAAAAAqwAQBAAAfAAAA",
+              "ViewState": "AgIAACEAAAAAAAAAAAApwJoAAAAQAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T07:26:42.953Z"
+              "WhenOpened": "2024-11-19T07:26:59.037Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 35,
-              "Title": "ObjectExtension.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Helper\\ObjectExtension.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Helper\\ObjectExtension.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Helper\\ObjectExtension.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\Helper\\ObjectExtension.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAABgAAAAMAAAA",
+              "DocumentIndex": 15,
+              "Title": "RepositoryBase.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseRepository\\RepositoryBase.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\BaseRepository\\RepositoryBase.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseRepository\\RepositoryBase.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\BaseRepository\\RepositoryBase.cs",
+              "ViewState": "AgIAAOUBAAAAAAAAAAD4vwcCAABBAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T07:27:01.38Z"
+              "WhenOpened": "2024-11-19T07:25:55.034Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 38,
-              "Title": "Sys_UserService.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_UserService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_SystemServices\\Sys_UserService.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_UserService.cs",
-              "RelativeToolTip": "WIDESEAWCS_SystemServices\\Sys_UserService.cs",
-              "ViewState": "AQIAACoAAAAAAAAAAAArwEMAAAAXAAAA",
+              "DocumentIndex": 21,
+              "Title": "AutoMapperConfig.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Filter\\AutoMapperConfig.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Filter\\AutoMapperConfig.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Filter\\AutoMapperConfig.cs",
+              "RelativeToolTip": "WIDESEAWCS_Server\\Filter\\AutoMapperConfig.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T07:01:10.75Z"
+              "WhenOpened": "2024-11-15T07:25:48.754Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 30,
-              "Title": "DeviceCommand.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\DeviceBase\\DeviceCommand.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\DeviceBase\\DeviceCommand.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\DeviceBase\\DeviceCommand.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\DeviceBase\\DeviceCommand.cs",
-              "ViewState": "AQIAAC0AAAAAAAAAAAAowEgAAABPAAAA",
+              "DocumentIndex": 17,
+              "Title": "ISchedulerCenter.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzNet\\ISchedulerCenter.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzNet\\ISchedulerCenter.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzNet\\ISchedulerCenter.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\QuartzNet\\ISchedulerCenter.cs",
+              "ViewState": "AgIAADIAAAAAAAAAAAAQwFEAAAA3AAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T03:05:32.353Z"
+              "WhenOpened": "2024-11-11T02:27:27.505Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 22,
+              "Title": "CustomProfile.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Filter\\CustomProfile.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Filter\\CustomProfile.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Filter\\CustomProfile.cs",
+              "RelativeToolTip": "WIDESEAWCS_Server\\Filter\\CustomProfile.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAnAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-15T07:25:51.567Z"
             },
             {
               "$type": "Document",
               "DocumentIndex": 29,
-              "Title": "ConveyorLineTaskCommand.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineTaskCommand.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineTaskCommand.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineTaskCommand.cs",
-              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\ConveyorLineTaskCommand.cs",
-              "ViewState": "AQIAABEAAAAAAAAAAAAuwCEAAAAZAAAA",
+              "Title": "Sys_Menu.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\Sys_Menu.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\System\\Sys_Menu.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\Sys_Menu.cs",
+              "RelativeToolTip": "WIDESEAWCS_Model\\Models\\System\\Sys_Menu.cs",
+              "ViewState": "AgIAADAAAAAAAAAAAAA1wE4AAAAqAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T03:05:29.571Z"
+              "WhenOpened": "2024-11-18T02:09:18.01Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 26,
+              "Title": "Sys_MenuRepository.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemRepository\\Sys_MenuRepository.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_SystemRepository\\Sys_MenuRepository.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemRepository\\Sys_MenuRepository.cs",
+              "RelativeToolTip": "WIDESEAWCS_SystemRepository\\Sys_MenuRepository.cs",
+              "ViewState": "AgIAAA4AAAAAAAAAAAArwCoAAAAwAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-18T02:20:36.492Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 28,
+              "Title": "ISys_MenuRepository.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ISystemRepository\\ISys_MenuRepository.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_ISystemRepository\\ISys_MenuRepository.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ISystemRepository\\ISys_MenuRepository.cs",
+              "RelativeToolTip": "WIDESEAWCS_ISystemRepository\\ISys_MenuRepository.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAuwA4AAAANAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-18T02:21:54.865Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 25,
+              "Title": "Sys_RoleService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_RoleService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_SystemServices\\Sys_RoleService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_RoleService.cs",
+              "RelativeToolTip": "WIDESEAWCS_SystemServices\\Sys_RoleService.cs",
+              "ViewState": "AgIAAFwAAAAAAAAAAAASwHUAAAAsAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-18T02:22:48.668Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 24,
+              "Title": "Sys_MenuService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_MenuService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_SystemServices\\Sys_MenuService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_MenuService.cs",
+              "RelativeToolTip": "WIDESEAWCS_SystemServices\\Sys_MenuService.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAABMAAABfAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-18T02:23:29.936Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 23,
+              "Title": "ISys_MenuService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ISystemServices\\ISys_MenuService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_ISystemServices\\ISys_MenuService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ISystemServices\\ISys_MenuService.cs",
+              "RelativeToolTip": "WIDESEAWCS_ISystemServices\\ISys_MenuService.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAuwBEAAAAyAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-18T02:23:56.891Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 36,
+              "Title": "QuartzJobAutofacModuleRegister.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobAutofacModuleRegister.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobAutofacModuleRegister.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobAutofacModuleRegister.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobAutofacModuleRegister.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAACgAAAAMAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T02:32:40.712Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 34,
+              "Title": "index.html",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\index.html",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\index.html",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\index.html",
+              "RelativeToolTip": "WIDESEAWCS_Server\\index.html",
+              "ViewState": "AgIAAI0AAAAAAAAAAAAAAJQAAAA1AAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001512|",
+              "WhenOpened": "2024-11-15T07:17:59.198Z"
             },
             {
               "$type": "Document",
               "DocumentIndex": 33,
-              "Title": "MD5Helper.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Helper\\MD5Helper.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Helper\\MD5Helper.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Helper\\MD5Helper.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\Helper\\MD5Helper.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAGMAAAAFAAAA",
+              "Title": "Sys_UserController.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs",
+              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs",
+              "ViewState": "AgIAAGsAAAAAAAAAAAASwIgAAAAFAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T07:32:56.232Z"
+              "WhenOpened": "2024-11-15T07:22:57.244Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 27,
+              "Title": "MenuDTO.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\System\\MenuDTO.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\System\\MenuDTO.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\System\\MenuDTO.cs",
+              "RelativeToolTip": "WIDESEAWCS_DTO\\System\\MenuDTO.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAuwAkAAAARAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-15T01:47:03.565Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 30,
+              "Title": "Sys_MenuController.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_MenuController.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\System\\Sys_MenuController.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_MenuController.cs",
+              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\System\\Sys_MenuController.cs",
+              "ViewState": "AgIAABUAAAAAAAAAAAAIwCUAAAA0AAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-18T02:09:13.298Z"
             },
             {
               "$type": "Document",
               "DocumentIndex": 32,
-              "Title": "CacheAOP.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\AOP\\CacheAOP.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\AOP\\CacheAOP.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\AOP\\CacheAOP.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\AOP\\CacheAOP.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAJMAAAAJAAAA",
+              "Title": "AutoMapperSetup.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Filter\\AutoMapperSetup.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Filter\\AutoMapperSetup.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Filter\\AutoMapperSetup.cs",
+              "RelativeToolTip": "WIDESEAWCS_Server\\Filter\\AutoMapperSetup.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T06:42:33.623Z"
+              "WhenOpened": "2024-11-15T07:25:50.059Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 39,
-              "Title": "ICacheService.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Caches\\ICacheService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Caches\\ICacheService.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Caches\\ICacheService.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\Caches\\ICacheService.cs",
-              "ViewState": "AQIAAAcAAAAAAAAAAAAhwB8AAAAIAAAA",
+              "DocumentIndex": 31,
+              "Title": "WIDESEAWCS.xml",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\WIDESEAWCS.xml",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\WIDESEAWCS.xml",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\WIDESEAWCS.xml",
+              "RelativeToolTip": "WIDESEAWCS_Server\\WIDESEAWCS.xml",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003576|",
+              "WhenOpened": "2024-11-15T07:26:00.153Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 35,
+              "Title": "DispatchInfoController.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\QuartzJob\\DispatchInfoController.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\QuartzJob\\DispatchInfoController.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\QuartzJob\\DispatchInfoController.cs",
+              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\QuartzJob\\DispatchInfoController.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T06:34:56.04Z"
+              "WhenOpened": "2024-11-14T06:20:50.598Z"
             },
             {
               "$type": "Document",
               "DocumentIndex": 37,
-              "Title": "MemoryCacheService.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Caches\\MemoryCacheService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Caches\\MemoryCacheService.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Caches\\MemoryCacheService.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\Caches\\MemoryCacheService.cs",
-              "ViewState": "AQIAAE0AAAAAAAAAAAAewDoAAABpAAAA",
+              "Title": "QuartzJobDataTableHostedService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobDataTableHostedService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobDataTableHostedService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobDataTableHostedService.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobDataTableHostedService.cs",
+              "ViewState": "AgIAACYAAAAAAAAAAADwvyEAAABIAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T06:34:53.123Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 41,
-              "Title": "ModelValidate.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Utilities\\ModelValidate.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Utilities\\ModelValidate.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Utilities\\ModelValidate.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\Utilities\\ModelValidate.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAMUAAAAJAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T05:49:56.779Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 42,
-              "Title": "HtmlHelper.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\ApiDoc\\HtmlHelper.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\ApiDoc\\HtmlHelper.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\ApiDoc\\HtmlHelper.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\ApiDoc\\HtmlHelper.cs",
-              "ViewState": "AQIAABsAAAAAAAAAAAAywAAAAAAAAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T05:47:49.063Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 43,
-              "Title": "ByteHelper.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\ApiDoc\\ByteHelper.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\ApiDoc\\ByteHelper.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\ApiDoc\\ByteHelper.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\ApiDoc\\ByteHelper.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T05:47:48.38Z"
+              "WhenOpened": "2024-11-11T02:33:24.489Z"
             },
             {
               "$type": "Document",
               "DocumentIndex": 40,
-              "Title": "LogAOP.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\AOP\\LogAOP.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\AOP\\LogAOP.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\AOP\\LogAOP.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\AOP\\LogAOP.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+              "Title": "VueDictionaryDTO.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\System\\VueDictionaryDTO.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\System\\VueDictionaryDTO.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\System\\VueDictionaryDTO.cs",
+              "RelativeToolTip": "WIDESEAWCS_DTO\\System\\VueDictionaryDTO.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T05:36:05.934Z"
+              "WhenOpened": "2024-11-15T01:47:05.446Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 47,
-              "Title": "DataLengthAttribute.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\DeviceBase\\DataLengthAttribute.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\DeviceBase\\DataLengthAttribute.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\DeviceBase\\DataLengthAttribute.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\DeviceBase\\DataLengthAttribute.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAACIAAAAFAAAA",
+              "DocumentIndex": 38,
+              "Title": "QuartzLogger.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\LogHelper\\QuartzLogger.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\LogHelper\\QuartzLogger.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\LogHelper\\QuartzLogger.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\LogHelper\\QuartzLogger.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAOAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T03:06:58.382Z"
+              "WhenOpened": "2024-11-14T03:42:39.372Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 46,
-              "Title": "ModbusCustomModel.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\CustomModel\\ModbusCustomModel.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Communicator\\CustomModel\\ModbusCustomModel.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\CustomModel\\ModbusCustomModel.cs",
-              "RelativeToolTip": "WIDESEAWCS_Communicator\\CustomModel\\ModbusCustomModel.cs",
-              "ViewState": "AQIAABAAAAAAAAAAAAAYwBoAAAAIAAAA",
+              "DocumentIndex": 39,
+              "Title": "Storage.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Storage.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Storage.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Storage.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Storage.cs",
+              "ViewState": "AgIAAAkAAAAAAAAAAAAAABwAAAAuAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T03:04:51.117Z"
+              "WhenOpened": "2024-11-14T03:42:32.674Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 45,
-              "Title": "MelsecCustomModel.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\CustomModel\\MelsecCustomModel.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Communicator\\CustomModel\\MelsecCustomModel.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\CustomModel\\MelsecCustomModel.cs",
-              "RelativeToolTip": "WIDESEAWCS_Communicator\\CustomModel\\MelsecCustomModel.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAFEAAAAIAAAA",
+              "DocumentIndex": 42,
+              "Title": "ActionDTO.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\System\\ActionDTO.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\System\\ActionDTO.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\System\\ActionDTO.cs",
+              "RelativeToolTip": "WIDESEAWCS_DTO\\System\\ActionDTO.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T03:03:23.075Z"
+              "WhenOpened": "2024-11-15T01:47:02.687Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 41,
+              "Title": "UserPermissions.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\System\\UserPermissions.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\System\\UserPermissions.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\System\\UserPermissions.cs",
+              "RelativeToolTip": "WIDESEAWCS_DTO\\System\\UserPermissions.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-15T01:47:04.359Z"
             },
             {
               "$type": "Document",
               "DocumentIndex": 44,
-              "Title": "SiemensCustomModel.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\CustomModel\\SiemensCustomModel.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Communicator\\CustomModel\\SiemensCustomModel.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\CustomModel\\SiemensCustomModel.cs",
-              "RelativeToolTip": "WIDESEAWCS_Communicator\\CustomModel\\SiemensCustomModel.cs",
-              "ViewState": "AQIAAAsAAAAA3JKSmhIewD8AAAAIAAAA",
+              "Title": "JobFactory.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzNet\\JobFactory.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzNet\\JobFactory.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzNet\\JobFactory.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\QuartzNet\\JobFactory.cs",
+              "ViewState": "AgIAABgAAAAAAAAAAAAAABwAAAARAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T03:02:08.422Z"
+              "WhenOpened": "2024-11-11T02:29:37.04Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 48,
+              "DocumentIndex": 43,
+              "Title": "DeviceInfoDTO.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\DTO\\DeviceInfoDTO.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\DTO\\DeviceInfoDTO.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\DTO\\DeviceInfoDTO.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\DTO\\DeviceInfoDTO.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T07:49:25.651Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 46,
+              "Title": "CommonConveyorLineJob.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
+              "ViewState": "AgIAADMAAAAAAAAAAAAAwDkAAAAMAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-14T06:24:51.147Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 45,
               "Title": "TaskExecuteDetailService.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskExecuteDetailService.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskExecuteDetailService.cs",
               "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskExecuteDetailService.cs",
               "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskExecuteDetailService.cs",
-              "ViewState": "AQIAADoAAAAAAAAAAAAIwFIAAABVAAAA",
+              "ViewState": "AgIAAEsAAAAAAAAAAAAIwGQAAAAQAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-10-29T02:59:00.255Z"
+              "WhenOpened": "2024-11-14T09:07:18.231Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 47,
+              "Title": "ShuttleCarJob.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ShuttleCarJob\\ShuttleCarJob.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ShuttleCarJob\\ShuttleCarJob.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ShuttleCarJob\\ShuttleCarJob.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\ShuttleCarJob\\ShuttleCarJob.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-14T07:18:53.361Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 50,
+              "Title": "Dt_DeviceProtocol.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocol.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocol.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocol.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocol.cs",
+              "ViewState": "AgIAADsAAAAAAAAAAAAQwGAAAAAoAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T02:37:11.706Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 49,
+              "Title": "CommonStackerCrane.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\CommonStackerCrane.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\CommonStackerCrane.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\CommonStackerCrane.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\StackerCrane\\Common\\CommonStackerCrane.cs",
+              "ViewState": "AgIAACEAAAAAAAAAAAAAAFMAAAAgAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T02:16:12.855Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 48,
+              "Title": "DeviceProDTO.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\DTO\\DeviceProDTO.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\DTO\\DeviceProDTO.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\DTO\\DeviceProDTO.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\DTO\\DeviceProDTO.cs",
+              "ViewState": "AgIAAB0AAAAAAAAAAADwvzoAAAAmAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T02:25:37.029Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 51,
+              "Title": "CommonConveyorLine.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ConveyorLine\\CommonConveyorLine.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\ConveyorLine\\CommonConveyorLine.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ConveyorLine\\CommonConveyorLine.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\ConveyorLine\\CommonConveyorLine.cs",
+              "ViewState": "AgIAALEAAAAAAAAAAAAewNAAAAA+AAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T02:20:49.51Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 52,
+              "Title": "IConveyorLine.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ConveyorLine\\IConveyorLine.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\ConveyorLine\\IConveyorLine.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ConveyorLine\\IConveyorLine.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\ConveyorLine\\IConveyorLine.cs",
+              "ViewState": "AgIAACQAAAAAAAAAAAArwEEAAAAVAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T03:29:28.34Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 53,
+              "Title": "DeviceProtocolDetailService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DeviceProtocolDetailService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Service\\DeviceProtocolDetailService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DeviceProtocolDetailService.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Service\\DeviceProtocolDetailService.cs",
+              "ViewState": "AgIAABYAAAAAAAAAAAAWwDMAAAAJAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-13T01:06:33.598Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 55,
+              "Title": "Dt_Router.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_Router.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Models\\Dt_Router.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_Router.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Models\\Dt_Router.cs",
+              "ViewState": "AgIAAAMAAAAAAAAAAABIwBQAAABUAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T02:37:46.049Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 56,
+              "Title": "Dt_DeviceProtocolDetail.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocolDetail.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocolDetail.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocolDetail.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocolDetail.cs",
+              "ViewState": "AgIAACAAAAAAAAAAAAAwwCcAAABSAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T02:37:24.357Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 54,
+              "Title": "DeviceInfoService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
+              "ViewState": "AgIAACAAAAAAAAAAAAD4vzgAAAC2AAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-13T01:02:36.16Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 57,
+              "Title": "BaseEntity.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\DB\\Models\\BaseEntity.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\DB\\Models\\BaseEntity.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\DB\\Models\\BaseEntity.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\DB\\Models\\BaseEntity.cs",
+              "ViewState": "AgIAACYAAAAAAAAAAADwvz4AAAAzAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-13T08:05:29.472Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 58,
+              "Title": "IStackerCrane.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\IStackerCrane.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\IStackerCrane.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\IStackerCrane.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\StackerCrane\\IStackerCrane.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAAAGAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T03:26:43.303Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 59,
+              "Title": "SpeStackerCrane.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Spec\\SpeStackerCrane.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\Spec\\SpeStackerCrane.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Spec\\SpeStackerCrane.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\StackerCrane\\Spec\\SpeStackerCrane.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T02:18:03.553Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 60,
+              "Title": "WIDESEAWCS_Core.csproj",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj",
+              "RelativeToolTip": "WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAABoAAABSAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|",
+              "WhenOpened": "2024-11-13T02:53:57.289Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 62,
+              "Title": "RouterService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\RouterService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Service\\RouterService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\RouterService.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Service\\RouterService.cs",
+              "ViewState": "AgIAAAoAAAAAAAAAAABUwMkAAAApAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-13T01:06:40.549Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 61,
+              "Title": "WIDESEAWCS_Communicator.csproj",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj",
+              "RelativeToolTip": "WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|",
+              "WhenOpened": "2024-11-13T02:53:56.497Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 63,
+              "Title": "DeviceProtocolService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DeviceProtocolService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Service\\DeviceProtocolService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DeviceProtocolService.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Service\\DeviceProtocolService.cs",
+              "ViewState": "AgIAABIAAAAAAAAAAABIwC8AAAAhAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-13T01:06:34.541Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 64,
+              "Title": "InitializationHostServiceSetup.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Extensions\\InitializationHostServiceSetup.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Extensions\\InitializationHostServiceSetup.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Extensions\\InitializationHostServiceSetup.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\Extensions\\InitializationHostServiceSetup.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAABUAAAA2AAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T09:31:27.008Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 66,
+              "Title": "DBSeed.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Seed\\DBSeed.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Seed\\DBSeed.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Seed\\DBSeed.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\Seed\\DBSeed.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T09:31:08.019Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 65,
+              "Title": "SeedDataHostedService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\HostedService\\SeedDataHostedService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\HostedService\\SeedDataHostedService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\HostedService\\SeedDataHostedService.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\HostedService\\SeedDataHostedService.cs",
+              "ViewState": "AgIAAAUAAAAAAAAAAAAnwA4AAAA+AAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T09:31:17.763Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 67,
+              "Title": "IDevice.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\DeviceBase\\IDevice.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\DeviceBase\\IDevice.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\DeviceBase\\IDevice.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\DeviceBase\\IDevice.cs",
+              "ViewState": "AgIAABUAAAAAAAAAAABIwD0AAAATAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T02:11:35.273Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 70,
+              "Title": "ShuttleCar.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ShuttleCar\\ShuttleCar.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\ShuttleCar\\ShuttleCar.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ShuttleCar\\ShuttleCar.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\ShuttleCar\\ShuttleCar.cs",
+              "ViewState": "AgIAAGwAAAAAAAAAAAAmwGwAAAAIAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T03:30:13.299Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 71,
+              "Title": "IShuttleCar.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ShuttleCar\\IShuttleCar.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\ShuttleCar\\IShuttleCar.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ShuttleCar\\IShuttleCar.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\ShuttleCar\\IShuttleCar.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAABIwB0AAABpAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T03:29:59.091Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 69,
+              "Title": "IOtherDevice.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\OtherDevices\\IOtherDevice.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\OtherDevices\\IOtherDevice.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\OtherDevices\\IOtherDevice.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\OtherDevices\\IOtherDevice.cs",
+              "ViewState": "AgIAAA4AAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T03:36:30.442Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 68,
+              "Title": "OtherDevice.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\OtherDevices\\OtherDevice.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\OtherDevices\\OtherDevice.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\OtherDevices\\OtherDevice.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\OtherDevices\\OtherDevice.cs",
+              "ViewState": "AgIAAMAAAAAAAAAAAAAQwIEAAAAIAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T03:36:32.34Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 72,
+              "Title": "StackerCraneTaskCompletedEventArgs.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\StackerCraneTaskCompletedEventArgs.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\StackerCraneTaskCompletedEventArgs.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\StackerCraneTaskCompletedEventArgs.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\StackerCrane\\StackerCraneTaskCompletedEventArgs.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAuwB8AAAAIAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T02:15:38.217Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 73,
+              "Title": "QuartzJobCreateDataTabel.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Seed\\QuartzJobCreateDataTabel.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Seed\\QuartzJobCreateDataTabel.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Seed\\QuartzJobCreateDataTabel.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Seed\\QuartzJobCreateDataTabel.cs",
+              "ViewState": "AgIAAEwAAAAAAAAAAAAAwCQAAAAbAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-11-11T02:35:29.846Z"
             }
           ]
         }
diff --git a/WIDESEAWCS_Server/CodeMap1.dgml b/WIDESEAWCS_Server/CodeMap1.dgml
new file mode 100644
index 0000000..53d8f9a
--- /dev/null
+++ b/WIDESEAWCS_Server/CodeMap1.dgml
@@ -0,0 +1,713 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<DirectedGraph DataVirtualized="True" Layout="Sugiyama" ZoomLevel="-1" xmlns="http://schemas.microsoft.com/vs/2009/dgml">
+  <Nodes>
+    <Node Id="(@15 Namespace=WIDESEAWCS_Common)" Category="CodeSchema_Namespace" Bounds="1101.97944285986,890.250611401785,196.15,25" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" ErrorMessage="妫�娴嬪埌鏈紩鐢ㄧ殑鑺傜偣: WIDESEAWCS_Common ((Assembly=file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_Common/bin/Debug/net6.0/WIDESEAWCS_Common.dll Namespace=WIDESEAWCS_Common))" Group="Collapsed" IsUnreferenced="True" Label="WIDESEAWCS_Common" />
+    <Node Id="@10" Category="CodeSchema_Assembly" Bounds="729.727848829485,-199.741776064444,251.886666666667,25" CodeSchemaProperty_StrongName="WIDESEAWCS_TaskInfoService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" FilePath="$(83f18a31-5983-4587-a0b2-414bf70e50b5.OutputPath)" Group="Collapsed" Label="WIDESEAWCS_TaskInfoService.dll" />
+    <Node Id="@12" Category="CodeSchema_Assembly" Bounds="861.993316193196,685.257171401785,189.986666666667,25" CodeSchemaProperty_StrongName="WIDESEAWCS_Core, Version=1.0.6.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" FilePath="$(bffdd936-2e61-4d3a-abfe-7cf77fe0b184.OutputPath)" Group="Collapsed" Label="WIDESEAWCS_Core.dll" />
+    <Node Id="@14" Category="CodeSchema_Assembly" Bounds="979.364335866781,630.257171398585,199.97,25" CodeSchemaProperty_StrongName="WIDESEAWCS_Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" FilePath="$(7f200fe8-caf6-4131-bd25-8d438fe0abac.OutputPath)" Group="Collapsed" Label="WIDESEAWCS_Model.dll" />
+    <Node Id="@16" Category="CodeSchema_Assembly" Bounds="1081.98008285986,685.257171401785,297.26406944,249.9928" CodeSchemaProperty_StrongName="WIDESEAWCS_Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="Fetched" DelayedCrossGroupLinksState="Fetched" FetchedChildrenCount="4" FilePath="$(9fbc654c-51de-422d-9e1e-6a38268de1e2.OutputPath)" Group="Expanded" Label="WIDESEAWCS_Common.dll" UseManualLocation="True" />
+    <Node Id="@18" Category="CodeSchema_Assembly" Bounds="985.312235212648,575.257171395385,188.736666666667,25" CodeSchemaProperty_StrongName="WIDESEAWCS_DTO, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" FilePath="$(c2d3d138-9109-481b-8beb-a27597890b2c.OutputPath)" Group="Collapsed" Label="WIDESEAWCS_DTO.dll" />
+    <Node Id="@2" Category="CodeSchema_Assembly" Bounds="888.714151841299,120.257171360185,221.743333333334,25" CodeSchemaProperty_StrongName="WIDESEAWCS_QuartzJob, Version=2.1.0.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" FilePath="$(6236bfff-173d-44a8-9fc3-7c001ea30347.OutputPath)" Group="Collapsed" Label="WIDESEAWCS_QuartzJob.dll" />
+    <Node Id="@20" Category="CodeSchema_Assembly" Bounds="970.118051356488,-389.742828675015,198.95,25" CodeSchemaProperty_StrongName="WIDESEAWCS_Server, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" ErrorMessage="妫�娴嬪埌鏈紩鐢ㄧ殑鑺傜偣: WIDESEAWCS_Server.dll ((Assembly=file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_Server/bin/Debug/net6.0/WIDESEAWCS_Server.dll))" FilePath="$(487fa45b-ea1a-4aca-bb5b-0f6708f462c0.OutputPath)" Group="Collapsed" IsUnreferenced="True" Label="WIDESEAWCS_Server.dll" />
+    <Node Id="@22" Category="CodeSchema_Assembly" Bounds="630.727617782423,175.257171365069,248.393333333333,25" CodeSchemaProperty_StrongName="WIDESEAWCS_Communicator, Version=2.1.0.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" FilePath="$(861c4d0b-a478-48db-a0fa-ae70f5ba210a.OutputPath)" Group="Collapsed" Label="WIDESEAWCS_Communicator.dll" />
+    <Node Id="@24" Category="CodeSchema_Assembly" Bounds="1055.04118216282,-144.741776051644,254.01,25" CodeSchemaProperty_StrongName="WIDESEAWCS_ISystemServices, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" FilePath="$(9e4bff47-52bf-4fd8-9cc7-3763bf19d9e0.OutputPath)" Group="Collapsed" Label="WIDESEAWCS_ISystemServices.dll" />
+    <Node Id="@26" Category="CodeSchema_Assembly" Bounds="1056.80451549615,-199.741776054844,250.483333333334,25" CodeSchemaProperty_StrongName="WIDESEAWCS_SystemServices, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" FilePath="$(a14242dd-da06-4dc3-8598-1761aa7c76d1.OutputPath)" Group="Collapsed" Label="WIDESEAWCS_SystemServices.dll" />
+    <Node Id="@28" Category="CodeSchema_Assembly" Bounds="974.322114929553,-334.742828671815,194.09,25" CodeSchemaProperty_StrongName="WIDESEAWCS_Tasks, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" FilePath="$(294e4915-0241-4c8c-ba99-7588b945863a.OutputPath)" Group="Collapsed" Label="WIDESEAWCS_Tasks.dll" />
+    <Node Id="@30" Category="CodeSchema_Assembly" Bounds="949.121051115757,310.257224002758,269.533333333333,25" CodeSchemaProperty_StrongName="WIDESEAWCS_ISystemRepository, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" FilePath="$(f302e6d6-5a95-4d22-8dc2-21be2cb30275.OutputPath)" Group="Collapsed" Label="WIDESEAWCS_ISystemRepository.dll" />
+    <Node Id="@32" Category="CodeSchema_Assembly" Bounds="950.88438444909,255.257223999558,266.006666666667,25" CodeSchemaProperty_StrongName="WIDESEAWCS_SystemRepository, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" FilePath="$(5777bdec-4726-4425-85f2-a090524f692d.OutputPath)" Group="Collapsed" Label="WIDESEAWCS_SystemRepository.dll" />
+    <Node Id="@34" Category="CodeSchema_Assembly" Bounds="949.121051115756,480.257224015558,279.816666666667,25" CodeSchemaProperty_StrongName="WIDESEAWCS_IBasicInfoRepository, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" FilePath="$(266d07b7-3648-4f3d-818a-89eda7d84c58.OutputPath)" Group="Collapsed" Label="WIDESEAWCS_IBasicInfoRepository.dll" />
+    <Node Id="@36" Category="CodeSchema_Assembly" Bounds="950.88438444909,425.257224012358,276.29,25" CodeSchemaProperty_StrongName="WIDESEAWCS_BasicInfoRepository, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" FilePath="$(206fdf79-9bf3-433a-b7ff-627287bbd760.OutputPath)" Group="Collapsed" Label="WIDESEAWCS_BasicInfoRepository.dll" />
+    <Node Id="@38" Category="CodeSchema_Assembly" Bounds="1288.65438444909,310.257224002758,276.49,25" CodeSchemaProperty_StrongName="WIDESEAWCS_ITaskInfoRepository, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" FilePath="$(09d05f35-cea2-48d9-86d0-fb95982ba511.OutputPath)" Group="Collapsed" Label="WIDESEAWCS_ITaskInfoRepository.dll" />
+    <Node Id="@4" Category="CodeSchema_Assembly" Bounds="726.301182162819,25.258223948356,258.74,25" CodeSchemaProperty_StrongName="WIDESEAWCS_IBasicInfoService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" FilePath="$(8c2cc25b-de5d-433e-a550-63864c7a716d.OutputPath)" Group="Collapsed" Label="WIDESEAWCS_IBasicInfoService.dll" />
+    <Node Id="@40" Category="CodeSchema_Assembly" Bounds="1290.41771778242,255.257223999558,272.963333333333,25" CodeSchemaProperty_StrongName="WIDESEAWCS_TaskInfoRepository, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" FilePath="$(35054aa5-cf40-4f38-9414-c76742c29382.OutputPath)" Group="Collapsed" Label="WIDESEAWCS_TaskInfoRepository.dll" />
+    <Node Id="@41" Category="CodeSchema_Namespace" Bounds="1134.95838749986,835.252371401785,191.306666666666,25" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" Group="Collapsed" Label="Microsoft鈥�.CodeAnalysis" />
+    <Node Id="@42" Category="CodeSchema_Namespace" Bounds="1105.10934269986,780.254131401785,251.006666666667,25" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" Group="Collapsed" Label="System鈥�.Runtime鈥�.CompilerServices" />
+    <Node Id="@43" Category="CodeSchema_Namespace" Bounds="1101.97944285986,725.255891401785,257.266666666666,25" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" Group="Collapsed" Label="WIDESEAWCS_Common鈥�.TaskEnum" />
+    <Node Id="@6" Category="CodeSchema_Assembly" Bounds="728.064515496152,-29.741776054844,255.213333333333,25" CodeSchemaProperty_StrongName="WIDESEAWCS_BasicInfoService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" FilePath="$(ffab2c76-1c9e-4006-95c8-a0b2aa53139d.OutputPath)" Group="Collapsed" Label="WIDESEAWCS_BasicInfoService.dll" />
+    <Node Id="@8" Category="CodeSchema_Assembly" Bounds="727.964515496151,-144.741776064444,255.413333333335,25" CodeSchemaProperty_StrongName="WIDESEAWCS_ITaskInfoService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" DelayedChildNodesState="NotFetched" DelayedCrossGroupLinksState="Fetched" FilePath="$(7279a2ae-8d1f-4e66-a73a-01af7927a336.OutputPath)" Group="Collapsed" Label="WIDESEAWCS_ITaskInfoService.dll" />
+    <Node Id="BasicInfo{5CC8AEFF-2F75-4053-9569-73419839875A}" Category="CodeMap_SolutionFolder" Bounds="929.121051115756,385.257671363386,319.816666666667,140.0003" ErrorMessage="妫�娴嬪埌鏈紩鐢ㄧ殑鑺傜偣: BasicInfo (BasicInfo{5CC8AEFF-2F75-4053-9569-73419839875A})" Group="Expanded" IsUnreferenced="True" Label="BasicInfo" />
+    <Node Id="BasicInfo{9CB2F821-BB23-48E5-88E8-C326477733C0}" Category="CodeMap_SolutionFolder" Bounds="706.301182162819,-69.742428668615,298.74,140.0003" Group="Expanded" Label="BasicInfo" />
+    <Node Id="Repository{4FF30CF7-DA79-4EDD-9A6E-0B0BEAD72A1A}" Category="CodeMap_SolutionFolder" Bounds="909.121051115756,175.257171363386,696.023333333333,370.0009" Group="Expanded" Label="Repository" />
+    <Node Id="Service{A12315CA-9D81-412C-A09B-B23D95CFFE16}" Category="CodeMap_SolutionFolder" Bounds="686.301182162819,-279.742828668615,662.75,370.0008" Group="Expanded" Label="Service" />
+    <Node Id="System{6295C9FB-DAC4-4C07-97C5-C0332ABDD13D}" Category="CodeMap_SolutionFolder" Bounds="1035.04118216282,-239.742428668615,294.01,140.0003" ErrorMessage="妫�娴嬪埌鏈紩鐢ㄧ殑鑺傜偣: System (System{6295C9FB-DAC4-4C07-97C5-C0332ABDD13D})" Group="Expanded" IsUnreferenced="True" Label="System" />
+    <Node Id="System{93EFF637-042E-4DD0-A74B-7F0CF998CF96}" Category="CodeMap_SolutionFolder" Bounds="929.121051115757,215.257271363386,309.533333333334,140.0003" ErrorMessage="妫�娴嬪埌鏈紩鐢ㄧ殑鑺傜偣: System (System{93EFF637-042E-4DD0-A74B-7F0CF998CF96})" Group="Expanded" IsUnreferenced="True" Label="System" />
+    <Node Id="TaskInfo{684035E2-174F-47CE-AA5C-36624C7E26F3}" Category="CodeMap_SolutionFolder" Bounds="1268.65438444909,215.257271363386,316.49,140.0003" ErrorMessage="妫�娴嬪埌鏈紩鐢ㄧ殑鑺傜偣: TaskInfo (TaskInfo{684035E2-174F-47CE-AA5C-36624C7E26F3})" Group="Expanded" IsUnreferenced="True" Label="TaskInfo" />
+    <Node Id="TaskInfo{D9CF90D0-AFB3-42AA-A2F1-BEE741E0AC0D}" Category="CodeMap_SolutionFolder" Bounds="707.96451549615,-239.742728668615,295.413333333335,140.0002" ErrorMessage="妫�娴嬪埌鏈紩鐢ㄧ殑鑺傜偣: TaskInfo (TaskInfo{D9CF90D0-AFB3-42AA-A2F1-BEE741E0AC0D})" Group="Expanded" IsUnreferenced="True" Label="TaskInfo" />
+  </Nodes>
+  <Links>
+    <Link Source="@10" Target="@12" Category="InheritsFrom" Bounds="923.480263353655,-163.494155999569,64.2071102137636,851.02750599813" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="173">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="CodeSchema_Calls" />
+      <Category Ref="CodeSchema_ReturnTypeLink" />
+      <Category Ref="Implements" />
+    </Link>
+    <Link Source="@10" Target="@14" Category="CodeSchema_ReturnTypeLink" Bounds="924.889343348782,-163.494155999569,149.815255150687,796.157130339287" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="235">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="CodeSchema_Calls" />
+      <Category Ref="CodeSchema_FunctionPointer" />
+      <Category Ref="References" />
+    </Link>
+    <Link Source="@10" Target="@16" Category="CodeMap_ExternalReference" Bounds="926.77185337266,-163.494155999569,288.458371555104,851.477864853163" />
+    <Link Source="@10" Target="@18" Category="References" Bounds="1247.78857421875,135,50.21142578125,242.038879394531" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="35">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="CodeSchema_Calls" />
+    </Link>
+    <Link Source="@10" Target="@2" Category="References" Bounds="865.923400878906,134.984176635742,310.735778808594,80.7203063964844" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="16">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="CodeSchema_Calls" />
+    </Link>
+    <Link Source="@10" Target="@22" Category="CodeMap_ExternalReference" Bounds="207.038005802778,214.999316666667,696.32803049809,688.671997833503" />
+    <Link Source="@10" Target="@34" Category="CodeMap_ExternalReference" Bounds="596.702099059381,214.999316666667,312.700750119114,592.043332872254" />
+    <Link Source="@10" Target="@36" Category="CodeMap_ExternalReference" Bounds="595.939635310253,214.999316666667,312.787495138316,537.223656126113" />
+    <Link Source="@10" Target="@38" Category="References" Bounds="1312.54541015625,135,178.966186523438,191.64697265625" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="30">
+      <Category Ref="CodeMap_ExternalReference" />
+    </Link>
+    <Link Source="@10" Target="@4" Category="CodeMap_ExternalReference" Bounds="618.946429408088,214.999316666667,279.15046223956,194.849210722821" />
+    <Link Source="@10" Target="@40" Category="CodeMap_ExternalReference" Bounds="916.247551476955,214.999316666667,7.10195951722505,366.002693860792" />
+    <Link Source="@10" Target="@43" Category="References" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="33">
+      <Category Ref="CodeSchema_Calls" />
+    </Link>
+    <Link Source="@10" Target="@6" Category="CodeMap_ProjectReference" Bounds="1158.28833007813,135,96.0753173828125,27.5215606689453" />
+    <Link Source="@10" Target="@8" Category="References" Bounds="855.669042382377,-174.742135999804,1.13686837721616E-13,21" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="12">
+      <Category Ref="CodeMap_ProjectReference" />
+      <Category Ref="CodeSchema_Calls" />
+      <Category Ref="Implements" />
+    </Link>
+    <Link Source="@14" Target="@12" Category="CodeSchema_Calls" Bounds="993.004447847236,655.256811368741,58.5349670448345,26.3102710642444" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="27">
+      <Category Ref="CodeMap_ProjectReference" />
+      <Category Ref="CodeSchema_AttributeUse" />
+      <Category Ref="InheritsFrom" />
+    </Link>
+    <Link Source="@14" Target="@16" Category="CodeMap_ProjectReference" Bounds="1090.63784011659,655.256811368741,21.0606517952251,23.3209476169683" />
+    <Link Source="@16" Target="(@15 Namespace=WIDESEAWCS_Common)" Category="Contains" FetchingParent="@16" />
+    <Link Source="@16" Target="@41" Category="Contains" FetchingParent="@16" />
+    <Link Source="@16" Target="@42" Category="Contains" FetchingParent="@16" />
+    <Link Source="@16" Target="@43" Category="Contains" FetchingParent="@16" />
+    <Link Source="@18" Target="@12" Category="CodeMap_ExternalReference" Bounds="960.359313964844,600.2568359375,76.6642456054688,76.10986328125" />
+    <Link Source="@18" Target="@14" Category="CodeSchema_Calls" Bounds="1079.47885230165,600.256811368741,0.126486731981913,21.0001632470344" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="2">
+      <Category Ref="CodeMap_ProjectReference" />
+      <Category Ref="InheritsFrom" />
+    </Link>
+    <Link Source="@18" Target="@16" Category="CodeMap_ExternalReference" Bounds="969.230163574219,600.2568359375,105.682678222656,85.225830078125" />
+    <Link Source="@2" Target="@12" Category="References" Bounds="898.9873046875,145.256805419922,61.7473754882813,531.665130615234" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="293">
+      <Category Ref="CodeMap_ProjectReference" />
+      <Category Ref="CodeSchema_Calls" />
+      <Category Ref="CodeSchema_FunctionPointer" />
+      <Category Ref="CodeSchema_ReturnTypeLink" />
+      <Category Ref="Implements" />
+      <Category Ref="InheritsFrom" />
+    </Link>
+    <Link Source="@2" Target="@22" Category="References" Bounds="819.310746088585,145.256811368741,124.67043457957,28.0260525224872" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="67">
+      <Category Ref="CodeMap_ProjectReference" />
+      <Category Ref="CodeSchema_Calls" />
+      <Category Ref="CodeSchema_ReturnTypeLink" />
+    </Link>
+    <Link Source="@20" Target="@10" Category="CodeMap_ProjectReference" Bounds="832.659118652344,25,396.873107910156,83.1543655395508" />
+    <Link Source="@20" Target="@12" Category="References" Bounds="624.819519042969,-364.743194580078,388.484680175781,1042.5930480957" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="162">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="CodeSchema_Calls" />
+      <Category Ref="CodeSchema_FieldRead" />
+      <Category Ref="CodeSchema_FunctionPointer" />
+      <Category Ref="CodeSchema_ReturnTypeLink" />
+      <Category Ref="InheritsFrom" />
+    </Link>
+    <Link Source="@20" Target="@14" Category="CodeSchema_ReturnTypeLink" Bounds="626.313781738281,-364.743194580078,415.034729003906,991.509307861328" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="74">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="CodeSchema_Calls" />
+      <Category Ref="CodeSchema_FunctionPointer" />
+      <Category Ref="References" />
+    </Link>
+    <Link Source="@20" Target="@16" Category="CodeMap_ExternalReference" Bounds="1111.02722167969,-364.743194580078,504.2509765625,1071.54922485352" />
+    <Link Source="@20" Target="@18" Category="References" Bounds="626.313781738281,-364.743194580078,386.990417480469,938.413238525391" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="52">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="CodeSchema_Calls" />
+      <Category Ref="CodeSchema_FunctionPointer" />
+      <Category Ref="CodeSchema_ReturnTypeLink" />
+    </Link>
+    <Link Source="@20" Target="@2" Category="References" Bounds="1111.02722167969,-364.743194580078,248.15771484375,486.770782470703" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="68">
+      <Category Ref="CodeMap_ProjectReference" />
+      <Category Ref="CodeSchema_Calls" />
+      <Category Ref="CodeSchema_FunctionPointer" />
+    </Link>
+    <Link Source="@20" Target="@22" Category="CodeMap_ExternalReference" Bounds="676.167419433594,-364.743194580078,337.136779785156,533.315277099609" />
+    <Link Source="@20" Target="@24" Category="References" Bounds="319,24.2619476318359,356.910461425781,186.738052368164" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="39">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="CodeSchema_Calls" />
+    </Link>
+    <Link Source="@20" Target="@26" Category="CodeMap_ProjectReference" Bounds="637.823608398438,25,127.903686523438,134.027465820313" />
+    <Link Source="@20" Target="@28" Category="References" Bounds="1069.9968887659,-364.743188631259,0.677305155841623,21.0046753143712" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="16">
+      <Category Ref="CodeMap_ProjectReference" />
+    </Link>
+    <Link Source="@20" Target="@30" Category="CodeMap_ExternalReference" Bounds="586.447081337002,25,164.195459591589,611.308492893589" />
+    <Link Source="@20" Target="@32" Category="CodeMap_ExternalReference" Bounds="586.961107050999,25,163.368450003759,556.36490077959" />
+    <Link Source="@20" Target="@34" Category="CodeMap_ExternalReference" Bounds="590.293018748615,25,161.128711851287,781.18636402558" />
+    <Link Source="@20" Target="@36" Category="CodeMap_ExternalReference" Bounds="588.890329599179,25,162.315813386256,726.217432299183" />
+    <Link Source="@20" Target="@38" Category="CodeMap_ExternalReference" Bounds="757.290049554232,25,160.895752866277,611.296844523733" />
+    <Link Source="@20" Target="@4" Category="CodeMap_ExternalReference" Bounds="601.731511834285,25,147.438917759078,381.60463909079" />
+    <Link Source="@20" Target="@40" Category="CodeMap_ExternalReference" Bounds="757.596749481971,25,160.084483970447,556.351244272433" />
+    <Link Source="@20" Target="@6" Category="CodeMap_ExternalReference" Bounds="601.218925132393,25,147.152424604318,326.793320158955" />
+    <Link Source="@20" Target="@8" Category="References" Bounds="872.474975585938,16.3932132720947,951.525024414063,201.588415145874" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="13">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="CodeSchema_Calls" />
+    </Link>
+    <Link Source="@24" Target="@12" Category="References" Bounds="995.903886484191,-108.493755999569,249.098593931777,796.411955561377" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="26">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="CodeSchema_ReturnTypeLink" />
+      <Category Ref="Implements" />
+    </Link>
+    <Link Source="@24" Target="@14" Category="References" Bounds="1083.39652937031,-108.493755999569,162.770639793168,741.210964353485" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="14">
+      <Category Ref="CodeMap_ExternalReference" />
+    </Link>
+    <Link Source="@24" Target="@16" Category="CodeMap_ExternalReference" Bounds="1223.04048976118,-108.493755999569,25.4716992505284,796.006204283707" />
+    <Link Source="@24" Target="@18" Category="References" Bounds="404.520111083984,245,729.132476806641,145.440704345703" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="2">
+      <Category Ref="CodeMap_ExternalReference" />
+    </Link>
+    <Link Source="@24" Target="@30" Category="CodeMap_ExternalReference" Bounds="581.321351753771,269.999416666667,9.64265948620016,366.004121822538" />
+    <Link Source="@24" Target="@32" Category="CodeMap_ProjectReference" Bounds="342.181823730469,245,47.714599609375,25.7284851074219" />
+    <Link Source="@26" Target="@12" Category="References" Bounds="995.507574845661,-163.493855999569,249.737881298499,851.365590055536" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="289">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="CodeSchema_Calls" />
+      <Category Ref="CodeSchema_FieldWrite" />
+      <Category Ref="CodeSchema_FunctionPointer" />
+      <Category Ref="CodeSchema_ReturnTypeLink" />
+      <Category Ref="Implements" />
+      <Category Ref="InheritsFrom" />
+    </Link>
+    <Link Source="@26" Target="@14" Category="CodeSchema_ReturnTypeLink" Bounds="1083.09204887295,-163.493855999569,163.257018656659,796.18503841765" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="313">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="CodeSchema_Calls" />
+      <Category Ref="CodeSchema_FunctionPointer" />
+      <Category Ref="References" />
+    </Link>
+    <Link Source="@26" Target="@16" Category="CodeMap_ExternalReference" Bounds="1222.99775932762,-163.493855999569,25.5392879513399,851.005750156986" />
+    <Link Source="@26" Target="@18" Category="References" Bounds="631.545471191406,190,503.158874511719,195.970764160156" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="63">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="CodeSchema_Calls" />
+      <Category Ref="CodeSchema_FunctionPointer" />
+      <Category Ref="CodeSchema_ReturnTypeLink" />
+    </Link>
+    <Link Source="@26" Target="@24" Category="References" Bounds="1182.04404238238,-174.742135999804,0,21" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="16">
+      <Category Ref="CodeMap_ProjectReference" />
+      <Category Ref="CodeSchema_Calls" />
+      <Category Ref="CodeSchema_FunctionPointer" />
+      <Category Ref="Implements" />
+    </Link>
+    <Link Source="@26" Target="@30" Category="References" Bounds="549.121154785156,190,67.8788452148438,135.595245361328" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="56">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="CodeSchema_Calls" />
+    </Link>
+    <Link Source="@26" Target="@32" Category="CodeMap_ExternalReference" Bounds="581.321351753771,214.999316666667,9.64265948620084,366.004121822538" />
+    <Link Source="@28" Target="@10" Category="CodeMap_ProjectReference" Bounds="1371.60961914063,80,146.61767578125,28.2946243286133" />
+    <Link Source="@28" Target="@12" Category="CodeSchema_Calls" Bounds="624.819519042969,-314.296905517578,349.522766113281,992.146759033203" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="5">
+      <Category Ref="CodeMap_ExternalReference" />
+    </Link>
+    <Link Source="@28" Target="@14" Category="CodeSchema_ReturnTypeLink" Bounds="626.313781738281,-314.296905517578,415.034729003906,941.063018798828" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="45">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="CodeSchema_Calls" />
+      <Category Ref="References" />
+    </Link>
+    <Link Source="@28" Target="@16" Category="CodeMap_ExternalReference" Bounds="1167.18981933594,-311.467468261719,448.08837890625,1018.27349853516" />
+    <Link Source="@28" Target="@18" Category="CodeMap_ExternalReference" Bounds="626.313781738281,-314.296905517578,374.720458984375,887.966949462891" />
+    <Link Source="@28" Target="@2" Category="CodeSchema_FunctionPointer" Bounds="1118.79528808594,-311.467468261719,240.3896484375,433.495056152344" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="108">
+      <Category Ref="CodeMap_ProjectReference" />
+      <Category Ref="CodeSchema_AttributeUse" />
+      <Category Ref="CodeSchema_Calls" />
+      <Category Ref="CodeSchema_FieldRead" />
+      <Category Ref="InheritsFrom" />
+      <Category Ref="References" />
+    </Link>
+    <Link Source="@28" Target="@22" Category="CodeSchema_Calls" Bounds="676.167419433594,-314.296905517578,298.174865722656,482.868988037109" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="1">
+      <Category Ref="CodeMap_ExternalReference" />
+    </Link>
+    <Link Source="@28" Target="@34" Category="CodeMap_ExternalReference" Bounds="396.172639134664,80.0000000000002,184.337291405192,726.277412829323" />
+    <Link Source="@28" Target="@36" Category="CodeMap_ExternalReference" Bounds="396.388885443922,80.0000000000002,182.000577468687,671.314287840098" />
+    <Link Source="@28" Target="@38" Category="References" Bounds="1426,80,150.068237304688,245.823944091797" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="2">
+      <Category Ref="CodeMap_ExternalReference" />
+    </Link>
+    <Link Source="@28" Target="@4" Category="CodeMap_ExternalReference" Bounds="399.967306788906,80.0000000000002,182.341950501455,327.138512817805" />
+    <Link Source="@28" Target="@40" Category="CodeMap_ExternalReference" Bounds="405.401083002474,80.0000000000002,499.625869824743,503.611125864026" />
+    <Link Source="@28" Target="@43" Category="CodeSchema_Calls" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="5" />
+    <Link Source="@28" Target="@6" Category="CodeMap_ExternalReference" Bounds="401.151441998607,80.0000000000002,177.676015674688,272.461019327996" />
+    <Link Source="@28" Target="@8" Category="CodeSchema_Calls" Bounds="1583.45458984375,80,1.54541015625,131" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="41">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="References" />
+    </Link>
+    <Link Source="@30" Target="@12" Category="References" Bounds="993.105128173869,346.506944000431,60.6479783822664,341.139841438285" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="18">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="CodeSchema_ReturnTypeLink" />
+      <Category Ref="Implements" />
+    </Link>
+    <Link Source="@30" Target="@14" Category="References" Bounds="1056.86386505985,346.506944000431,20.3306262324559,286.023450034565" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="10">
+      <Category Ref="CodeMap_ExternalReference" />
+    </Link>
+    <Link Source="@30" Target="@16" Category="CodeMap_ExternalReference" Bounds="1061.52125791257,346.506944000431,151.635559384476,341.774238454747" />
+    <Link Source="@30" Target="@18" Category="CodeMap_ProjectReference" Bounds="652.936096191406,352.759735107422,480.721862792969,36.8240966796875" />
+    <Link Source="@32" Target="@12" Category="References" Bounds="992.624459037396,291.506844000431,61.4128892974107,396.107257929124" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="284">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="CodeSchema_Calls" />
+      <Category Ref="CodeSchema_FunctionPointer" />
+      <Category Ref="CodeSchema_ReturnTypeLink" />
+      <Category Ref="Implements" />
+      <Category Ref="InheritsFrom" />
+    </Link>
+    <Link Source="@32" Target="@14" Category="CodeSchema_ReturnTypeLink" Bounds="1056.73355129338,291.506844000431,20.6844711346653,341.017410184443" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="543">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="CodeSchema_FunctionPointer" />
+      <Category Ref="References" />
+    </Link>
+    <Link Source="@32" Target="@16" Category="CodeMap_ExternalReference" Bounds="1060.8118994405,291.506844000431,153.456534711699,396.607396253455" />
+    <Link Source="@32" Target="@18" Category="CodeMap_ExternalReference" Bounds="705.653400553083,615.000316666667,696.400827879566,69.6967319833279" />
+    <Link Source="@32" Target="@30" Category="Implements" Bounds="1083.8886110064,280.256864000198,2.27373675443232E-13,21.0000000000001" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="8">
+      <Category Ref="CodeMap_ProjectReference" />
+    </Link>
+    <Link Source="@34" Target="@12" Category="CodeMap_ExternalReference" Bounds="996.661509299744,516.507344000431,60.0769029486323,171.506541220163" />
+    <Link Source="@34" Target="@14" Category="CodeMap_ExternalReference" Bounds="1062.5840309305,516.507344000431,13.6210315029193,116.061747389067" />
+    <Link Source="@34" Target="@16" Category="CodeMap_ExternalReference" Bounds="1070.94844466293,516.507344000431,136.008901356584,172.926381779364" />
+    <Link Source="@34" Target="@18" Category="CodeMap_ProjectReference" Bounds="1127.27270507813,355,69.0621337890625,26.7493896484375" />
+    <Link Source="@36" Target="@12" Category="CodeMap_ExternalReference" Bounds="995.155923175613,461.507244000431,62.5087343133509,226.325395377398" />
+    <Link Source="@36" Target="@14" Category="CodeMap_ExternalReference" Bounds="1062.19044509154,461.507244000431,14.6872192028559,171.033501633105" />
+    <Link Source="@36" Target="@16" Category="CodeMap_ExternalReference" Bounds="1068.86872297958,461.507244000431,140.989026828228,227.351940224099" />
+    <Link Source="@36" Target="@18" Category="CodeMap_ExternalReference" Bounds="720.32804101068,703.695239528203,681.354769360693,57.3432450550622" />
+    <Link Source="@36" Target="@34" Category="CodeMap_ProjectReference" Bounds="1089.03027767307,450.256864000198,0,20.9999999999999" />
+    <Link Source="@38" Target="@12" Category="Implements" Bounds="1009.60223359172,346.506944000431,375.728844849725,343.924122765729" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="4">
+      <Category Ref="CodeMap_ExternalReference" />
+    </Link>
+    <Link Source="@38" Target="@14" Category="References" Bounds="1097.59805921921,346.506944000431,288.878612775284,288.639474696929" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="2">
+      <Category Ref="CodeMap_ExternalReference" />
+    </Link>
+    <Link Source="@38" Target="@16" Category="CodeMap_ExternalReference" Bounds="1232.07552603466,346.506944000431,161.023703763227,341.858898744713" />
+    <Link Source="@38" Target="@18" Category="CodeMap_ProjectReference" Bounds="1312.66467285156,355,151.51708984375,28.3450317382813" />
+    <Link Source="@4" Target="@12" Category="CodeMap_ExternalReference" Bounds="923.801768435281,61.5062440004308,63.335315976199,626.047305867651" />
+    <Link Source="@4" Target="@14" Category="CodeMap_ExternalReference" Bounds="925.764113792851,61.5062440004308,147.480422630463,571.287194074382" />
+    <Link Source="@4" Target="@16" Category="CodeMap_ExternalReference" Bounds="928.215490689894,61.5062440004308,284.736530176246,626.807435469254" />
+    <Link Source="@4" Target="@18" Category="CodeMap_ExternalReference" Bounds="636.244363336677,439.999816666667,817.533929477919,239.965409259129" />
+    <Link Source="@4" Target="@34" Category="CodeMap_ExternalReference" Bounds="586.313822339154,439.999816666667,7.10195951722494,366.002693860792" />
+    <Link Source="@4" Target="@36" Category="CodeMap_ProjectReference" Bounds="1111.22729492188,245,9.0731201171875,21.69677734375" />
+    <Link Source="@40" Target="@12" Category="References" Bounds="1007.42493586885,291.506844000431,379.652832941718,398.484929594522" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="10">
+      <Category Ref="CodeMap_ProjectReference" />
+      <Category Ref="CodeSchema_Calls" />
+      <Category Ref="Implements" />
+      <Category Ref="InheritsFrom" />
+    </Link>
+    <Link Source="@40" Target="@14" Category="References" Bounds="1095.24148540836,291.506844000431,293.070037770331,343.157110177025" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="6">
+      <Category Ref="CodeMap_ProjectReference" />
+    </Link>
+    <Link Source="@40" Target="@16" Category="CodeMap_ExternalReference" Bounds="1230.90707296908,291.506844000431,162.945246947188,396.676004154353" />
+    <Link Source="@40" Target="@18" Category="CodeMap_ExternalReference" Bounds="1002.31198060558,615.000316666667,415.254555657847,66.0851893692864" />
+    <Link Source="@40" Target="@38" Category="Implements" Bounds="1426.90027767307,280.256864000198,0,21" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="2">
+      <Category Ref="CodeMap_ProjectReference" />
+    </Link>
+    <Link Source="@42" Target="@41" Category="CodeSchema_AttributeUse" Bounds="1230.61206054688,805.253723144531,0,20.9993896484375" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="2" />
+    <Link Source="@43" Target="@42" Category="CodeSchema_AttributeUse" Bounds="1230.61206054688,750.255310058594,0,20.9993896484375" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="1" />
+    <Link Source="@6" Target="@12" Category="CodeMap_ExternalReference" Bounds="923.704492546312,6.50614400043082,63.5989234084484,681.04068851433" />
+    <Link Source="@6" Target="@14" Category="CodeMap_ExternalReference" Bounds="925.495202904024,6.50614400043082,148.195346862508,626.243484027064" />
+    <Link Source="@6" Target="@16" Category="CodeMap_ExternalReference" Bounds="927.778697894355,6.50614400043082,285.852132345963,681.701851403215" />
+    <Link Source="@6" Target="@18" Category="CodeMap_ExternalReference" Bounds="627.28663557324,384.999716666667,833.835480895581,294.503018647594" />
+    <Link Source="@6" Target="@2" Category="CodeMap_ProjectReference" Bounds="905.411071777344,190,138.997985839844,28.2099304199219" />
+    <Link Source="@6" Target="@22" Category="CodeMap_ExternalReference" Bounds="202.506514438536,384.999716666667,380.209058472079,517.746171370141" />
+    <Link Source="@6" Target="@34" Category="CodeMap_ExternalReference" Bounds="586.180093401519,384.999716666667,5.55011761958258,421.001881973812" />
+    <Link Source="@6" Target="@36" Category="CodeMap_ExternalReference" Bounds="584.550489005821,384.999716666667,7.10195951722483,366.002693860792" />
+    <Link Source="@6" Target="@4" Category="CodeMap_ProjectReference" Bounds="855.669042382377,-4.74213599980396,1.13686837721616E-13,21" />
+    <Link Source="@8" Target="@12" Category="Implements" Bounds="923.542756600699,-108.494155999569,64.0375356842628,796.030981449128" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="14">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="CodeSchema_ReturnTypeLink" />
+    </Link>
+    <Link Source="@8" Target="@14" Category="CodeSchema_ReturnTypeLink" Bounds="925.056270577948,-108.494155999569,149.367748707533,741.179274484578" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="12">
+      <Category Ref="CodeMap_ExternalReference" />
+      <Category Ref="References" />
+    </Link>
+    <Link Source="@8" Target="@16" Category="CodeMap_ExternalReference" Bounds="927.05246350502,-108.494155999569,287.727269830233,796.537316382455" />
+    <Link Source="@8" Target="@18" Category="References" Bounds="1270.38842773438,245,285.09814453125,136.015716552734" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="1">
+      <Category Ref="CodeMap_ExternalReference" />
+    </Link>
+    <Link Source="@8" Target="@38" Category="CodeMap_ExternalReference" Bounds="916.247551476955,269.999416666667,7.10195951722505,366.002693860792" />
+    <Link Source="@8" Target="@40" Category="CodeMap_ProjectReference" Bounds="1594.09094238281,245,16.524658203125,22.7213745117188" />
+    <Link Source="@8" Target="@43" Category="References" IsSourceVirtualized="True" IsTargetVirtualized="True" Weight="1" />
+    <Link Source="BasicInfo{5CC8AEFF-2F75-4053-9569-73419839875A}" Target="@34" Category="Contains" FetchingParent="BasicInfo{5CC8AEFF-2F75-4053-9569-73419839875A}" />
+    <Link Source="BasicInfo{5CC8AEFF-2F75-4053-9569-73419839875A}" Target="@36" Category="Contains" FetchingParent="BasicInfo{5CC8AEFF-2F75-4053-9569-73419839875A}" />
+    <Link Source="BasicInfo{9CB2F821-BB23-48E5-88E8-C326477733C0}" Target="@4" Category="Contains" FetchingParent="BasicInfo{9CB2F821-BB23-48E5-88E8-C326477733C0}" />
+    <Link Source="BasicInfo{9CB2F821-BB23-48E5-88E8-C326477733C0}" Target="@6" Category="Contains" FetchingParent="BasicInfo{9CB2F821-BB23-48E5-88E8-C326477733C0}" />
+    <Link Source="Repository{4FF30CF7-DA79-4EDD-9A6E-0B0BEAD72A1A}" Target="BasicInfo{5CC8AEFF-2F75-4053-9569-73419839875A}" Category="Contains" FetchingParent="Repository{4FF30CF7-DA79-4EDD-9A6E-0B0BEAD72A1A}" />
+    <Link Source="Repository{4FF30CF7-DA79-4EDD-9A6E-0B0BEAD72A1A}" Target="System{93EFF637-042E-4DD0-A74B-7F0CF998CF96}" Category="Contains" FetchingParent="Repository{4FF30CF7-DA79-4EDD-9A6E-0B0BEAD72A1A}" />
+    <Link Source="Repository{4FF30CF7-DA79-4EDD-9A6E-0B0BEAD72A1A}" Target="TaskInfo{684035E2-174F-47CE-AA5C-36624C7E26F3}" Category="Contains" FetchingParent="Repository{4FF30CF7-DA79-4EDD-9A6E-0B0BEAD72A1A}" />
+    <Link Source="Service{A12315CA-9D81-412C-A09B-B23D95CFFE16}" Target="BasicInfo{9CB2F821-BB23-48E5-88E8-C326477733C0}" Category="Contains" FetchingParent="Service{A12315CA-9D81-412C-A09B-B23D95CFFE16}" />
+    <Link Source="Service{A12315CA-9D81-412C-A09B-B23D95CFFE16}" Target="System{6295C9FB-DAC4-4C07-97C5-C0332ABDD13D}" Category="Contains" FetchingParent="Service{A12315CA-9D81-412C-A09B-B23D95CFFE16}" />
+    <Link Source="Service{A12315CA-9D81-412C-A09B-B23D95CFFE16}" Target="TaskInfo{D9CF90D0-AFB3-42AA-A2F1-BEE741E0AC0D}" Category="Contains" FetchingParent="Service{A12315CA-9D81-412C-A09B-B23D95CFFE16}" />
+    <Link Source="System{6295C9FB-DAC4-4C07-97C5-C0332ABDD13D}" Target="@24" Category="Contains" FetchingParent="System{6295C9FB-DAC4-4C07-97C5-C0332ABDD13D}" />
+    <Link Source="System{6295C9FB-DAC4-4C07-97C5-C0332ABDD13D}" Target="@26" Category="Contains" FetchingParent="System{6295C9FB-DAC4-4C07-97C5-C0332ABDD13D}" />
+    <Link Source="System{93EFF637-042E-4DD0-A74B-7F0CF998CF96}" Target="@30" Category="Contains" FetchingParent="System{93EFF637-042E-4DD0-A74B-7F0CF998CF96}" />
+    <Link Source="System{93EFF637-042E-4DD0-A74B-7F0CF998CF96}" Target="@32" Category="Contains" FetchingParent="System{93EFF637-042E-4DD0-A74B-7F0CF998CF96}" />
+    <Link Source="TaskInfo{684035E2-174F-47CE-AA5C-36624C7E26F3}" Target="@38" Category="Contains" FetchingParent="TaskInfo{684035E2-174F-47CE-AA5C-36624C7E26F3}" />
+    <Link Source="TaskInfo{684035E2-174F-47CE-AA5C-36624C7E26F3}" Target="@40" Category="Contains" FetchingParent="TaskInfo{684035E2-174F-47CE-AA5C-36624C7E26F3}" />
+    <Link Source="TaskInfo{D9CF90D0-AFB3-42AA-A2F1-BEE741E0AC0D}" Target="@10" Category="Contains" FetchingParent="TaskInfo{D9CF90D0-AFB3-42AA-A2F1-BEE741E0AC0D}" />
+    <Link Source="TaskInfo{D9CF90D0-AFB3-42AA-A2F1-BEE741E0AC0D}" Target="@8" Category="Contains" FetchingParent="TaskInfo{D9CF90D0-AFB3-42AA-A2F1-BEE741E0AC0D}" />
+  </Links>
+  <Categories>
+    <Category Id="CodeMap_ExternalReference" Label="澶栭儴寮曠敤" CanBeDataDriven="True" CanLinkedNodesBeDataDriven="True" IncomingActionLabel="寮曠敤鑰�" OutgoingActionLabel="寮曠敤" />
+    <Category Id="CodeMap_ProjectReference" Label="椤圭洰寮曠敤" CanBeDataDriven="True" CanLinkedNodesBeDataDriven="True" IncomingActionLabel="寮曠敤鑰�" OutgoingActionLabel="寮曠敤" />
+    <Category Id="CodeMap_SolutionFolder" Label="瑙e喅鏂规鏂囦欢澶�" CanBeDataDriven="True" IsProviderRoot="False" NavigationActionLabel="瑙e喅鏂规鏂囦欢澶�" />
+    <Category Id="CodeSchema_Assembly" Label="绋嬪簭闆�" BasedOn="File" CanBeDataDriven="True" DefaultAction="Microsoft.Contains" Icon="CodeSchema_Assembly" NavigationActionLabel="绋嬪簭闆�" />
+    <Category Id="CodeSchema_AttributeUse" Label="浣跨敤鐗规��" CanBeDataDriven="True" CanLinkedNodesBeDataDriven="True" IncomingActionLabel="浣跨敤鑰�" OutgoingActionLabel="浣跨敤鐗规��" />
+    <Category Id="CodeSchema_Calls" Label="璋冪敤" CanBeDataDriven="True" CanLinkedNodesBeDataDriven="True" IncomingActionLabel="璋冪敤鑰�" OutgoingActionLabel="璋冪敤" />
+    <Category Id="CodeSchema_FieldRead" Label="瀛楁璇诲彇" BasedOn="CodeSchema_FieldReference" CanBeDataDriven="True" CanLinkedNodesBeDataDriven="True" IncomingActionLabel="璇诲彇鏂�" OutgoingActionLabel="璇诲彇瀛楁" />
+    <Category Id="CodeSchema_FieldReference" Label="瀛楁寮曠敤" CanBeDataDriven="True" CanLinkedNodesBeDataDriven="True" IncomingActionLabel="寮曠敤鑰�" OutgoingActionLabel="寮曠敤瀛楁" />
+    <Category Id="CodeSchema_FieldWrite" Label="瀛楁鍐欏叆" BasedOn="CodeSchema_FieldReference" CanBeDataDriven="True" CanLinkedNodesBeDataDriven="True" IncomingActionLabel="鍐欏叆鏂�" OutgoingActionLabel="鍐欏叆瀛楁" />
+    <Category Id="CodeSchema_FunctionPointer" Label="鍑芥暟鎸囬拡" CanBeDataDriven="True" CanLinkedNodesBeDataDriven="True" IncomingActionLabel="鍑芥暟鎸囬拡" OutgoingActionLabel="鍑芥暟鎸囬拡" />
+    <Category Id="CodeSchema_Namespace" Label="鍛藉悕绌洪棿" CanBeDataDriven="True" DefaultAction="Node:Both:CodeSchema_Type" Icon="CodeSchema_Namespace" NavigationActionLabel="鍛藉悕绌洪棿" />
+    <Category Id="CodeSchema_ReturnTypeLink" Label="杩斿洖" CanBeDataDriven="True" CanLinkedNodesBeDataDriven="True" IncomingActionLabel="杩斿洖绫诲瀷" OutgoingActionLabel="杩斿洖绫诲瀷" />
+    <Category Id="Contains" Label="鍖呭惈" Description="閾炬帴鐨勬簮鏄惁鍖呭惈鐩爣瀵硅薄" CanBeDataDriven="False" CanLinkedNodesBeDataDriven="True" IncomingActionLabel="鍖呭惈鑰�" IsContainment="True" OutgoingActionLabel="鍖呭惈" />
+    <Category Id="File" Label="鏂囦欢" CanBeDataDriven="True" DefaultAction="Microsoft.Contains" Icon="File" NavigationActionLabel="鏂囦欢" />
+    <Category Id="Implements" Label="瀹炵幇" CanBeDataDriven="True" CanLinkedNodesBeDataDriven="True" IncomingActionLabel="瀹炵幇鑰�" OutgoingActionLabel="瀹炵幇" />
+    <Category Id="InheritsFrom" Label="缁ф壙鑷�" CanBeDataDriven="True" CanLinkedNodesBeDataDriven="True" IncomingActionLabel="缁ф壙鑰�" OutgoingActionLabel="缁ф壙鑷�" />
+    <Category Id="References" Label="寮曠敤" CanBeDataDriven="True" CanLinkedNodesBeDataDriven="True" IncomingActionLabel="寮曠敤鑰�" OutgoingActionLabel="寮曠敤" />
+  </Categories>
+  <Properties>
+    <Property Id="Bounds" DataType="System.Windows.Rect" />
+    <Property Id="CanBeDataDriven" Label="CanBeDataDriven" Description="CanBeDataDriven" DataType="System.Boolean" />
+    <Property Id="CanLinkedNodesBeDataDriven" Label="CanLinkedNodesBeDataDriven" Description="CanLinkedNodesBeDataDriven" DataType="System.Boolean" />
+    <Property Id="CodeSchemaProperty_StrongName" Label="StrongName" Description="StrongName" DataType="System.String" />
+    <Property Id="DataVirtualized" Label="宸茶櫄鎷熷寲鏁版嵁" Description="濡傛灉涓� true锛屽垯鍥句腑鍙互鍖呭惈琛ㄧず铏氭嫙鍖栬妭鐐�/閾炬帴(鍗筹紝涓嶅湪鍥句腑瀹為檯鍒涘缓)鐨勬暟鎹殑鑺傜偣鍜岄摼鎺ャ��" DataType="System.Boolean" />
+    <Property Id="DefaultAction" Label="DefaultAction" Description="DefaultAction" DataType="System.String" />
+    <Property Id="DelayedChildNodesState" Label="寤惰繜鐨勫瓙鑺傜偣鐘舵��" Description="濡傛灉鏈寚瀹氬欢杩熺殑瀛愯妭鐐圭姸鎬侊紝鍒欎负 Unspecified銆傚鏋滃皻鏈皢缁勫寘鍚殑瀛愯妭鐐规彁鍙栧埌鍏崇郴鍥句腑锛屽垯涓� NotFetched銆傚鏋滃凡鎻愬彇缁勫唴鐨勬墍鏈夊欢杩熺殑瀛愯妭鐐癸紝鍒欎负 Fetched銆�" DataType="Microsoft.VisualStudio.GraphModel.DelayedDataState" />
+    <Property Id="DelayedCrossGroupLinksState" Label="寤惰繜鐨勮法缁勯摼鎺ョ姸鎬�" Description="濡傛灉鏈寚瀹氬欢杩熺殑璺ㄧ粍閾炬帴鐘舵�侊紝鍒欎负 Unspecified銆傚鏋滃皻鏈皢姝よ妭鐐逛笂寤惰繜鐨勮法缁勯摼鎺ユ彁鍙栧埌鍏崇郴鍥句腑锛屽垯涓� NotFetched銆傚鏋滃凡鎻愬彇鎵�鏈夊欢杩熺殑璺ㄧ粍閾炬帴锛屽垯涓� Fetched銆�" DataType="Microsoft.VisualStudio.GraphModel.DelayedDataState" />
+    <Property Id="ErrorMessage" Label="閿欒" Description="閿欒" DataType="System.String" />
+    <Property Id="Expression" DataType="System.String" />
+    <Property Id="FetchedChildrenCount" DataType="System.Int32" />
+    <Property Id="FetchingParent" DataType="Microsoft.VisualStudio.GraphModel.GraphNodeId" />
+    <Property Id="FilePath" Label="鏂囦欢璺緞" Description="鏂囦欢璺緞" DataType="System.String" />
+    <Property Id="Group" Label="缁�" Description="灏嗚妭鐐规樉绀轰负缁�" DataType="Microsoft.VisualStudio.GraphModel.GraphGroupStyle" />
+    <Property Id="GroupLabel" DataType="System.String" />
+    <Property Id="Icon" DataType="System.String" />
+    <Property Id="IncomingActionLabel" Label="IncomingActionLabel" Description="IncomingActionLabel" DataType="System.String" />
+    <Property Id="IsContainment" DataType="System.Boolean" />
+    <Property Id="IsEnabled" DataType="System.Boolean" />
+    <Property Id="IsProviderRoot" Label="IsProviderRoot" Description="IsProviderRoot" DataType="System.Boolean" />
+    <Property Id="IsSourceVirtualized" Label="宸茶櫄鎷熷寲閾炬帴婧�" Description="濡傛灉涓� true锛屽垯閾炬帴婧愮鍖呭惈铏氭嫙鍖栬妭鐐�/閾炬帴(鍗筹紝涓嶅湪鍥句腑瀹為檯鍒涘缓)鐨勬暟鎹��" DataType="System.Boolean" />
+    <Property Id="IsTargetVirtualized" Label="宸茶櫄鎷熷寲閾炬帴鐩爣" Description="濡傛灉涓� true锛屽垯閾炬帴鐩爣绔寘鍚櫄鎷熷寲鑺傜偣/閾炬帴(鍗筹紝涓嶅湪鍥句腑瀹為檯鍒涘缓)鐨勬暟鎹��" DataType="System.Boolean" />
+    <Property Id="IsUnreferenced" Label="鏈紩鐢ㄧ殑" Description="鑺傜偣娌℃湁浠庡叧绯诲浘涓殑鍏朵粬鑺傜偣鎸囧悜瀹冪殑閾炬帴" DataType="System.Boolean" />
+    <Property Id="Label" Label="鏍囩" Description="鍙壒娉ㄥ璞$殑鍙樉绀烘爣绛�" DataType="System.String" />
+    <Property Id="Layout" DataType="System.String" />
+    <Property Id="NavigationActionLabel" Label="NavigationActionLabel" Description="NavigationActionLabel" DataType="System.String" />
+    <Property Id="OutgoingActionLabel" Label="OutgoingActionLabel" Description="OutgoingActionLabel" DataType="System.String" />
+    <Property Id="TargetType" DataType="System.Type" />
+    <Property Id="ToolTip" DataType="System.String" />
+    <Property Id="UseManualLocation" DataType="System.Boolean" />
+    <Property Id="Value" DataType="System.String" />
+    <Property Id="ValueLabel" DataType="System.String" />
+    <Property Id="Visibility" Label="鍙鎬�" Description="瀹氫箟鍏崇郴鍥句腑鐨勮妭鐐规槸鍚﹀彲瑙�" DataType="System.Windows.Visibility" />
+    <Property Id="Weight" Label="绮楃粏" Description="绮楃粏" DataType="System.Double" />
+    <Property Id="ZoomLevel" DataType="System.String" />
+  </Properties>
+  <QualifiedNames>
+    <Name Id="Assembly" Label="绋嬪簭闆�" ValueType="Uri" />
+    <Name Id="Namespace" Label="鍛藉悕绌洪棿" ValueType="System.String" />
+  </QualifiedNames>
+  <IdentifierAliases>
+    <Alias n="1" Uri="Assembly=$(6236bfff-173d-44a8-9fc3-7c001ea30347.OutputPathUri)" />
+    <Alias n="2" Id="(@1)" />
+    <Alias n="3" Uri="Assembly=$(8c2cc25b-de5d-433e-a550-63864c7a716d.OutputPathUri)" />
+    <Alias n="4" Id="(@3)" />
+    <Alias n="5" Uri="Assembly=$(ffab2c76-1c9e-4006-95c8-a0b2aa53139d.OutputPathUri)" />
+    <Alias n="6" Id="(@5)" />
+    <Alias n="7" Uri="Assembly=$(7279a2ae-8d1f-4e66-a73a-01af7927a336.OutputPathUri)" />
+    <Alias n="8" Id="(@7)" />
+    <Alias n="9" Uri="Assembly=$(83f18a31-5983-4587-a0b2-414bf70e50b5.OutputPathUri)" />
+    <Alias n="10" Id="(@9)" />
+    <Alias n="11" Uri="Assembly=$(bffdd936-2e61-4d3a-abfe-7cf77fe0b184.OutputPathUri)" />
+    <Alias n="12" Id="(@11)" />
+    <Alias n="13" Uri="Assembly=$(7f200fe8-caf6-4131-bd25-8d438fe0abac.OutputPathUri)" />
+    <Alias n="14" Id="(@13)" />
+    <Alias n="15" Uri="Assembly=$(9fbc654c-51de-422d-9e1e-6a38268de1e2.OutputPathUri)" />
+    <Alias n="16" Id="(@15)" />
+    <Alias n="17" Uri="Assembly=$(c2d3d138-9109-481b-8beb-a27597890b2c.OutputPathUri)" />
+    <Alias n="18" Id="(@17)" />
+    <Alias n="19" Uri="Assembly=$(487fa45b-ea1a-4aca-bb5b-0f6708f462c0.OutputPathUri)" />
+    <Alias n="20" Id="(@19)" />
+    <Alias n="21" Uri="Assembly=$(861c4d0b-a478-48db-a0fa-ae70f5ba210a.OutputPathUri)" />
+    <Alias n="22" Id="(@21)" />
+    <Alias n="23" Uri="Assembly=$(9e4bff47-52bf-4fd8-9cc7-3763bf19d9e0.OutputPathUri)" />
+    <Alias n="24" Id="(@23)" />
+    <Alias n="25" Uri="Assembly=$(a14242dd-da06-4dc3-8598-1761aa7c76d1.OutputPathUri)" />
+    <Alias n="26" Id="(@25)" />
+    <Alias n="27" Uri="Assembly=$(294e4915-0241-4c8c-ba99-7588b945863a.OutputPathUri)" />
+    <Alias n="28" Id="(@27)" />
+    <Alias n="29" Uri="Assembly=$(f302e6d6-5a95-4d22-8dc2-21be2cb30275.OutputPathUri)" />
+    <Alias n="30" Id="(@29)" />
+    <Alias n="31" Uri="Assembly=$(5777bdec-4726-4425-85f2-a090524f692d.OutputPathUri)" />
+    <Alias n="32" Id="(@31)" />
+    <Alias n="33" Uri="Assembly=$(266d07b7-3648-4f3d-818a-89eda7d84c58.OutputPathUri)" />
+    <Alias n="34" Id="(@33)" />
+    <Alias n="35" Uri="Assembly=$(206fdf79-9bf3-433a-b7ff-627287bbd760.OutputPathUri)" />
+    <Alias n="36" Id="(@35)" />
+    <Alias n="37" Uri="Assembly=$(09d05f35-cea2-48d9-86d0-fb95982ba511.OutputPathUri)" />
+    <Alias n="38" Id="(@37)" />
+    <Alias n="39" Uri="Assembly=$(35054aa5-cf40-4f38-9414-c76742c29382.OutputPathUri)" />
+    <Alias n="40" Id="(@39)" />
+    <Alias n="41" Id="(@15 Namespace=Microsoft.CodeAnalysis)" />
+    <Alias n="42" Id="(@15 Namespace=System.Runtime.CompilerServices)" />
+    <Alias n="43" Id="(@15 Namespace=WIDESEAWCS_Common.TaskEnum)" />
+  </IdentifierAliases>
+  <Styles>
+    <Style TargetType="Node" GroupLabel="鏈紩鐢ㄧ殑" ToolTip="鑺傜偣娌℃湁浠庡叧绯诲浘涓殑鍏朵粬鑺傜偣鎸囧悜瀹冪殑閾炬帴" ValueLabel="True">
+      <Condition Expression="IsUnreferenced" />
+      <Setter Property="Background" Value="Purple" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="缁撴灉" ValueLabel="True">
+      <Condition Expression="HasCategory('QueryResult')" />
+      <Setter Property="Background" Value="#FFBCFFBE" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="娴嬭瘯椤圭洰" ValueLabel="娴嬭瘯椤圭洰">
+      <Condition Expression="HasCategory('CodeMap_TestProject')" />
+      <Setter Property="Icon" Value="CodeMap_TestProject" />
+      <Setter Property="Background" Value="#FF307A69" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="Web 椤圭洰" ValueLabel="Web 椤圭洰">
+      <Condition Expression="HasCategory('CodeMap_WebProject')" />
+      <Setter Property="Icon" Value="CodeMap_WebProject" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="Windows 搴旂敤鍟嗗簵椤圭洰" ValueLabel="Windows 搴旂敤鍟嗗簵椤圭洰">
+      <Condition Expression="HasCategory('CodeMap_WindowsStoreProject')" />
+      <Setter Property="Icon" Value="CodeMap_WindowsStoreProject" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="鐢佃瘽椤圭洰" ValueLabel="鐢佃瘽椤圭洰">
+      <Condition Expression="HasCategory('CodeMap_PhoneProject')" />
+      <Setter Property="Icon" Value="CodeMap_PhoneProject" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="鍙Щ妞嶅簱" ValueLabel="鍙Щ妞嶅簱">
+      <Condition Expression="HasCategory('CodeMap_PortableLibraryProject')" />
+      <Setter Property="Icon" Value="CodeMap_PortableLibraryProject" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="WPF 椤圭洰" ValueLabel="WPF 椤圭洰">
+      <Condition Expression="HasCategory('CodeMap_WpfProject')" />
+      <Setter Property="Icon" Value="CodeMap_WpfProject" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="VSIX 椤圭洰" ValueLabel="VSIX 椤圭洰">
+      <Condition Expression="HasCategory('CodeMap_VsixProject')" />
+      <Setter Property="Icon" Value="CodeMap_VsixProject" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="寤烘ā椤圭洰" ValueLabel="寤烘ā椤圭洰">
+      <Condition Expression="HasCategory('CodeMap_ModelingProject')" />
+      <Setter Property="Icon" Value="CodeMap_ModelingProject" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="绋嬪簭闆�" ValueLabel="鍏锋湁绫诲埆">
+      <Condition Expression="HasCategory('CodeSchema_Assembly')" />
+      <Setter Property="Background" Value="#FF094167" />
+      <Setter Property="Stroke" Value="#FF094167" />
+      <Setter Property="Icon" Value="CodeSchema_Assembly" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="鍛藉悕绌洪棿" ValueLabel="鍏锋湁绫诲埆">
+      <Condition Expression="HasCategory('CodeSchema_Namespace')" />
+      <Setter Property="Background" Value="#FF0E619A" />
+      <Setter Property="Stroke" Value="#FF0E619A" />
+      <Setter Property="Icon" Value="CodeSchema_Namespace" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="鎺ュ彛" ValueLabel="鍏锋湁绫诲埆">
+      <Condition Expression="HasCategory('CodeSchema_Interface')" />
+      <Setter Property="Background" Value="#FF1382CE" />
+      <Setter Property="Stroke" Value="#FF1382CE" />
+      <Setter Property="Icon" Value="CodeSchema_Interface" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="缁撴瀯" ValueLabel="鍏锋湁绫诲埆">
+      <Condition Expression="HasCategory('CodeSchema_Struct')" />
+      <Setter Property="Background" Value="#FF1382CE" />
+      <Setter Property="Stroke" Value="#FF1382CE" />
+      <Setter Property="Icon" Value="CodeSchema_Struct" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="鏋氫妇" ValueLabel="鍏锋湁绫诲埆">
+      <Condition Expression="HasCategory('CodeSchema_Enum')" />
+      <Setter Property="Background" Value="#FF1382CE" />
+      <Setter Property="Stroke" Value="#FF1382CE" />
+      <Setter Property="Icon" Value="CodeSchema_Enum" />
+      <Setter Property="LayoutSettings" Value="List" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="濮旀墭" ValueLabel="鍏锋湁绫诲埆">
+      <Condition Expression="HasCategory('CodeSchema_Delegate')" />
+      <Setter Property="Background" Value="#FF1382CE" />
+      <Setter Property="Stroke" Value="#FF1382CE" />
+      <Setter Property="Icon" Value="CodeSchema_Delegate" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="绫�" ValueLabel="鍏锋湁绫诲埆">
+      <Condition Expression="HasCategory('CodeSchema_Type')" />
+      <Setter Property="Background" Value="#FF0E70C0" />
+      <Setter Property="Stroke" Value="#FF0E70C0" />
+      <Setter Property="Icon" Value="CodeSchema_Class" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="灞炴��" ValueLabel="鍏锋湁绫诲埆">
+      <Condition Expression="HasCategory('CodeSchema_Property')" />
+      <Setter Property="Background" Value="#FFE0E0E0" />
+      <Setter Property="Stroke" Value="#FFE0E0E0" />
+      <Setter Property="Icon" Value="CodeSchema_Property" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="鏂规硶" ValueLabel="鍏锋湁绫诲埆">
+      <Condition Expression="HasCategory('CodeSchema_Method') Or HasCategory('CodeSchema_CallStackUnresolvedMethod')" />
+      <Setter Property="Background" Value="#FFE0E0E0" />
+      <Setter Property="Stroke" Value="#FFE0E0E0" />
+      <Setter Property="Icon" Value="CodeSchema_Method" />
+      <Setter Property="LayoutSettings" Value="List" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="浜嬩欢" ValueLabel="鍏锋湁绫诲埆">
+      <Condition Expression="HasCategory('CodeSchema_Event')" />
+      <Setter Property="Background" Value="#FFE0E0E0" />
+      <Setter Property="Stroke" Value="#FFE0E0E0" />
+      <Setter Property="Icon" Value="CodeSchema_Event" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="瀛楁" ValueLabel="鍏锋湁绫诲埆">
+      <Condition Expression="HasCategory('CodeSchema_Field')" />
+      <Setter Property="Background" Value="#FFE0E0E0" />
+      <Setter Property="Stroke" Value="#FFE0E0E0" />
+      <Setter Property="Icon" Value="CodeSchema_Field" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="Out 鍙傛暟" ValueLabel="鍏锋湁绫诲埆">
+      <Condition Expression="CodeSchemaProperty_IsOut = 'True'" />
+      <Setter Property="Icon" Value="CodeSchema_OutParameter" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="鍙傛暟" ValueLabel="鍏锋湁绫诲埆">
+      <Condition Expression="HasCategory('CodeSchema_Parameter')" />
+      <Setter Property="Icon" Value="CodeSchema_Parameter" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="灞�閮ㄥ彉閲�" ValueLabel="鍏锋湁绫诲埆">
+      <Condition Expression="HasCategory('CodeSchema_LocalExpression')" />
+      <Setter Property="Icon" Value="CodeSchema_LocalExpression" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="澶栭儴" ValueLabel="鍏锋湁绫诲埆">
+      <Condition Expression="HasCategory('Externals')" />
+      <Setter Property="Background" Value="#FF424242" />
+      <Setter Property="Stroke" Value="#FF424242" />
+    </Style>
+    <Style TargetType="Link" GroupLabel="缁ф壙鑷�" ValueLabel="True">
+      <Condition Expression="HasCategory('InheritsFrom')" />
+      <Setter Property="Stroke" Value="#FF00A600" />
+      <Setter Property="StrokeDashArray" Value="2 0" />
+      <Setter Property="DrawArrow" Value="true" />
+    </Style>
+    <Style TargetType="Link" GroupLabel="瀹炵幇" ValueLabel="True">
+      <Condition Expression="HasCategory('Implements')" />
+      <Setter Property="Stroke" Value="#8000A600" />
+      <Setter Property="StrokeDashArray" Value="2 2" />
+      <Setter Property="DrawArrow" Value="true" />
+    </Style>
+    <Style TargetType="Link" GroupLabel="璋冪敤" ValueLabel="True">
+      <Condition Expression="HasCategory('CodeSchema_Calls')" />
+      <Setter Property="Stroke" Value="#FFFF00FF" />
+      <Setter Property="StrokeDashArray" Value="2 0" />
+      <Setter Property="DrawArrow" Value="true" />
+    </Style>
+    <Style TargetType="Link" GroupLabel="鍑芥暟鎸囬拡" ValueLabel="True">
+      <Condition Expression="HasCategory('CodeSchema_FunctionPointer')" />
+      <Setter Property="Stroke" Value="#FFFF00FF" />
+      <Setter Property="StrokeDashArray" Value="2 2" />
+      <Setter Property="DrawArrow" Value="true" />
+    </Style>
+    <Style TargetType="Link" GroupLabel="瀛楁璇诲彇" ValueLabel="True">
+      <Condition Expression="HasCategory('CodeSchema_FieldRead')" />
+      <Setter Property="Stroke" Value="#FF00AEEF" />
+      <Setter Property="StrokeDashArray" Value="2 2" />
+      <Setter Property="DrawArrow" Value="true" />
+    </Style>
+    <Style TargetType="Link" GroupLabel="瀛楁鍐欏叆" ValueLabel="True">
+      <Condition Expression="HasCategory('CodeSchema_FieldWrite')" />
+      <Setter Property="Stroke" Value="#FF00AEEF" />
+      <Setter Property="DrawArrow" Value="true" />
+      <Setter Property="IsHidden" Value="false" />
+    </Style>
+    <Style TargetType="Link" GroupLabel="Inherits From" ValueLabel="True" Visibility="Hidden">
+      <Condition Expression="HasCategory('InheritsFrom') And Target.HasCategory('CodeSchema_Class')" />
+      <Setter Property="TargetDecorator" Value="OpenArrow" />
+    </Style>
+    <Style TargetType="Link" GroupLabel="Implements" ValueLabel="True" Visibility="Hidden">
+      <Condition Expression="HasCategory('Implements') And Target.HasCategory('CodeSchema_Interface')" />
+      <Setter Property="TargetDecorator" Value="OpenArrow" />
+    </Style>
+    <Style TargetType="Link" GroupLabel="Comment Link" ValueLabel="True" Visibility="Hidden">
+      <Condition Expression="Source.HasCategory('Comment')" />
+      <Setter Property="Stroke" Value="#FFE5C365" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="Cursor Location Changed" ValueLabel="True" Visibility="Hidden">
+      <Condition Expression="IsCursorLocation" />
+      <Setter Property="IndicatorWest" Value="WestIndicator" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="Disabled Breakpoint Location Changed" ValueLabel="True" Visibility="Hidden">
+      <Condition Expression="DisabledBreakpointCount" />
+      <Setter Property="IndicatorWest" Value="WestIndicator" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="Enabled Breakpoint Location Changed" ValueLabel="True" Visibility="Hidden">
+      <Condition Expression="EnabledBreakpointCount" />
+      <Setter Property="IndicatorWest" Value="WestIndicator" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="Instruction Pointer Location Changed" ValueLabel="True" Visibility="Hidden">
+      <Condition Expression="IsInstructionPointerLocation" />
+      <Setter Property="IndicatorWest" Value="WestIndicator" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="Current Callstack Changed" ValueLabel="True" Visibility="Hidden">
+      <Condition Expression="IsCurrentCallstackFrame" />
+      <Setter Property="IndicatorWest" Value="WestIndicator" />
+    </Style>
+    <Style TargetType="Link" GroupLabel="杩斿洖" ValueLabel="True" Visibility="Hidden">
+      <Condition Expression="HasCategory('CodeSchema_ReturnTypeLink')" />
+    </Style>
+    <Style TargetType="Link" GroupLabel="寮曠敤" ValueLabel="True" Visibility="Hidden">
+      <Condition Expression="HasCategory('References')" />
+    </Style>
+    <Style TargetType="Link" GroupLabel="浣跨敤鐗规��" ValueLabel="True" Visibility="Hidden">
+      <Condition Expression="HasCategory('CodeSchema_AttributeUse')" />
+    </Style>
+    <Style TargetType="Node" GroupLabel="瑙e喅鏂规鏂囦欢澶�" ValueLabel="True" Visibility="Hidden">
+      <Condition Expression="HasCategory('CodeMap_SolutionFolder')" />
+      <Setter Property="Background" Value="#FFDEBA83" />
+    </Style>
+    <Style TargetType="Link" GroupLabel="椤圭洰寮曠敤" ValueLabel="椤圭洰寮曠敤">
+      <Condition Expression="HasCategory('CodeMap_ProjectReference')" />
+      <Setter Property="Stroke" Value="#9A9A9A" />
+      <Setter Property="StrokeDashArray" Value="2 2" />
+      <Setter Property="DrawArrow" Value="true" />
+    </Style>
+    <Style TargetType="Link" GroupLabel="澶栭儴寮曠敤" ValueLabel="澶栭儴寮曠敤">
+      <Condition Expression="HasCategory('CodeMap_ExternalReference')" />
+      <Setter Property="Stroke" Value="#9A9A9A" />
+      <Setter Property="StrokeDashArray" Value="2 2" />
+      <Setter Property="DrawArrow" Value="true" />
+    </Style>
+  </Styles>
+  <Paths>
+    <Path Id="09d05f35-cea2-48d9-86d0-fb95982ba511.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_ITaskInfoRepository\bin\Debug\net6.0\WIDESEAWCS_ITaskInfoRepository.dll" />
+    <Path Id="09d05f35-cea2-48d9-86d0-fb95982ba511.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoRepository/bin/Debug/net6.0/WIDESEAWCS_ITaskInfoRepository.dll" />
+    <Path Id="206fdf79-9bf3-433a-b7ff-627287bbd760.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_BasicInfoRepository\bin\Debug\net6.0\WIDESEAWCS_BasicInfoRepository.dll" />
+    <Path Id="206fdf79-9bf3-433a-b7ff-627287bbd760.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoRepository/bin/Debug/net6.0/WIDESEAWCS_BasicInfoRepository.dll" />
+    <Path Id="266d07b7-3648-4f3d-818a-89eda7d84c58.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_IBasicInfoRepository\bin\Debug\net6.0\WIDESEAWCS_IBasicInfoRepository.dll" />
+    <Path Id="266d07b7-3648-4f3d-818a-89eda7d84c58.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoRepository/bin/Debug/net6.0/WIDESEAWCS_IBasicInfoRepository.dll" />
+    <Path Id="294e4915-0241-4c8c-ba99-7588b945863a.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_Tasks\bin\Debug\net6.0\WIDESEAWCS_Tasks.dll" />
+    <Path Id="294e4915-0241-4c8c-ba99-7588b945863a.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/bin/Debug/net6.0/WIDESEAWCS_Tasks.dll" />
+    <Path Id="35054aa5-cf40-4f38-9414-c76742c29382.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_TaskInfoRepository\bin\Debug\net6.0\WIDESEAWCS_TaskInfoRepository.dll" />
+    <Path Id="35054aa5-cf40-4f38-9414-c76742c29382.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/bin/Debug/net6.0/WIDESEAWCS_TaskInfoRepository.dll" />
+    <Path Id="487fa45b-ea1a-4aca-bb5b-0f6708f462c0.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_Server\bin\Debug\net6.0\WIDESEAWCS_Server.dll" />
+    <Path Id="487fa45b-ea1a-4aca-bb5b-0f6708f462c0.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_Server/bin/Debug/net6.0/WIDESEAWCS_Server.dll" />
+    <Path Id="5777bdec-4726-4425-85f2-a090524f692d.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_SystemRepository\bin\Debug\net6.0\WIDESEAWCS_SystemRepository.dll" />
+    <Path Id="5777bdec-4726-4425-85f2-a090524f692d.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/bin/Debug/net6.0/WIDESEAWCS_SystemRepository.dll" />
+    <Path Id="6236bfff-173d-44a8-9fc3-7c001ea30347.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_QuartzJob\bin\Debug\net6.0\WIDESEAWCS_QuartzJob.dll" />
+    <Path Id="6236bfff-173d-44a8-9fc3-7c001ea30347.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/bin/Debug/net6.0/WIDESEAWCS_QuartzJob.dll" />
+    <Path Id="7279a2ae-8d1f-4e66-a73a-01af7927a336.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_ITaskInfoService\bin\Debug\net6.0\WIDESEAWCS_ITaskInfoService.dll" />
+    <Path Id="7279a2ae-8d1f-4e66-a73a-01af7927a336.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/bin/Debug/net6.0/WIDESEAWCS_ITaskInfoService.dll" />
+    <Path Id="7f200fe8-caf6-4131-bd25-8d438fe0abac.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_Model\bin\Debug\net6.0\WIDESEAWCS_Model.dll" />
+    <Path Id="7f200fe8-caf6-4131-bd25-8d438fe0abac.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_Model/bin/Debug/net6.0/WIDESEAWCS_Model.dll" />
+    <Path Id="83f18a31-5983-4587-a0b2-414bf70e50b5.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_TaskInfoService\bin\Debug\net6.0\WIDESEAWCS_TaskInfoService.dll" />
+    <Path Id="83f18a31-5983-4587-a0b2-414bf70e50b5.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/bin/Debug/net6.0/WIDESEAWCS_TaskInfoService.dll" />
+    <Path Id="861c4d0b-a478-48db-a0fa-ae70f5ba210a.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_Communicator\bin\Debug\net6.0\WIDESEAWCS_Communicator.dll" />
+    <Path Id="861c4d0b-a478-48db-a0fa-ae70f5ba210a.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_Communicator/bin/Debug/net6.0/WIDESEAWCS_Communicator.dll" />
+    <Path Id="8c2cc25b-de5d-433e-a550-63864c7a716d.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_IBasicInfoService\bin\Debug\net6.0\WIDESEAWCS_IBasicInfoService.dll" />
+    <Path Id="8c2cc25b-de5d-433e-a550-63864c7a716d.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoService/bin/Debug/net6.0/WIDESEAWCS_IBasicInfoService.dll" />
+    <Path Id="9e4bff47-52bf-4fd8-9cc7-3763bf19d9e0.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_ISystemServices\bin\Debug\net6.0\WIDESEAWCS_ISystemServices.dll" />
+    <Path Id="9e4bff47-52bf-4fd8-9cc7-3763bf19d9e0.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/bin/Debug/net6.0/WIDESEAWCS_ISystemServices.dll" />
+    <Path Id="9fbc654c-51de-422d-9e1e-6a38268de1e2.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_Common\bin\Debug\net6.0\WIDESEAWCS_Common.dll" />
+    <Path Id="9fbc654c-51de-422d-9e1e-6a38268de1e2.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_Common/bin/Debug/net6.0/WIDESEAWCS_Common.dll" />
+    <Path Id="a14242dd-da06-4dc3-8598-1761aa7c76d1.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_SystemServices\bin\Debug\net6.0\WIDESEAWCS_SystemServices.dll" />
+    <Path Id="a14242dd-da06-4dc3-8598-1761aa7c76d1.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/bin/Debug/net6.0/WIDESEAWCS_SystemServices.dll" />
+    <Path Id="bffdd936-2e61-4d3a-abfe-7cf77fe0b184.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_Core\bin\Debug\net6.0\WIDESEAWCS_Core.dll" />
+    <Path Id="bffdd936-2e61-4d3a-abfe-7cf77fe0b184.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_Core/bin/Debug/net6.0/WIDESEAWCS_Core.dll" />
+    <Path Id="c2d3d138-9109-481b-8beb-a27597890b2c.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_DTO\bin\Debug\net6.0\WIDESEAWCS_DTO.dll" />
+    <Path Id="c2d3d138-9109-481b-8beb-a27597890b2c.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/bin/Debug/net6.0/WIDESEAWCS_DTO.dll" />
+    <Path Id="f302e6d6-5a95-4d22-8dc2-21be2cb30275.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_ISystemRepository\bin\Debug\net6.0\WIDESEAWCS_ISystemRepository.dll" />
+    <Path Id="f302e6d6-5a95-4d22-8dc2-21be2cb30275.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/bin/Debug/net6.0/WIDESEAWCS_ISystemRepository.dll" />
+    <Path Id="ffab2c76-1c9e-4006-95c8-a0b2aa53139d.OutputPath" Value="E:\WIDESEAWCS\InfrastructureWCS\WIDESEAWCS_Server\WIDESEAWCS_BasicInfoService\bin\Debug\net6.0\WIDESEAWCS_BasicInfoService.dll" />
+    <Path Id="ffab2c76-1c9e-4006-95c8-a0b2aa53139d.OutputPathUri" Value="file:///E:/WIDESEAWCS/InfrastructureWCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/bin/Debug/net6.0/WIDESEAWCS_BasicInfoService.dll" />
+  </Paths>
+</DirectedGraph>
\ No newline at end of file
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs b/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs
index 98a8147..6ea2329 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs
@@ -7,53 +7,76 @@
 
 namespace WIDESEAWCS_Common.TaskEnum
 {
+    // 瀹氫箟涓�涓潤鎬佺被TaskEnumHelper锛岀敤浜庡鐞嗘灇涓剧被鍨�
     public static class TaskEnumHelper
     {
+        // 鑾峰彇鏋氫妇绫诲瀷鐨勭储寮曞垪琛�
         public static List<int> GetEnumIndexList(this Type type)
         {
+            // 濡傛灉type涓虹┖锛屾姏鍑篈rgumentNullException寮傚父
             if (type is null) throw new ArgumentNullException("type");
+            // 濡傛灉type涓嶆槸鏋氫妇绫诲瀷锛岃繑鍥炵┖鍒楄〃
             if (!type.IsEnum) return new List<int>();
+            // 杩斿洖鏋氫妇绫诲瀷鐨勭储寮曞垪琛�
             return Enum.GetValues(type).Cast<int>().ToList();
         }
 
+        // 鏍规嵁浠诲姟绫诲瀷鑾峰彇浠诲姟绫诲瀷缁�
         public static TaskTypeGroup GetTaskTypeGroup(this int taskType)
         {
-            if (!int.TryParse(Enum.Parse<TaskOutboundTypeEnum>(taskType.ToString()).ToString(), out int result))
+            // 灏嗕换鍔$被鍨嬭浆鎹负瀛楃涓�
+            string taskTypeStr = taskType.ToString();
+            // 灏濊瘯灏嗕换鍔$被鍨嬭浆鎹负TaskOutboundTypeEnum鏋氫妇绫诲瀷锛屽鏋滄垚鍔燂紝杩斿洖OutbondGroup
+            if (!int.TryParse(Enum.Parse<TaskOutboundTypeEnum>(taskTypeStr).ToString(), out int result))
             {
                 return TaskTypeGroup.OutbondGroup;
             }
-            else if (!int.TryParse(Enum.Parse<TaskInStatusEnum>(taskType.ToString()).ToString(), out result))
+            // 灏濊瘯灏嗕换鍔$被鍨嬭浆鎹负TaskInStatusEnum鏋氫妇绫诲瀷锛屽鏋滄垚鍔燂紝杩斿洖InboundGroup
+            else if (!int.TryParse(Enum.Parse<TaskInStatusEnum>(taskTypeStr).ToString(), out result))
             {
                 return TaskTypeGroup.InboundGroup;
             }
-            else if (!int.TryParse(Enum.Parse<TaskRelocationTypeEnum>(taskType.ToString()).ToString(), out result))
+            // 灏濊瘯灏嗕换鍔$被鍨嬭浆鎹负TaskRelocationTypeEnum鏋氫妇绫诲瀷锛屽鏋滄垚鍔燂紝杩斿洖RelocationGroup
+            else if (!int.TryParse(Enum.Parse<TaskRelocationTypeEnum>(taskTypeStr).ToString(), out result))
             {
                 return TaskTypeGroup.RelocationGroup;
             }
-            else if (!int.TryParse(Enum.Parse<TaskOtherTypeEnum>(taskType.ToString()).ToString(), out result))
+            // 灏濊瘯灏嗕换鍔$被鍨嬭浆鎹负TaskOtherTypeEnum鏋氫妇绫诲瀷锛屽鏋滄垚鍔燂紝杩斿洖OtherGroup
+            else if (!int.TryParse(Enum.Parse<TaskOtherTypeEnum>(taskTypeStr).ToString(), out result))
             {
                 return TaskTypeGroup.OtherGroup;
             }
+            // 濡傛灉浠ヤ笂杞崲閮戒笉鎴愬姛锛屾姏鍑篘otImplementedException寮傚父
             else
             {
                 throw new NotImplementedException();
             }
         }
 
+        // 鑾峰彇涓嬩竴涓湭瀹屾垚鐨勪换鍔$姸鎬�
         public static int GetNextNotCompletedStatus<T>(this int currentStatus) where T : Enum
         {
+            // 鑾峰彇鏋氫妇绫诲瀷
             Type type = typeof(T);
+            // 濡傛灉type涓虹┖锛屾姏鍑篈rgumentNullException寮傚父
             if (type is null) throw new ArgumentNullException();
+            // 濡傛灉type涓嶆槸鏋氫妇绫诲瀷锛岃繑鍥�0
             if (!type.IsEnum) return 0;
+            // 濡傛灉type鏄疶askInStatusEnum鏋氫妇绫诲瀷
             if (type == typeof(TaskInStatusEnum))
             {
+                // 鑾峰彇TaskInStatusEnum鏋氫妇绫诲瀷鐨勭储寮曞垪琛�
                 List<int> taskInboundTypes = type.GetEnumIndexList();
+                // 杩斿洖澶т簬褰撳墠鐘舵�佷笖灏忎簬InFinish鐘舵�佺殑绱㈠紩
                 return taskInboundTypes.Where(x => x > currentStatus && x < (int)TaskInStatusEnum.InFinish).OrderBy(x => x).FirstOrDefault();
             }
+            // 濡傛灉type鏄疶askOutStatusEnum鏋氫妇绫诲瀷
             else if (type == typeof(TaskOutStatusEnum))
             {
+                // 鑾峰彇TaskOutStatusEnum鏋氫妇绫诲瀷鐨勭储寮曞垪琛�
                 return type.GetEnumIndexList().Where(x => x > currentStatus && x < (int)TaskOutStatusEnum.OutFinish).OrderBy(x => x).FirstOrDefault();
             }
+            // 濡傛灉浠ヤ笂鏉′欢閮戒笉婊¤冻锛屾姏鍑篘otImplementedException寮傚父
             else
             {
                 throw new NotImplementedException();
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Communicator/AllenBrandly/AllenBrandlyEtherNetCommunicator.cs b/WIDESEAWCS_Server/WIDESEAWCS_Communicator/AllenBrandly/AllenBrandlyEtherNetCommunicator.cs
new file mode 100644
index 0000000..4587a42
--- /dev/null
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Communicator/AllenBrandly/AllenBrandlyEtherNetCommunicator.cs
@@ -0,0 +1,623 @@
+锘縰sing HslCommunication.Core;
+using HslCommunication.LogNet;
+using HslCommunication.Profinet.Omron;
+using HslCommunication;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
+using System.Linq;
+using System.Net.NetworkInformation;
+using System.Net;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using System.ComponentModel;
+using HslCommunication.Profinet.AllenBradley;
+
+namespace WIDESEAWCS_Communicator
+{
+    /// <summary>
+    /// 缃楀厠闊﹀皵(AB)EtherNet/IP(CIP)
+    /// </summary>
+    [Description("缃楀厠闊﹀皵(AB)EtherNet/IP(CIP)")]
+    public class AllenBrandlyEtherNetCommunicator : BaseCommunicator
+    {
+        #region Private Member
+        /// <summary>
+        /// HSLCommunication鐨勮タ闂ㄥ瓙鐨凷7鍗忚鐨勯�氳绫�
+        /// </summary>
+        private AllenBradleyNet plc;
+
+        /// <summary>
+        /// 璁惧鐨処P鍦板潃銆�
+        /// </summary>
+        private string _ipAddress;
+
+        /// <summary>
+        /// 杩炴帴浣跨敤鐨勭鍙e彿銆�
+        /// </summary>
+        private int _port;
+
+        /// <summary>
+        /// 褰撳墠閫氳鍣ㄦ槸鍚﹀凡杩炴帴鍒癙LC銆�  
+        /// </summary>
+        private bool _connected;
+
+        /// <summary>
+        /// PLC鍚嶇О
+        /// </summary>
+        private string _name;
+
+        private ILogNet _logNet;
+
+        private bool _isPing = true;
+        #endregion Private Member
+
+        #region Public Member
+        public override ILogNet LogNet => _logNet;
+
+        public override string Name => _name;
+
+        public override bool IsConnected => _connected;
+
+        #endregion Public Member
+
+        #region Constructor Function
+        /// <summary>
+        /// 鏋勯�犲嚱鏁�
+        /// </summary>
+        /// <param name="ipAddress">璁惧鐨処P鍦板潃</param>
+        /// <param name="port">杩炴帴浣跨敤鐨勭鍙e彿</param>
+        /// <param name="name">璁惧鍚嶇О</param>
+        public AllenBrandlyEtherNetCommunicator(string ipAddress, int port, string name)
+        {
+            string path = AppDomain.CurrentDomain.BaseDirectory + $"Log_PLCReadWrite\\{name}";
+            _logNet = new LogNetFileSize(path, 10 * 1024 * 1024, 100);
+
+            bool ipCheck = IPAddress.TryParse(ipAddress, out IPAddress? address);
+            if (!ipCheck)
+            {
+                _logNet.WriteError(name, string.Format(CommunicationExceptionMessage.IpAddressErrorException, ipAddress));
+                throw new CommunicationException(string.Format(CommunicationExceptionMessage.IpAddressErrorException, ipAddress), CommunicationErrorType.IpAddressError);
+            }
+
+            _ipAddress = ipAddress;//閫氳繃鏋勯�犲嚱鏁拌祴鍊艰澶囩殑IP鍦板潃
+            _port = port;//閫氳繃鏋勯�犲嚱鏁拌祴鍊艰繛鎺ヤ娇鐢ㄧ殑绔彛鍙�
+            _name = name;
+        }
+        #endregion
+
+        #region Private Method
+        /// <summary>
+        /// 浠嶰perateResult瀵硅薄涓幏鍙栬鍙栫殑鏁版嵁銆�
+        /// </summary>
+        /// <typeparam name="T">璇诲彇鐨勬暟鎹被鍨嬨��</typeparam>
+        /// <param name="operateResult">HSLCommunication璇诲彇鐨凮perateResult<T>瀵硅薄</param>
+        /// <returns>濡傛灉璇诲彇鎴愬姛锛岃繑鍥炶鍙栫粨鏋滐紝璇诲彇澶辫触锛屾姏鍑鸿嚜瀹氫箟閫氳寮傚父</returns>
+        /// <exception cref="CommunicationException">鑷畾涔夐�氳寮傚父绫�</exception>
+        private object GetContent<T>(OperateResult<T> operateResult, string address)
+        {
+            try
+            {
+                if (!operateResult.IsSuccess)
+                {
+                    throw new CommunicationException(string.Format(CommunicationExceptionMessage.ReadFailedException, typeof(T).Name, address, operateResult.Message), CommunicationErrorType.ReadFailed);
+                }
+                return operateResult.Content ?? throw new CommunicationException(string.Format(CommunicationExceptionMessage.ReadDataIsNull, address), CommunicationErrorType.ReadFailed);
+            }
+            catch (Exception ex)
+            {
+                LogNet.WriteException(Name, ex.Message, ex);
+                throw new CommunicationException(ex.Message, CommunicationErrorType.ReadFailed, innerException: ex);
+            }
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="operateResult"></param>
+        /// <param name="address"></param>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        /// <exception cref="CommunicationException"></exception>
+        private bool GetResult<T>(OperateResult operateResult, string address, T value) where T : notnull
+        {
+            StringBuilder stringBuilder = new StringBuilder();
+            try
+            {
+                stringBuilder.AppendLine(string.Format(CommunicationInfoMessage.WriteData, address, value));
+                if (!operateResult.IsSuccess)
+                {
+                    throw new CommunicationException(string.Format(CommunicationExceptionMessage.WriteFailedException, typeof(T).Name, address, value, operateResult.Message), CommunicationErrorType.WriteFailed);
+                }
+                else
+                {
+                    object? obj = null;
+                    for (int i = 0; i < 5; i++)
+                    {
+                        T readValue = Read<T>(address);
+                        stringBuilder.AppendLine(string.Format(CommunicationInfoMessage.WriteAfterRead, readValue, value));
+                        obj = readValue;
+                        if (readValue.Equals(value))
+                        {
+                            stringBuilder.AppendLine(string.Format(CommunicationInfoMessage.WriteAndReadCheckSuccess, address, value, readValue));
+                            return true;
+                        }
+                        else if (i < 4)
+                        {
+                            Write(address, value);
+                        }
+                    }
+                    stringBuilder.AppendLine(string.Format(CommunicationExceptionMessage.WriteAndReadCheckFaild, address, value, obj));
+                    throw new CommunicationException(stringBuilder.ToString(), CommunicationErrorType.WriteFailed);
+                }
+            }
+            catch (Exception ex)
+            {
+                LogNet.WriteException(Name, ex.Message, ex);
+                throw new CommunicationException(ex.Message, CommunicationErrorType.WriteFailed, innerException: ex);
+            }
+            finally
+            {
+                LogNet.WriteInfo(Name, stringBuilder.ToString());
+            }
+
+        }
+
+        /// <summary>
+        /// 鍐欏叆鏁版嵁
+        /// </summary>
+        /// <param name="address"></param>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        /// <exception cref="CommunicationException"></exception>
+        private OperateResult Write(string address, object value)
+        {
+            try
+            {
+                Type type = value.GetType();
+
+                switch (Type.GetTypeCode(type))
+                {
+                    case TypeCode.Int32:
+                        return plc.Write(address, Convert.ToInt32(value));
+                    case TypeCode.UInt32:
+                        return plc.Write(address, Convert.ToUInt32(value));
+                    case TypeCode.Int16:
+                        return plc.Write(address, Convert.ToInt16(value));
+                    case TypeCode.UInt16:
+                        return plc.Write(address, Convert.ToUInt16(value));
+                    case TypeCode.Single:
+                        return plc.Write(address, Convert.ToSingle(value));
+                    case TypeCode.Boolean:
+                        return plc.Write(address, Convert.ToBoolean(value));
+                    case TypeCode.Byte:
+                        return plc.Write(address, Convert.ToByte(value));
+                    case TypeCode.String:
+                        return plc.Write(address, Convert.ToString(value));
+                    case TypeCode.Char:
+                        return plc.Write(address, Convert.ToChar(value));
+                    default:
+                        throw new CommunicationException(string.Format(CommunicationExceptionMessage.DataTypeErrorException, type.Name, address), CommunicationErrorType.TypeError);
+                }
+            }
+            catch (CommunicationException ex)
+            {
+                throw new CommunicationException(ex.Message, ex.ErrorType);
+            }
+            catch (Exception ex)
+            {
+                //璇诲彇寮傚父鏃舵姏鍑鸿嚜瀹氫箟閫氳寮傚父绫�
+                throw new CommunicationException(string.Format(CommunicationExceptionMessage.DataTypeErrorException, address, value), CommunicationErrorType.TypeError, innerException: ex);
+            }
+        }
+
+        private object Read(string address, TypeCode typeCode)
+        {
+            try
+            {
+                switch (typeCode)
+                {
+                    case TypeCode.Int32:
+                        return (int)GetContent(plc.ReadInt32(address), address);
+                    case TypeCode.UInt32:
+                        return (uint)GetContent(plc.ReadUInt32(address), address);
+                    case TypeCode.Int16:
+                        return (short)GetContent(plc.ReadInt16(address), address);
+                    case TypeCode.UInt16:
+                        return (ushort)GetContent(plc.ReadUInt16(address), address);
+                    case TypeCode.Single:
+                        return (float)GetContent(plc.ReadFloat(address), address);
+                    case TypeCode.Boolean:
+                        return (bool)GetContent(plc.ReadBool(address), address);
+                    case TypeCode.Byte:
+                        return (byte)GetContent(plc.ReadByte(address), address);
+                    case TypeCode.String:
+                        return (string)GetContent(plc.ReadString(address), address);
+                    case TypeCode.Char:
+                        return (char)GetContent(plc.ReadByte(address), address);
+                    default:
+                        throw new CommunicationException(string.Format(CommunicationExceptionMessage.DataTypeErrorException, typeCode.ToString(), address), CommunicationErrorType.TypeError);
+                }
+            }
+            catch (CommunicationException ex)
+            {
+                //璇诲彇寮傚父鏃舵姏鍑鸿嚜瀹氫箟閫氳寮傚父绫�
+                throw new CommunicationException(ex.Message, ex.ErrorType);
+            }
+            catch (Exception ex)
+            {
+                //璇诲彇寮傚父鏃舵姏鍑鸿嚜瀹氫箟閫氳寮傚父绫�
+                throw new CommunicationException($"璇诲彇鏁版嵁寮傚父,閿欒淇℃伅:{ex.Message}", CommunicationErrorType.ReadException, innerException: ex);
+            }
+        }
+
+        private void Ping()
+        {
+            Task.Run(() =>
+            {
+                while (_isPing)
+                {
+                    try
+                    {
+                        IPStatus status = plc.IpAddressPing();
+                        if (status == IPStatus.Success)
+                            _connected = true;
+                        else
+                            _connected = false;
+                    }
+                    finally
+                    {
+                        Thread.Sleep(100);
+                    }
+                }
+            });
+
+        }
+        #endregion
+
+        #region Public Method
+        public override bool Connect()
+        {
+            try
+            {
+                //瀹炰緥鍖栦竴涓タ闂ㄥ瓙鐨凷7鍗忚鐨勯�氳瀵硅薄
+                plc = new AllenBradleyNet()
+                {
+                    IpAddress = _ipAddress,
+                    Port = _port,
+                    Slot = 0
+                };
+                OperateResult operateResult = plc.ConnectServer();//杩炴帴PLC
+                _connected = operateResult.IsSuccess;//灏嗚繛鎺ユ槸鍚︽垚鍔熻祴鍊肩粰褰撳墠閫氳鍣ㄦ槸鍚﹀凡杩炴帴鍒癙LC
+
+                if (_connected)
+                    LogNet.WriteInfo(Name, string.Format(CommunicationInfoMessage.ConnectSuccess, _ipAddress, _port));
+                else
+                    LogNet.WriteError(Name, string.Format(CommunicationExceptionMessage.ConnectFaild, _ipAddress, _port, operateResult.Message));
+                Ping();
+                return operateResult.IsSuccess;
+            }
+            catch (Exception ex)
+            {
+                LogNet.WriteException(Name, string.Format(CommunicationExceptionMessage.ConnectFaild, _ipAddress, _port, ex.Message), ex);
+                //杩炴帴寮傚父鏃舵姏鍑鸿嚜瀹氫箟寮傚父绫�
+                throw new CommunicationException(ex.Message, CommunicationErrorType.ConnectionFailed, innerException: ex);
+            }
+        }
+
+        public override bool Disconnect()
+        {
+            try
+            {
+                if (plc != null)
+                {
+                    OperateResult operateResult = plc.ConnectClose();//鏂紑涓嶱LC鐨勮繛鎺�
+                    return operateResult.IsSuccess;
+                }
+                return false;
+            }
+            catch (Exception ex)
+            {
+                return false;
+            }
+            finally
+            {
+                _connected = false;
+            }
+        }
+
+        public override void Dispose()
+        {
+            _isPing = false;
+            Disconnect();
+            plc.Dispose();
+            GC.SuppressFinalize(this);
+        }
+
+        public override byte[] Read(string address, int length)
+        {
+            return (byte[])GetContent(plc.Read(address, (ushort)length), address);
+        }
+
+        public override T Read<T>(string address)
+        {
+            Type type = typeof(T);
+            return (T)Read(address, Type.GetTypeCode(type));
+        }
+
+        public override object ReadAsObj(string address, string dataType)
+        {
+            return Read(address, SiemensDBDataType.GetTypeCode(dataType));
+        }
+
+        public override T ReadCustomer<T>(string address)
+        {
+            try
+            {
+                return plc.ReadCustomer<T>(address).Content;
+            }
+            catch (Exception ex)
+            {
+                LogNet.WriteException(Name, $"銆恵Name}銆慞LC璇诲彇寮傚父锛屽湴鍧�锛氥�恵address}銆戯紝閿欒淇℃伅锛氥�恵ex.Message}銆�", ex);
+                throw new CommunicationException(ex.Message, CommunicationErrorType.ReadException, innerException: ex);
+            }
+        }
+
+        public override OperateResult<TimeSpan> Wait<T>(string address, int readInterval, int waitTimeout, T value)
+        {
+            TypeCode typeCode = Type.GetTypeCode(typeof(T));
+            switch (typeCode)
+            {
+                case TypeCode.Byte:
+                    DateTime start = DateTime.Now;
+                    while (true)
+                    {
+                        OperateResult<byte> read = plc.ReadByte(address);
+                        if (!read.IsSuccess) return OperateResult.CreateFailedResult<TimeSpan>(read);
+
+                        if (read.Content == Convert.ToByte(value)) return OperateResult.CreateSuccessResult(DateTime.Now - start);
+                        if (waitTimeout > 0 && (DateTime.Now - start).TotalMilliseconds > waitTimeout)
+                        {
+                            return new OperateResult<TimeSpan>(StringResources.Language.CheckDataTimeout + waitTimeout);
+                        }
+                        HslHelper.ThreadSleep(readInterval);
+                    }
+                case TypeCode.Int16:
+                    OperateResult<TimeSpan> operateResultShort = plc.Wait(address, Convert.ToInt16(value), readInterval, waitTimeout);
+                    return operateResultShort;
+                case TypeCode.Int32:
+                    OperateResult<TimeSpan> operateResultInt = plc.Wait(address, Convert.ToInt16(value), readInterval, waitTimeout);
+                    return operateResultInt;
+                case TypeCode.UInt16:
+                    OperateResult<TimeSpan> operateResultUShort = plc.Wait(address, Convert.ToInt16(value), readInterval, waitTimeout);
+                    return operateResultUShort;
+                case TypeCode.UInt32:
+                    OperateResult<TimeSpan> operateResultUInt = plc.Wait(address, Convert.ToInt16(value), readInterval, waitTimeout);
+                    return operateResultUInt;
+                default:
+                    throw new NotSupportedException();
+            }
+        }
+
+        public override bool Write(string address, byte[] data)
+        {
+            try
+            {
+                OperateResult result = plc.Write(address, data);
+                if (result.IsSuccess)
+                {
+                    return result.IsSuccess;
+                }
+                else
+                {
+                    //todo 鍐欏叆澶辫触
+                    return false;
+                }
+            }
+            catch (Exception ex)
+            {
+                //鍐欏叆寮傚父鏃舵姏鍑鸿嚜瀹氫箟閫氳寮傚父绫�
+                throw new CommunicationException($"鍐欏叆鏁版嵁寮傚父,鍦板潃:銆恵address}銆�,閿欒淇℃伅: {ex.Message}", CommunicationErrorType.ReadFailed, innerException: ex);
+            }
+        }
+
+        public override bool Write<T>(string address, T value)
+        {
+            return GetResult(Write(address, value), address, value);
+        }
+
+        public override bool WriteCustomer<T>(string address, [NotNull] T value)
+        {
+            StringBuilder stringBuilder = new StringBuilder();
+            try
+            {
+                OperateResult operateResult = plc.WriteCustomer(address, value);
+                stringBuilder.AppendLine(string.Format(CommunicationInfoMessage.WriteData, address, JsonConvert.SerializeObject(value)));
+                if (operateResult.IsSuccess)
+                {
+                    object? obj = null;
+                    for (int i = 0; i < 5; i++)
+                    {
+                        T readValue = ReadCustomer<T>(address);
+                        stringBuilder.AppendLine(string.Format(CommunicationInfoMessage.WriteAfterRead, address, JsonConvert.SerializeObject(readValue)));
+                        obj = readValue;
+                        PropertyInfo[] propertyInfos = typeof(T).GetProperties();
+                        for (int j = 0; j < propertyInfos.Length; j++)
+                        {
+                            object? writeValueItem = propertyInfos[j].GetValue(value);
+                            object? readValueItem = propertyInfos[j].GetValue(readValue);
+                            if (writeValueItem.Equals(readValueItem))
+                            {
+                                stringBuilder.AppendLine(string.Format(CommunicationInfoMessage.WriteAndReadCheckSuccess, address, JsonConvert.SerializeObject(value), JsonConvert.SerializeObject(readValue)));
+                            }
+                            else
+                            {
+                                break;
+                            }
+                            if (j == propertyInfos.Length - 1)
+                                return true;
+                        }
+
+                        plc.WriteCustomer(address, value);
+                    }
+                    stringBuilder.AppendLine(string.Format(CommunicationExceptionMessage.WriteAndReadCheckFaild, address, JsonConvert.SerializeObject(value), JsonConvert.SerializeObject(obj)));
+                    throw new CommunicationException(string.Format(CommunicationExceptionMessage.WriteAndReadCheckFaild, address, JsonConvert.SerializeObject(value), JsonConvert.SerializeObject(obj)), CommunicationErrorType.WriteFailed);
+                }
+                else
+                {
+                    throw new CommunicationException(string.Format(CommunicationExceptionMessage.WriteFailedException, typeof(T).Name, address, JsonConvert.SerializeObject(value), operateResult.Message), CommunicationErrorType.WriteFailed);
+                }
+            }
+            catch (Exception ex)
+            {
+                LogNet.WriteException(Name, ex.Message, ex);
+                throw new CommunicationException(ex.Message, CommunicationErrorType.WriteFailed, innerException: ex);
+            }
+            finally
+            {
+                LogNet.WriteInfo(Name, stringBuilder.ToString());
+            }
+        }
+
+        public override bool WriteObj(string address, string dataType, object value)
+        {
+            bool obj = false;
+            switch (dataType.ToLower())
+            {
+                case SiemensDBDataType.DataType_DInt:
+                    {
+                        int writeVal;
+                        try
+                        {
+                            writeVal = Convert.ToInt32(value);
+                        }
+                        catch (Exception ex)
+                        {
+                            throw new CommunicationException(string.Format(CommunicationExceptionMessage.TypeConvertError, dataType, address, value, ex.Message), CommunicationErrorType.TypeError, innerException: ex);
+                        }
+                        obj = GetResult(Write(address, writeVal), address, writeVal);
+                    }
+                    break;
+                case SiemensDBDataType.DataType_DW:
+                    {
+                        uint writeVal;
+                        try
+                        {
+                            writeVal = Convert.ToUInt32(value);
+                        }
+                        catch (Exception ex)
+                        {
+                            throw new CommunicationException(string.Format(CommunicationExceptionMessage.TypeConvertError, dataType, address, value, ex.Message), CommunicationErrorType.TypeError, innerException: ex);
+                        }
+                        obj = GetResult(Write(address, writeVal), address, writeVal);
+                    }
+                    break;
+                case SiemensDBDataType.DataType_Int:
+                    {
+                        short writeVal;
+                        try
+                        {
+                            writeVal = Convert.ToInt16(value);
+                        }
+                        catch (Exception ex)
+                        {
+                            throw new CommunicationException(string.Format(CommunicationExceptionMessage.TypeConvertError, dataType, address, value, ex.Message), CommunicationErrorType.TypeError, innerException: ex);
+                        }
+                        obj = GetResult(Write(address, writeVal), address, writeVal);
+                    }
+                    break;
+                case SiemensDBDataType.DataType_W:
+                    {
+                        ushort writeVal;
+                        try
+                        {
+                            writeVal = Convert.ToUInt16(value);
+                        }
+                        catch (Exception ex)
+                        {
+                            throw new CommunicationException(string.Format(CommunicationExceptionMessage.TypeConvertError, dataType, address, value, ex.Message), CommunicationErrorType.TypeError, innerException: ex);
+                        }
+                        obj = GetResult(Write(address, writeVal), address, writeVal);
+                    }
+                    break;
+                case SiemensDBDataType.DataType_Float:
+                    {
+                        float writeVal;
+                        try
+                        {
+                            writeVal = Convert.ToSingle(value);
+                        }
+                        catch (Exception ex)
+                        {
+                            throw new CommunicationException(string.Format(CommunicationExceptionMessage.TypeConvertError, dataType, address, value, ex.Message), CommunicationErrorType.TypeError, innerException: ex);
+                        }
+                        obj = GetResult(Write(address, writeVal), address, writeVal);
+                    }
+                    break;
+                case SiemensDBDataType.DataType_Bool:
+                    {
+                        bool writeVal;
+                        try
+                        {
+                            writeVal = Convert.ToBoolean(value);
+                        }
+                        catch (Exception ex)
+                        {
+                            throw new CommunicationException(string.Format(CommunicationExceptionMessage.TypeConvertError, dataType, address, value, ex.Message), CommunicationErrorType.TypeError, innerException: ex);
+                        }
+                        obj = GetResult(Write(address, writeVal), address, writeVal);
+                    }
+                    break;
+                case SiemensDBDataType.DataType_Byte:
+                    {
+                        byte writeVal;
+                        try
+                        {
+                            writeVal = Convert.ToByte(value);
+                        }
+                        catch (Exception ex)
+                        {
+                            throw new CommunicationException(string.Format(CommunicationExceptionMessage.TypeConvertError, dataType, address, value, ex.Message), CommunicationErrorType.TypeError, innerException: ex);
+                        }
+                        obj = GetResult(Write(address, writeVal), address, writeVal);
+                    }
+                    break;
+                case SiemensDBDataType.DataType_String:
+                    {
+                        string writeVal;
+                        try
+                        {
+                            writeVal = value.ToString();
+                        }
+                        catch (Exception ex)
+                        {
+                            throw new CommunicationException(string.Format(CommunicationExceptionMessage.TypeConvertError, dataType, address, value, ex.Message), CommunicationErrorType.TypeError, innerException: ex);
+                        }
+                        obj = GetResult(Write(address, writeVal), address, writeVal);
+                    }
+
+                    break;
+                case SiemensDBDataType.DataType_Char:
+
+                    break;
+                default:
+                    throw new CommunicationException(string.Format(CommunicationExceptionMessage.DataTypeErrorException, dataType, address), CommunicationErrorType.TypeError);
+            }
+            return obj;
+        }
+        #endregion
+
+        #region Destruction Function
+        /// <summary>
+        /// 鏋愭瀯鍑芥暟锛岀‘淇濆湪涓嶅啀闇�瑕佹椂鍏抽棴杩炴帴  
+        /// </summary>
+        ~AllenBrandlyEtherNetCommunicator()
+        {
+            Dispose();
+        }
+        #endregion
+    }
+}
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Communicator/CommunicationException.cs b/WIDESEAWCS_Server/WIDESEAWCS_Communicator/CommunicationException.cs
index 9c45f45..fab33bf 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Communicator/CommunicationException.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Communicator/CommunicationException.cs
@@ -133,11 +133,6 @@
         public const string DataTypeErrorException = "鏁版嵁绫诲瀷閿欒锛屾湭瀹氫箟璇LC鏁版嵁绫诲瀷锛氥�恵0}銆戯紝鍦板潃锛氥�恵1}銆�";
 
         /// <summary>
-        /// 鏁版嵁璇诲彇寮傚父,鍙傛暟銆愭暟鎹被鍨嬶紝鍗忚鍦板潃锛岄敊璇俊鎭��
-        /// </summary>
-        public const string ReadException = "鏁版嵁璇诲彇澶辫触锛屾暟鎹被鍨嬶細銆恵0}銆戯紝鍦板潃锛氥�恵1}銆戯紝閿欒淇℃伅锛氥�恵2}銆�";
-
-        /// <summary>
         /// 鏁版嵁璇诲彇澶辫触,鍙傛暟銆愭暟鎹被鍨嬶紝鍗忚鍦板潃锛岄敊璇俊鎭��
         /// </summary>
         public const string WriteAndReadCheckFaild = "鏁版嵁鍐欏叆鍚庤鍙栨牎楠屽け璐ワ紝鍦板潃锛氥�恵0}銆戯紝鍐欏叆鐨勬暟鎹細銆恵1}銆戯紝璇诲彇鐨勬暟鎹細銆恵2}銆�";
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Omron/OmronEtherNetCommunicator.cs b/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Omron/OmronEtherNetCommunicator.cs
index 3d2a1b4..d92c782 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Omron/OmronEtherNetCommunicator.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Omron/OmronEtherNetCommunicator.cs
@@ -18,7 +18,7 @@
 namespace WIDESEAWCS_Communicator
 {
     /// <summary>
-    /// 瑗块棬瀛怱7閫氳绫�
+    /// 娆у榫橢therNet/IP(CIP)
     /// </summary>
     [Description("娆у榫橢therNet/IP(CIP)")]
     public class OmronEtherNetCommunicator : BaseCommunicator
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs b/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs
index de6f6db..7ffe969 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs
@@ -161,7 +161,7 @@
                     for (int i = 0; i < 5; i++)
                     {
                         T readValue = Read<T>(address);
-                        stringBuilder.AppendLine(string.Format(CommunicationInfoMessage.WriteAfterRead, readValue, value));
+                        stringBuilder.AppendLine(string.Format(CommunicationInfoMessage.WriteAfterRead, address, value));
                         obj = readValue;
                         if (readValue.Equals(value))
                         {
@@ -186,7 +186,6 @@
             {
                 LogNet.WriteInfo(Name, stringBuilder.ToString());
             }
-
         }
 
         /// <summary>
@@ -426,7 +425,7 @@
             catch (Exception ex)
             {
                 //鍐欏叆寮傚父鏃舵姏鍑鸿嚜瀹氫箟閫氳寮傚父绫�
-                throw new CommunicationException($"鍐欏叆鏁版嵁寮傚父,鍦板潃:銆恵address}銆�,閿欒淇℃伅: {ex.Message}", CommunicationErrorType.ReadFailed, innerException: ex);
+                throw new CommunicationException($"鍐欏叆鏁版嵁寮傚父,鍦板潃:銆恵address}銆�,閿欒淇℃伅: {ex.Message}", CommunicationErrorType.WriteFailed, innerException: ex);
             }
         }
 
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Communicator/WIDESEAWCS_Communicator.csproj b/WIDESEAWCS_Server/WIDESEAWCS_Communicator/WIDESEAWCS_Communicator.csproj
index bcdea18..0949fd0 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Communicator/WIDESEAWCS_Communicator.csproj
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Communicator/WIDESEAWCS_Communicator.csproj
@@ -4,8 +4,8 @@
 		<TargetFramework>net6.0</TargetFramework>
 		<ImplicitUsings>enable</ImplicitUsings>
 		<Nullable>enable</Nullable>
-		<Version>2.0.0</Version>
-		<Description>鏂板姹囧窛PLC Tcp閫氳銆丮odbusTcp閫氳锛圵riteCustomer銆丷eadCustomer鏂规硶涓嶅彲鐢紝浣跨敤鏃舵敞鎰忥級</Description>
+		<Version>2.2.1</Version>
+		<Description>鏂板缃楀厠闊﹀皵(AB)EtherNet/IP(CIP)閫氳锛圵riteCustomer銆丷eadCustomer鏂规硶闄よタ闂ㄥ瓙PLC涔嬪浠嶄笉鍙敤锛屼娇鐢ㄦ椂娉ㄦ剰锛�</Description>
 	</PropertyGroup>
 
 	<ItemGroup>
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/CacheAOP.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/CacheAOP.cs
index cd8c28e..a0f8edb 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/CacheAOP.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/CacheAOP.cs
@@ -89,16 +89,21 @@
         protected string CustomCacheKey(IInvocation invocation)
         {
             var typeName = invocation.TargetType.Name;
+            //鑾峰彇璋冪敤鐩爣绫诲瀷鍚嶇О
             var methodName = invocation.Method.Name;
+            //鑾峰彇璋冪敤鏂规硶鍚嶇О
             var methodArguments = invocation.Arguments.Select(GetArgumentValue).Take(3).ToList();//鑾峰彇鍙傛暟鍒楄〃锛屾渶澶氫笁涓�
 
             string key = $"{typeName}:{methodName}:";
+            //瀹氫箟key锛屾牸寮忎负锛氱被鍨嬪悕绉�:鏂规硶鍚嶇О:
             foreach (var param in methodArguments)
             {
                 key = $"{key}{param}:";
+                //閬嶅巻鍙傛暟鍒楄〃锛屽皢鍙傛暟鍊兼坊鍔犲埌key涓紝鏍煎紡涓猴細鍙傛暟鍊�:
             }
 
             return key.TrimEnd(':');
+            //杩斿洖key锛屽幓鎺夋湯灏剧殑鍐掑彿
         }
 
         /// <summary>
@@ -109,41 +114,58 @@
         protected static string GetArgumentValue(object arg)
         {
             if (arg is DateTime)
+                // 濡傛灉arg鏄疍ateTime绫诲瀷锛屽垯杩斿洖鍏跺瓧绗︿覆琛ㄧず褰㈠紡
                 return ((DateTime)arg).ToString("yyyyMMddHHmmss");
 
             if (!arg.IsNotEmptyOrNull())
+                // 濡傛灉arg涓嶆槸绌烘垨null锛屽垯杩斿洖鍏跺瓧绗︿覆琛ㄧず褰㈠紡
                 return arg.ObjToString();
 
             if (arg != null)
             {
+                // 濡傛灉arg涓嶆槸绌烘垨null
                 if (arg is Expression)
                 {
+                    // 濡傛灉arg鏄疎xpression绫诲瀷
                     var obj = arg as Expression;
+                    // 瑙f瀽arg
                     var result = Resolve(obj);
+                    // 杩斿洖MD5鍔犲瘑鍚庣殑瀛楃涓�
                     return MD5Helper.MD5Encrypt16(result);
                 }
                 else if (arg.GetType().IsClass)
                 {
+                    // 濡傛灉arg鏄被绫诲瀷
+                    // 灏哸rg搴忓垪鍖栦负JSON瀛楃涓�
                     return MD5Helper.MD5Encrypt16(JsonConvert.SerializeObject(arg));
                 }
 
+                // 鍚﹀垯锛岃繑鍥�"value:"鍔犱笂arg鐨勫瓧绗︿覆琛ㄧず褰㈠紡
                 return $"value:{arg.ObjToString()}";
             }
+            // 濡傛灉arg鏄┖鎴杗ull锛屽垯杩斿洖绌哄瓧绗︿覆
             return string.Empty;
         }
 
         private static string Resolve(Expression expression)
         {
+            // 鍒涘缓涓�涓狤xpressionContext瀵硅薄
             ExpressionContext expContext = new ExpressionContext();
+            // 瑙f瀽琛ㄨ揪寮忥紝骞舵寚瀹氳В鏋愮被鍨嬩负WhereSingle
             expContext.Resolve(expression, ResolveExpressType.WhereSingle);
+            // 鑾峰彇瑙f瀽缁撴灉
             var value = expContext.Result.GetString();
+            // 鑾峰彇鍙傛暟鍒楄〃
             var pars = expContext.Parameters;
 
+            // 閬嶅巻鍙傛暟鍒楄〃
             pars.ForEach(s =>
             {
+                // 灏嗗弬鏁板悕鏇挎崲涓哄弬鏁板��
                 value = value.Replace(s.ParameterName, s.Value.ObjToString());
             });
 
+            // 杩斿洖鏇挎崲鍚庣殑鍊�
             return value;
         }
     }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/LogAOP.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/LogAOP.cs
index 9ee515d..f963e82 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/LogAOP.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/LogAOP.cs
@@ -16,7 +16,7 @@
 namespace WIDESEAWCS_Core.AOP
 {
     /// <summary>
-	/// 鎷︽埅鍣˙logLogAOP 缁ф壙IInterceptor鎺ュ彛
+	/// 鎷︽埅鍣↙ogAOP 缁ф壙IInterceptor鎺ュ彛
 	/// </summary>
 	public class LogAOP : IInterceptor
     {
@@ -123,7 +123,6 @@
             catch (Exception ex) // 鍚屾2
             {
                 LogEx(ex, apiLogAopInfo);
-                throw;
             }
         }
 
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/SqlSugarAop.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/SqlSugarAop.cs
index 3dd4ce7..e69682a 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/SqlSugarAop.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/SqlSugarAop.cs
@@ -31,7 +31,7 @@
                     }
 
                     PropertyInfo propertyInfo = entityInfo.EntityColumnInfo.PropertyInfo;
-                    SequenceAttirbute? sequenceAttirbute = propertyInfo.GetCustomAttribute<SequenceAttirbute>();
+                    SequenceAttribute? sequenceAttirbute = propertyInfo.GetCustomAttribute<SequenceAttribute>();
                     if (sequenceAttirbute != null)
                     {
                         if (propertyInfo.GetValue(entityInfo.EntityValue)?.ObjToInt() <= 0)
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/Attributes/SequenceAttirbute.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/Attributes/SequenceAttribute.cs
similarity index 85%
rename from WIDESEAWCS_Server/WIDESEAWCS_Core/Attributes/SequenceAttirbute.cs
rename to WIDESEAWCS_Server/WIDESEAWCS_Core/Attributes/SequenceAttribute.cs
index 968b290..569aa5f 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/Attributes/SequenceAttirbute.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/Attributes/SequenceAttribute.cs
@@ -7,7 +7,7 @@
 namespace WIDESEAWCS_Core.Attributes
 {
     [AttributeUsage(AttributeTargets.Property)]
-    public class SequenceAttirbute : Attribute
+    public class SequenceAttribute : Attribute
     {
         public string SequenceName { get; set; }
 
@@ -21,7 +21,7 @@
 
         public bool IsCycle { get; set; } = true;
 
-        public SequenceAttirbute(string sequenceName, int seqMaxValue)
+        public SequenceAttribute(string sequenceName, int seqMaxValue)
         {
             SequenceName = sequenceName;
             SeqMaxValue = seqMaxValue;
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseRepository/RepositoryBase.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseRepository/RepositoryBase.cs
index 20dd214..77621f8 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseRepository/RepositoryBase.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseRepository/RepositoryBase.cs
@@ -517,8 +517,8 @@
                 orderByModels.Add(orderByModel);
             }
             int totalCount = 0;
-            List<TEntity> list = _db.Queryable<TEntity>()
-                .WhereIF(!string.IsNullOrEmpty(where), where).OrderBy(orderByModels).ToPageList(pageIndex, pageSize, ref totalCount);
+            List<TEntity> list = _db.Queryable<TEntity>().OrderBy(orderByModels)
+                .WhereIF(!string.IsNullOrEmpty(where), where).ToPageList(pageIndex, pageSize, ref totalCount);
 
             return new PageGridData<TEntity>(totalCount, list);
         }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseServices/ServiceBase.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseServices/ServiceBase.cs
index 4403d2e..a65b4ba 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseServices/ServiceBase.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseServices/ServiceBase.cs
@@ -166,7 +166,7 @@
                 {
                     return new Dictionary<string, OrderByType> {
                         {
-                            pageData.Sort,pageData.Order?.ToLower() == OrderByType.Asc.ToString() ? OrderByType.Asc : OrderByType.Desc
+                            pageData.Sort,pageData.Order?.ToLower() == OrderByType.Asc.ToString().ToLower() ? OrderByType.Asc : OrderByType.Desc
                         } };
                 }
             }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/Const/TenantConst.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/Const/TenantConst.cs
index 9220391..f182198 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/Const/TenantConst.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/Const/TenantConst.cs
@@ -8,6 +8,6 @@
 {
     public class TenantConst
     {
-        public const string DBConStr = "Data Source={0};Initial Catalog={1};User ID={2};Password={3};Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
+        public const string DBConStr = "Data Source={0};Initial Catalog={1};User ID={2};Password={3};Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
     }
 }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/DB/Models/BaseEntity.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/DB/Models/BaseEntity.cs
index fcab024..e94af6a 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/DB/Models/BaseEntity.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/DB/Models/BaseEntity.cs
@@ -40,7 +40,7 @@
         /// </summary>
         [ImporterHeader(IsIgnore = true)]
         [ExporterHeader(DisplayName = "鍒涘缓鑰�")]
-        [SugarColumn(IsNullable = false, IsOnlyIgnoreUpdate = true, ColumnDescription = "鍒涘缓鑰�")]
+        [SugarColumn(IsNullable = false, Length = 50, IsOnlyIgnoreUpdate = true, ColumnDescription = "鍒涘缓鑰�")]
         public string Creater { get; set; }
 
         /// <summary>
@@ -60,7 +60,7 @@
         /// </summary>
         [ImporterHeader(IsIgnore = true)]
         [ExporterHeader(DisplayName = "淇敼浜�")]
-        [SugarColumn(IsNullable = true, IsOnlyIgnoreInsert = true, ColumnDescription = "淇敼浜�")]
+        [SugarColumn(IsNullable = true, Length = 50, IsOnlyIgnoreInsert = true, ColumnDescription = "淇敼浜�")]
         public string Modifier { get; set; }
 
         /// <summary>
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/Extensions/AutofacModuleRegister.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/Extensions/AutofacModuleRegister.cs
index e4e2058..8d19d8e 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/Extensions/AutofacModuleRegister.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/Extensions/AutofacModuleRegister.cs
@@ -23,8 +23,11 @@
             var basePath = AppContext.BaseDirectory;
             var cacheType = new List<Type>();
 
-            builder.RegisterType<LogAOP>();
-            cacheType.Add(typeof(LogAOP));
+            if (AppSettings.Get(new string[] { "AppSettings", "LogAOP", "Enabled" }).ObjToBool())
+            {
+                builder.RegisterType<LogAOP>();
+                cacheType.Add(typeof(LogAOP));
+            }
 
             builder.RegisterGeneric(typeof(RepositoryBase<>)).As(typeof(IRepository<>)).InstancePerDependency();//娉ㄥ唽浠撳偍
             builder.RegisterGeneric(typeof(ServiceBase<,>)).As(typeof(IService<>)).InstancePerDependency();//娉ㄥ唽鏈嶅姟
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/Helper/UtilConvert.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/Helper/UtilConvert.cs
index 352dd93..e8b5d75 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/Helper/UtilConvert.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/Helper/UtilConvert.cs
@@ -75,6 +75,10 @@
         {
             int reval = 0;
             if (thisValue == null) return 0;
+            if (thisValue is Enum && thisValue != DBNull.Value && Enum.TryParse(thisValue.GetType(), thisValue.ToString(), out var val))
+            {
+                return Convert.ToInt32(val.ChangeType(typeof(int)));
+            }
             if (thisValue != DBNull.Value && int.TryParse(thisValue.ToString(), out reval))
             {
                 return reval;
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/LogHelper/Logger.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/LogHelper/Logger.cs
index 7f1d74a..17a2043 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/LogHelper/Logger.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/LogHelper/Logger.cs
@@ -33,6 +33,7 @@
             {
                 try
                 {
+                    //濡傛灉闃熷垪涓湁鏁版嵁涓旈槦鍒楄〃涓殑琛屾暟灏忎簬500锛屽垯灏嗛槦鍒椾腑鐨勬暟鎹啓鍏ラ槦鍒楄〃
                     if (loggerQueueData.Count() > 0 && queueTable.Rows.Count < 500)
                     {
                         DequeueToTable(queueTable); continue;
@@ -40,8 +41,10 @@
                     //姣�5绉掑啓涓�娆℃暟鎹�
                     Thread.Sleep(5000);
 
+                    //濡傛灉闃熷垪琛ㄤ腑鐨勮鏁颁负0锛屽垯璺宠繃鏈寰幆
                     if (queueTable.Rows.Count == 0) { continue; }
 
+                    //鍒涘缓SqlSugarClient瀵硅薄锛岀敤浜庤繛鎺ユ暟鎹簱
                     SqlSugarClient sugarClient = new SqlSugarClient(new ConnectionConfig()
                     {
                         ConnectionString = DBContext.GetMainConnectionDb().Connection,
@@ -49,12 +52,15 @@
                         DbType = MainDb.DbType,
                     });
 
+                    //灏嗛槦鍒楄〃涓殑鏁版嵁鎵归噺鎻掑叆鏁版嵁搴�
                     int rows = sugarClient.Fastest<DataTable>().AS("Sys_Log").BulkCopy(queueTable);
 
+                    //娓呯┖闃熷垪琛�
                     queueTable.Clear();
                 }
                 catch (Exception ex)
                 {
+                    //鎵撳嵃寮傚父淇℃伅
                     Console.WriteLine(ex.ToString());
                 }
             }
@@ -66,25 +72,37 @@
             if (log != null)
             {
                 DataRow row = queueTable.NewRow();
+                // 濡傛灉log鐨凚eginDate涓虹┖鎴栬�匓eginDate鐨勫勾浠藉皬浜�2010锛屽垯灏咮eginDate璁剧疆涓哄綋鍓嶆椂闂�
                 if (log.BeginDate == null || log.BeginDate?.Year < 2010)
                 {
                     log.BeginDate = DateTime.Now;
                 }
+                // 濡傛灉log鐨凟ndDate涓虹┖锛屽垯灏咵ndDate璁剧疆涓哄綋鍓嶆椂闂�
                 if (log.EndDate == null)
                 {
                     log.EndDate = DateTime.Now;
                 }
                 //  row["Id"] = log.Id;
+                // 灏哛equestParam涓殑鎹㈣绗︽浛鎹负绌哄瓧绗︿覆
                 row["RequestParam"] = log.RequestParam?.Replace("\r\n", "");
+                // 灏哛esponseParam涓殑鎹㈣绗︽浛鎹负绌哄瓧绗︿覆
                 row["ResponseParam"] = log.ResponseParam?.Replace("\r\n", "");
                 //row["Success"] = log.Success ?? -1;
+                // 灏咮eginDate璁剧疆涓簂og鐨凚eginDate
                 row["BeginDate"] = log.BeginDate;
+                // 灏咵ndDate璁剧疆涓簂og鐨凟ndDate
                 row["EndDate"] = log.EndDate;
+                // 璁$畻ElapsedTime锛屽嵆EndDate鍑忓幓BeginDate鐨勬绉掓暟
                 row["ElapsedTime"] = ((DateTime)log.EndDate - (DateTime)log.BeginDate).TotalMilliseconds;
+                // 灏哢serIP璁剧疆涓簂og鐨刄serIP
                 row["UserIP"] = log.UserIP;
+                // 灏哢rl璁剧疆涓簂og鐨刄rl
                 row["Url"] = log.Url;
+                // 濡傛灉log鐨刄serId涓虹┖锛屽垯灏哢serId璁剧疆涓�-1锛屽惁鍒欒缃负log鐨刄serId
                 row["UserId"] = log.UserId ?? -1;
+                // 灏哢serName璁剧疆涓簂og鐨刄serName
                 row["UserName"] = log.UserName;
+                // 灏唕ow娣诲姞鍒皅ueueTable涓�
                 queueTable.Rows.Add(row);
             }
         }
@@ -115,34 +133,53 @@
             dynamic log = null;
             try
             {
+                //鑾峰彇褰撳墠HttpContext
                 HttpContext context = App.HttpContext;
+                //濡傛灉HttpContext涓虹┖锛屽垯杩斿洖
                 if (context == null)
                 {
                     return;
                 }
+                //濡傛灉璇锋眰鏂规硶涓篛PTIONS锛屽垯杩斿洖
                 if (context.Request.Method == "OPTIONS") return;
+                //鑾峰彇RequestLogModel瀹炰緥
                 RequestLogModel logModel = (context.RequestServices.GetService(typeof(RequestLogModel)) as RequestLogModel) ?? new RequestLogModel { RequestDate = DateTime.Now };
 
+                //鑾峰彇褰撳墠鐢ㄦ埛
                 IUser user = App.User;
+                //鍒涘缓鏃ュ織瀵硅薄
                 log = new
                 {
+                    //璇锋眰寮�濮嬫椂闂�
                     BeginDate = logModel.RequestDate,
+                    //璇锋眰缁撴潫鏃堕棿
                     EndDate = DateTime.Now,
+                    //璇锋眰鍙傛暟
                     RequestParam = requestParameter,
+                    //鍝嶅簲鍙傛暟
                     ResponseParam = responseParameter,
+                    //璇锋眰URL
                     Url = context.Request.Scheme + "://" + context.Request.Host + context.Request.PathBase + context.Request.Path,
-                    UserIP = GetClientIP(context) ?.Replace("::ffff:", ""),
+                    //瀹㈡埛绔疘P
+                    UserIP = GetClientIP(context)?.Replace("::ffff:", ""),
+                    //鐢ㄦ埛ID
                     UserId = user.UserId,
+                    //鐢ㄦ埛鍚�
                     UserName = user.UserName
                 };
             }
             catch (Exception exception)
             {
+                //濡傛灉鍙戠敓寮傚父锛屽垯鍒涘缓鏃ュ織瀵硅薄
                 log = log ?? new
                 {
+                    //璇锋眰寮�濮嬫椂闂�
                     BeginDate = DateTime.Now,
+                    //璇锋眰缁撴潫鏃堕棿
                     EndDate = DateTime.Now,
+                    //璇锋眰鍙傛暟
                     RequestParam = requestParameter,
+                    //鍝嶅簲鍙傛暟
                     ResponseParam = responseParameter,
                 };
             }
@@ -152,12 +189,15 @@
 
         public static string GetClientIP(HttpContext context)
         {
+            // 鑾峰彇璇锋眰澶翠腑鐨刋-Forwarded-For瀛楁锛屽苟灏嗗叾杞崲涓哄瓧绗︿覆
             var ip = context.Request.Headers["X-Forwarded-For"].ObjToString();
+            // 濡傛灉X-Forwarded-For瀛楁涓虹┖锛屽垯鑾峰彇杩滅▼IP鍦板潃
             if (string.IsNullOrEmpty(ip))
             {
                 ip = context.Connection.RemoteIpAddress.ObjToString();
             }
 
+            // 杩斿洖IP鍦板潃
             return ip;
         }
     }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/LogHelper/QuartzLogger.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/LogHelper/QuartzLogger.cs
index 3bd3a60..f50d7a0 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/LogHelper/QuartzLogger.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/LogHelper/QuartzLogger.cs
@@ -16,22 +16,28 @@
         {
             try
             {
+                // 杩涘叆鍐欓攣
                 LogWriteLock.EnterWriteLock();
 
-                
+                // 濡傛灉鏂囦欢澶逛笉瀛樺湪锛屽垯鍒涘缓鏂囦欢澶�
                 if (!Directory.Exists(folderPath))
                 {
                     Directory.CreateDirectory(folderPath);
                 }
+                // 鑾峰彇鏃ュ織鏂囦欢璺緞
                 string logFilePath = Path.Combine(folderPath, GetLastAccessFileName(fileName));
+                // 鑾峰彇褰撳墠鏃堕棿
                 DateTime now = DateTime.Now;
+                // 鏋勯�犳棩蹇楀唴瀹�
                 string logContent = $"銆恵now}銆憑Environment.NewLine}{log}";
 
+                // 灏嗘棩蹇楀唴瀹硅拷鍔犲埌鏃ュ織鏂囦欢涓�
                 File.AppendAllText(logFilePath, logContent);
             }
             catch { }
             finally
             {
+                // 閫�鍑哄啓閿�
                 LogWriteLock.ExitWriteLock();
             }
         }
@@ -39,14 +45,19 @@
         static string ext = ".log";
         private static string GetLogFilePath(string folderPath, string fileName)
         {
+            // 鑾峰彇鎸囧畾鏂囦欢澶逛笅鐨勬墍鏈夋枃浠�
             var allFiles = new DirectoryInfo(folderPath);
+            // 鑾峰彇绗﹀悎鏉′欢鐨勬枃浠讹紝鎸夋枃浠跺悕闄嶅簭鎺掑垪
             var selectFiles = allFiles.GetFiles().Where(fi => fi.Name.ToLower().Contains(fileName.ToLower()) && fi.Extension.ToLower() == ext.ToLower() && fi.Length < size).OrderByDescending(d => d.Name).ToList();
 
-            if (selectFiles.Count > 0)
+            FileInfo? file = selectFiles.FirstOrDefault();
+            // 濡傛灉鏈夌鍚堟潯浠剁殑鏂囦欢锛岃繑鍥炵涓�涓枃浠剁殑瀹屾暣璺緞
+            if (file != null)
             {
-                return selectFiles.FirstOrDefault().FullName;
+                return file.FullName;
             }
 
+            // 濡傛灉娌℃湁绗﹀悎鏉′欢鐨勬枃浠讹紝杩斿洖涓�涓柊鐨勬枃浠惰矾寰勶紝鏂囦欢鍚嶄负鍘熸枃浠跺悕鍔犱笂褰撳墠鏃堕棿
             return Path.Combine(folderPath, $@"{fileName}_{DateTime.Now.ToString("HH-mm-ss")}.log");
         }
 
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/Seed/DBSeed.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/Seed/DBSeed.cs
index f5d31be..94924fa 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/Seed/DBSeed.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/Seed/DBSeed.cs
@@ -108,7 +108,7 @@
                                     {
                                         PropertyInfo propertyInfo = propertyInfos[i];
 
-                                        SequenceAttirbute? sequenceAttirbute = propertyInfo.GetCustomAttribute<SequenceAttirbute>();
+                                        SequenceAttribute? sequenceAttirbute = propertyInfo.GetCustomAttribute<SequenceAttribute>();
                                         if (sequenceAttirbute != null)
                                         {
                                             int count = dbContext.Db.Ado.GetScalar($"SELECT COUNT(*) FROM sys.sequences WHERE name = '{sequenceAttirbute.SequenceName}'").ObjToInt();
@@ -165,7 +165,7 @@
                             {
                                 PropertyInfo propertyInfo = propertyInfos[i];
 
-                                SequenceAttirbute? sequenceAttirbute = propertyInfo.GetCustomAttribute<SequenceAttirbute>();
+                                SequenceAttribute? sequenceAttirbute = propertyInfo.GetCustomAttribute<SequenceAttribute>();
                                 if (sequenceAttirbute != null)
                                 {
                                         int count = dbContext.Db.Ado.GetScalar($"SELECT COUNT(*) FROM sys.sequences WHERE name = '{sequenceAttirbute.SequenceName}'").ObjToInt();
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_MenuRepository.cs b/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_MenuRepository.cs
index 0cfc0d1..81d998c 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_MenuRepository.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_MenuRepository.cs
@@ -3,6 +3,7 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_DTO.System;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.BaseRepository;
 using WIDESEAWCS_Model.Models;
@@ -11,7 +12,7 @@
 {
     public interface ISys_MenuRepository : IRepository<Sys_Menu>
     {
-        List<Sys_Menu> GetAllMenu();
+        List<MenuDTO> GetAllMenu();
 
         object GetSuperAdminMenu();
 
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_MenuService.cs b/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_MenuService.cs
index 1309279..61e04e9 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_MenuService.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_MenuService.cs
@@ -3,6 +3,7 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_DTO.System;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.BaseServices;
 using WIDESEAWCS_Model.Models;
@@ -14,9 +15,9 @@
         object GetCurrentMenuActionList();
         object GetMenuActionList(int roleId);
 
-        List<Sys_Menu> GetUserMenuList(int roleId);
+        List<MenuDTO> GetUserMenuList(int roleId);
 
-        List<Sys_Actions> GetActions(int menuId, List<Sys_Actions> menuActions, List<Permissions> permissions, int roleId);
+        List<ActionDTO> GetActions(int menuId, List<ActionDTO> menuActions, List<Permissions> permissions, int roleId);
 
         object GetMenu();
 
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Model/ClassDiagram1.cd b/WIDESEAWCS_Server/WIDESEAWCS_Model/ClassDiagram1.cd
new file mode 100644
index 0000000..7b89419
--- /dev/null
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Model/ClassDiagram1.cd
@@ -0,0 +1,2 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<ClassDiagram /> 
\ No newline at end of file
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Model/ClassDiagram2.cd b/WIDESEAWCS_Server/WIDESEAWCS_Model/ClassDiagram2.cd
new file mode 100644
index 0000000..b0cf9ef
--- /dev/null
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Model/ClassDiagram2.cd
@@ -0,0 +1,11 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<ClassDiagram MajorVersion="1" MinorVersion="1">
+  <Class Name="WIDESEAWCS_Model.Models.Dt_Task">
+    <Position X="0.5" Y="0.5" Width="3.75" />
+    <TypeIdentifier>
+      <HashCode>AAAAACAAAAAAEgAAAAAAAAAMAAgAAAIIAQJAAAEBCQA=</HashCode>
+      <FileName>Models\TaskInfo\Dt_Task.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Font Name="Microsoft YaHei UI" Size="9" />
+</ClassDiagram>
\ No newline at end of file
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Menu.cs b/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Menu.cs
index 1953d3e..2ace81f 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Menu.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Menu.cs
@@ -77,11 +77,5 @@
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDescription = "鑿滃崟绫诲瀷")]
         public int? MenuType { get; set; }
-
-        [Navigate(NavigateType.OneToMany, nameof(ParentId), nameof(MenuId)), SugarColumn(IsIgnore = true, IsNullable = true)]
-        public List<Sys_Menu> Menus { get; set; }
-
-        [SugarColumn(IsIgnore = true)]
-        public List<Sys_Actions> Actions { get; set; }
     }
 }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_User.cs b/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_User.cs
index fec93b2..fd67fdd 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_User.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_User.cs
@@ -41,12 +41,6 @@
         public string RoleName { get; set; }
 
         /// <summary>
-        /// 鐢佃瘽
-        /// </summary>
-        [SugarColumn(Length = 11, IsNullable = true, ColumnDescription = "鐢佃瘽")]
-        public string PhoneNo { get; set; }
-
-        /// <summary>
         /// 澶囨敞
         /// </summary>
         [SugarColumn(Length = 200, IsNullable = true, ColumnDescription = "澶囨敞")]
@@ -65,34 +59,10 @@
         public string UserTrueName { get; set; }
 
         /// <summary>
-        /// 閮ㄩ棬
-        /// </summary>
-        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "閮ㄩ棬")]
-        public string DeptName { get; set; }
-
-        /// <summary>
-        /// 閮ㄩ棬ID
-        /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDescription = "閮ㄩ棬ID")]
-        public int? Dept_Id { get; set; }
-
-        /// <summary>
-        /// 閭
-        /// </summary>
-        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "閭")]
-        public string Email { get; set; }
-
-        /// <summary>
         /// 鏄惁鍙敤
         /// </summary>
         [SugarColumn(IsNullable = false, ColumnDescription = "鏄惁鍙敤")]
         public byte Enable { get; set; }
-
-        /// <summary>
-        /// 鎬у埆
-        /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDescription = "鎬у埆")]
-        public int? Gender { get; set; }
 
         /// <summary>
         /// 澶村儚
@@ -105,36 +75,6 @@
         /// </summary>
         [SugarColumn(IsNullable = true, IsOnlyIgnoreInsert = true, ColumnDescription = "鏈�鍚庡瘑鐮佷慨鏀规椂闂�")]
         public DateTime? LastModifyPwdDate { get; set; }
-
-        /// <summary>
-        /// 鍦板潃
-        /// </summary>
-        [SugarColumn(Length = 200, IsNullable = true, ColumnDescription = "鍦板潃")]
-        public string Address { get; set; }
-
-        /// <summary>
-        /// 瀹℃牳鏃堕棿
-        /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDescription = "瀹℃牳鏃堕棿")]
-        public DateTime? AuditDate { get; set; }
-
-        /// <summary>
-        /// 瀹℃牳鐘舵��
-        /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDescription = "瀹℃牳鐘舵��")]
-        public int? AuditStatus { get; set; }
-
-        /// <summary>
-        /// 瀹℃牳浜�
-        /// </summary>
-        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "瀹℃牳浜�")]
-        public string Auditor { get; set; }
-
-        /// <summary>
-        /// 浠ょ墝
-        /// </summary>
-        [SugarColumn(Length = 500, IsNullable = true, ColumnDescription = "浠ょ墝")]
-        public string Token { get; set; }
 
         /// <summary>
         /// 绉熸埛ID
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs b/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs
index 889e3a0..b342e89 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs
@@ -22,6 +22,7 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEAWCS_Core.Attributes;
 using WIDESEAWCS_Core.DB.Models;
 
 namespace WIDESEAWCS_Model.Models
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine.cs
index 28b40e2..e3d5c36 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine.cs
@@ -148,15 +148,15 @@
         /// 璇诲彇PLC鍗忚鍦板潃鐨勬暟鎹�
         /// </summary>
         /// <typeparam name="TEnum">鍗忚淇℃伅鐨勬灇涓惧璞′俊鎭��</typeparam>
-        /// <typeparam name="TRsult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
+        /// <typeparam name="TResult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
         /// <param name="value">鏋氫妇鍊�</param>
         /// <param name="deviceChildCode">璁惧瀛愮紪鍙�</param>
         /// <returns>璇诲彇鍒扮殑鏁版嵁</returns>
-        public TRsult GetValue<TEnum, TRsult>(TEnum value, string deviceChildCode) where TEnum : Enum
+        public TResult GetValue<TEnum, TResult>(TEnum value, string deviceChildCode) where TEnum : Enum
         {
             if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
             DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == value.ToString() && x.DeviceChildCode == deviceChildCode);
-            return devicePro == null ? throw new Exception() : (TRsult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
+            return devicePro == null ? throw new Exception($"璇诲彇鏁版嵁閿欒,鏈湪鍗忚淇℃伅閲岄潰鎵惧埌鍙傛暟{value.ToString()}") : (TResult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
         }
 
         /// <summary>
@@ -234,7 +234,7 @@
         {
             if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
             DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == @enum.ToString() && x.DeviceChildCode == deviceChildCode);
-            return devicePro == null ? throw new Exception() : Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, value);
+            return devicePro == null ? throw new Exception($"鍐欏叆鏁版嵁閿欒,鏈湪鍗忚淇℃伅閲岄潰鎵惧埌鍙傛暟{value.ToString()}") : Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, value);
         }
 
         /// <summary>
@@ -272,8 +272,11 @@
 
         public void Dispose()
         {
+            // 璁剧疆蹇冭烦鐘舵�佷负false
             _heartStatr = false;
+            // 閲婃斁閫氫俊鍣ㄨ祫婧�
             _communicator.Dispose();
+            // 鍛婅瘔鍨冨溇鍥炴敹鍣ㄤ笉鍐嶈皟鐢ㄧ粓缁撳櫒
             GC.SuppressFinalize(this);
         }
         #endregion
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/IConveyorLine.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/IConveyorLine.cs
index ebef8a3..b9b912e 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/IConveyorLine.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/IConveyorLine.cs
@@ -29,6 +29,7 @@
 {
     public interface IConveyorLine : IDevice
     {
+
         /// <summary>
         /// 涓庤澶囩殑蹇冭烦
         /// </summary>
@@ -38,11 +39,11 @@
         /// 璇诲彇PLC鍗忚鍦板潃鐨勬暟鎹�
         /// </summary>
         /// <typeparam name="TEnum">鍗忚淇℃伅鐨勬灇涓惧璞′俊鎭��</typeparam>
-        /// <typeparam name="TRsult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
+        /// <typeparam name="TResult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
         /// <param name="value">鏋氫妇鍊�</param>
         /// <param name="deviceChildCode">璁惧瀛愮紪鍙�</param>
         /// <returns>璇诲彇鍒扮殑鏁版嵁</returns>
-        TRsult GetValue<TEnum, TRsult>(TEnum value, string deviceChildCode) where TEnum : Enum;
+        TResult GetValue<TEnum, TResult>(TEnum value, string deviceChildCode) where TEnum : Enum;
 
         /// <summary>
         /// 鏍规嵁鍙傛暟鍚嶇О銆佽澶囧瓙缂栧彿鍐欏叆瀵瑰簲鐨勬暟鎹��
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DTO/DeviceProDTO.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DTO/DeviceProDTO.cs
index 2f570aa..13943a8 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DTO/DeviceProDTO.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DTO/DeviceProDTO.cs
@@ -62,7 +62,7 @@
             {
                 if (DevicePlcType == nameof(SiemensS7))
                     return DeviceProDataBlock + "." + DeviceProOffset;
-                return Convert.ToInt32(DeviceProOffset) + "";
+                return DeviceProDataBlock + "";
             }
         }
 
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DeviceBase/IDevice.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DeviceBase/IDevice.cs
index d9cd23e..f4758a4 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DeviceBase/IDevice.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DeviceBase/IDevice.cs
@@ -24,7 +24,7 @@
 using WIDESEAWCS_Communicator;
 using WIDESEAWCS_QuartzJob.DTO;
 
-namespace WIDESEAWCS_QuartzJob.DeviceBase
+namespace WIDESEAWCS_QuartzJob
 {
     /// <summary>
     /// 璁惧鎺ュ彛灞�
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/JobBase.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/JobBase.cs
index be002c5..dd3e149 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/JobBase.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/JobBase.cs
@@ -16,7 +16,7 @@
         /// 鎵ц鎸囧畾浠诲姟
         /// </summary>
         /// <param name="context"></param>
-        /// <param name="action"></param>
+        /// <param name="func"></param>
         public async void ExecuteJob(IJobExecutionContext context, Func<Task> func)
         {
             StringBuilder stringBuilder = new StringBuilder();
@@ -48,9 +48,14 @@
             }
         }
 
+        /// <summary>
+        /// 鍐欏叆璋冭瘯鏃ュ織
+        /// </summary>
+        /// <param name="fileName"></param>
+        /// <param name="msg"></param>
         public void WriteDebug(string fileName, string msg)
         {
-            if( AppSettings.Get(new string[] { "LogDeubgEnable" }).ObjToBool())
+            if (AppSettings.Get(new string[] { "LogDeubgEnable" }).ObjToBool())
             {
                 StringBuilder builder = new StringBuilder(msg);
                 builder.Append(Environment.NewLine);
@@ -59,6 +64,11 @@
             }
         }
 
+        /// <summary>
+        /// 鍐欏叆淇℃伅鏃ュ織
+        /// </summary>
+        /// <param name="fileName"></param>
+        /// <param name="msg"></param>
         public void WriteInfo(string fileName, string msg)
         {
             StringBuilder builder = new StringBuilder(msg);
@@ -67,6 +77,12 @@
             QuartzLogger.WriteLogToFile($"Info_{fileName}", builder.ToString());
         }
 
+        /// <summary>
+        /// 鍐欏叆閿欒鏃ュ織
+        /// </summary>
+        /// <param name="fileName"></param>
+        /// <param name="msg"></param>
+        /// <param name="ex"></param>
         public void WriteError(string fileName, string msg, Exception ex)
         {
             StringBuilder builder = new StringBuilder(msg);
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Models/Dt_DeviceInfo.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Models/Dt_DeviceInfo.cs
index 25b4625..8649b48 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Models/Dt_DeviceInfo.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Models/Dt_DeviceInfo.cs
@@ -93,7 +93,7 @@
         /// </summary>
         [ImporterHeader(Name = "PLC绫诲瀷")]
         [ExporterHeader(DisplayName = "PLC绫诲瀷")]
-        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "PLC绫诲瀷")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "PLC绫诲瀷")]
         public string DevicePlcType { get; set; }
 
         /// <summary>
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Models/Dt_DeviceProtocolDetail.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Models/Dt_DeviceProtocolDetail.cs
index 247be22..e041b7c 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Models/Dt_DeviceProtocolDetail.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Models/Dt_DeviceProtocolDetail.cs
@@ -53,7 +53,7 @@
         /// </summary>
         [ImporterHeader(Name = "璁惧鍗忚鍙傛暟鍚嶇О")]
         [ExporterHeader(DisplayName = "璁惧鍗忚鍙傛暟鍚嶇О")]
-        [SugarColumn(IsNullable = false, ColumnDescription = "璁惧鍗忚鍙傛暟鍚嶇О")]
+        [SugarColumn(Length = 50, IsNullable = false, ColumnDescription = "璁惧鍗忚鍙傛暟鍚嶇О")]
         public string DeviceProParamName { get; set; }
 
         /// <summary>
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/OtherDevices/IOtherDevice.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/OtherDevices/IOtherDevice.cs
index 6871115..e707ba3 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/OtherDevices/IOtherDevice.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/OtherDevices/IOtherDevice.cs
@@ -14,21 +14,21 @@
         /// 璇诲彇PLC鍗忚鍦板潃鐨勬暟鎹�
         /// </summary>
         /// <typeparam name="TEnum">鍗忚淇℃伅鐨勬灇涓惧璞′俊鎭��</typeparam>
-        /// <typeparam name="TRsult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
+        /// <typeparam name="TResult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
         /// <param name="value">鏋氫妇鍊�</param>
         /// <returns>璇诲彇鍒扮殑鏁版嵁</returns>
-        TRsult GetValue<TEnum, TRsult>(TEnum value) where TEnum : Enum;
+        TResult GetValue<TEnum, TResult>(TEnum value) where TEnum : Enum;
 
 
         /// <summary>
         /// 璇诲彇PLC鍗忚鍦板潃鐨勬暟鎹�
         /// </summary>
         /// <typeparam name="TEnum">鍗忚淇℃伅鐨勬灇涓惧璞′俊鎭��</typeparam>
-        /// <typeparam name="TRsult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
+        /// <typeparam name="TResult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
         /// <param name="value">鏋氫妇鍊�</param>
         /// <param name="deviceChildCode">璁惧瀛愮紪鍙�</param>
         /// <returns>璇诲彇鍒扮殑鏁版嵁</returns>
-        TRsult GetValue<TEnum, TRsult>(TEnum value, string deviceChildCode) where TEnum : Enum;
+        TResult GetValue<TEnum, TResult>(TEnum value, string deviceChildCode) where TEnum : Enum;
 
         /// <summary>
         /// 鏍规嵁鍙傛暟鍚嶇О鍐欏叆鍫嗗灈鏈哄搴旂殑鏁版嵁銆�
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/OtherDevices/OtherDevice.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/OtherDevices/OtherDevice.cs
index 1daea08..ab69a34 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/OtherDevices/OtherDevice.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/OtherDevices/OtherDevice.cs
@@ -141,26 +141,26 @@
             GC.SuppressFinalize(this);
         }
 
-        public TRsult GetValue<TEnum, TRsult>(TEnum value) where TEnum : Enum
+        public TResult GetValue<TEnum, TResult>(TEnum value) where TEnum : Enum
         {
             if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
             DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == value.ToString());
-            return devicePro == null ? throw new Exception() : (TRsult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
+            return devicePro == null ? throw new Exception($"璇诲彇鏁版嵁閿欒,鏈湪鍗忚淇℃伅閲岄潰鎵惧埌鍙傛暟{value.ToString()}") : (TResult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
         }
 
         /// <summary>
         /// 璇诲彇PLC鍗忚鍦板潃鐨勬暟鎹�
         /// </summary>
         /// <typeparam name="TEnum">鍗忚淇℃伅鐨勬灇涓惧璞′俊鎭��</typeparam>
-        /// <typeparam name="TRsult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
+        /// <typeparam name="TResult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
         /// <param name="value">鏋氫妇鍊�</param>
         /// <param name="deviceChildCode">璁惧瀛愮紪鍙�</param>
         /// <returns>璇诲彇鍒扮殑鏁版嵁</returns>
-        public TRsult GetValue<TEnum, TRsult>(TEnum value, string deviceChildCode) where TEnum : Enum
+        public TResult GetValue<TEnum, TResult>(TEnum value, string deviceChildCode) where TEnum : Enum
         {
             if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
             DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == value.ToString() && x.DeviceChildCode == deviceChildCode);
-            return devicePro == null ? throw new Exception() : (TRsult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
+            return devicePro == null ? throw new Exception() : (TResult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
         }
 
         public bool SetValue<TEnum, TValue>(TEnum @enum, TValue value)
@@ -169,7 +169,7 @@
         {
             if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
             DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == @enum.ToString());
-            return devicePro == null ? throw new Exception() : Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, value);
+            return devicePro == null ? throw new Exception($"鍐欏叆鏁版嵁閿欒,鏈湪鍗忚淇℃伅閲岄潰鎵惧埌鍙傛暟{value.ToString()}") : Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, value);
         }
 
         /// <summary>
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzExtensions/JobSetup.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzExtensions/JobSetup.cs
index b8dd099..68995a9 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzExtensions/JobSetup.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzExtensions/JobSetup.cs
@@ -24,6 +24,7 @@
 using System.Reflection;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEAWCS_QuartzJob.QuartzNet;
 
 namespace WIDESEAWCS_QuartzJob.QuartzExtensions
 {
@@ -36,17 +37,27 @@
         {
             if (services == null) throw new ArgumentNullException(nameof(services));
 
+            services.AddSingleton<Storage>();
+            services.AddSingleton<QuartzNetExtension>();
+            //灏咼obFactory娉ㄥ叆鍒版湇鍔′腑
             services.AddSingleton<IJobFactory, JobFactory>();
+            //灏哠chedulerCenterServer娉ㄥ叆鍒版湇鍔′腑
             services.AddSingleton<ISchedulerCenter, SchedulerCenterServer>();
             //浠诲姟娉ㄥ叆
             var baseType = typeof(IJob);
+            //鑾峰彇褰撳墠搴旂敤绋嬪簭鍩熺殑鐩稿鎼滅储璺緞
             var path = AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory;
+            //鑾峰彇鎸囧畾璺緞涓嬬殑鎵�鏈夌▼搴忛泦
             var referencedAssemblies = System.IO.Directory.GetFiles(path, "WIDESEAWCS_Tasks.dll").Select(Assembly.LoadFrom).ToArray();
+            //鑾峰彇鎵�鏈夊畾涔夌殑绫诲瀷
             var types = referencedAssemblies
                 .SelectMany(a => a.DefinedTypes)
                 .Select(type => type.AsType())
+                //绛涢�夊嚭缁ф壙鑷狪Job鐨勭被鍨�
                 .Where(x => x != baseType && baseType.IsAssignableFrom(x)).ToArray();
+            //鑾峰彇鎵�鏈夊疄鐜颁簡IJob鐨勭被鍨�
             var implementTypes = types.Where(x => x.IsClass).ToArray();
+            //灏嗘墍鏈夊疄鐜颁簡IJob鐨勭被鍨嬫敞鍏ュ埌鏈嶅姟涓�
             foreach (var implementType in implementTypes)
             {
                 services.AddTransient(implementType);
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzExtensions/QuartzJobHostedService.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzExtensions/QuartzJobHostedService.cs
index 31ef5bb..e6571a0 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzExtensions/QuartzJobHostedService.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzExtensions/QuartzJobHostedService.cs
@@ -29,6 +29,7 @@
 using WIDESEAWCS_QuartzJob.DeviceBase;
 using WIDESEAWCS_QuartzJob.DTO;
 using WIDESEAWCS_QuartzJob.Models;
+using WIDESEAWCS_QuartzJob.QuartzNet;
 using WIDESEAWCS_QuartzJob.Service;
 
 namespace WIDESEAWCS_QuartzJob.QuartzExtensions
@@ -40,14 +41,16 @@
         private readonly IDeviceInfoService _deviceInfoService;
         private readonly IDispatchInfoService _dispatchInfoService;
         private readonly IDeviceProtocolDetailService _deviceProtocolDetailService;
+        private readonly QuartzNetExtension _quartzNetExtension;
 
-        public QuartzJobHostedService(ILogger<QuartzJobHostedService> logger, IDeviceInfoService deviceInfoService, IDispatchInfoService dispatchInfoService, ISchedulerCenter schedulerCenter, IDeviceProtocolDetailService deviceProtocolDetailService)
+        public QuartzJobHostedService(ILogger<QuartzJobHostedService> logger, IDeviceInfoService deviceInfoService, IDispatchInfoService dispatchInfoService, ISchedulerCenter schedulerCenter, IDeviceProtocolDetailService deviceProtocolDetailService, QuartzNetExtension quartzNetExtension)
         {
             _logger = logger;
             _deviceInfoService = deviceInfoService;
             _dispatchInfoService = dispatchInfoService;
             _schedulerCenter = schedulerCenter;
             _deviceProtocolDetailService = deviceProtocolDetailService;
+            _quartzNetExtension = quartzNetExtension;
         }
 
         /// <summary>
@@ -57,68 +60,13 @@
         /// <returns></returns>
         public async Task StartAsync(CancellationToken cancellationToken)
         {
-            try
+            if (!HslCommunication.Authorization.SetAuthorizationCode("891c8f18-d6de-409f-81f4-6de405431905"))
             {
-                List<DispatchInfoDTO> dispatches = _dispatchInfoService.QueryDispatchInfos();
-                List<DeviceInfoDTO> deviceInfos = await _deviceInfoService.QueryDeviceProInfos();
-
-                deviceInfos.ForEach(x =>
-                {
-                    if (dispatches.Exists(d => d.JobGroup == x.DeviceType))
-                    {
-                        #region 杩炴帴PLC
-                        Assembly assembly = Assembly.Load($"WIDESEAWCS_Communicator");
-                        Type? type = assembly.GetType($"WIDESEAWCS_Communicator.{x.DevicePlcType}");
-                        object? obj = Activator.CreateInstance(type, new object[] { x.DeviceIp, x.DevicePort, x.DeviceName });
-                        bool? connectResult = (bool)type.InvokeMember("Connect", BindingFlags.Default | BindingFlags.InvokeMethod, null, obj, new object[] { });
-                        if (connectResult ?? false) ConsoleHelper.WriteSuccessLine(x.DeviceCode + "杩炴帴鎴愬姛"); else ConsoleHelper.WriteErrorLine(x.DeviceCode + "杩炴帴澶辫触");
-
-                        #endregion
-
-                        #region 瀹炰緥鍖栬澶囧璞�
-
-                        List<DeviceProDTO> devicePros = x.ProtocolList.Select(d => new DeviceProDTO
-                        {
-                            DeviceChildCode = d.DeviceChildCode,
-                            DeviceDataType = d.DeviceProDataType,
-                            DeviceId = d.DeviceId,
-                            DeviceProId = d.Id,
-                            DeviceProDataBlock = d.DeviceProDataBlock,
-                            DeviceProDataLength = d.DeviceProDataLength,
-                            DeviceProOffset = d.DeviceProOffset,
-                            DeviceProParamDes = d.DeviceProParamDes,
-                            DeviceProParamName = d.DeviceProParamName,
-                            DeviceProParamType = d.DeviceProParamType,
-                            DevicePlcType = x.DevicePlcType
-                        }).ToList();
-
-                        List<DeviceProtocolDetailDTO> deviceProtocolDetails = _deviceProtocolDetailService.GetDeviceProtocolDetailsByDeviceType(x.DeviceType);
-
-                        Assembly assemblyDevice = Assembly.Load($"WIDESEAWCS_QuartzJob");
-                        Type typeDevice = assemblyDevice.GetType($"WIDESEAWCS_QuartzJob.{x.DeviceType}");
-                        object deviceInstance = Activator.CreateInstance(typeDevice, new object[] { obj, devicePros, deviceProtocolDetails, x.DeviceCode, x.DeviceName });
-                        #endregion
-
-                        x.Device = (IDevice)deviceInstance;
-
-                        Storage.Devices.Add((IDevice)deviceInstance);
-                    }
-                });
-                for (int i = 0; i < dispatches.Count; i++)
-                {
-                    DeviceInfoDTO? deviceProInfo = deviceInfos.FirstOrDefault(x => x.Id == dispatches[i].Id);
-                    dispatches[i].JobParams = deviceProInfo?.Device;
-                    WebResponseContent responseContent = await _schedulerCenter.AddScheduleJobAsync(dispatches[i]);
-                    if (responseContent.Status) ConsoleHelper.WriteSuccessLine(dispatches[i].JobGroup + "璋冨害鏈嶅姟娣诲姞鎴愬姛"); else ConsoleHelper.WriteErrorLine(dispatches[i].JobGroup + "璋冨害鏈嶅姟娣诲姞澶辫触");
-                }
-                await _schedulerCenter.StartScheduleAsync();
+                Console.WriteLine("active failed");
+                Console.ReadLine();
             }
-            catch (Exception ex)
-            {
-                _logger.LogError(ex, "璋冨害鏈嶅姟寮�鍚紓甯�");
-                Console.WriteLine("璋冨害鏈嶅姟寮�鍚紓甯�" + ex.ToString());
-                throw;
-            }
+
+            await _quartzNetExtension.StartAsync();
         }
 
         public Task StopAsync(CancellationToken cancellationToken)
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzNet/ISchedulerCenter.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzNet/ISchedulerCenter.cs
index 89cf52a..01aebfe 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzNet/ISchedulerCenter.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzNet/ISchedulerCenter.cs
@@ -77,6 +77,10 @@
         /// <returns></returns>
         Task<WebResponseContent> ResumeJob(DispatchInfoDTO sysSchedule);
 
+        //Task<WebResponseContent> PauseAllJobAsync();
+
+        //Task<WebResponseContent> ResumeAllJobAsync();
+
         /// <summary>
         /// 鑾峰彇浠诲姟瑙﹀彂鍣ㄧ姸鎬�
         /// </summary>
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzNet/QuartzNetExtension.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzNet/QuartzNetExtension.cs
new file mode 100644
index 0000000..f98b2f5
--- /dev/null
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzNet/QuartzNetExtension.cs
@@ -0,0 +1,123 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_Core;
+using WIDESEAWCS_QuartzJob.DTO;
+using Microsoft.Extensions.Logging;
+using WIDESEAWCS_QuartzJob.QuartzExtensions;
+using WIDESEAWCS_QuartzJob.Service;
+
+namespace WIDESEAWCS_QuartzJob.QuartzNet
+{
+    public class QuartzNetExtension
+    {
+        private readonly ISchedulerCenter _schedulerCenter;
+        private readonly IDeviceInfoService _deviceInfoService;
+        private readonly IDispatchInfoService _dispatchInfoService;
+        private readonly IDeviceProtocolDetailService _deviceProtocolDetailService;
+        private readonly Storage _storage;
+        public QuartzNetExtension(IDeviceInfoService deviceInfoService, IDispatchInfoService dispatchInfoService, ISchedulerCenter schedulerCenter, IDeviceProtocolDetailService deviceProtocolDetailService, Storage storage)
+        {
+            _deviceInfoService = deviceInfoService;
+            _dispatchInfoService = dispatchInfoService;
+            _schedulerCenter = schedulerCenter;
+            _deviceProtocolDetailService = deviceProtocolDetailService;
+            _storage = storage;
+        }
+
+        /// <summary>
+        /// 鍚姩绋嬪簭鑷姩寮�鍚皟搴︽湇鍔�
+        /// </summary>
+        /// <returns></returns>
+        public async Task StartAsync()
+        {
+            try
+            {
+                List<DispatchInfoDTO> dispatches = _dispatchInfoService.QueryDispatchInfos();
+                List<DeviceInfoDTO> deviceInfos = await _deviceInfoService.QueryDeviceProInfos();
+
+                deviceInfos.ForEach(x =>
+                {
+                    if (!Storage.Devices.Exists(d => d.DeviceCode == x.DeviceCode))
+                    {
+                        #region 杩炴帴PLC
+                        // 鍔犺浇绋嬪簭闆�
+                        Assembly assembly = Assembly.Load($"WIDESEAWCS_Communicator");
+                        // 鑾峰彇绫诲瀷
+                        Type? type = assembly.GetType($"WIDESEAWCS_Communicator.{x.DevicePlcType}");
+                        // 鍒涘缓瀹炰緥
+                        object? obj = Activator.CreateInstance(type, new object[] { x.DeviceIp, x.DevicePort, x.DeviceName });
+                        // 璋冪敤杩炴帴鏂规硶
+                        bool? connectResult = (bool)type.InvokeMember("Connect", BindingFlags.Default | BindingFlags.InvokeMethod, null, obj, new object[] { });
+                        // 鍒ゆ柇杩炴帴缁撴灉
+                        if (connectResult ?? false) ConsoleHelper.WriteSuccessLine(x.DeviceCode + "杩炴帴鎴愬姛"); else ConsoleHelper.WriteErrorLine(x.DeviceCode + "杩炴帴澶辫触");
+                        #endregion
+
+                        #region 瀹炰緥鍖栬澶囧璞�
+                        List<DeviceProDTO> devicePros = x.ProtocolList.Select(d => new DeviceProDTO
+                        {
+                            // 璁惧瀛愮紪鐮�
+                            DeviceChildCode = d.DeviceChildCode,
+                            // 璁惧鏁版嵁绫诲瀷
+                            DeviceDataType = d.DeviceProDataType,
+                            // 璁惧ID
+                            DeviceId = d.DeviceId,
+                            // 璁惧鍗忚ID
+                            DeviceProId = d.Id,
+                            // 璁惧鍗忚鏁版嵁鍧�
+                            DeviceProDataBlock = d.DeviceProDataBlock,
+                            // 璁惧鍗忚鏁版嵁闀垮害
+                            DeviceProDataLength = d.DeviceProDataLength,
+                            // 璁惧鍗忚鍋忕Щ閲�
+                            DeviceProOffset = d.DeviceProOffset,
+                            // 璁惧鍗忚鍙傛暟鎻忚堪
+                            DeviceProParamDes = d.DeviceProParamDes,
+                            // 璁惧鍗忚鍙傛暟鍚嶇О
+                            DeviceProParamName = d.DeviceProParamName,
+                            // 璁惧鍗忚鍙傛暟绫诲瀷
+                            DeviceProParamType = d.DeviceProParamType,
+                            // 璁惧PLC绫诲瀷
+                            DevicePlcType = x.DevicePlcType
+                        }).ToList();
+
+                        // 鏍规嵁璁惧绫诲瀷鑾峰彇璁惧鍗忚璇︽儏
+                        List<DeviceProtocolDetailDTO> deviceProtocolDetails = _deviceProtocolDetailService.GetDeviceProtocolDetailsByDeviceType(x.DeviceType);
+
+                        // 鍔犺浇璁惧绋嬪簭闆�
+                        Assembly assemblyDevice = Assembly.Load($"WIDESEAWCS_QuartzJob");
+                        // 鑾峰彇璁惧绫诲瀷瀵瑰簲鐨勭被鍨�
+                        Type typeDevice = assemblyDevice.GetType($"WIDESEAWCS_QuartzJob.{x.DeviceType}");
+                        // 鍒涘缓璁惧瀹炰緥
+                        object deviceInstance = Activator.CreateInstance(typeDevice, new object[] { obj, devicePros, deviceProtocolDetails, x.DeviceCode, x.DeviceName });
+                        #endregion
+
+                        x.Device = (IDevice)deviceInstance;
+
+                        Storage.Devices.Add((IDevice)deviceInstance);
+                    }
+                    else
+                    {
+                        x.Device = Storage.Devices.FirstOrDefault(d => d.DeviceCode == x.DeviceCode);
+                    }
+                });
+                for (int i = 0; i < dispatches.Count; i++)
+                {
+                    DeviceInfoDTO? deviceProInfo = deviceInfos.FirstOrDefault(x => x.Id == dispatches[i].Id);
+                    dispatches[i].JobParams = deviceProInfo?.Device;
+                    WebResponseContent responseContent = await _schedulerCenter.AddScheduleJobAsync(dispatches[i]);
+                    if (responseContent.Status) ConsoleHelper.WriteSuccessLine(dispatches[i].Name + "璋冨害鏈嶅姟娣诲姞鎴愬姛"); else ConsoleHelper.WriteErrorLine(dispatches[i].Name + "璋冨害鏈嶅姟娣诲姞澶辫触");
+                }
+                //await _schedulerCenter.StartScheduleAsync();
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine("璋冨害鏈嶅姟寮�鍚紓甯�" + ex.ToString());
+                throw;
+            }
+        }
+    }
+}
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzNet/SchedulerCenterServer.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzNet/SchedulerCenterServer.cs
index febec47..a176c07 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzNet/SchedulerCenterServer.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzNet/SchedulerCenterServer.cs
@@ -30,19 +30,20 @@
 using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_QuartzJob.DTO;
 using WIDESEAWCS_QuartzJob.CustomException;
+using Quartz.Impl.Matchers;
 
 namespace WIDESEAWCS_QuartzJob
 {
     public class SchedulerCenterServer : ISchedulerCenter
     {
-        private Task<IScheduler> _scheduler;
+        private IScheduler _scheduler;
         private readonly IJobFactory _iocjobFactory;
         public SchedulerCenterServer(IJobFactory jobFactory)
         {
             _iocjobFactory = jobFactory;
             _scheduler = GetSchedulerAsync();
         }
-        private Task<IScheduler> GetSchedulerAsync()
+        private IScheduler GetSchedulerAsync()
         {
             if (_scheduler != null)
                 return this._scheduler;
@@ -55,14 +56,14 @@
                     {
                         { "quartz.serializer.type", "binary" },
                     };
-                    StdSchedulerFactory factory = new StdSchedulerFactory(collection);
-                    return _scheduler = factory.GetScheduler();
+                    //StdSchedulerFactory factory = new StdSchedulerFactory(collection);
+                    StdSchedulerFactory factory = new StdSchedulerFactory();
+                    return _scheduler = factory.GetScheduler().Result;
                 }
                 catch (Exception ex)
                 {
                     throw new QuartzJobException(string.Format(QuartzJobExceptionMessage.JobFactoryInstanceException, ex.Message), innerException: ex);
                 }
-
             }
         }
 
@@ -75,17 +76,31 @@
             WebResponseContent result = new WebResponseContent();
             try
             {
-                this._scheduler.Result.JobFactory = this._iocjobFactory;
-                if (!this._scheduler.Result.IsStarted)
+                if (_scheduler.IsShutdown && _scheduler.IsStarted)
+                {
+                    // 浠嶧actory涓幏鍙朣cheduler瀹炰緥
+                    NameValueCollection collection = new NameValueCollection
+                    {
+                        { "quartz.serializer.type", "binary" },
+                    };
+                    //StdSchedulerFactory factory = new StdSchedulerFactory(collection);
+                    StdSchedulerFactory factory = new StdSchedulerFactory();
+                    _scheduler = factory.GetScheduler().Result;
+                }
+
+                this._scheduler.JobFactory = this._iocjobFactory;
+
+                if (!this._scheduler.IsStarted)
                 {
                     //绛夊緟浠诲姟杩愯瀹屾垚
-                    await this._scheduler.Result.Start();
+                    await this._scheduler.Start();
                     await Console.Out.WriteLineAsync(QuartzJobInfoMessage.StartJobSuccess);
                     result = WebResponseContent.Instance.OK(QuartzJobInfoMessage.StartJobSuccess);
                     return result;
                 }
                 else
                 {
+                    await _scheduler.Shutdown();
                     result = WebResponseContent.Instance.Error(QuartzJobInfoMessage.JobHasStart);
                     return result;
                 }
@@ -105,16 +120,21 @@
             WebResponseContent result = new WebResponseContent();
             try
             {
-                if (!this._scheduler.Result.IsShutdown)
+                if (!_scheduler.IsShutdown)
                 {
                     //绛夊緟浠诲姟杩愯瀹屾垚
-                    await this._scheduler.Result.Shutdown();
+                    await _scheduler.Shutdown(false);
+
                     await Console.Out.WriteLineAsync(QuartzJobInfoMessage.StopJobSuccess);
                     result = WebResponseContent.Instance.OK(QuartzJobInfoMessage.StopJobSuccess);
                     return result;
                 }
                 else
                 {
+                    IReadOnlyCollection<string> jobGroupNames = await _scheduler.GetJobGroupNames();
+
+                    await _scheduler.PauseAll();
+
                     result = WebResponseContent.Instance.Error(QuartzJobInfoMessage.JobHasStop);
                     return result;
                 }
@@ -139,8 +159,21 @@
             {
                 try
                 {
+                    if (_scheduler.IsShutdown && _scheduler.IsStarted)
+                    {
+                        // 浠嶧actory涓幏鍙朣cheduler瀹炰緥
+                        NameValueCollection collection = new NameValueCollection
+                        {
+                            { "quartz.serializer.type", "binary" },
+                        };
+                        //StdSchedulerFactory factory = new StdSchedulerFactory(collection);
+                        StdSchedulerFactory factory = new StdSchedulerFactory();
+                        _scheduler = factory.GetScheduler().Result;
+                    }
+
+
                     JobKey jobKey = new JobKey(tasksQz.Id.ToString(), tasksQz.JobGroup);
-                    if (await _scheduler.Result.CheckExists(jobKey))
+                    if (await _scheduler.CheckExists(jobKey))
                     {
                         result = WebResponseContent.Instance.Error(string.Format(QuartzJobInfoMessage.JobHasAdd, tasksQz.Name));
                         return result;
@@ -156,7 +189,6 @@
                     {
                         tasksQz.EndTime = DateTime.MaxValue.AddDays(-1);
                     }
-                    DateTimeOffset endRunTime = DateBuilder.NextGivenSecondDate(tasksQz.EndTime, 1);//璁剧疆鏆傚仠鏃堕棿
 
                     #endregion
 
@@ -173,9 +205,15 @@
                     }
 
                     Assembly assembly = Assembly.Load(new AssemblyName(tasksQz.AssemblyName));
-                    Type jobType = assembly.GetType(tasksQz.AssemblyName + "." + tasksQz.ClassName);
+                    Type jobType = assembly.GetType(tasksQz.AssemblyName + "." + tasksQz.ClassName) ?? throw new Exception($"鏈壘鍒扮▼搴忛泦閲岄潰璇ョ被鍨嬶紝銆恵tasksQz.AssemblyName}.  {tasksQz.ClassName}銆�");
 
                     #endregion
+
+                    //鍒ゆ柇浠诲姟璋冨害鏄惁寮�鍚�
+                    if (!_scheduler.IsStarted)
+                    {
+                        await StartScheduleAsync();
+                    }
 
                     //浼犲叆鍙嶅皠鍑烘潵鐨勬墽琛岀▼搴忛泦
                     IJobDetail job = new JobDetailImpl(tasksQz.Id.ToString(), tasksQz.JobGroup, jobType);
@@ -184,7 +222,7 @@
                     ITrigger trigger = CreateSimpleTrigger(tasksQz);
 
                     // 鍛婅瘔Quartz浣跨敤鎴戜滑鐨勮Е鍙戝櫒鏉ュ畨鎺掍綔涓�
-                    await _scheduler.Result.ScheduleJob(job, trigger);
+                    await _scheduler.ScheduleJob(job, trigger);
 
                     result = WebResponseContent.Instance.OK(string.Format(QuartzJobInfoMessage.JobAddSuccess, tasksQz.Name));
                     return result;
@@ -208,7 +246,7 @@
         public async Task<bool> IsExistScheduleJobAsync(DispatchInfoDTO sysSchedule)
         {
             JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup);
-            if (await _scheduler.Result.CheckExists(jobKey))
+            if (await _scheduler.CheckExists(jobKey))
             {
                 return true;
             }
@@ -228,14 +266,14 @@
             try
             {
                 JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup);
-                if (!await _scheduler.Result.CheckExists(jobKey))
+                if (!await _scheduler.CheckExists(jobKey))
                 {
                     result = WebResponseContent.Instance.Error(string.Format(QuartzJobInfoMessage.JobNotExist, sysSchedule.Name));
                     return result;
                 }
                 else
                 {
-                    await this._scheduler.Result.DeleteJob(jobKey);
+                    await this._scheduler.DeleteJob(jobKey);
                     result = WebResponseContent.Instance.OK(string.Format(QuartzJobInfoMessage.StopAJobSuccess, sysSchedule.Name));
                     return result;
                 }
@@ -257,12 +295,12 @@
             try
             {
                 JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup);
-                if (!await _scheduler.Result.CheckExists(jobKey))
+                if (!await _scheduler.CheckExists(jobKey))
                 {
                     result = WebResponseContent.Instance.Error(string.Format(QuartzJobInfoMessage.ResumeJobNotExist, sysSchedule.Name));
                     return result;
                 }
-                await this._scheduler.Result.ResumeJob(jobKey);
+                await this._scheduler.ResumeJob(jobKey);
                 result = WebResponseContent.Instance.OK(string.Format(QuartzJobInfoMessage.ResumeJobSuccess, sysSchedule.Name));
                 return result;
             }
@@ -271,6 +309,24 @@
                 throw new QuartzJobException(string.Format(QuartzJobExceptionMessage.ResumeJobException, sysSchedule.Name, ex.Message), innerException: ex);
             }
         }
+
+        //public async Task<WebResponseContent> PauseAllJobAsync()
+        //{
+        //    WebResponseContent result = new WebResponseContent();
+        //    if (_scheduler.IsStarted && !_scheduler.IsShutdown)
+        //    {
+        //        await _scheduler.PauseAll();
+        //    }
+        //    return WebResponseContent.Instance.OK();
+        //}
+
+        //public async Task<WebResponseContent> ResumeAllJobAsync()
+        //{
+        //    WebResponseContent result = new WebResponseContent();
+        //    if (_scheduler.IsStarted && !_scheduler.IsShutdown)
+        //        await _scheduler.ResumeAll();
+        //    return WebResponseContent.Instance.OK();
+        //}
 
         /// <summary>
         /// 鏆傚仠鎸囧畾鐨勮鍒掍换鍔�
@@ -283,12 +339,12 @@
             try
             {
                 JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup);
-                if (!await _scheduler.Result.CheckExists(jobKey))
+                if (!await _scheduler.CheckExists(jobKey))
                 {
                     result = WebResponseContent.Instance.Error(string.Format(QuartzJobInfoMessage.PauseJobNotExist, sysSchedule.Name));
                     return result;
                 }
-                await this._scheduler.Result.PauseJob(jobKey);
+                await this._scheduler.PauseJob(jobKey);
                 result = WebResponseContent.Instance.OK(string.Format(QuartzJobInfoMessage.PauseJobSuccess, sysSchedule.Name));
                 return result;
             }
@@ -422,13 +478,13 @@
                 JobKey jobKey = new JobKey(tasksQz.Id.ToString(), tasksQz.JobGroup);
 
                 //鍒ゆ柇浠诲姟鏄惁瀛樺湪锛屽瓨鍦ㄥ垯 瑙﹀彂涓�娆★紝涓嶅瓨鍦ㄥ垯鍏堟坊鍔犱竴涓换鍔★紝瑙﹀彂浠ュ悗鍐� 鍋滄浠诲姟
-                if (!await _scheduler.Result.CheckExists(jobKey))
+                if (!await _scheduler.CheckExists(jobKey))
                 {
                     //涓嶅瓨鍦� 鍒� 娣诲姞涓�涓鍒掍换鍔�
                     await AddScheduleJobAsync(tasksQz);
 
                     //瑙﹀彂鎵ц涓�娆�
-                    await _scheduler.Result.TriggerJob(jobKey);
+                    await _scheduler.TriggerJob(jobKey);
 
                     //鍋滄浠诲姟
                     await StopScheduleJobAsync(tasksQz);
@@ -437,7 +493,7 @@
                 }
                 else
                 {
-                    await _scheduler.Result.TriggerJob(jobKey);
+                    await _scheduler.TriggerJob(jobKey);
                     result = WebResponseContent.Instance.OK(string.Format(QuartzJobInfoMessage.ExecuteJobSuccess, tasksQz.Name));
                 }
             }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/DeviceProtocolService.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/DeviceProtocolService.cs
index 82c0830..f9c4ae8 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/DeviceProtocolService.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/DeviceProtocolService.cs
@@ -49,27 +49,40 @@
         {
             try
             {
+                // 鍒ゆ柇涓婁紶鐨勬枃浠舵槸鍚︿负绌�
                 if (fileInput == null || fileInput.Count == 0)
                     return new WebResponseContent { Status = true, Message = "璇烽�夋嫨涓婁紶鐨勬枃浠�" };
+                // 鑾峰彇涓婁紶鐨勬枃浠�
                 Microsoft.AspNetCore.Http.IFormFile formFile = fileInput[0];
+                // 鑾峰彇鏂囦欢淇濆瓨璺緞
                 string dicPath = AppDomain.CurrentDomain.BaseDirectory + $"ExcelImprot/{DateTime.Now.ToString("yyyMMdd")}/{typeof(Dt_DeviceProtocol).Name}/";
+                // 鍒ゆ柇璺緞鏄惁瀛樺湪锛屼笉瀛樺湪鍒欏垱寤�
                 if (!Directory.Exists(dicPath)) Directory.CreateDirectory(dicPath);
+                // 鐢熸垚鏂囦欢鍚�
                 string fileName = $"{Guid.NewGuid()}_{formFile.FileName}";
+                // 鑾峰彇鏂囦欢淇濆瓨璺緞
                 dicPath = $"{dicPath}{fileName}";
+                // 灏嗘枃浠朵繚瀛樺埌鎸囧畾璺緞
                 using (FileStream stream = new FileStream(dicPath, FileMode.Create))
                 {
                     formFile.CopyTo(stream);
                 }
+                // 鍒涘缓Excel瀵煎叆鍣�
                 ExcelImporter importer = new ExcelImporter();
+                // 瀵煎叆Excel鏂囦欢
                 ImportResult<Dt_DeviceProtocol> importResult = importer.Import<Dt_DeviceProtocol>(dicPath, "").Result;
+                // 鍒ゆ柇瀵煎叆缁撴灉鏄惁鏈夐敊璇�
                 if (importResult.HasError)
                 {
+                    // 杩斿洖閿欒淇℃伅
                     return WebResponseContent.Instance.Error(importResult.TemplateErrors.Serialize());
                 }
+                // 杩斿洖瀵煎叆缁撴灉
                 return WebResponseContent.Instance.OK(data: importResult.Data);
             }
             catch (Exception ex)
             {
+                // 杩斿洖寮傚父淇℃伅
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs
index b389354..5f21f92 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs
@@ -36,20 +36,24 @@
             List<Dt_Router> routers = new List<Dt_Router>();
             try
             {
+                //鏌ヨ涓嬩竴涓矾鐢变俊鎭�
                 List<Dt_Router> dt_Routers = BaseDal.QueryData(x => x.NextPosi == endPosi || x.ChildPosi == endPosi, new Dictionary<string, OrderByType> { { nameof(Dt_Router.IsEnd), OrderByType.Desc } });
                 if (dt_Routers.Count > 0)
                 {
                     foreach (var item in dt_Routers)
                     {
+                        //濡傛灉涓嬩竴涓矾鐢辩殑璧风偣鍜岀粓鐐归兘鍖归厤锛屽垯娣诲姞鍒拌矾鐢卞垪琛ㄤ腑
                         if (item.StartPosi == startPosi && !routers.Any(x => x.Id == item.Id))
                         {
                             routers.Add(item);
                         }
                         else
                         {
+                            //鍚﹀垯锛岄�掑綊鏌ヨ涓嬩竴涓矾鐢辩殑璧风偣
                             List<Dt_Router> tempRouters = QueryNextRoutes(startPosi, item.StartPosi);
                             foreach (var router in tempRouters)
                             {
+                                //濡傛灉涓嬩竴涓矾鐢辩殑璧风偣鍜岀粓鐐归兘鍖归厤锛屽垯娣诲姞鍒拌矾鐢卞垪琛ㄤ腑
                                 if (router.StartPosi == startPosi && !routers.Any(x => x.Id == router.Id))
                                 {
                                     routers.Add(router);
@@ -60,6 +64,7 @@
                 }
                 else
                 {
+                    //濡傛灉鏌ヨ涓嶅埌涓嬩竴涓矾鐢变俊鎭紝鍒欐姏鍑哄紓甯�
                     throw new Exception($"璇ヨ矾寰勬湭閰嶇疆鎴栭厤缃敊璇�,璇锋鏌ヨ澶囪矾鐢变俊鎭�,璧风偣:銆恵startPosi}銆�,缁堢偣:銆恵endPosi}銆�");
                 }
             }
@@ -76,26 +81,32 @@
         /// </summary>
         /// <param name="deviceCode">璁惧缂栧彿</param>
         /// <returns>杩斿洖璺敱鐐逛綅缂栧彿(杈撻�佺嚎绔欏彴缂栧彿)闆嗗悎</returns>
+        // 鏍规嵁璁惧缂栫爜鏌ヨ鎵�鏈変綅缃�
         public List<string> QueryAllPositions(string deviceCode)
         {
+            // 鍒涘缓涓�涓瓧绗︿覆鍒楄〃锛岀敤浜庡瓨鍌ㄦ墍鏈変綅缃�
             List<string> positions = new List<string>();
             try
             {
+                // 鏌ヨ鎵�鏈夎繘鍏ヨ矾鐢卞櫒鐨勪綅缃�
                 List<string> inRouterPositions = BaseDal.QueryData(x => x.ChildPosiDeviceCode == deviceCode && x.InOutType == RouterInOutType.In).GroupBy(x => x.StartPosi).Select(x => x.Key).ToList();
 
+                // 鏌ヨ鎵�鏈夌寮�璺敱鍣ㄧ殑浣嶇疆
                 List<string> outRouterPositions = BaseDal.QueryData(x => x.ChildPosiDeviceCode == deviceCode && x.InOutType == RouterInOutType.Out).GroupBy(x => x.ChildPosi).Select(x => x.Key).ToList();
 
+                // 灏嗚繘鍏ュ拰绂诲紑璺敱鍣ㄧ殑浣嶇疆娣诲姞鍒板垪琛ㄤ腑
                 positions.AddRange(inRouterPositions);
                 positions.AddRange(outRouterPositions);
+                // 杩斿洖鍘婚噸鍚庣殑浣嶇疆鍒楄〃
                 return positions.GroupBy(x => x).Select(x => x.Key).ToList();
             }
             catch
             {
 
             }
+            // 杩斿洖浣嶇疆鍒楄〃
             return positions;
         }
-
         /// <summary>
         /// 鑾峰彇璺敱琛ㄤ腑鎵�鏈夊畬鏁寸殑璺敱淇℃伅(鍓嶇璋冪敤灞曠ず鏁版嵁)銆�
         /// </summary>
@@ -103,58 +114,84 @@
         public List<object> GetAllWholeRouters()
         {
             List<object> data = new List<object>();
+            // 鏌ヨ鎵�鏈夎矾鐢�
             List<Dt_Router> allRouters = BaseDal.QueryData(x => true);
+            // 鏌ヨ鎵�鏈夌粨鏉熺殑璺敱锛屽苟鎸塈d鎺掑簭
             List<Dt_Router> dt_Routers = allRouters.Where(x => x.IsEnd).OrderBy(x => x.Id).ToList();
 
+            // 閬嶅巻鎵�鏈夌粨鏉熺殑璺敱
             foreach (var item in dt_Routers)
             {
+                // 鑾峰彇褰撳墠璺敱鐨勫瓙璺敱
                 string routes = $"{item.ChildPosi},";
+                // 鑾峰彇褰撳墠璺敱鐨勭埗璺敱
                 string str = GetPreviousRoutes(item.StartPosi, allRouters, item.InOutType);
+                // 濡傛灉鐖惰矾鐢变笉涓虹┖
                 if (!string.IsNullOrEmpty(str))
                 {
+                    // 鍘绘帀鏈�鍚庝竴涓�楀彿
                     if (str.EndsWith(","))
                         str = str.Substring(0, str.Length - 1);
+                    // 灏嗙埗璺敱娣诲姞鍒板瓙璺敱涓�
                     routes += str;
                 }
+                // 濡傛灉褰撳墠璺敱鏄叆鍙�
                 if (item.InOutType == RouterInOutType.In)
                 {
+                    // 灏嗗瓙璺敱鍙嶈浆骞舵坊鍔犲埌data涓�
                     List<string> itemRouters = routes.Split(",").Reverse().ToList();
                     object obj = new { type = RouterInOutType.In, routes = itemRouters };
                     data.Add(obj);
                 }
+                // 濡傛灉褰撳墠璺敱鏄嚭鍙�
                 else
                 {
+                    // 灏嗗瓙璺敱鍙嶈浆骞舵坊鍔犲埌data涓�
                     List<string> itemRouters = routes.Split(",").Reverse().ToList();
                     object obj = new { type = RouterInOutType.Out, routes = itemRouters };
                     data.Add(obj);
                 }
             }
 
+            // 杩斿洖data
             return data;
         }
 
         private string GetPreviousRoutes(string startPosi, List<Dt_Router> allRouters, RouterInOutType routerType)
         {
+            // 瀹氫箟涓�涓┖瀛楃涓瞨outers
             string routers = string.Empty;
+            // 鍒ゆ柇startPosi鏄惁涓虹┖
             if (!string.IsNullOrEmpty(startPosi))
             {
+                // 鍒ゆ柇routers鏄惁浠ラ�楀彿缁撳熬
                 if (!routers.EndsWith(","))
+                    // 濡傛灉涓嶆槸锛屽垯灏唖tartPosi娣诲姞鍒皉outers涓紝骞跺湪鍚庨潰鍔犱笂閫楀彿
                     routers += $"{startPosi},";
                 else
+                    // 濡傛灉鏄紝鍒欏皢startPosi娣诲姞鍒皉outers涓�
                     routers += $"{startPosi}";
             }
+            // 浠巃llRouters涓瓫閫夊嚭NextPosi绛変簬startPosi涓擨nOutType绛変簬routerType鐨勫厓绱狅紝骞惰浆鎹负List
             List<Dt_Router> preRouters = allRouters.Where(x => x.NextPosi == startPosi && x.InOutType == routerType).ToList();
+            // 閬嶅巻preRouters涓殑姣忎釜鍏冪礌
             foreach (var item in preRouters)
             {
+                // 璋冪敤GetPreviousRoutes鏂规硶锛屼紶鍏tem.StartPosi銆乤llRouters鍜宺outerType锛屽苟灏嗚繑鍥炲�艰祴缁檚tr
                 string str = GetPreviousRoutes(item.StartPosi, allRouters, routerType);
+                // 鍒ゆ柇str鏄惁涓虹┖
                 if (!string.IsNullOrEmpty(str))
                 {
+                    // 鍒ゆ柇routers鏄惁浠ラ�楀彿缁撳熬
                     if (routers.EndsWith(","))
+                        // 濡傛灉鏄紝鍒欏皢str娣诲姞鍒皉outers涓�
                         routers += $"{str}";
                     else
+                        // 濡傛灉涓嶆槸锛屽垯灏唖tr娣诲姞鍒皉outers涓紝骞跺湪鍚庨潰鍔犱笂閫楀彿
                         routers += $"{str},";
                 }
             }
+            // 杩斿洖routers
             return routers;
         }
 
@@ -169,18 +206,22 @@
             WebResponseContent content = new WebResponseContent();
             try
             {
+                // 妫�鏌ュ瓙浣嶇疆缂栧彿鏄惁閲嶅
                 if (routersAddDTOs.GroupBy(x => x.ChildPositionCode).Where(x => !string.IsNullOrEmpty(x.Key)).Select(x => x.Count()).Any(x => x > 1))
                 {
                     return content = WebResponseContent.Instance.Error("瀛愪綅缃紪鍙烽噸澶�");
                 }
 
+                // 妫�鏌ユ牴浣嶇疆缂栧彿鏄惁閲嶅
                 if (routersAddDTOs.GroupBy(x => x.PositionCode).Select(x => x.Count()).Any(x => x > 1))
                 {
                     return content = WebResponseContent.Instance.Error("鏍逛綅缃紪鍙烽噸澶�");
                 }
+                // 鏌ヨ璁惧淇℃伅
                 List<dynamic> deviceCode = _deviceInfoRepository.QueryTabs<Dt_DeviceInfo, Dt_DeviceProtocol, dynamic>((a, b) => new object[] { JoinType.Inner, a.Id == b.DeviceId }, (a, b) => new { b.DeviceChildCode, a.DeviceCode }, (a, b) => true, x => true).Distinct().ToList();
 
                 List<Dt_Router> routers = new List<Dt_Router>();
+                // 閬嶅巻routersAddDTOs锛岀敓鎴怐t_Router瀵硅薄
                 for (int i = 0; i < routersAddDTOs.Count - 1; i++)
                 {
                     dynamic obj = deviceCode.FirstOrDefault(x => x.DeviceChildCode == routersAddDTOs[i + 1].PositionCode || x.DeviceChildCode == routersAddDTOs[i + 1].ChildPositionCode);
@@ -197,24 +238,29 @@
                         StartPosi = routersAddDTOs[i].PositionCode,
                         IsEnd = false
                     };
+                    // 濡傛灉鏄渶鍚庝竴涓厓绱狅紝璁剧疆缁堢偣浣嶇疆缂栧彿
                     if (i == routersAddDTOs.Count - 2)
                     {
                         if (routerType == (int)RouterInOutType.Out)
                             router.ChildPosi = routersAddDTOs[i + 1].ChildPositionCode;
-                         router.IsEnd = true;
+                        router.IsEnd = true;
                     }
                     routers.Add(router);
                 }
+                // 妫�鏌ヨ捣鐐逛綅缃紪鍙蜂笌瀛愪綅缃紪鍙锋槸鍚︾浉鍚�
                 if (routers.Any(x => x.StartPosi == x.ChildPosi))
                 {
                     return content = WebResponseContent.Instance.Error("杈撳叆鏁版嵁璧风偣浣嶇疆缂栧彿涓庡瓙浣嶇疆缂栧彿鐩稿悓");
                 }
+                // 妫�鏌ヨ捣鐐逛綅缃紪鍙蜂笌缁堢偣浣嶇疆缂栧彿鏄惁鐩稿悓
                 if (routers.Any(x => x.StartPosi == x.NextPosi))
                 {
                     return content = WebResponseContent.Instance.Error("杈撳叆鏁版嵁璧风偣浣嶇疆缂栧彿涓庣粓鐐逛綅缃紪鍙风浉鍚�");
                 }
+                // 鏌ヨ鏁版嵁搴撲腑宸叉湁鐨勮矾鐢变俊鎭�
                 List<Dt_Router> dt_Routers = BaseDal.QueryData(x => x.InOutType == (RouterInOutType)routerType);
 
+                // 绉婚櫎閲嶅鐨勮矾鐢变俊鎭�
                 dt_Routers.ForEach(x =>
                 {
                     var t = routers.FirstOrDefault(v => v.StartPosi == x.StartPosi && v.NextPosi == x.NextPosi);
@@ -229,6 +275,7 @@
                     }
                 });
 
+                // 娣诲姞鏂扮殑璺敱淇℃伅
                 BaseDal.AddData(routers);
                 content = WebResponseContent.Instance.OK();
             }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ShuttleCar/IShuttleCar.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ShuttleCar/IShuttleCar.cs
index 78e9906..ae7c5b5 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ShuttleCar/IShuttleCar.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ShuttleCar/IShuttleCar.cs
@@ -13,10 +13,10 @@
         /// 璇诲彇PLC鍗忚鍦板潃鐨勬暟鎹�
         /// </summary>
         /// <typeparam name="TEnum">鍗忚淇℃伅鐨勬灇涓惧璞′俊鎭��</typeparam>
-        /// <typeparam name="TRsult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
+        /// <typeparam name="TResult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
         /// <param name="value">鏋氫妇鍊�</param>
         /// <returns>璇诲彇鍒扮殑鏁版嵁</returns>
-        TRsult GetValue<TEnum, TRsult>(TEnum value) where TEnum : Enum;
+        TResult GetValue<TEnum, TResult>(TEnum value) where TEnum : Enum;
 
         /// <summary>
         /// 鏍规嵁鍙傛暟鍚嶇О鍐欏叆鍫嗗灈鏈哄搴旂殑鏁版嵁銆�
@@ -33,11 +33,11 @@
         /// 璇诲彇PLC鍗忚鍦板潃鐨勬暟鎹�
         /// </summary>
         /// <typeparam name="TEnum">鍗忚淇℃伅鐨勬灇涓惧璞′俊鎭��</typeparam>
-        /// <typeparam name="TRsult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
+        /// <typeparam name="TResult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
         /// <param name="value">鏋氫妇鍊�</param>
         /// <param name="deviceChildCode">璁惧瀛愮紪鍙�</param>
         /// <returns>璇诲彇鍒扮殑鏁版嵁</returns>
-        TRsult GetValue<TEnum, TRsult>(TEnum value, string deviceChildCode) where TEnum : Enum;
+        TResult GetValue<TEnum, TResult>(TEnum value, string deviceChildCode) where TEnum : Enum;
 
         /// <summary>
         /// 鏍规嵁鍙傛暟鍚嶇О銆佽澶囧瓙缂栧彿鍐欏叆瀵瑰簲鐨勬暟鎹��
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ShuttleCar/ShuttleCar.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ShuttleCar/ShuttleCar.cs
index b9c30a1..73706a4 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ShuttleCar/ShuttleCar.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ShuttleCar/ShuttleCar.cs
@@ -108,26 +108,26 @@
 
         #region Public Method
 
-        public TRsult GetValue<TEnum, TRsult>(TEnum value) where TEnum : Enum
+        public TResult GetValue<TEnum, TResult>(TEnum value) where TEnum : Enum
         {
             if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
             DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == value.ToString());
-            return devicePro == null ? throw new Exception() : (TRsult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
+            return devicePro == null ? throw new Exception($"璇诲彇鏁版嵁閿欒,鏈湪鍗忚淇℃伅閲岄潰鎵惧埌鍙傛暟{value.ToString()}") : (TResult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
         }
 
         /// <summary>
         /// 璇诲彇PLC鍗忚鍦板潃鐨勬暟鎹�
         /// </summary>
         /// <typeparam name="TEnum">鍗忚淇℃伅鐨勬灇涓惧璞′俊鎭��</typeparam>
-        /// <typeparam name="TRsult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
+        /// <typeparam name="TResult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
         /// <param name="value">鏋氫妇鍊�</param>
         /// <param name="deviceChildCode">璁惧瀛愮紪鍙�</param>
         /// <returns>璇诲彇鍒扮殑鏁版嵁</returns>
-        public TRsult GetValue<TEnum, TRsult>(TEnum value, string deviceChildCode) where TEnum : Enum
+        public TResult GetValue<TEnum, TResult>(TEnum value, string deviceChildCode) where TEnum : Enum
         {
             if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
             DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == value.ToString() && x.DeviceChildCode == deviceChildCode);
-            return devicePro == null ? throw new Exception() : (TRsult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
+            return devicePro == null ? throw new Exception($"璇诲彇鏁版嵁閿欒,鏈湪鍗忚淇℃伅閲岄潰鎵惧埌鍙傛暟{value.ToString()}") : (TResult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
         }
 
         /// <summary>
@@ -182,7 +182,7 @@
         {
             if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
             DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == @enum.ToString() && x.DeviceChildCode == deviceChildCode);
-            return devicePro == null ? throw new Exception() : Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, value);
+            return devicePro == null ? throw new Exception($"鍐欏叆鏁版嵁閿欒,鏈湪鍗忚淇℃伅閲岄潰鎵惧埌鍙傛暟{value.ToString()}") : Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, value);
         }
 
         public bool SetValue<TEnum, TValue>(TEnum @enum, TValue value)
@@ -191,7 +191,7 @@
         {
             if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
             DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == @enum.ToString());
-            return devicePro == null ? throw new Exception() : Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, value);
+            return devicePro == null ? throw new Exception($"鍐欏叆鏁版嵁閿欒,鏈湪鍗忚淇℃伅閲岄潰鎵惧埌鍙傛暟{value.ToString()}") : Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, value);
         }
 
         public void Dispose()
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerCrane.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerCrane.cs
index d6e577e..04e16dc 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerCrane.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerCrane.cs
@@ -17,7 +17,6 @@
 
 using HslCommunication;
 using Microsoft.AspNetCore.Http;
-using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
@@ -170,6 +169,7 @@
         public bool IsEventSubscribed => StackerCraneTaskCompletedEventHandler != null;
 
         public int? LastTaskType { get; set; } = null;
+
         #endregion
 
         #region Constructor Function
@@ -431,15 +431,15 @@
         /// 鏍规嵁鍙傛暟鍚嶇О璇诲彇鍫嗗灈鏈哄搴旂殑鏁版嵁銆�
         /// </summary>
         /// <typeparam name="TEnum">鍙傛暟鍚嶇О鏋氫妇绫诲瀷銆�</typeparam>
-        /// <typeparam name="TRsult">璇诲彇缁撴灉鐨勮繑鍥炲�肩被鍨嬨��</typeparam>
+        /// <typeparam name="TResult">璇诲彇缁撴灉鐨勮繑鍥炲�肩被鍨嬨��</typeparam>
         /// <param name="value">鍙傛暟鍚嶇О銆�</param>
         /// <returns>杩斿洖璇诲彇鍒扮殑鏁版嵁銆�</returns>
         /// <exception cref="Exception"></exception>
-        public TRsult GetValue<TEnum, TRsult>(TEnum value) where TEnum : Enum
+        public TResult GetValue<TEnum, TResult>(TEnum value) where TEnum : Enum
         {
             if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
-            DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == value.ToString());
-            return devicePro == null ? throw new Exception() : (TRsult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
+            DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == value.ToString()) ?? throw new Exception($"璇诲彇鏁版嵁閿欒,鏈湪鍗忚淇℃伅閲岄潰鎵惧埌鍙傛暟{value.ToString()}");
+            return (TResult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
         }
 
         /// <summary>
@@ -464,14 +464,18 @@
             where TValue : notnull
         {
             if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
-            DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == @enum.ToString());
-            return devicePro == null ? throw new Exception() : Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, value);
+            DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == @enum.ToString()) ?? throw new Exception($"鍐欏叆鏁版嵁閿欒,鏈湪鍗忚淇℃伅閲岄潰鎵惧埌鍙傛暟{value.ToString()}");
+            return Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, value);
         }
 
+        // 瀹炵幇IDisposable鎺ュ彛鐨凞ispose鏂规硶
         public void Dispose()
         {
+            // 灏哶heartStatr璁剧疆涓篺alse
             _heartStatr = false;
+            // 璋冪敤_communicator鐨凞ispose鏂规硶
             _communicator.Dispose();
+            // 鍛婅瘔鍨冨溇鍥炴敹鍣ㄤ笉鍐嶈皟鐢ㄦ瀵硅薄鐨勭粓缁撳櫒
             GC.SuppressFinalize(this);
         }
         #endregion
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/IStackerCrane.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/IStackerCrane.cs
index 73c98c3..3e6eb8f 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/IStackerCrane.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/IStackerCrane.cs
@@ -65,10 +65,10 @@
         /// 璇诲彇PLC鍗忚鍦板潃鐨勬暟鎹�
         /// </summary>
         /// <typeparam name="TEnum">鍗忚淇℃伅鐨勬灇涓惧璞′俊鎭��</typeparam>
-        /// <typeparam name="TRsult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
+        /// <typeparam name="TResult">璇诲彇鏁版嵁鐨勭被鍨嬪璞′俊鎭��</typeparam>
         /// <param name="value">鏋氫妇鍊�</param>
         /// <returns>璇诲彇鍒扮殑鏁版嵁</returns>
-        TRsult GetValue<TEnum, TRsult>(TEnum value) where TEnum : Enum;
+        TResult GetValue<TEnum, TResult>(TEnum value) where TEnum : Enum;
 
         /// <summary>
         /// 鏍规嵁鍙傛暟鍚嶇О鍐欏叆鍫嗗灈鏈哄搴旂殑鏁版嵁銆�
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Spec/SpeStackerCrane.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Spec/SpeStackerCrane.cs
index 49abede..e2d0ed2 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Spec/SpeStackerCrane.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Spec/SpeStackerCrane.cs
@@ -125,7 +125,7 @@
         private int GetCurrentTaskNum()
         {
             DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(CurrentTaskNum));
-            return devicePro == null ? throw new Exception($"璇诲彇褰撳墠浠诲姟鍙烽敊璇�,鏈幏鍙栧埌鍗忚淇℃伅,璇锋鏌ラ厤缃弬鏁板悕绉版槸鍚﹂厤缃�,涓旈厤缃负涓簕nameof(CurrentTaskNum)}") : (int)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
+            return devicePro == null ? throw new Exception($"璇诲彇褰撳墠浠诲姟鍙烽敊璇�,鏈幏鍙栧埌鍗忚淇℃伅,璇锋鏌ラ厤缃弬鏁板悕绉版槸鍚﹂厤缃�,涓旈厤缃负{nameof(CurrentTaskNum)}") : (int)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
         }
 
         private void CheckConnect()
@@ -154,8 +154,7 @@
         #endregion
 
         #region Public Method
-        public T GetStackerCraneStatus<T>()
-        where T : notnull, Enum
+        public T GetStackerCraneStatus<T>() where T : notnull, Enum
         {
             return (T)GetStatus(typeof(T).Name);
         }
@@ -167,11 +166,11 @@
             GC.SuppressFinalize(this);
         }
 
-        public TRsult GetValue<TEnum, TRsult>(TEnum value) where TEnum : Enum
+        public TResult GetValue<TEnum, TResult>(TEnum value) where TEnum : Enum
         {
             if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
             DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == value.ToString());
-            return devicePro == null ? throw new Exception() : (TRsult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
+            return devicePro == null ? throw new Exception($"璇诲彇鏁版嵁閿欒,鏈湪鍗忚淇℃伅閲岄潰鎵惧埌鍙傛暟{value.ToString()}") : (TResult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType);
         }
 
         public void Heartbeat()
@@ -209,7 +208,7 @@
         {
             if (!IsConnected) throw new Exception($"閫氳杩炴帴閿欒锛岃妫�鏌ョ綉缁�");
             DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == @enum.ToString());
-            return devicePro == null ? throw new Exception() : Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, value);
+            return devicePro == null ? throw new Exception($"鍐欏叆鏁版嵁閿欒,鏈湪鍗忚淇℃伅閲岄潰鎵惧埌鍙傛暟{value.ToString()}") : Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, value);
         }
         #endregion
     }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Storage.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Storage.cs
index 1935712..0e31e58 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Storage.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Storage.cs
@@ -21,5 +21,27 @@
     public class Storage
     {
         public static List<IDevice> Devices = new List<IDevice>();
+
+        public List<IDevice> Pro_Devices { get; set; }
+
+        public Storage()
+        {
+            Pro_Devices = new List<IDevice>();
+        }
+
+        public IDevice? GetDevice(string deviceCode)
+        {
+            return Pro_Devices.FirstOrDefault(x => x.DeviceCode == deviceCode);
+        }
+
+        public List<IDevice> GetDevices(List<string> deviceCodes)
+        {
+            return Pro_Devices.Where(x => deviceCodes.Contains(x.DeviceCode)).ToList();
+        }
+
+        public BaseCommunicator? GetCommunicator(string deviceCode)
+        {
+            return Devices.FirstOrDefault(x => x.DeviceCode == deviceCode)?.Communicator;
+        }
     }
 }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/WIDESEAWCS_QuartzJob.csproj b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/WIDESEAWCS_QuartzJob.csproj
index 967c68d..88faf0d 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/WIDESEAWCS_QuartzJob.csproj
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/WIDESEAWCS_QuartzJob.csproj
@@ -4,12 +4,14 @@
 		<TargetFramework>net6.0</TargetFramework>
 		<ImplicitUsings>enable</ImplicitUsings>
 		<Nullable>enable</Nullable>
-		<Description>鏇存柊--鏆傛椂鍙敮鎸佽タ闂ㄥ瓙PLC璇诲彇瀵硅薄</Description>
-		<Version>2.0.4</Version>
+		<Description>
+			1銆丠SLCommunication婵�娲�
+		</Description>
+		<Version>2.1.1</Version>
 	</PropertyGroup>
 
 	<ItemGroup>
-		<PackageReference Include="Quartz" Version="3.11.0" />
+		<PackageReference Include="Quartz" Version="3.13.1" />
 	</ItemGroup>
 
 	<ItemGroup>
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Server.sln b/WIDESEAWCS_Server/WIDESEAWCS_Server.sln
index 689a6f6..476b4cd 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Server.sln
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Server.sln
@@ -56,13 +56,13 @@
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BasicInfo", "BasicInfo", "{9CB2F821-BB23-48E5-88E8-C326477733C0}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WIDESEAWCS_IBasicInfoRepository", "WIDESEAWCS_IBasicInfoRepository\WIDESEAWCS_IBasicInfoRepository.csproj", "{266D07B7-3648-4F3D-818A-89EDA7D84C58}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_IBasicInfoRepository", "WIDESEAWCS_IBasicInfoRepository\WIDESEAWCS_IBasicInfoRepository.csproj", "{266D07B7-3648-4F3D-818A-89EDA7D84C58}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WIDESEAWCS_BasicInfoRepository", "WIDESEAWCS_BasicInfoRepository\WIDESEAWCS_BasicInfoRepository.csproj", "{206FDF79-9BF3-433A-B7FF-627287BBD760}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_BasicInfoRepository", "WIDESEAWCS_BasicInfoRepository\WIDESEAWCS_BasicInfoRepository.csproj", "{206FDF79-9BF3-433A-B7FF-627287BBD760}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WIDESEAWCS_IBasicInfoService", "WIDESEAWCS_IBasicInfoService\WIDESEAWCS_IBasicInfoService.csproj", "{8C2CC25B-DE5D-433E-A550-63864C7A716D}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_IBasicInfoService", "WIDESEAWCS_IBasicInfoService\WIDESEAWCS_IBasicInfoService.csproj", "{8C2CC25B-DE5D-433E-A550-63864C7A716D}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WIDESEAWCS_BasicInfoService", "WIDESEAWCS_BasicInfoService\WIDESEAWCS_BasicInfoService.csproj", "{FFAB2C76-1C9E-4006-95C8-A0B2AA53139D}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_BasicInfoService", "WIDESEAWCS_BasicInfoService\WIDESEAWCS_BasicInfoService.csproj", "{FFAB2C76-1C9E-4006-95C8-A0B2AA53139D}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/SchedulerController.cs b/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/SchedulerController.cs
new file mode 100644
index 0000000..dbb9fe3
--- /dev/null
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/SchedulerController.cs
@@ -0,0 +1,113 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEAWCS_Core;
+using WIDESEAWCS_QuartzJob;
+using WIDESEAWCS_QuartzJob.DTO;
+using WIDESEAWCS_QuartzJob.QuartzNet;
+
+namespace WIDESEAWCS_Server.Controllers.QuartzJob
+{
+    [Route("api/Scheduler")]
+    [ApiController]
+    public class SchedulerController : ControllerBase
+    {
+        private readonly ISchedulerCenter _scheduler;
+        private readonly QuartzNetExtension _quartzNetExtension;
+        public SchedulerController(ISchedulerCenter scheduler, QuartzNetExtension quartzNetExtension)
+        {
+            _scheduler = scheduler;
+            _quartzNetExtension = quartzNetExtension;
+        }
+
+        [HttpGet, Route("StartSchedule"), AllowAnonymous]
+        public async Task<WebResponseContent> StartSchedule()
+        {
+            try
+            {
+                await _quartzNetExtension.StartAsync();
+                return WebResponseContent.Instance.OK("鍚姩鎴愬姛");
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error("鍚姩閿欒锛�" + ex.Message);
+            }
+        }
+
+        [HttpGet, Route("StopSchedule"), AllowAnonymous]
+        public Task<WebResponseContent> StopSchedule()
+        {
+            return _scheduler.StopScheduleAsync();
+        }
+
+        /// <summary>
+        /// 鏆傚仠鎸囧畾鐨勮鍒掍换鍔�
+        /// </summary>
+        /// <param name="sysSchedule"></param>
+        /// <returns></returns>
+        [HttpPost, Route("PauseJob"), AllowAnonymous]
+        public Task<WebResponseContent> PauseJob([FromBody] DispatchInfoDTO sysSchedule)
+        {
+            return _scheduler.PauseJob(sysSchedule);
+        }
+
+        /// <summary>
+        /// 鎭㈠鎸囧畾鐨勮鍒掍换鍔�
+        /// </summary>
+        /// <param name="sysSchedule"></param>
+        /// <returns></returns>
+        [HttpPost, Route("ResumeJob"), AllowAnonymous]
+        public Task<WebResponseContent> ResumeJob([FromBody] DispatchInfoDTO sysSchedule)
+        {
+            return _scheduler.ResumeJob(sysSchedule);
+        }
+
+        /// <summary>
+        /// 娣诲姞涓�涓鍒掍换鍔★紙鏄犲皠绋嬪簭闆嗘寚瀹欼Job瀹炵幇绫伙級
+        /// </summary>
+        /// <param name="sysSchedule"></param>
+        /// <returns></returns>
+        [HttpPost, Route("AddScheduleJob"), AllowAnonymous]
+        public Task<WebResponseContent> AddScheduleJob([FromBody] DispatchInfoDTO sysSchedule)
+        {
+            return _scheduler.AddScheduleJobAsync(sysSchedule);
+        }
+
+        /// <summary>
+        /// 绔嬪嵆鎵ц 涓�涓换鍔� 鎵ц涓�娆�
+        /// </summary>
+        /// <param name="sysSchedule"></param>
+        /// <returns></returns>
+        [HttpPost, Route("ExecuteJob"), AllowAnonymous]
+        public Task<WebResponseContent> ExecuteJob([FromBody] DispatchInfoDTO sysSchedule)
+        {
+            return _scheduler.ExecuteJobAsync(sysSchedule);
+        }
+
+        ///// <summary>
+        ///// 鏆傚仠鎵�鏈夎鍒掍换鍔�
+        ///// </summary>
+        ///// <returns></returns>
+        //[HttpPost, Route("PauseAllJob"), AllowAnonymous]
+        //public Task<WebResponseContent> PauseAllJob()
+        //{
+        //    return _scheduler.PauseAllJobAsync();
+        //}
+
+        ///// <summary>
+        ///// 鎭㈠鎵�鏈夎鍒掍换鍔�
+        ///// </summary>
+        ///// <returns></returns>
+        //[HttpPost, Route("ResumeAllJob"), AllowAnonymous]
+        //public Task<WebResponseContent> ResumeAllJob()
+        //{
+        //    return _scheduler.ResumeAllJobAsync();
+        //}
+
+        [HttpPost, Route("DeleteScheduleJob"), AllowAnonymous]
+        public Task<WebResponseContent> DeleteScheduleJob([FromBody] DispatchInfoDTO sysSchedule)
+        {
+            return _scheduler.StopScheduleJobAsync(sysSchedule);
+        }
+    }
+}
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Server/Filter/CustomProfile.cs b/WIDESEAWCS_Server/WIDESEAWCS_Server/Filter/CustomProfile.cs
index a76f5cd..a136136 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Server/Filter/CustomProfile.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Server/Filter/CustomProfile.cs
@@ -4,6 +4,7 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_DTO.System;
 using WIDESEAWCS_DTO.TaskInfo;
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_QuartzJob.DTO;
@@ -19,6 +20,7 @@
         /// </summary>
         public CustomProfile() 
         {
+            CreateMap<Sys_Menu, MenuDTO>();
             CreateMap<Dt_DeviceInfo,DeviceInfoDTO>();
             CreateMap<WMSTaskDTO, Dt_Task>().ForMember(a => a.WMSId, b => b.MapFrom(b => b.Id));
             CreateMap<Dt_Task, ConveyorLineTaskCommand>().ForMember(a => a.TargetAddress, b => b.MapFrom(b => b.NextAddress)).ForMember(a => a.Barcode, b => b.MapFrom(b => b.PalletCode)).ForMember(a => a.TaskNum, b => b.MapFrom(b => b.TaskNum));
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs b/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs
index 9f7db7c..30d606b 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs
@@ -35,21 +35,20 @@
     hostingContext.Configuration.ConfigureApplication();
     config.Sources.Clear();
     config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: false);
-}); ;
+});
 builder.ConfigureApplication();
-
 
 // 2、配置服务
 builder.Services.AddSingleton(new AppSettings(builder.Configuration));//注册
 builder.Services.AddAllOptionRegister();//读取配置文件
 builder.Services.AddMemoryCacheSetup();//缓存
 builder.Services.AddSqlsugarSetup();//SqlSugar 启动服务
-//builder.Services.AddInitializationHostServiceSetup();//应用初始化服务注入
+//builder.Services.AddHostedService<SeedDataHostedService>();//初始化数据库
 
 builder.Services.AddDbSetup();//Db 启动服务
 
-//builder.Services.AddScoped<QuartzJobCreateDataTabel>();
-//builder.Services.AddHostedService<QuartzJobDataTableHostedService>();
+//builder.Services.AddScoped<QuartzJobCreateDataTabel>();//任务调度 注入创建QuartzJob数据库表类
+//builder.Services.AddHostedService<QuartzJobDataTableHostedService>();//任务调度 映射QuartzJob数据库表
 
 builder.Services.AddAutoMapperSetup();
 
@@ -59,11 +58,11 @@
 
 builder.Services.AddSwaggerSetup();
 
-//builder.Services.AddJobSetup();//任务调度 启动服务
+builder.Services.AddJobSetup();//任务调度 注入反射获取依赖对象
 
 builder.Services.AddHttpContextSetup();
 
-//builder.Services.AddHostedService<QuartzJobHostedService>();
+builder.Services.AddHostedService<QuartzJobHostedService>();//任务调度 启动服务
 
 builder.Services.AddMvc(options =>
 {
@@ -110,14 +109,13 @@
 app.ConfigureApplication();//配置文件
 app.UseApplicationSetup();//启动配置
 
-
 app.UseAllServicesMiddle(builder.Services);
 
 app.UseSession();
 //if (app.Environment.IsDevelopment())
 {
     app.UseSwaggerAuthorized();
-    app.UseSwaggerMiddle(() => Assembly.GetExecutingAssembly().GetManifestResourceStream("WIDESEAWCS_Server.index.html"));
+    app.UseSwaggerMiddle(() => Assembly.GetExecutingAssembly().GetManifestResourceStream("WIDESEAWCS_Server.index.html") ?? throw new Exception("未找到WIDESEAWCS_Server.index.html文件"));
 }//判断是否需要打开swagger
 
 app.UseIpLimitMiddle();
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS.xml b/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS.xml
index 847e3f4..c2e6ad0 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS.xml
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS.xml
@@ -4,6 +4,34 @@
         <name>WIDESEAWCS_Server</name>
     </assembly>
     <members>
+        <member name="M:WIDESEAWCS_Server.Controllers.QuartzJob.SchedulerController.PauseJob(WIDESEAWCS_QuartzJob.DTO.DispatchInfoDTO)">
+            <summary>
+            鏆傚仠鎸囧畾鐨勮鍒掍换鍔�
+            </summary>
+            <param name="sysSchedule"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEAWCS_Server.Controllers.QuartzJob.SchedulerController.ResumeJob(WIDESEAWCS_QuartzJob.DTO.DispatchInfoDTO)">
+            <summary>
+            鎭㈠鎸囧畾鐨勮鍒掍换鍔�
+            </summary>
+            <param name="sysSchedule"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEAWCS_Server.Controllers.QuartzJob.SchedulerController.AddScheduleJob(WIDESEAWCS_QuartzJob.DTO.DispatchInfoDTO)">
+            <summary>
+            娣诲姞涓�涓鍒掍换鍔★紙鏄犲皠绋嬪簭闆嗘寚瀹欼Job瀹炵幇绫伙級
+            </summary>
+            <param name="sysSchedule"></param>
+            <returns></returns>
+        </member>
+        <member name="M:WIDESEAWCS_Server.Controllers.QuartzJob.SchedulerController.ExecuteJob(WIDESEAWCS_QuartzJob.DTO.DispatchInfoDTO)">
+            <summary>
+            绔嬪嵆鎵ц 涓�涓换鍔� 鎵ц涓�娆�
+            </summary>
+            <param name="sysSchedule"></param>
+            <returns></returns>
+        </member>
         <member name="T:WIDESEAWCS_WCSServer.Filter.AutoMapperConfig">
             <summary>
             闈欐�佸叏灞� AutoMapper 閰嶇疆鏂囦欢
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.http b/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.http
new file mode 100644
index 0000000..4743b98
--- /dev/null
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.http
@@ -0,0 +1 @@
+# For more info on HTTP files go to https://aka.ms/vs/httpfile
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json b/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
index 5a38ac1..f670ace 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
@@ -24,6 +24,7 @@
   "ApiName": "WIDESEAWCS",
   "ExpMinutes": 120,
   "QuartzJobAutoStart": true,
-  "LogDeubgEnable": true,
-  "PrintSql": true
+  "LogDeubgEnable": true, //鏄惁璁板綍璋冭瘯鏃ュ織
+  "PrintSql": true, //鎵撳嵃SQL璇彞
+  "LogAOPEnable": true //鏄惁璁板綍AOP鏃ュ織
 }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_MenuRepository.cs b/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_MenuRepository.cs
index 4ecf724..12b9dc6 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_MenuRepository.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_MenuRepository.cs
@@ -1,10 +1,13 @@
-锘縰sing SqlSugar;
+锘縰sing AutoMapper;
+using SqlSugar;
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
+using System.Drawing;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_DTO.System;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.BaseRepository;
 using WIDESEAWCS_Core.Helper;
@@ -16,14 +19,16 @@
 {
     public class Sys_MenuRepository : RepositoryBase<Sys_Menu>, ISys_MenuRepository
     {
-        public Sys_MenuRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
+        private readonly IMapper _mapper;
+        public Sys_MenuRepository(IUnitOfWorkManage unitOfWorkManage, IMapper mapper) : base(unitOfWorkManage)
         {
+            _mapper = mapper;
         }
 
-        public List<Sys_Menu> GetAllMenu()
+        public List<MenuDTO> GetAllMenu()
         {
-            List<Sys_Menu> _menus = base.QueryData(x => x.Enable == 1 || x.Enable == 2).OrderByDescending(a => a.OrderNo).ThenByDescending(q => q.ParentId).ToList();
-
+            List<Sys_Menu> menus = base.QueryData(x => x.Enable == 1 || x.Enable == 2).OrderByDescending(a => a.OrderNo).ThenByDescending(q => q.ParentId).ToList();
+            List<MenuDTO> _menus = _mapper.Map<List<MenuDTO>>(menus);
             _menus.ForEach(x =>
             {
                 x.MenuType ??= 0;
@@ -31,11 +36,11 @@
                 {
                     try
                     {
-                        x.Actions = x.Auth.DeserializeObject<List<Sys_Actions>>();
+                        x.Actions = x.Auth.DeserializeObject<List<ActionDTO>>();
                     }
                     catch { }
                 }
-                x.Actions ??= new List<Sys_Actions>();
+                x.Actions ??= new List<ActionDTO>();
             });
             string test = _menus.Serialize();
             return _menus;
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_DictionaryService.cs b/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_DictionaryService.cs
index 8f68362..70b9c49 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_DictionaryService.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_DictionaryService.cs
@@ -91,25 +91,7 @@
                 vueDictionaryDTOs.AddRange(selectDics);
             }
 
-            //object GetSourceData(string dicNo, string dbSql, object data)
-            //{
-            //    if (string.IsNullOrEmpty(dbSql))
-            //    {
-            //        return data;
-            //    }
-            //    return BaseDal.QueryObjectDataBySql(dbSql, null);
-            //}
-            //List<VueDictionaryDTO> vueDictionaryDTOs = dicConfig.Select(item => new VueDictionaryDTO
-            //{
-            //    DicNo = item.dicNo,
-            //    Config = item.config,
-            //    Data = GetSourceData(item.dicNo, item.dbSql, item.list)
-            //}).ToList();
-
-
             return vueDictionaryDTOs;
         }
-
-
     }
 }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_MenuService.cs b/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_MenuService.cs
index d6446e1..7f7dba0 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_MenuService.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_MenuService.cs
@@ -5,6 +5,7 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_DTO.System;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.BaseRepository;
 using WIDESEAWCS_Core.BaseServices;
@@ -61,7 +62,7 @@
         }
 
 
-        public List<Sys_Menu> GetUserMenuList(int roleId)
+        public List<MenuDTO> GetUserMenuList(int roleId)
         {
             if (App.User.IsRoleIdSuperAdmin(roleId))
             {
@@ -71,7 +72,7 @@
             return BaseDal.GetAllMenu().Where(x => menuIds.Contains(x.MenuId)).ToList();
         }
 
-        public List<Sys_Actions> GetActions(int menuId, List<Sys_Actions> menuActions, List<Permissions> permissions, int roleId)
+        public List<ActionDTO> GetActions(int menuId, List<ActionDTO> menuActions, List<Permissions> permissions, int roleId)
         {
             if (App.User.IsRoleIdSuperAdmin(roleId))
             {
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_RoleService.cs b/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_RoleService.cs
index 88811c2..72c4335 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_RoleService.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_RoleService.cs
@@ -107,7 +107,7 @@
             //鑾峰彇鐢ㄦ埛鏉冮檺
             List<Permissions> permissions = _MenuRepository.GetPermissions(roleId);
             //鏉冮檺鐢ㄦ埛鏉冮檺鏌ヨ鎵�鏈夌殑鑿滃崟淇℃伅
-            List<Sys_Menu> menus =  _MenuService.GetUserMenuList(roleId);
+            List<MenuDTO> menus = _MenuService.GetUserMenuList(roleId);
             //鑾峰彇褰撳墠鐢ㄦ埛鏉冮檺濡�:(Add,Search)瀵瑰簲鐨勬樉绀烘枃鏈俊鎭:Add锛氭坊鍔狅紝Search:鏌ヨ
             var data = menus.Select(x => new
             {
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs b/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs
index 2c740c4..568c8ca 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs
@@ -124,11 +124,11 @@
             {
                 s.UserName,
                 s.UserTrueName,
-                s.Address,
-                s.PhoneNo,
-                s.Email,
+                //s.Address,
+                //s.PhoneNo,
+                //s.Email,
                 s.Remark,
-                s.Gender,
+                //s.Gender,
                 s.RoleName,
                 s.HeadImageUrl,
                 s.CreateDate
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs b/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs
index 9d23f8a..5a9bfbb 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs
@@ -43,40 +43,62 @@
 
         public void AddTaskExecuteDetail(int taskId, string description = "")
         {
+            // 灏濊瘯鎵ц娣诲姞浠诲姟鎵ц璇︽儏鐨勬柟娉�
             try
             {
+                // 鍒濆鍖栨槸鍚︽甯镐负true
                 bool isNormal = true;
+                // 鏍规嵁浠诲姟id鏌ヨ浠诲姟
                 Dt_Task task = _taskRepository.QueryFirst(x => x.TaskId == taskId);
+                // 濡傛灉浠诲姟涓虹┖锛屽垯杩斿洖
                 if (task == null) return;
+                // 鑾峰彇浠诲姟鏁伴噺
                 int taskNum = task.TaskNum;
+                // 鑾峰彇浠诲姟鐘舵��
                 int taskState = task.TaskState;
 
+                // 灏濊瘯灏嗕换鍔$姸鎬佽浆鎹负TaskOutStatusEnum鏋氫妇绫诲瀷
                 if (!int.TryParse(Enum.Parse<TaskOutStatusEnum>(taskState.ToString()).ToString(), out int result))
                 {
-                    if ((int)(TaskOutStatusEnum)result > (int)TaskOutStatusEnum.OutFinish)
+                    // 濡傛灉杞崲澶辫触锛屽垯灏嗕换鍔$姸鎬佽浆鎹负TaskInStatusEnum鏋氫妇绫诲瀷
+                    if (!int.TryParse(Enum.Parse<TaskInStatusEnum>(taskState.ToString()).ToString(), out result))
+                    {
+                        // 濡傛灉杞崲澶辫触锛屽垯灏唅sNormal璁剧疆涓篺alse
                         isNormal = false;
+                    }
                 }
-                else if (!int.TryParse(Enum.Parse<TaskInStatusEnum>(taskState.ToString()).ToString(), out result))
+                // 濡傛灉杞崲鎴愬姛锛屽垯鍒ゆ柇浠诲姟鐘舵�佹槸鍚﹀ぇ浜嶰utFinish
+                else if ((int)(TaskOutStatusEnum)result > (int)TaskOutStatusEnum.OutFinish)
                 {
-                    if ((int)(TaskInStatusEnum)result > (int)TaskInStatusEnum.InFinish)
-                        isNormal = false;
+                    // 濡傛灉澶т簬锛屽垯灏唅sNormal璁剧疆涓篺alse
+                    isNormal = false;
                 }
+                // 鍒涘缓浠诲姟鎵ц璇︽儏瀵硅薄
                 Dt_TaskExecuteDetail taskExecuteDetail = new()
                 {
+                    // 璁剧疆鏄惁鎵嬪姩鎵ц
                     IsManual = App.User.UserId > 0,
+                    // 璁剧疆鏄惁姝e父
                     IsNormal = isNormal,
+                    // 璁剧疆浠诲姟鏁伴噺
                     TaskNum = taskNum,
+                    // 璁剧疆浠诲姟id
                     TaskId = taskId,
+                    // 璁剧疆浠诲姟鐘舵��
                     TaskState = taskState,
+                    // 璁剧疆鎻忚堪
                     Description = description,
+                    // 璁剧疆褰撳墠鍦板潃
                     CurrentAddress = task.CurrentAddress,
+                    // 璁剧疆涓嬩竴涓湴鍧�
                     NextAddress = task.NextAddress,
                 };
+                // 娣诲姞浠诲姟鎵ц璇︽儏
                 BaseDal.AddData(taskExecuteDetail);
             }
             catch (Exception ex)
             {
-
+                
             }
         }
 
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs b/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
index b1f3bab..a4b4314 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
@@ -59,6 +59,9 @@
                 CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams");
                 if (conveyorLine != null)
                 {
+                    //bool result = conveyorLine.Communicator.Write("DB1.0", "AAABBB");
+                    //string testVal = conveyorLine.Communicator.Read<string>("DB1.0");
+
                     List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode);
                     List<Task> tasks = new List<Task>();
                     foreach (string childDeviceCode in childDeviceCodes)
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs b/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
index 6d107ed..9fb1f20 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -20,7 +20,7 @@
 
 namespace WIDESEAWCS_Tasks
 {
-    [DisallowConcurrentExecution]
+
     public class CommonStackerCraneJob : JobBase, IJob
     {
         private readonly ITaskService _taskService;
@@ -40,15 +40,11 @@
         {
             try
             {
-
-                // speStackerCrane.GetStackerCraneStatus<StackerCraneAutoStatus>();
-                // speStackerCrane.GetStackerCraneStatus<StackerCraneWorkStatus>();
-                // speStackerCrane.GetStackerCraneStatus<StackerCraneStatus>();
-
                 CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
                 if (commonStackerCrane != null)
                 {
-                    Console.Out.WriteLine(commonStackerCrane.DeviceName);
+                    short a = commonStackerCrane.Communicator.Read<short>("DB2.2.0");
+                    //Console.Out.WriteLine(DateTime.Now + "锛�" + commonStackerCrane.DeviceName);
                     if (!commonStackerCrane.IsEventSubscribed)
                     {
                         commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//璁㈤槄浠诲姟瀹屾垚浜嬩欢
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneDBName.cs b/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneDBName.cs
index 35ebe56..5c9132a 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneDBName.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneDBName.cs
@@ -74,5 +74,7 @@
         /// 鎵樼洏鍙�
         /// </summary>
         Barcode,
+
+        CurrentTaskNum
     }
 }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs b/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs
index 089b050..0a4e601 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs
@@ -2,6 +2,8 @@
 using HslCommunication.Core;
 using Microsoft.VisualBasic.FileIO;
 using Quartz;
+using Quartz.Impl;
+using Quartz.Spi;
 using SixLabors.ImageSharp.PixelFormats;
 using System;
 using System.Collections.Generic;
@@ -14,7 +16,9 @@
 using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_QuartzJob;
 using WIDESEAWCS_QuartzJob.DeviceBase;
+using WIDESEAWCS_QuartzJob.DTO;
 using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
+using WIDESEAWCS_Tasks.StackerCraneJob;
 
 namespace WIDESEAWCS_Tasks
 {
@@ -27,45 +31,31 @@
             {
                 CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
 
-                Console.Out.WriteLine(commonStackerCrane.DeviceName + "鐘舵��:" + commonStackerCrane.StackerCraneStatusDes);
+                //1.SendCommand鏂规硶绀轰緥
+                //鍫嗗灈鏈哄懡浠ゅ璞★紝缁ф壙DeviceCommand
+                StackerCraneTaskCommand stackerCraneTaskCommand = new StackerCraneTaskCommand();
+                //璋冪敤鍙戦�佷换鍔″懡浠ゆ柟娉�
+                commonStackerCrane.SendCommand(stackerCraneTaskCommand);
 
-                Console.Out.WriteLine(commonStackerCrane.DeviceName + "鎵嬭嚜鍔ㄧ姸鎬�:" + commonStackerCrane.StackerCraneAutoStatusDes);
+                //2.GetValue鏂规硶绀轰緥
+                //璋冪敤璇诲彇PLC鏁版嵁鏂规硶锛孲tackerCraneDBName涓烘灇涓剧被鍨嬶紝StackerCraneDBName.CurrentTaskNum涓烘灇涓惧��
+                commonStackerCrane.GetValue<StackerCraneDBName, int>(StackerCraneDBName.CurrentTaskNum);
 
-                Console.Out.WriteLine(commonStackerCrane.DeviceName + "浣滀笟鐘舵��:" + commonStackerCrane.StackerCraneWorkStatusDes);
+                //3.SetValue鏂规硶绀轰緥
+                //璋冪敤鍐欏叆PLC鏁版嵁鏂规硶锛孲tackerCraneDBName涓烘灇涓剧被鍨嬶紝StackerCraneDBName.CurrentTaskNum涓烘灇涓惧�硷紝121涓哄啓鍏ョ殑鏁版嵁
+                commonStackerCrane.SetValue(StackerCraneDBName.CurrentTaskNum, 121);
 
-                //Console.Out.WriteLine(commonStackerCrane.DeviceName + "褰撳墠浠诲姟鍙�:" + commonStackerCrane.GetValue<StackerCraneDBName, int>(StackerCraneDBName.CurrentTaskNum));
+                //4.璋冪敤浠诲姟瀹屾垚浜嬩欢鐩戞祴鏂规硶
+                commonStackerCrane.CheckStackerCraneTaskCompleted();
 
-                //commonStackerCrane.SetValue(StackerCraneDBName.CurrentTaskNum, DateTime.Now.Second);
-
-                //OperateResult<TimeSpan> operateResult = commonStackerCrane.Communicator.Wait("DB1.18", 1000, 60000, 1);
-                //Console.Out.WriteLine(operateResult.Serialize());
-
-                byte[] bytes = commonStackerCrane.Communicator.Read("DB1.1", 2);
-                Console.Out.WriteLine(bytes.ToBoolArray().ToList().Serialize());
-
-                bool[] bools = new bool[] { true, false, true };
-                byte[] bytes1 = bools.ToByteArray();
-                Console.Out.WriteLine(bytes1.ToList().Serialize());
-
-                //StackerCraneCommand stackerCraneCommand = new StackerCraneCommand()
-                //{
-                //    TaskNum = 999,
-                //    WorkType = 1,
-                //    TrayType = 2,
-                //    StartRow = 12,
-                //    StartColumn = 13,
-                //    StartLayer = 14,
-                //    EndRow = 22,
-                //    EndColumn = 23,
-                //    EndLayer = 24,
-                //};
-
-                //bool flag = commonStackerCrane.SendCommand(stackerCraneCommand);
-                //Console.Out.WriteLine(flag);
-
-                //StackerCraneCommand stackerCraneCommand2 = new StackerCraneCommand();
-                //stackerCraneCommand2 = commonStackerCrane.Communicator.ReadCustomer<StackerCraneCommand>("DB2.2");
-                //Console.Out.WriteLine(stackerCraneCommand2.Serialize());
+                //5.浣跨敤CommonStackerCrane涓瑿ommunicator灞炴�х洿鎺ヨ鍐橮LC鍦板潃鐨勫��
+                string plcProtocolAddress = "DB1.0";//PLC閫氳鍗忚鐨勫湴鍧�锛屽彲鐩存帴浣跨敤婧愬湴鍧�璇诲彇
+                DeviceProDTO? deviceProDTO = commonStackerCrane.DeviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(StackerCraneDBName.CurrentTaskNum));//PLC閫氳鍗忚鐨勫湴鍧�锛屼篃鍙�氳繃[鍗忚淇℃伅灞炴��(DeviceProDTOs)]锛屽幓鏌ヨ鍒扮浉鍏崇殑婧愬湴鍧�
+                if (deviceProDTO != null) 
+                {
+                    commonStackerCrane.Communicator.Read<short>(plcProtocolAddress);
+                    commonStackerCrane.Communicator.Read<short>(deviceProDTO.DeviceProAddress);
+                }
 
                 Console.Out.WriteLine(DateTime.Now);
 

--
Gitblit v1.9.3