hutongqing
2024-11-20 70233af5426b0d1c343ebe87183303a34a9aaa58
WIDESEAWCS_QuartzJob更新版本

1、设备表(Dt_DeviceInfo)中配置的设备相关信息不在调度服务配置表(Dt_DispatchInfo)中也可连接到PLC,是否连接PLC通过设备表(Dt_DeviceInfo)中DeviceStatus控制。
2、新增QuartzNetExtension类,将连接PLC、开启调度服务方法从QuartzJobHostedService类中移除,添加到QuartzNetExtension类中,停止调度服务时再启动时可注入QuartzNetExtension类调用方法。
3、新增Scheduler控制器,主要操作调度服务,暂只写了启动。停止、暂停、恢复等方法。
已删除10个文件
已重命名1个文件
已添加12个文件
已修改63个文件
4098 ■■■■ 文件已修改
WIDESEAWCS_Client/src/views/system/Sys_Menu.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v7.bin 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v7.bin 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/DesignTimeBuild/.dtbcache.v2 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/005d5771-1857-4071-93b7-c64261f27980.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/0a2b14b5-bcfa-4464-9cf2-3935b2833bc9.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/185eebbc-5543-4370-b0ab-1dc832c3f4aa.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/2504b6c7-2758-4cba-a9fc-7cfaccec4015.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/43d2a2dc-30bd-423d-a9c4-af4fe86a7160.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/76c5396a-0ace-4299-a2e5-72dee6db0406.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/7701956d-90bd-47ab-b9b9-97acbc7d7918.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/a3124894-1503-4e13-963c-18af5a16a2e6.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/aaeb68d7-aa3b-415c-b4e2-315ac5c186d7.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ac605005-c203-4605-a5ef-2f13a90992a7.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ba667f09-0dbf-4db8-8382-9e90210cc581.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/cf24cbdc-994d-4c42-b0d8-a1bfa8bab80b.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/d3ac7d16-c7ff-406c-b891-7c7d1f786a13.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json 1652 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/CodeMap1.dgml 713 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Communicator/AllenBrandly/AllenBrandlyEtherNetCommunicator.cs 623 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Communicator/CommunicationException.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Communicator/Omron/OmronEtherNetCommunicator.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Communicator/WIDESEAWCS_Communicator.csproj 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/CacheAOP.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/LogAOP.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/SqlSugarAop.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Core/Attributes/SequenceAttribute.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Core/BaseRepository/RepositoryBase.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Core/BaseServices/ServiceBase.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Core/Const/TenantConst.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Core/DB/Models/BaseEntity.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Core/Extensions/AutofacModuleRegister.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Core/Helper/UtilConvert.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Core/LogHelper/Logger.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Core/LogHelper/QuartzLogger.cs 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Core/Seed/DBSeed.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_MenuRepository.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_MenuService.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Model/ClassDiagram1.cd 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Model/ClassDiagram2.cd 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Menu.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_User.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/IConveyorLine.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DTO/DeviceProDTO.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DeviceBase/IDevice.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/JobBase.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Models/Dt_DeviceInfo.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Models/Dt_DeviceProtocolDetail.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/OtherDevices/IOtherDevice.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/OtherDevices/OtherDevice.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzExtensions/JobSetup.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzExtensions/QuartzJobHostedService.cs 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzNet/ISchedulerCenter.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzNet/QuartzNetExtension.cs 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzNet/SchedulerCenterServer.cs 104 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/DeviceProtocolService.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ShuttleCar/IShuttleCar.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ShuttleCar/ShuttleCar.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Common/CommonStackerCrane.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/IStackerCrane.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/Spec/SpeStackerCrane.cs 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Storage.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/WIDESEAWCS_QuartzJob.csproj 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Server.sln 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/SchedulerController.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Server/Filter/CustomProfile.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.http 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_MenuRepository.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_DictionaryService.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_MenuService.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_RoleService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneDBName.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WIDESEAWCS_Client/src/views/system/Sys_Menu.vue
@@ -297,6 +297,7 @@
      createDate: "",
      creator: "",
      modifyDate: "",
      menuType: 1
    });
    const actionFields = ref({
WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v7.bin
Binary files differ
WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v7.bin
Binary files differ
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/DesignTimeBuild/.dtbcache.v2
Binary files differ
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/005d5771-1857-4071-93b7-c64261f27980.vsidx
Binary files differ
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/0a2b14b5-bcfa-4464-9cf2-3935b2833bc9.vsidx
Binary files differ
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/185eebbc-5543-4370-b0ab-1dc832c3f4aa.vsidx
Binary files differ
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/2504b6c7-2758-4cba-a9fc-7cfaccec4015.vsidx
Binary files differ
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/43d2a2dc-30bd-423d-a9c4-af4fe86a7160.vsidx
Binary files differ
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/76c5396a-0ace-4299-a2e5-72dee6db0406.vsidx
Binary files differ
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/7701956d-90bd-47ab-b9b9-97acbc7d7918.vsidx
Binary files differ
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/a3124894-1503-4e13-963c-18af5a16a2e6.vsidx
Binary files differ
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/aaeb68d7-aa3b-415c-b4e2-315ac5c186d7.vsidx
Binary files differ
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ac605005-c203-4605-a5ef-2f13a90992a7.vsidx
Binary files differ
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ba667f09-0dbf-4db8-8382-9e90210cc581.vsidx
Binary files differ
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/cf24cbdc-994d-4c42-b0d8-a1bfa8bab80b.vsidx
Binary files differ
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/d3ac7d16-c7ff-406c-b891-7c7d1f786a13.vsidx
Binary files differ
WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2
Binary files differ
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"
            }
          ]
        }
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="解决方案文件夹" CanBeDataDriven="True" IsProviderRoot="False" NavigationActionLabel="解决方案文件夹" />
    <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="解决方案文件夹" 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>
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为空,抛出ArgumentNullException异常
            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;
            }
            // å¦‚果以上转换都不成功,抛出NotImplementedException异常
            else
            {
                throw new NotImplementedException();
            }
        }
        // èŽ·å–ä¸‹ä¸€ä¸ªæœªå®Œæˆçš„ä»»åŠ¡çŠ¶æ€
        public static int GetNextNotCompletedStatus<T>(this int currentStatus) where T : Enum
        {
            // èŽ·å–æžšä¸¾ç±»åž‹
            Type type = typeof(T);
            // å¦‚æžœtype为空,抛出ArgumentNullException异常
            if (type is null) throw new ArgumentNullException();
            // å¦‚æžœtype不是枚举类型,返回0
            if (!type.IsEnum) return 0;
            // å¦‚æžœtype是TaskInStatusEnum枚举类型
            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是TaskOutStatusEnum枚举类型
            else if (type == typeof(TaskOutStatusEnum))
            {
                // èŽ·å–TaskOutStatusEnum枚举类型的索引列表
                return type.GetEnumIndexList().Where(x => x > currentStatus && x < (int)TaskOutStatusEnum.OutFinish).OrderBy(x => x).FirstOrDefault();
            }
            // å¦‚果以上条件都不满足,抛出NotImplementedException异常
            else
            {
                throw new NotImplementedException();
WIDESEAWCS_Server/WIDESEAWCS_Communicator/AllenBrandly/AllenBrandlyEtherNetCommunicator.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,623 @@
using 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的西门子的S7协议的通讯类
        /// </summary>
        private AllenBradleyNet plc;
        /// <summary>
        /// è®¾å¤‡çš„IP地址。
        /// </summary>
        private string _ipAddress;
        /// <summary>
        /// è¿žæŽ¥ä½¿ç”¨çš„端口号。
        /// </summary>
        private int _port;
        /// <summary>
        /// å½“前通讯器是否已连接到PLC。
        /// </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">设备的IP地址</param>
        /// <param name="port">连接使用的端口号</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>
        /// ä»ŽOperateResult对象中获取读取的数据。
        /// </summary>
        /// <typeparam name="T">读取的数据类型。</typeparam>
        /// <param name="operateResult">HSLCommunication读取的OperateResult<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
            {
                //实例化一个西门子的S7协议的通讯对象
                plc = new AllenBradleyNet()
                {
                    IpAddress = _ipAddress,
                    Port = _port,
                    Slot = 0
                };
                OperateResult operateResult = plc.ConnectServer();//连接PLC
                _connected = operateResult.IsSuccess;//将连接是否成功赋值给当前通讯器是否已连接到PLC
                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();//断开与PLC的连接
                    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}】PLC读取异常,地址:【{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
    }
}
WIDESEAWCS_Server/WIDESEAWCS_Communicator/CommunicationException.cs
@@ -133,11 +133,6 @@
        public const string DataTypeErrorException = "数据类型错误,未定义该PLC数据类型:【{0}】,地址:【{1}】";
        /// <summary>
        /// æ•°æ®è¯»å–异常,参数【数据类型,协议地址,错误信息】
        /// </summary>
        public const string ReadException = "数据读取失败,数据类型:【{0}】,地址:【{1}】,错误信息:【{2}】";
        /// <summary>
        /// æ•°æ®è¯»å–失败,参数【数据类型,协议地址,错误信息】
        /// </summary>
        public const string WriteAndReadCheckFaild = "数据写入后读取校验失败,地址:【{0}】,写入的数据:【{1}】,读取的数据:【{2}】";
WIDESEAWCS_Server/WIDESEAWCS_Communicator/Omron/OmronEtherNetCommunicator.cs
@@ -18,7 +18,7 @@
namespace WIDESEAWCS_Communicator
{
    /// <summary>
    /// è¥¿é—¨å­S7通讯类
    /// æ¬§å§†é¾™EtherNet/IP(CIP)
    /// </summary>
    [Description("欧姆龙EtherNet/IP(CIP)")]
    public class OmronEtherNetCommunicator : BaseCommunicator
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);
            }
        }
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通讯、ModbusTcp通讯(WriteCustomer、ReadCustomer方法不可用,使用时注意)</Description>
        <Version>2.2.1</Version>
        <Description>新增罗克韦尔(AB)EtherNet/IP(CIP)通讯(WriteCustomer、ReadCustomer方法除西门子PLC之外仍不可用,使用时注意)</Description>
    </PropertyGroup>
    <ItemGroup>
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是DateTime类型,则返回其字符串表示形式
                return ((DateTime)arg).ToString("yyyyMMddHHmmss");
            if (!arg.IsNotEmptyOrNull())
                // å¦‚æžœarg不是空或null,则返回其字符串表示形式
                return arg.ObjToString();
            if (arg != null)
            {
                // å¦‚æžœarg不是空或null
                if (arg is Expression)
                {
                    // å¦‚æžœarg是Expression类型
                    var obj = arg as Expression;
                    // è§£æžarg
                    var result = Resolve(obj);
                    // è¿”回MD5加密后的字符串
                    return MD5Helper.MD5Encrypt16(result);
                }
                else if (arg.GetType().IsClass)
                {
                    // å¦‚æžœarg是类类型
                    // å°†arg序列化为JSON字符串
                    return MD5Helper.MD5Encrypt16(JsonConvert.SerializeObject(arg));
                }
                // å¦åˆ™ï¼Œè¿”回"value:"加上arg的字符串表示形式
                return $"value:{arg.ObjToString()}";
            }
            // å¦‚æžœarg是空或null,则返回空字符串
            return string.Empty;
        }
        private static string Resolve(Expression expression)
        {
            // åˆ›å»ºä¸€ä¸ªExpressionContext对象
            ExpressionContext expContext = new ExpressionContext();
            // è§£æžè¡¨è¾¾å¼ï¼Œå¹¶æŒ‡å®šè§£æžç±»åž‹ä¸ºWhereSingle
            expContext.Resolve(expression, ResolveExpressType.WhereSingle);
            // èŽ·å–è§£æžç»“æžœ
            var value = expContext.Result.GetString();
            // èŽ·å–å‚æ•°åˆ—è¡¨
            var pars = expContext.Parameters;
            // éåŽ†å‚æ•°åˆ—è¡¨
            pars.ForEach(s =>
            {
                // å°†å‚数名替换为参数值
                value = value.Replace(s.ParameterName, s.Value.ObjToString());
            });
            // è¿”回替换后的值
            return value;
        }
    }
WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/LogAOP.cs
@@ -16,7 +16,7 @@
namespace WIDESEAWCS_Core.AOP
{
    /// <summary>
    /// æ‹¦æˆªå™¨BlogLogAOP ç»§æ‰¿IInterceptor接口
    /// æ‹¦æˆªå™¨LogAOP ç»§æ‰¿IInterceptor接口
    /// </summary>
    public class LogAOP : IInterceptor
    {
@@ -123,7 +123,6 @@
            catch (Exception ex) // åŒæ­¥2
            {
                LogEx(ex, apiLogAopInfo);
                throw;
            }
        }
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)
WIDESEAWCS_Server/WIDESEAWCS_Core/Attributes/SequenceAttribute.cs
ÎļþÃû´Ó WIDESEAWCS_Server/WIDESEAWCS_Core/Attributes/SequenceAttirbute.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;
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);
        }
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
                        } };
                }
            }
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";
    }
}
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>
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();//注册服务
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;
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的BeginDate为空或者BeginDate的年份小于2010,则将BeginDate设置为当前时间
                if (log.BeginDate == null || log.BeginDate?.Year < 2010)
                {
                    log.BeginDate = DateTime.Now;
                }
                // å¦‚æžœlog的EndDate为空,则将EndDate设置为当前时间
                if (log.EndDate == null)
                {
                    log.EndDate = DateTime.Now;
                }
                //  row["Id"] = log.Id;
                // å°†RequestParam中的换行符替换为空字符串
                row["RequestParam"] = log.RequestParam?.Replace("\r\n", "");
                // å°†ResponseParam中的换行符替换为空字符串
                row["ResponseParam"] = log.ResponseParam?.Replace("\r\n", "");
                //row["Success"] = log.Success ?? -1;
                // å°†BeginDate设置为log的BeginDate
                row["BeginDate"] = log.BeginDate;
                // å°†EndDate设置为log的EndDate
                row["EndDate"] = log.EndDate;
                // è®¡ç®—ElapsedTime,即EndDate减去BeginDate的毫秒数
                row["ElapsedTime"] = ((DateTime)log.EndDate - (DateTime)log.BeginDate).TotalMilliseconds;
                // å°†UserIP设置为log的UserIP
                row["UserIP"] = log.UserIP;
                // å°†Url设置为log的Url
                row["Url"] = log.Url;
                // å¦‚æžœlog的UserId为空,则将UserId设置为-1,否则设置为log的UserId
                row["UserId"] = log.UserId ?? -1;
                // å°†UserName设置为log的UserName
                row["UserName"] = log.UserName;
                // å°†row添加到queueTable中
                queueTable.Rows.Add(row);
            }
        }
@@ -115,34 +133,53 @@
            dynamic log = null;
            try
            {
                //获取当前HttpContext
                HttpContext context = App.HttpContext;
                //如果HttpContext为空,则返回
                if (context == null)
                {
                    return;
                }
                //如果请求方法为OPTIONS,则返回
                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:", ""),
                    //客户端IP
                    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)
        {
            // èŽ·å–è¯·æ±‚å¤´ä¸­çš„X-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;
        }
    }
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");
        }
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();
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();
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();
WIDESEAWCS_Server/WIDESEAWCS_Model/ClassDiagram1.cd
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<ClassDiagram />
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>
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; }
    }
}
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
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
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
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>
        /// æ ¹æ®å‚数名称、设备子编号写入对应的数据。
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DTO/DeviceProDTO.cs
@@ -62,7 +62,7 @@
            {
                if (DevicePlcType == nameof(SiemensS7))
                    return DeviceProDataBlock + "." + DeviceProOffset;
                return Convert.ToInt32(DeviceProOffset) + "";
                return DeviceProDataBlock + "";
            }
        }
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>
    /// è®¾å¤‡æŽ¥å£å±‚
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);
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>
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>
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>
        /// æ ¹æ®å‚数名称写入堆垛机对应的数据。
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>
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>();
            //将JobFactory注入到服务中
            services.AddSingleton<IJobFactory, JobFactory>();
            //将SchedulerCenterServer注入到服务中
            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())
                //筛选出继承自IJob的类型
                .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);
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)
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>
WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzNet/QuartzNetExtension.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,123 @@
using 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;
            }
        }
    }
}
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)
                {
                    // ä»ŽFactory中获取Scheduler实例
                    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)
                    {
                        // ä»ŽFactory中获取Scheduler实例
                        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));
                }
            }
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);
            }
        }
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);
            // æŸ¥è¯¢æ‰€æœ‰ç»“束的路由,并按Id排序
            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)
        {
            // å®šä¹‰ä¸€ä¸ªç©ºå­—符串routers
            string routers = string.Empty;
            // åˆ¤æ–­startPosi是否为空
            if (!string.IsNullOrEmpty(startPosi))
            {
                // åˆ¤æ–­routers是否以逗号结尾
                if (!routers.EndsWith(","))
                    // å¦‚果不是,则将startPosi添加到routers中,并在后面加上逗号
                    routers += $"{startPosi},";
                else
                    // å¦‚果是,则将startPosi添加到routers中
                    routers += $"{startPosi}";
            }
            // ä»ŽallRouters中筛选出NextPosi等于startPosi且InOutType等于routerType的元素,并转换为List
            List<Dt_Router> preRouters = allRouters.Where(x => x.NextPosi == startPosi && x.InOutType == routerType).ToList();
            // éåކpreRouters中的每个元素
            foreach (var item in preRouters)
            {
                // è°ƒç”¨GetPreviousRoutes方法,传入item.StartPosi、allRouters和routerType,并将返回值赋给str
                string str = GetPreviousRoutes(item.StartPosi, allRouters, routerType);
                // åˆ¤æ–­str是否为空
                if (!string.IsNullOrEmpty(str))
                {
                    // åˆ¤æ–­routers是否以逗号结尾
                    if (routers.EndsWith(","))
                        // å¦‚果是,则将str添加到routers中
                        routers += $"{str}";
                    else
                        // å¦‚果不是,则将str添加到routers中,并在后面加上逗号
                        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,生成Dt_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();
            }
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>
        /// æ ¹æ®å‚数名称、设备子编号写入对应的数据。
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()
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接口的Dispose方法
        public void Dispose()
        {
            // å°†_heartStatr设置为false
            _heartStatr = false;
            // è°ƒç”¨_communicator的Dispose方法
            _communicator.Dispose();
            // å‘Šè¯‰åžƒåœ¾å›žæ”¶å™¨ä¸å†è°ƒç”¨æ­¤å¯¹è±¡çš„终结器
            GC.SuppressFinalize(this);
        }
        #endregion
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>
        /// æ ¹æ®å‚数名称写入堆垛机对应的数据。
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
    }
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;
        }
    }
}
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、HSLCommunication激活
        </Description>
        <Version>2.1.1</Version>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Quartz" Version="3.11.0" />
        <PackageReference Include="Quartz" Version="3.13.1" />
    </ItemGroup>
    <ItemGroup>
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
WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/SchedulerController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,113 @@
using 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>
        /// æ·»åŠ ä¸€ä¸ªè®¡åˆ’ä»»åŠ¡ï¼ˆæ˜ å°„ç¨‹åºé›†æŒ‡å®šIJob实现类)
        /// </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);
        }
    }
}
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));
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();
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>
            æ·»åŠ ä¸€ä¸ªè®¡åˆ’ä»»åŠ¡ï¼ˆæ˜ å°„ç¨‹åºé›†æŒ‡å®šIJob实现类)
            </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 é…ç½®æ–‡ä»¶
WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.http
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
# For more info on HTTP files go to https://aka.ms/vs/httpfile
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日志
}
WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_MenuRepository.cs
@@ -1,10 +1,13 @@
using SqlSugar;
using 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;
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;
        }
    }
}
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))
            {
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
            {
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
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))
                    {
                        // å¦‚果转换失败,则将isNormal设置为false
                        isNormal = false;
                    }
                }
                else if (!int.TryParse(Enum.Parse<TaskInStatusEnum>(taskState.ToString()).ToString(), out result))
                // å¦‚果转换成功,则判断任务状态是否大于OutFinish
                else if ((int)(TaskOutStatusEnum)result > (int)TaskOutStatusEnum.OutFinish)
                {
                    if ((int)(TaskInStatusEnum)result > (int)TaskInStatusEnum.InFinish)
                        isNormal = false;
                    // å¦‚果大于,则将isNormal设置为false
                    isNormal = false;
                }
                // åˆ›å»ºä»»åŠ¡æ‰§è¡Œè¯¦æƒ…å¯¹è±¡
                Dt_TaskExecuteDetail taskExecuteDetail = new()
                {
                    // è®¾ç½®æ˜¯å¦æ‰‹åŠ¨æ‰§è¡Œ
                    IsManual = App.User.UserId > 0,
                    // è®¾ç½®æ˜¯å¦æ­£å¸¸
                    IsNormal = isNormal,
                    // è®¾ç½®ä»»åŠ¡æ•°é‡
                    TaskNum = taskNum,
                    // è®¾ç½®ä»»åŠ¡id
                    TaskId = taskId,
                    // è®¾ç½®ä»»åŠ¡çŠ¶æ€
                    TaskState = taskState,
                    // è®¾ç½®æè¿°
                    Description = description,
                    // è®¾ç½®å½“前地址
                    CurrentAddress = task.CurrentAddress,
                    // è®¾ç½®ä¸‹ä¸€ä¸ªåœ°å€
                    NextAddress = task.NextAddress,
                };
                // æ·»åŠ ä»»åŠ¡æ‰§è¡Œè¯¦æƒ…
                BaseDal.AddData(taskExecuteDetail);
            }
            catch (Exception ex)
            {
            }
        }
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)
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;//订阅任务完成事件
WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneDBName.cs
@@ -74,5 +74,7 @@
        /// æ‰˜ç›˜å·
        /// </summary>
        Barcode,
        CurrentTaskNum
    }
}
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数据方法,StackerCraneDBName为枚举类型,StackerCraneDBName.CurrentTaskNum为枚举值
                commonStackerCrane.GetValue<StackerCraneDBName, int>(StackerCraneDBName.CurrentTaskNum);
                Console.Out.WriteLine(commonStackerCrane.DeviceName + "作业状态:" + commonStackerCrane.StackerCraneWorkStatusDes);
                //3.SetValue方法示例
                //调用写入PLC数据方法,StackerCraneDBName为枚举类型,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中Communicator属性直接读写PLC地址的值
                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);