duyongjia
2024-10-30 686a03bfab5a0ce7f3d29fc548a8a61b04a0ac8f
项目初始化
已删除3个文件
已添加156个文件
已重命名6个文件
126763 ■■■■■ 文件已修改
.gitignore 267 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
123.txt 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Client/.eslintrc.js 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Client/.gitignore 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Client/README.md 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Client/babel.config.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Client/config/buttons.js 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Client/package-lock.json 13742 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Client/package.json 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Client/vue.config.js 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Client/yarn.lock 10203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.editorconfig 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/02c17689-056d-427c-8852-bc22ee4f5e68.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/2ddc4f6e-5256-4fc8-b4f1-b46f86742993.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/61dd1acc-cecf-4a29-9a45-6aa264ede5b3.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/68ebdd2a-8d51-40b7-a791-f37d7fd0a1c9.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ade235eb-fbdf-4815-b117-a62bd238d39b.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/c4eb82bf-cce9-4a6d-b8f0-c7ec4de6fdb2.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ebbfe61f-de85-4793-b9af-ab2c5f423805.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/config/applicationhost.config 1026 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoRepository/WIDESEAWCS_BasicInfoRepository.csproj 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/WIDESEAWCS_BasicInfoService.csproj 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/AreaInfo.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusGroup.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeGroup.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/StackerCarneTaskDTO.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/System/ActionDTO.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/System/MenuDTO.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/System/UserPermissions.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/System/VueDictionaryDTO.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/WIDESEAWCS_DTO.csproj 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoRepository/WIDESEAWCS_IBasicInfoRepository.csproj 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoService/WIDESEAWCS_IBasicInfoService.csproj 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_DictionaryListRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_DictionaryRepository.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_LogRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_MenuRepository.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_RoleAuthRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_RoleRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_TenantRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_UserRepository.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/WIDESEAWCS_ISystemRepository.csproj 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_DictionaryListService.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_DictionaryService.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_LogService.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_MenuService.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_RoleAuthService.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_RoleService.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_TenantService.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_UserService.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/WIDESEAWCS_ISystemServices.csproj 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoRepository/ITaskExecuteDetailRepository.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoRepository/ITaskRepository.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoRepository/WIDESEAWCS_ITaskInfoRepository.csproj 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskExecuteDetailService.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/WIDESEAWCS_ITaskInfoService.csproj 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/LoginInfo.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/RoleAuthor.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/RoleNodes.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Actions.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Department.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Dictionary.cs 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_DictionaryList.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Log.cs 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Menu.cs 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Role.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_RoleAuth.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Tenant.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_User.cs 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/UserPermissions.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_TaskExecuteDetail.cs 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/WIDESEAWCS_Model.csproj 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server.sln 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/BasicInfo/RouterController.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceInfoController.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceProtocolController.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceProtocolDetailController.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DispatchInfoController.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs 377 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryListController.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_LogController.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_MenuController.cs 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_RoleAuthController.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_RoleController.cs 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_TenantController.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_UserController.cs 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskExecuteDetailController.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Filter/AutoMapperConfig.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Filter/AutoMapperSetup.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Filter/AutofacPropertityModuleReg.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Filter/CustomAuthorizeFilter.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Filter/CustomProfile.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/PublishProfiles/FolderProfile.pubxml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/launchSettings.json 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.Development.json 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/index.html 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_DeviceInfo.tsv 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_DeviceProtocol.tsv 2977 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_DeviceProtocolDetail.tsv 262 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_DispatchInfo.tsv 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_Router.tsv 362 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_Task.tsv 5651 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_TaskExecuteDetail.tsv 83282 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Sys_Dictionary.tsv 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Sys_DictionaryList.tsv 548 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Sys_Menu.tsv 344 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Sys_Role.tsv 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Sys_RoleAuth.tsv 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Sys_User.tsv 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/css/style.css 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/favicon.ico 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/js/anime.min.js 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/logo.jpg.jpg 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/swg-login.html 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_DictionaryListRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_DictionaryRepository.cs 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_LogRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_MenuRepository.cs 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_RoleAuthRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_RoleRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_TenantRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_UserRepository.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/WIDESEAWCS_SystemRepository.csproj 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_DictionaryListService.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_DictionaryService.cs 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_LogService.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_MenuService.cs 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_RoleAuthService.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_RoleService.cs 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_TenantService.cs 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/WIDESEAWCS_SystemServices.csproj 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/TaskExecuteDetailRepository.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/TaskRepository.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/WIDESEAWCS_TaskInfoRepository.csproj 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs 228 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 598 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WIDESEAWCS_TaskInfoService.csproj 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs 221 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineDBName.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs 288 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneDBName.cs 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskCommand.cs 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/WIDESEAWCS_Tasks.csproj 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/初始化.txt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/初始化.txt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/技术协议/初始化.txt 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/技术协议/郭店-八厂自动化项目立体库技术协议0302(2).docx 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/接口协议/初始化.txt 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/通信协议/初始化.txt 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/初始化.txt 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/郭店-产品89厂立库布局图(1).dwg 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,267 @@
# Build and Object Folders
bin/
obj/
# Nuget packages directory
packages/
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.sln.docstates
# Build results
[Dd]ebug/
[Rr]elease/
x64/
*_i.c
*_p.c
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.log
*.vspscc
*.vssscc
.builds
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
# Visual Studio profiler
*.psess
*.vsp
*.vspx
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*
# NCrunch
*.ncrunch*
.*crunch*.local.xml
# Installshield output folder
[Ee]xpress
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help
UpgradeLog*.XML
# Lightswitch
_Pvt_Extensions
GeneratedArtifacts
*.xap
ModelManifest.xml
#Backup file
*.bak
#zzzili
v15/
v17/
*.bin
*.v2
*.dtbcache
*.dtbcache.v2
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional stylelint cache
.stylelintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# vuepress v2.x temp and cache directory
.temp
.cache
# Docusaurus cache and generated files
.docusaurus
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
# Gradle files
.gradle/
build/
# Local configuration file (sdk path, etc)
local.properties
# Log/OS Files
*.log
# Android Studio generated files and folders
captures/
.externalNativeBuild/
.cxx/
*.apk
output.json
# IntelliJ
*.iml
.idea/
misc.xml
deploymentTargetDropDown.xml
render.experimental.xml
# Keystore files
*.jks
*.keystore
# Google Services (e.g. APIs or Firebase)
google-services.json
# Android Profiling
*.hprof
代码管理/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/DesignTimeBuild/.dtbcache.v2
代码管理/WIDESEA_WMSClient/package-lock.json
代码管理/WIDESEA_WMSServer/WIDESEA.WebApi/appsettings.json
代码管理/WIDESEA_WMSServer/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/DesignTimeBuild/.dtbcache.v2
代码管理/WIDESEA_WMSServer/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/DesignTimeBuild/.dtbcache.v2
*.bin
*.v2
/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/DesignTimeBuild
/WIDESEAWCS_Server/.vs/ProjectEvaluation
/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17
WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v7.bin
/WIDESEAWCS_Server/.vs/ProjectEvaluation
*.bin
/WIDESEAWCS_Server/.vs/ProjectEvaluation
/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/DesignTimeBuild
123.txt
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/.eslintrc.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
module.exports = {
  root: true,
  env: {
    node: true
  },
  'extends': [
    'plugin:vue/vue3-essential',
    'eslint:recommended'
  ],
  parserOptions: {
    parser: 'babel-eslint'
  },
  rules: {
    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
  },
  overrides: [
    {
      files: [
        '**/__tests__/*.{j,t}s?(x)',
        '**/tests/unit/**/*.spec.{j,t}s?(x)'
      ],
      env: {
        mocha: true
      }
    }
  ]
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/.gitignore
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/README.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
# vol.vue3
## Project setup
```
npm install
```
### Compiles and hot-reloads for development
```
npm run serve
```
### Compiles and minifies for production
```
npm run build
```
### Run your unit tests
```
npm run test:unit
```
### Lints and fixes files
```
npm run lint
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).
### npm run serve启动异常:
    ä½¿ç”¨cmd输入node -v查看版本,如果是18.+版本,请将package.json中第五行scripts中的内容替换为:
"scripts": {
    "serve": " SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
    "build": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build",
    "test:unit": "vue-cli-service test:unit",
    "lint": "vue-cli-service lint"
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/babel.config.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset'
  ]
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/config/buttons.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,143 @@
let buttons = [{
    name: "查 è¯¢",
    value: 'Search',
    icon: 'el-icon-search',
    class: '',
    type: 'primary',
    onClick: function () {
        this.search();
    }
},
{
    name: "新 å»º",
    icon: 'el-icon-plus',
    value: 'Add',
    class: '',
    //  plain:true,
    type: 'success',
    // plain:true,
    onClick: function () {
        this.add();
    }
},
{
    name: "编 è¾‘",
    icon: 'el-icon-edit',
    value: 'Update',
    // plain:true,
    class: '',
    type: 'primary',
    onClick: function () {
        this.edit();
    }
},
{
    name: "任务完成",
    icon: '',
    class: '',
    value: 'TaskCompleted',
    type: 'primary',
    onClick: function () {
    }
},
{
    name: "任务取消",
    icon: '',
    class: '',
    value: 'TaskCancel',
    type: 'danger',
    onClick: function () {
    }
},
{
    name: "任务恢复",
    icon: '',
    class: '',
    value: 'TaskRecovery',
    type: 'danger',
    onClick: function () {
    }
},
{
    name: "查看完整路由",
    icon: '',
    class: '',
    value: 'ViewAllRouter',
    type: 'info',
    onClick: function () {
    }
},
{
    name: "路由配置",
    icon: '',
    class: '',
    value: 'AddRouters',
    type: 'success',
    onClick: function () {
    }
},
{
    name: "回滚到上一步",
    icon: '',
    class: '',
    value: 'Previous',
    type: 'danger',
    onClick: function () {
    }
},
{
    name: "跳转到下一步",
    icon: '',
    class: '',
    value: 'Next',
    type: 'warning',
    onClick: function () {
    }
},
{
    name: "删 é™¤",
    icon: 'el-icon-delete',
    class: '',
    value: 'Delete',
    type: 'danger',
    onClick: function () {
        this.del();
    }
},
{
    name: "审 æ ¸",
    icon: 'el-icon-check',
    class: '',
    value: 'Audit',
    plain: true,
    type: 'primary',
    onClick: function () {
        this.audit();
    }
},
{
    name: "导 å…¥",
    icon: 'el-icon-top',
    class: '',
    type: 'success',
    plain: true,
    value: 'Import',
    onClick: function () {
        this.import();
    }
},
{
    name: "导 å‡º",
    icon: 'el-icon-bottom',
    type: 'success',
    plain: true,
    value: 'Export',
    onClick: function () {
        this.export();
    }
}
]
export default buttons
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/package-lock.json
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/package.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
{
  "name": "wideseawcs",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "test:unit": "vue-cli-service test:unit",
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "@element-plus/icons-vue": "^2.1.0",
    "@microsoft/signalr": "^6.0.4",
    "ali-oss": "^6.17.1",
    "axios": "^0.21.1",
    "core-js": "^3.6.5",
    "echarts": "^5.0.2",
    "element-plus": "^2.2.14",
    "less": "^4.1.1",
    "vue": "^3.2.37",
    "vue-draggable-next": "^2.0.1",
    "vue-router": "^4.0.0-0",
    "vuex": "^4.0.0-0",
    "wangeditor": "^4.7.6"
  },
  "devDependencies": {
    "@babel/plugin-syntax-dynamic-import": "^7.8.3",
    "@vue/cli-plugin-babel": "~4.5.0",
    "@vue/cli-plugin-eslint": "~4.5.0",
    "@vue/cli-plugin-router": "~4.5.0",
    "@vue/cli-plugin-unit-mocha": "~4.5.0",
    "@vue/cli-plugin-vuex": "~4.5.0",
    "@vue/cli-service": "~4.5.0",
    "@vue/compiler-sfc": "^3.0.0",
    "@vue/test-utils": "^2.0.0-0",
    "babel-eslint": "^10.1.0",
    "chai": "^4.1.2",
    "cross-env": "^7.0.3",
    "less": "^4.1.1",
    "less-loader": "^7.3.0",
    "stylus": "^0.54.7",
    "stylus-loader": "^3.0.2"
  },
  "eslintConfig": {
    "root": true,
    "env": {
      "node": true
    },
    "extends": [
      "plugin:vue/essential",
      "@vue/standard"
    ],
    "rules": {
      "indent": [
        1,
        4
      ]
    },
    "parserOptions": {
      "parser": "babel-eslint"
    }
  },
  "eslintIgnore": [
    "*"
  ]
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/vue.config.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
// const webpack = require("webpack");
module.exports = {
  productionSourceMap: false,
  lintOnSave: false,
  devServer: {
    port: 8080,
    overlay: {
      warning: false,
      errors: false
    }
  },
  css: {
    //查看CSS属于哪个css文件
    sourceMap: true
  },
  configureWebpack: {
    module: {
      rules: [
        {
          test: /\.mjs$/,
          include: /node_modules/,
          type: "javascript/auto"
        },
      ]
    }
  },
  //https://cli.vuejs.org/zh/guide/html-and-static-assets.html#html
  chainWebpack: (config) => {
    // ç§»é™¤ prefetch æ’ä»¶
    config.plugins.delete('prefetch');
    //自下定义title
    config.plugin('html').tap((args) => {
      args[0].title = 'WCS';
      return args;
    });
    // æˆ–者
    // ä¿®æ”¹å®ƒçš„选项:
    // config.plugin('prefetch').tap(options => {
    //   options[0].fileBlacklist = options[0].fileBlacklist || []
    //   options[0].fileBlacklist.push(/myasyncRoute(.)+?\.js$/)
    //   return options
    // })
  }
  // configureWebpack: {
  //     plugins: [
  //         new webpack.optimize.MinChunkSizePlugin({
  //             minChunkSize: 100000 // é€šè¿‡åˆå¹¶å°äºŽ minChunkSize å¤§å°çš„ chunk,将 chunk ä½“积保持在指定大小限制以上
  //         })
  //     ]
  // }
};
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/yarn.lock
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.editorconfig
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,4 @@
[*.cs]
# CS8618: åœ¨é€€å‡ºæž„造函数时,不可为 null çš„字段必须包含非 null å€¼ã€‚请考虑声明为可以为 null。
dotnet_diagnostic.CS8618.severity = none
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/02c17689-056d-427c-8852-bc22ee4f5e68.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/2ddc4f6e-5256-4fc8-b4f1-b46f86742993.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/61dd1acc-cecf-4a29-9a45-6aa264ede5b3.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/68ebdd2a-8d51-40b7-a791-f37d7fd0a1c9.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ade235eb-fbdf-4815-b117-a62bd238d39b.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/c4eb82bf-cce9-4a6d-b8f0-c7ec4de6fdb2.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ebbfe61f-de85-4793-b9af-ab2c5f423805.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/config/applicationhost.config
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1026 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
    IIS configuration sections.
    For schema documentation, see
    %IIS_BIN%\config\schema\IIS_schema.xml.
    Please make a backup of this file before making any changes to it.
    NOTE: The following environment variables are available to be used
          within this file and are understood by the IIS Express.
          %IIS_USER_HOME% - The IIS Express home directory for the user
          %IIS_SITES_HOME% - The default home directory for sites
          %IIS_BIN% - The location of the IIS Express binaries
          %SYSTEMDRIVE% - The drive letter of %IIS_BIN%
-->
<configuration>
    <!--
        The <configSections> section controls the registration of sections.
        Section is the basic unit of deployment, locking, searching and
        containment for configuration settings.
        Every section belongs to one section group.
        A section group is a container of logically-related sections.
        Sections cannot be nested.
        Section groups may be nested.
        <section
            name=""  [Required, Collection Key] [XML name of the section]
            allowDefinition="Everywhere" [MachineOnly|MachineToApplication|AppHostOnly|Everywhere] [Level where it can be set]
            overrideModeDefault="Allow"  [Allow|Deny] [Default delegation mode]
            allowLocation="true"  [true|false] [Allowed in location tags]
        />
        The recommended way to unlock sections is by using a location tag:
        <location path="Default Web Site" overrideMode="Allow">
            <system.webServer>
                <asp />
            </system.webServer>
        </location>
    -->
    <configSections>
        <sectionGroup name="system.applicationHost">
            <section name="applicationPools" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
            <section name="configHistory" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
            <section name="customMetadata" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
            <section name="listenerAdapters" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
            <section name="log" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
            <section name="serviceAutoStartProviders" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
            <section name="sites" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
            <section name="webLimits" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
        </sectionGroup>
        <sectionGroup name="system.webServer">
            <section name="asp" overrideModeDefault="Deny" />
            <section name="caching" overrideModeDefault="Allow" />
            <section name="cgi" overrideModeDefault="Deny" />
            <section name="defaultDocument" overrideModeDefault="Allow" />
            <section name="directoryBrowse" overrideModeDefault="Allow" />
            <section name="fastCgi" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
            <section name="globalModules" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
            <section name="handlers" overrideModeDefault="Deny" />
            <section name="httpCompression" overrideModeDefault="Allow" allowDefinition="Everywhere" />
            <section name="httpErrors" overrideModeDefault="Allow" />
            <section name="httpLogging" overrideModeDefault="Deny" />
            <section name="httpProtocol" overrideModeDefault="Allow" />
            <section name="httpRedirect" overrideModeDefault="Allow" />
            <section name="httpTracing" overrideModeDefault="Deny" />
            <section name="isapiFilters" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
            <section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
            <section name="applicationInitialization" allowDefinition="MachineToApplication" overrideModeDefault="Allow" />
            <section name="odbcLogging" overrideModeDefault="Deny" />
            <sectionGroup name="security">
                <section name="access" overrideModeDefault="Deny" />
                <section name="applicationDependencies" overrideModeDefault="Deny" />
                <sectionGroup name="authentication">
                    <section name="anonymousAuthentication" overrideModeDefault="Deny" />
                    <section name="basicAuthentication" overrideModeDefault="Deny" />
                    <section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" />
                    <section name="digestAuthentication" overrideModeDefault="Deny" />
                    <section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" />
                    <section name="windowsAuthentication" overrideModeDefault="Deny" />
                </sectionGroup>
                <section name="authorization" overrideModeDefault="Allow" />
                <section name="ipSecurity" overrideModeDefault="Deny" />
                <section name="dynamicIpSecurity" overrideModeDefault="Deny" />
                <section name="isapiCgiRestriction" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
                <section name="requestFiltering" overrideModeDefault="Allow" />
            </sectionGroup>
            <section name="serverRuntime" overrideModeDefault="Deny" />
            <section name="serverSideInclude" overrideModeDefault="Deny" />
            <section name="staticContent" overrideModeDefault="Allow" />
            <sectionGroup name="tracing">
                <section name="traceFailedRequests" overrideModeDefault="Allow" />
                <section name="traceProviderDefinitions" overrideModeDefault="Deny" />
            </sectionGroup>
            <section name="urlCompression" overrideModeDefault="Allow" />
            <section name="validation" overrideModeDefault="Allow" />
            <sectionGroup name="webdav">
                <section name="globalSettings" overrideModeDefault="Deny" />
                <section name="authoring" overrideModeDefault="Deny" />
                <section name="authoringRules" overrideModeDefault="Deny" />
            </sectionGroup>
            <sectionGroup name="rewrite">
                <section name="allowedServerVariables" overrideModeDefault="Deny" />
                <section name="rules" overrideModeDefault="Allow" />
                <section name="outboundRules" overrideModeDefault="Allow" />
                <section name="globalRules" overrideModeDefault="Deny" allowDefinition="AppHostOnly" />
                <section name="providers" overrideModeDefault="Allow" />
                <section name="rewriteMaps" overrideModeDefault="Allow" />
            </sectionGroup>
            <section name="webSocket" overrideModeDefault="Deny" />
        <section name="aspNetCore" overrideModeDefault="Allow" /></sectionGroup>
    </configSections>
    <configProtectedData>
        <providers>
            <add name="IISWASOnlyRsaProvider" type="" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useMachineContainer="true" useOAEP="false" />
            <add name="AesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisConfigurationKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAA/HKxkz6alrlAPez0IUgujj/6k3WxCDriHp6jvpv3yEZmo7h6SMzGLxo4mTrIQVHSkB7tmElHKfUFTzE2BWF7nFWHY6Z6qmGBauFzwJMwESjril7Gjz69RBFH259HQ6aRDq9Xfx7U7H4HtdmnKNqGjgl/hwPQBGeIlWiDh+sYv3vKB0QU971tjX6H2B+9armlnC8UOuA6JYMDMI/VLLL16sng0fWAy5JYe0YVABVjiAWDW264RZW9Tr1Oax4qHZKg+SdjULxeOc2YmpX+d0yeITo1HkPF1hN1gHpIPIUDo05ilHUNfR3OkjVCIQK4cFKCq1s8NH+y+13MxUC4Fn1AlQ==" />
            <add name="IISWASOnlyAesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAALmU8lTC+v2qtfQiiiquvvLpUQqKLEXs+jSKoWCM/uPhyB++k4dwug19mGidNK5FYiWK2KYE1yhjVJcbp12E98Q0R2nT7eBiCMY2JairxQ591rqABK7keGaIjwH7PwGzSpILl3RJ4YFvJ/7ZXEJxeDZIjW8ZxWVXx+/VyHs9U3WguLEkgMUX3jrxJi8LouxaIVPJAv/YQ1ZCWs8zImitxX/C/7o7yaIxznfsN5nGQzQfpUDPeby99aw2zPVTtZI2LaWIBON8guABvZ6JtJVDWmfdK6sodbnwdZkr6/Z2rfvamT1dC1SpQrGG7ulR/f9/GXvCaW10ZVKxekBF/CYlNMg==" />
        </providers>
    </configProtectedData>
    <system.applicationHost>
        <applicationPools>
            <add name="Clr4IntegratedAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
            <add name="Clr4ClassicAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
            <add name="Clr2IntegratedAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
            <add name="Clr2ClassicAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
            <add name="UnmanagedClassicAppPool" managedRuntimeVersion="" managedPipelineMode="Classic" autoStart="true" />
            <applicationPoolDefaults managedRuntimeVersion="v4.0">
                <processModel loadUserProfile="true" setProfileEnvironment="false" />
            </applicationPoolDefaults>
        </applicationPools>
        <!--
          The <listenerAdapters> section defines the protocols with which the
          Windows Process Activation Service (WAS) binds.
        -->
        <listenerAdapters>
            <add name="http" />
        </listenerAdapters>
        <sites>
            <site name="WebSite1" id="1" serverAutoStart="true">
                <application path="/">
                    <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation=":8080:localhost" />
                </bindings>
            </site>
            <siteDefaults>
                <!-- To enable logging, please change the below attribute "enabled" to "true" -->
                <logFile logFormat="W3C" directory="%AppData%\Microsoft\IISExpressLogs" enabled="false" />
                <traceFailedRequestsLogging directory="%AppData%\Microsoft" enabled="false" maxLogFileSizeKB="1024" />
            </siteDefaults>
            <applicationDefaults applicationPool="Clr4IntegratedAppPool" />
            <virtualDirectoryDefaults allowSubDirConfig="true" />
        </sites>
        <webLimits />
    </system.applicationHost>
    <system.webServer>
        <serverRuntime />
        <asp scriptErrorSentToBrowser="true">
            <cache diskTemplateCacheDirectory="%TEMP%\iisexpress\ASP Compiled Templates" />
            <limits />
        </asp>
        <caching enabled="true" enableKernelCache="true">
        </caching>
        <cgi />
        <defaultDocument enabled="true">
            <files>
                <add value="Default.htm" />
                <add value="Default.asp" />
                <add value="index.htm" />
                <add value="index.html" />
                <add value="iisstart.htm" />
                <add value="default.aspx" />
            </files>
        </defaultDocument>
        <directoryBrowse enabled="false" />
        <fastCgi />
        <!--
          The <globalModules> section defines all native-code modules.
          To enable a module, specify it in the <modules> section.
        -->
        <globalModules>
            <add name="HttpLoggingModule" image="%IIS_BIN%\loghttp.dll" />
            <add name="UriCacheModule" image="%IIS_BIN%\cachuri.dll" />
            <add name="TokenCacheModule" image="%IIS_BIN%\cachtokn.dll" />
            <add name="DynamicCompressionModule" image="%IIS_BIN%\compdyn.dll" />
            <add name="StaticCompressionModule" image="%IIS_BIN%\compstat.dll" />
            <add name="DefaultDocumentModule" image="%IIS_BIN%\defdoc.dll" />
            <add name="DirectoryListingModule" image="%IIS_BIN%\dirlist.dll" />
            <add name="ProtocolSupportModule" image="%IIS_BIN%\protsup.dll" />
            <add name="HttpRedirectionModule" image="%IIS_BIN%\redirect.dll" />
            <add name="ServerSideIncludeModule" image="%IIS_BIN%\iis_ssi.dll" />
            <add name="StaticFileModule" image="%IIS_BIN%\static.dll" />
            <add name="AnonymousAuthenticationModule" image="%IIS_BIN%\authanon.dll" />
            <add name="CertificateMappingAuthenticationModule" image="%IIS_BIN%\authcert.dll" />
            <add name="UrlAuthorizationModule" image="%IIS_BIN%\urlauthz.dll" />
            <add name="BasicAuthenticationModule" image="%IIS_BIN%\authbas.dll" />
            <add name="WindowsAuthenticationModule" image="%IIS_BIN%\authsspi.dll" />
            <add name="IISCertificateMappingAuthenticationModule" image="%IIS_BIN%\authmap.dll" />
            <add name="IpRestrictionModule" image="%IIS_BIN%\iprestr.dll" />
            <add name="DynamicIpRestrictionModule" image="%IIS_BIN%\diprestr.dll" />
            <add name="RequestFilteringModule" image="%IIS_BIN%\modrqflt.dll" />
            <add name="CustomLoggingModule" image="%IIS_BIN%\logcust.dll" />
            <add name="CustomErrorModule" image="%IIS_BIN%\custerr.dll" />
            <add name="FailedRequestsTracingModule" image="%IIS_BIN%\iisfreb.dll" />
            <add name="RequestMonitorModule" image="%IIS_BIN%\iisreqs.dll" />
            <add name="IsapiModule" image="%IIS_BIN%\isapi.dll" />
            <add name="IsapiFilterModule" image="%IIS_BIN%\filter.dll" />
            <add name="CgiModule" image="%IIS_BIN%\cgi.dll" />
            <add name="FastCgiModule" image="%IIS_BIN%\iisfcgi.dll" />
<!--            <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" /> -->
            <add name="RewriteModule" image="%IIS_BIN%\rewrite.dll" />
            <add name="ConfigurationValidationModule" image="%IIS_BIN%\validcfg.dll" />
            <add name="WebSocketModule" image="%IIS_BIN%\iiswsock.dll" />
            <add name="WebMatrixSupportModule" image="%IIS_BIN%\webmatrixsup.dll" />
            <add name="ManagedEngine" image="%windir%\Microsoft.NET\Framework\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness32" />
            <add name="ManagedEngine64" image="%windir%\Microsoft.NET\Framework64\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness64" />
            <add name="ManagedEngineV4.0_32bit" image="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness32" />
            <add name="ManagedEngineV4.0_64bit" image="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness64" />
            <add name="ApplicationInitializationModule" image="%IIS_BIN%\warmup.dll" />
            <add name="AspNetCoreModule" image="%IIS_BIN%\aspnetcore.dll" />
            <add name="AspNetCoreModuleV2" image="%IIS_BIN%\Asp.Net Core Module\V2\aspnetcorev2.dll" />
        </globalModules>
        <httpCompression directory="%TEMP%">
            <scheme name="gzip" dll="%IIS_BIN%\gzip.dll" />
            <dynamicTypes>
                <add mimeType="text/*" enabled="true" />
                <add mimeType="message/*" enabled="true" />
                <add mimeType="application/x-javascript" enabled="true" />
                <add mimeType="application/javascript" enabled="true" />
                <add mimeType="*/*" enabled="false" />
                <add mimeType="text/event-stream" enabled="false" />
            </dynamicTypes>
            <staticTypes>
                <add mimeType="text/*" enabled="true" />
                <add mimeType="message/*" enabled="true" />
                <add mimeType="application/javascript" enabled="true" />
                <add mimeType="application/atom+xml" enabled="true" />
                <add mimeType="application/xaml+xml" enabled="true" />
                <add mimeType="image/svg+xml" enabled="true" />
                <add mimeType="*/*" enabled="false" />
            </staticTypes>
        </httpCompression>
        <httpErrors lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
            <error statusCode="401" prefixLanguageFilePath="%IIS_BIN%\custerr" path="401.htm" />
            <error statusCode="403" prefixLanguageFilePath="%IIS_BIN%\custerr" path="403.htm" />
            <error statusCode="404" prefixLanguageFilePath="%IIS_BIN%\custerr" path="404.htm" />
            <error statusCode="405" prefixLanguageFilePath="%IIS_BIN%\custerr" path="405.htm" />
            <error statusCode="406" prefixLanguageFilePath="%IIS_BIN%\custerr" path="406.htm" />
            <error statusCode="412" prefixLanguageFilePath="%IIS_BIN%\custerr" path="412.htm" />
            <error statusCode="500" prefixLanguageFilePath="%IIS_BIN%\custerr" path="500.htm" />
            <error statusCode="501" prefixLanguageFilePath="%IIS_BIN%\custerr" path="501.htm" />
            <error statusCode="502" prefixLanguageFilePath="%IIS_BIN%\custerr" path="502.htm" />
        </httpErrors>
        <httpLogging dontLog="false" />
        <httpProtocol>
            <customHeaders>
                <clear />
                <add name="X-Powered-By" value="ASP.NET" />
            </customHeaders>
            <redirectHeaders>
                <clear />
            </redirectHeaders>
        </httpProtocol>
        <httpRedirect enabled="false" />
        <httpTracing />
        <isapiFilters>
            <filter name="ASP.Net_2.0.50727-64" path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv2.0" />
            <filter name="ASP.Net_2.0.50727.0" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv2.0" />
            <filter name="ASP.Net_2.0_for_v1.1" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="runtimeVersionv1.1" />
            <filter name="ASP.Net_4.0_32bit" path="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv4.0" />
            <filter name="ASP.Net_4.0_64bit" path="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv4.0" />
        </isapiFilters>
        <odbcLogging />
        <security>
            <access sslFlags="None" />
            <applicationDependencies>
                <application name="Active Server Pages" groupId="ASP" />
            </applicationDependencies>
            <authentication>
                <anonymousAuthentication enabled="true" userName="" />
                <basicAuthentication enabled="false" />
                <clientCertificateMappingAuthentication enabled="false" />
                <digestAuthentication enabled="false" />
                <iisClientCertificateMappingAuthentication enabled="false">
                </iisClientCertificateMappingAuthentication>
                <windowsAuthentication enabled="false">
                    <providers>
                        <add value="Negotiate" />
                        <add value="NTLM" />
                    </providers>
                </windowsAuthentication>
            </authentication>
            <authorization>
                <add accessType="Allow" users="*" />
            </authorization>
            <ipSecurity allowUnlisted="true" />
            <isapiCgiRestriction notListedIsapisAllowed="true" notListedCgisAllowed="true">
                <add path="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
                <add path="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
                <add path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
                <add path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
            </isapiCgiRestriction>
            <requestFiltering>
                <fileExtensions allowUnlisted="true" applyToWebDAV="true">
                    <add fileExtension=".asa" allowed="false" />
                    <add fileExtension=".asax" allowed="false" />
                    <add fileExtension=".ascx" allowed="false" />
                    <add fileExtension=".master" allowed="false" />
                    <add fileExtension=".skin" allowed="false" />
                    <add fileExtension=".browser" allowed="false" />
                    <add fileExtension=".sitemap" allowed="false" />
                    <add fileExtension=".config" allowed="false" />
                    <add fileExtension=".cs" allowed="false" />
                    <add fileExtension=".csproj" allowed="false" />
                    <add fileExtension=".vb" allowed="false" />
                    <add fileExtension=".vbproj" allowed="false" />
                    <add fileExtension=".webinfo" allowed="false" />
                    <add fileExtension=".licx" allowed="false" />
                    <add fileExtension=".resx" allowed="false" />
                    <add fileExtension=".resources" allowed="false" />
                    <add fileExtension=".mdb" allowed="false" />
                    <add fileExtension=".vjsproj" allowed="false" />
                    <add fileExtension=".java" allowed="false" />
                    <add fileExtension=".jsl" allowed="false" />
                    <add fileExtension=".ldb" allowed="false" />
                    <add fileExtension=".dsdgm" allowed="false" />
                    <add fileExtension=".ssdgm" allowed="false" />
                    <add fileExtension=".lsad" allowed="false" />
                    <add fileExtension=".ssmap" allowed="false" />
                    <add fileExtension=".cd" allowed="false" />
                    <add fileExtension=".dsprototype" allowed="false" />
                    <add fileExtension=".lsaprototype" allowed="false" />
                    <add fileExtension=".sdm" allowed="false" />
                    <add fileExtension=".sdmDocument" allowed="false" />
                    <add fileExtension=".mdf" allowed="false" />
                    <add fileExtension=".ldf" allowed="false" />
                    <add fileExtension=".ad" allowed="false" />
                    <add fileExtension=".dd" allowed="false" />
                    <add fileExtension=".ldd" allowed="false" />
                    <add fileExtension=".sd" allowed="false" />
                    <add fileExtension=".adprototype" allowed="false" />
                    <add fileExtension=".lddprototype" allowed="false" />
                    <add fileExtension=".exclude" allowed="false" />
                    <add fileExtension=".refresh" allowed="false" />
                    <add fileExtension=".compiled" allowed="false" />
                    <add fileExtension=".msgx" allowed="false" />
                    <add fileExtension=".vsdisco" allowed="false" />
                    <add fileExtension=".rules" allowed="false" />
                </fileExtensions>
                <verbs allowUnlisted="true" applyToWebDAV="true" />
                <hiddenSegments applyToWebDAV="true">
                    <add segment="web.config" />
                    <add segment="bin" />
                    <add segment="App_code" />
                    <add segment="App_GlobalResources" />
                    <add segment="App_LocalResources" />
                    <add segment="App_WebReferences" />
                    <add segment="App_Data" />
                    <add segment="App_Browsers" />
                </hiddenSegments>
            </requestFiltering>
        </security>
        <serverSideInclude ssiExecDisable="false" />
        <staticContent lockAttributes="isDocFooterFileName">
            <mimeMap fileExtension=".323" mimeType="text/h323" />
            <mimeMap fileExtension=".3g2" mimeType="video/3gpp2" />
            <mimeMap fileExtension=".3gp2" mimeType="video/3gpp2" />
            <mimeMap fileExtension=".3gp" mimeType="video/3gpp" />
            <mimeMap fileExtension=".3gpp" mimeType="video/3gpp" />
            <mimeMap fileExtension=".aac" mimeType="audio/aac" />
            <mimeMap fileExtension=".aaf" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".aca" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".accdb" mimeType="application/msaccess" />
            <mimeMap fileExtension=".accde" mimeType="application/msaccess" />
            <mimeMap fileExtension=".accdt" mimeType="application/msaccess" />
            <mimeMap fileExtension=".acx" mimeType="application/internet-property-stream" />
            <mimeMap fileExtension=".adt" mimeType="audio/vnd.dlna.adts" />
            <mimeMap fileExtension=".adts" mimeType="audio/vnd.dlna.adts" />
            <mimeMap fileExtension=".afm" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".ai" mimeType="application/postscript" />
            <mimeMap fileExtension=".aif" mimeType="audio/x-aiff" />
            <mimeMap fileExtension=".aifc" mimeType="audio/aiff" />
            <mimeMap fileExtension=".aiff" mimeType="audio/aiff" />
            <mimeMap fileExtension=".appcache" mimeType="text/cache-manifest" />
            <mimeMap fileExtension=".application" mimeType="application/x-ms-application" />
            <mimeMap fileExtension=".art" mimeType="image/x-jg" />
            <mimeMap fileExtension=".asd" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".asf" mimeType="video/x-ms-asf" />
            <mimeMap fileExtension=".asi" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".asm" mimeType="text/plain" />
            <mimeMap fileExtension=".asr" mimeType="video/x-ms-asf" />
            <mimeMap fileExtension=".asx" mimeType="video/x-ms-asf" />
            <mimeMap fileExtension=".atom" mimeType="application/atom+xml" />
            <mimeMap fileExtension=".au" mimeType="audio/basic" />
            <mimeMap fileExtension=".avi" mimeType="video/avi" />
            <mimeMap fileExtension=".axs" mimeType="application/olescript" />
            <mimeMap fileExtension=".bas" mimeType="text/plain" />
            <mimeMap fileExtension=".bcpio" mimeType="application/x-bcpio" />
            <mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".bmp" mimeType="image/bmp" />
            <mimeMap fileExtension=".c" mimeType="text/plain" />
            <mimeMap fileExtension=".cab" mimeType="application/vnd.ms-cab-compressed" />
            <mimeMap fileExtension=".calx" mimeType="application/vnd.ms-office.calx" />
            <mimeMap fileExtension=".cat" mimeType="application/vnd.ms-pki.seccat" />
            <mimeMap fileExtension=".cdf" mimeType="application/x-cdf" />
            <mimeMap fileExtension=".chm" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".class" mimeType="application/x-java-applet" />
            <mimeMap fileExtension=".clp" mimeType="application/x-msclip" />
            <mimeMap fileExtension=".cmx" mimeType="image/x-cmx" />
            <mimeMap fileExtension=".cnf" mimeType="text/plain" />
            <mimeMap fileExtension=".cod" mimeType="image/cis-cod" />
            <mimeMap fileExtension=".cpio" mimeType="application/x-cpio" />
            <mimeMap fileExtension=".cpp" mimeType="text/plain" />
            <mimeMap fileExtension=".crd" mimeType="application/x-mscardfile" />
            <mimeMap fileExtension=".crl" mimeType="application/pkix-crl" />
            <mimeMap fileExtension=".crt" mimeType="application/x-x509-ca-cert" />
            <mimeMap fileExtension=".csh" mimeType="application/x-csh" />
            <mimeMap fileExtension=".css" mimeType="text/css" />
            <mimeMap fileExtension=".csv" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".cur" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".dcr" mimeType="application/x-director" />
            <mimeMap fileExtension=".deploy" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".der" mimeType="application/x-x509-ca-cert" />
            <mimeMap fileExtension=".dib" mimeType="image/bmp" />
            <mimeMap fileExtension=".dir" mimeType="application/x-director" />
            <mimeMap fileExtension=".disco" mimeType="text/xml" />
            <mimeMap fileExtension=".dll" mimeType="application/x-msdownload" />
            <mimeMap fileExtension=".dll.config" mimeType="text/xml" />
            <mimeMap fileExtension=".dlm" mimeType="text/dlm" />
            <mimeMap fileExtension=".doc" mimeType="application/msword" />
            <mimeMap fileExtension=".docm" mimeType="application/vnd.ms-word.document.macroEnabled.12" />
            <mimeMap fileExtension=".docx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
            <mimeMap fileExtension=".dot" mimeType="application/msword" />
            <mimeMap fileExtension=".dotm" mimeType="application/vnd.ms-word.template.macroEnabled.12" />
            <mimeMap fileExtension=".dotx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.template" />
            <mimeMap fileExtension=".dsp" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".dtd" mimeType="text/xml" />
            <mimeMap fileExtension=".dvi" mimeType="application/x-dvi" />
            <mimeMap fileExtension=".dvr-ms" mimeType="video/x-ms-dvr" />
            <mimeMap fileExtension=".dwf" mimeType="drawing/x-dwf" />
            <mimeMap fileExtension=".dwp" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".dxr" mimeType="application/x-director" />
            <mimeMap fileExtension=".eml" mimeType="message/rfc822" />
            <mimeMap fileExtension=".emz" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" />
            <mimeMap fileExtension=".eps" mimeType="application/postscript" />
            <mimeMap fileExtension=".esd" mimeType="application/vnd.ms-cab-compressed" />
            <mimeMap fileExtension=".etx" mimeType="text/x-setext" />
            <mimeMap fileExtension=".evy" mimeType="application/envoy" />
            <mimeMap fileExtension=".exe" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".exe.config" mimeType="text/xml" />
            <mimeMap fileExtension=".fdf" mimeType="application/vnd.fdf" />
            <mimeMap fileExtension=".fif" mimeType="application/fractals" />
            <mimeMap fileExtension=".fla" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".flr" mimeType="x-world/x-vrml" />
            <mimeMap fileExtension=".flv" mimeType="video/x-flv" />
            <mimeMap fileExtension=".gif" mimeType="image/gif" />
            <mimeMap fileExtension=".glb" mimeType="model/gltf-binary" />
            <mimeMap fileExtension=".gtar" mimeType="application/x-gtar" />
            <mimeMap fileExtension=".gz" mimeType="application/x-gzip" />
            <mimeMap fileExtension=".h" mimeType="text/plain" />
            <mimeMap fileExtension=".hdf" mimeType="application/x-hdf" />
            <mimeMap fileExtension=".hdml" mimeType="text/x-hdml" />
            <mimeMap fileExtension=".hhc" mimeType="application/x-oleobject" />
            <mimeMap fileExtension=".hhk" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".hhp" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".hlp" mimeType="application/winhlp" />
            <mimeMap fileExtension=".hqx" mimeType="application/mac-binhex40" />
            <mimeMap fileExtension=".hta" mimeType="application/hta" />
            <mimeMap fileExtension=".htc" mimeType="text/x-component" />
            <mimeMap fileExtension=".htm" mimeType="text/html" />
            <mimeMap fileExtension=".html" mimeType="text/html" />
            <mimeMap fileExtension=".htt" mimeType="text/webviewhtml" />
            <mimeMap fileExtension=".hxt" mimeType="text/html" />
            <mimeMap fileExtension=".ico" mimeType="image/x-icon" />
            <mimeMap fileExtension=".ics" mimeType="text/calendar" />
            <mimeMap fileExtension=".ief" mimeType="image/ief" />
            <mimeMap fileExtension=".iii" mimeType="application/x-iphone" />
            <mimeMap fileExtension=".inf" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".ins" mimeType="application/x-internet-signup" />
            <mimeMap fileExtension=".isp" mimeType="application/x-internet-signup" />
            <mimeMap fileExtension=".IVF" mimeType="video/x-ivf" />
            <mimeMap fileExtension=".jar" mimeType="application/java-archive" />
            <mimeMap fileExtension=".java" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".jck" mimeType="application/liquidmotion" />
            <mimeMap fileExtension=".jcz" mimeType="application/liquidmotion" />
            <mimeMap fileExtension=".jfif" mimeType="image/pjpeg" />
            <mimeMap fileExtension=".jpb" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".jpe" mimeType="image/jpeg" />
            <mimeMap fileExtension=".jpeg" mimeType="image/jpeg" />
            <mimeMap fileExtension=".jpg" mimeType="image/jpeg" />
            <mimeMap fileExtension=".js" mimeType="application/javascript" />
            <mimeMap fileExtension=".json" mimeType="application/json" />
            <mimeMap fileExtension=".jsonld" mimeType="application/ld+json" />
            <mimeMap fileExtension=".jsx" mimeType="text/jscript" />
            <mimeMap fileExtension=".latex" mimeType="application/x-latex" />
            <mimeMap fileExtension=".less" mimeType="text/css" />
            <mimeMap fileExtension=".lit" mimeType="application/x-ms-reader" />
            <mimeMap fileExtension=".lpk" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".lsf" mimeType="video/x-la-asf" />
            <mimeMap fileExtension=".lsx" mimeType="video/x-la-asf" />
            <mimeMap fileExtension=".lzh" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".m13" mimeType="application/x-msmediaview" />
            <mimeMap fileExtension=".m14" mimeType="application/x-msmediaview" />
            <mimeMap fileExtension=".m1v" mimeType="video/mpeg" />
            <mimeMap fileExtension=".m2ts" mimeType="video/vnd.dlna.mpeg-tts" />
            <mimeMap fileExtension=".m3u" mimeType="audio/x-mpegurl" />
            <mimeMap fileExtension=".m4a" mimeType="audio/mp4" />
            <mimeMap fileExtension=".m4v" mimeType="video/mp4" />
            <mimeMap fileExtension=".man" mimeType="application/x-troff-man" />
            <mimeMap fileExtension=".manifest" mimeType="application/x-ms-manifest" />
            <mimeMap fileExtension=".map" mimeType="text/plain" />
            <mimeMap fileExtension=".mdb" mimeType="application/x-msaccess" />
            <mimeMap fileExtension=".mdp" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".me" mimeType="application/x-troff-me" />
            <mimeMap fileExtension=".mht" mimeType="message/rfc822" />
            <mimeMap fileExtension=".mhtml" mimeType="message/rfc822" />
            <mimeMap fileExtension=".mid" mimeType="audio/mid" />
            <mimeMap fileExtension=".midi" mimeType="audio/mid" />
            <mimeMap fileExtension=".mix" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".mmf" mimeType="application/x-smaf" />
            <mimeMap fileExtension=".mno" mimeType="text/xml" />
            <mimeMap fileExtension=".mny" mimeType="application/x-msmoney" />
            <mimeMap fileExtension=".mov" mimeType="video/quicktime" />
            <mimeMap fileExtension=".movie" mimeType="video/x-sgi-movie" />
            <mimeMap fileExtension=".mp2" mimeType="video/mpeg" />
            <mimeMap fileExtension=".mp3" mimeType="audio/mpeg" />
            <mimeMap fileExtension=".mp4" mimeType="video/mp4" />
            <mimeMap fileExtension=".mp4v" mimeType="video/mp4" />
            <mimeMap fileExtension=".mpa" mimeType="video/mpeg" />
            <mimeMap fileExtension=".mpe" mimeType="video/mpeg" />
            <mimeMap fileExtension=".mpeg" mimeType="video/mpeg" />
            <mimeMap fileExtension=".mpg" mimeType="video/mpeg" />
            <mimeMap fileExtension=".mpp" mimeType="application/vnd.ms-project" />
            <mimeMap fileExtension=".mpv2" mimeType="video/mpeg" />
            <mimeMap fileExtension=".ms" mimeType="application/x-troff-ms" />
            <mimeMap fileExtension=".msi" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".mso" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".mvb" mimeType="application/x-msmediaview" />
            <mimeMap fileExtension=".mvc" mimeType="application/x-miva-compiled" />
            <mimeMap fileExtension=".nc" mimeType="application/x-netcdf" />
            <mimeMap fileExtension=".nsc" mimeType="video/x-ms-asf" />
            <mimeMap fileExtension=".nws" mimeType="message/rfc822" />
            <mimeMap fileExtension=".ocx" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".oda" mimeType="application/oda" />
            <mimeMap fileExtension=".odc" mimeType="text/x-ms-odc" />
            <mimeMap fileExtension=".ods" mimeType="application/oleobject" />
            <mimeMap fileExtension=".oga" mimeType="audio/ogg" />
            <mimeMap fileExtension=".ogg" mimeType="video/ogg" />
            <mimeMap fileExtension=".ogv" mimeType="video/ogg" />
            <mimeMap fileExtension=".one" mimeType="application/onenote" />
            <mimeMap fileExtension=".onea" mimeType="application/onenote" />
            <mimeMap fileExtension=".onetoc" mimeType="application/onenote" />
            <mimeMap fileExtension=".onetoc2" mimeType="application/onenote" />
            <mimeMap fileExtension=".onetmp" mimeType="application/onenote" />
            <mimeMap fileExtension=".onepkg" mimeType="application/onenote" />
            <mimeMap fileExtension=".osdx" mimeType="application/opensearchdescription+xml" />
            <mimeMap fileExtension=".otf" mimeType="font/otf" />
            <mimeMap fileExtension=".p10" mimeType="application/pkcs10" />
            <mimeMap fileExtension=".p12" mimeType="application/x-pkcs12" />
            <mimeMap fileExtension=".p7b" mimeType="application/x-pkcs7-certificates" />
            <mimeMap fileExtension=".p7c" mimeType="application/pkcs7-mime" />
            <mimeMap fileExtension=".p7m" mimeType="application/pkcs7-mime" />
            <mimeMap fileExtension=".p7r" mimeType="application/x-pkcs7-certreqresp" />
            <mimeMap fileExtension=".p7s" mimeType="application/pkcs7-signature" />
            <mimeMap fileExtension=".pbm" mimeType="image/x-portable-bitmap" />
            <mimeMap fileExtension=".pcx" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".pcz" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".pdf" mimeType="application/pdf" />
            <mimeMap fileExtension=".pfb" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".pfm" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".pfx" mimeType="application/x-pkcs12" />
            <mimeMap fileExtension=".pgm" mimeType="image/x-portable-graymap" />
            <mimeMap fileExtension=".pko" mimeType="application/vnd.ms-pki.pko" />
            <mimeMap fileExtension=".pma" mimeType="application/x-perfmon" />
            <mimeMap fileExtension=".pmc" mimeType="application/x-perfmon" />
            <mimeMap fileExtension=".pml" mimeType="application/x-perfmon" />
            <mimeMap fileExtension=".pmr" mimeType="application/x-perfmon" />
            <mimeMap fileExtension=".pmw" mimeType="application/x-perfmon" />
            <mimeMap fileExtension=".png" mimeType="image/png" />
            <mimeMap fileExtension=".pnm" mimeType="image/x-portable-anymap" />
            <mimeMap fileExtension=".pnz" mimeType="image/png" />
            <mimeMap fileExtension=".pot" mimeType="application/vnd.ms-powerpoint" />
            <mimeMap fileExtension=".potm" mimeType="application/vnd.ms-powerpoint.template.macroEnabled.12" />
            <mimeMap fileExtension=".potx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.template" />
            <mimeMap fileExtension=".ppam" mimeType="application/vnd.ms-powerpoint.addin.macroEnabled.12" />
            <mimeMap fileExtension=".ppm" mimeType="image/x-portable-pixmap" />
            <mimeMap fileExtension=".pps" mimeType="application/vnd.ms-powerpoint" />
            <mimeMap fileExtension=".ppsm" mimeType="application/vnd.ms-powerpoint.slideshow.macroEnabled.12" />
            <mimeMap fileExtension=".ppsx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slideshow" />
            <mimeMap fileExtension=".ppt" mimeType="application/vnd.ms-powerpoint" />
            <mimeMap fileExtension=".pptm" mimeType="application/vnd.ms-powerpoint.presentation.macroEnabled.12" />
            <mimeMap fileExtension=".pptx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation" />
            <mimeMap fileExtension=".prf" mimeType="application/pics-rules" />
            <mimeMap fileExtension=".prm" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".prx" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".ps" mimeType="application/postscript" />
            <mimeMap fileExtension=".psd" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".psm" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".psp" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".pub" mimeType="application/x-mspublisher" />
            <mimeMap fileExtension=".qt" mimeType="video/quicktime" />
            <mimeMap fileExtension=".qtl" mimeType="application/x-quicktimeplayer" />
            <mimeMap fileExtension=".qxd" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".ra" mimeType="audio/x-pn-realaudio" />
            <mimeMap fileExtension=".ram" mimeType="audio/x-pn-realaudio" />
            <mimeMap fileExtension=".rar" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".ras" mimeType="image/x-cmu-raster" />
            <mimeMap fileExtension=".rf" mimeType="image/vnd.rn-realflash" />
            <mimeMap fileExtension=".rgb" mimeType="image/x-rgb" />
            <mimeMap fileExtension=".rm" mimeType="application/vnd.rn-realmedia" />
            <mimeMap fileExtension=".rmi" mimeType="audio/mid" />
            <mimeMap fileExtension=".roff" mimeType="application/x-troff" />
            <mimeMap fileExtension=".rpm" mimeType="audio/x-pn-realaudio-plugin" />
            <mimeMap fileExtension=".rtf" mimeType="application/rtf" />
            <mimeMap fileExtension=".rtx" mimeType="text/richtext" />
            <mimeMap fileExtension=".scd" mimeType="application/x-msschedule" />
            <mimeMap fileExtension=".sct" mimeType="text/scriptlet" />
            <mimeMap fileExtension=".sea" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".setpay" mimeType="application/set-payment-initiation" />
            <mimeMap fileExtension=".setreg" mimeType="application/set-registration-initiation" />
            <mimeMap fileExtension=".sgml" mimeType="text/sgml" />
            <mimeMap fileExtension=".sh" mimeType="application/x-sh" />
            <mimeMap fileExtension=".shar" mimeType="application/x-shar" />
            <mimeMap fileExtension=".sit" mimeType="application/x-stuffit" />
            <mimeMap fileExtension=".sldm" mimeType="application/vnd.ms-powerpoint.slide.macroEnabled.12" />
            <mimeMap fileExtension=".sldx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slide" />
            <mimeMap fileExtension=".smd" mimeType="audio/x-smd" />
            <mimeMap fileExtension=".smi" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".smx" mimeType="audio/x-smd" />
            <mimeMap fileExtension=".smz" mimeType="audio/x-smd" />
            <mimeMap fileExtension=".snd" mimeType="audio/basic" />
            <mimeMap fileExtension=".snp" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".spc" mimeType="application/x-pkcs7-certificates" />
            <mimeMap fileExtension=".spl" mimeType="application/futuresplash" />
            <mimeMap fileExtension=".spx" mimeType="audio/ogg" />
            <mimeMap fileExtension=".src" mimeType="application/x-wais-source" />
            <mimeMap fileExtension=".ssm" mimeType="application/streamingmedia" />
            <mimeMap fileExtension=".sst" mimeType="application/vnd.ms-pki.certstore" />
            <mimeMap fileExtension=".stl" mimeType="application/vnd.ms-pki.stl" />
            <mimeMap fileExtension=".sv4cpio" mimeType="application/x-sv4cpio" />
            <mimeMap fileExtension=".sv4crc" mimeType="application/x-sv4crc" />
            <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
            <mimeMap fileExtension=".svgz" mimeType="image/svg+xml" />
            <mimeMap fileExtension=".swf" mimeType="application/x-shockwave-flash" />
            <mimeMap fileExtension=".t" mimeType="application/x-troff" />
            <mimeMap fileExtension=".tar" mimeType="application/x-tar" />
            <mimeMap fileExtension=".tcl" mimeType="application/x-tcl" />
            <mimeMap fileExtension=".tex" mimeType="application/x-tex" />
            <mimeMap fileExtension=".texi" mimeType="application/x-texinfo" />
            <mimeMap fileExtension=".texinfo" mimeType="application/x-texinfo" />
            <mimeMap fileExtension=".tgz" mimeType="application/x-compressed" />
            <mimeMap fileExtension=".thmx" mimeType="application/vnd.ms-officetheme" />
            <mimeMap fileExtension=".thn" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".tif" mimeType="image/tiff" />
            <mimeMap fileExtension=".tiff" mimeType="image/tiff" />
            <mimeMap fileExtension=".toc" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".tr" mimeType="application/x-troff" />
            <mimeMap fileExtension=".trm" mimeType="application/x-msterminal" />
            <mimeMap fileExtension=".ts" mimeType="video/vnd.dlna.mpeg-tts" />
            <mimeMap fileExtension=".tsv" mimeType="text/tab-separated-values" />
            <mimeMap fileExtension=".ttf" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".tts" mimeType="video/vnd.dlna.mpeg-tts" />
            <mimeMap fileExtension=".txt" mimeType="text/plain" />
            <mimeMap fileExtension=".u32" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".uls" mimeType="text/iuls" />
            <mimeMap fileExtension=".ustar" mimeType="application/x-ustar" />
            <mimeMap fileExtension=".vbs" mimeType="text/vbscript" />
            <mimeMap fileExtension=".vcf" mimeType="text/x-vcard" />
            <mimeMap fileExtension=".vcs" mimeType="text/plain" />
            <mimeMap fileExtension=".vdx" mimeType="application/vnd.ms-visio.viewer" />
            <mimeMap fileExtension=".vml" mimeType="text/xml" />
            <mimeMap fileExtension=".vsd" mimeType="application/vnd.visio" />
            <mimeMap fileExtension=".vss" mimeType="application/vnd.visio" />
            <mimeMap fileExtension=".vst" mimeType="application/vnd.visio" />
            <mimeMap fileExtension=".vsto" mimeType="application/x-ms-vsto" />
            <mimeMap fileExtension=".vsw" mimeType="application/vnd.visio" />
            <mimeMap fileExtension=".vsx" mimeType="application/vnd.visio" />
            <mimeMap fileExtension=".vtx" mimeType="application/vnd.visio" />
            <mimeMap fileExtension=".wasm" mimeType="application/wasm" />
            <mimeMap fileExtension=".wav" mimeType="audio/wav" />
            <mimeMap fileExtension=".wax" mimeType="audio/x-ms-wax" />
            <mimeMap fileExtension=".wbmp" mimeType="image/vnd.wap.wbmp" />
            <mimeMap fileExtension=".wcm" mimeType="application/vnd.ms-works" />
            <mimeMap fileExtension=".wdb" mimeType="application/vnd.ms-works" />
            <mimeMap fileExtension=".webm" mimeType="video/webm" />
            <mimeMap fileExtension=".wks" mimeType="application/vnd.ms-works" />
            <mimeMap fileExtension=".wm" mimeType="video/x-ms-wm" />
            <mimeMap fileExtension=".wma" mimeType="audio/x-ms-wma" />
            <mimeMap fileExtension=".wmd" mimeType="application/x-ms-wmd" />
            <mimeMap fileExtension=".wmf" mimeType="application/x-msmetafile" />
            <mimeMap fileExtension=".wml" mimeType="text/vnd.wap.wml" />
            <mimeMap fileExtension=".wmlc" mimeType="application/vnd.wap.wmlc" />
            <mimeMap fileExtension=".wmls" mimeType="text/vnd.wap.wmlscript" />
            <mimeMap fileExtension=".wmlsc" mimeType="application/vnd.wap.wmlscriptc" />
            <mimeMap fileExtension=".wmp" mimeType="video/x-ms-wmp" />
            <mimeMap fileExtension=".wmv" mimeType="video/x-ms-wmv" />
            <mimeMap fileExtension=".wmx" mimeType="video/x-ms-wmx" />
            <mimeMap fileExtension=".wmz" mimeType="application/x-ms-wmz" />
            <mimeMap fileExtension=".woff" mimeType="font/x-woff" />
            <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
            <mimeMap fileExtension=".wps" mimeType="application/vnd.ms-works" />
            <mimeMap fileExtension=".wri" mimeType="application/x-mswrite" />
            <mimeMap fileExtension=".wrl" mimeType="x-world/x-vrml" />
            <mimeMap fileExtension=".wrz" mimeType="x-world/x-vrml" />
            <mimeMap fileExtension=".wsdl" mimeType="text/xml" />
            <mimeMap fileExtension=".wtv" mimeType="video/x-ms-wtv" />
            <mimeMap fileExtension=".wvx" mimeType="video/x-ms-wvx" />
            <mimeMap fileExtension=".x" mimeType="application/directx" />
            <mimeMap fileExtension=".xaf" mimeType="x-world/x-vrml" />
            <mimeMap fileExtension=".xaml" mimeType="application/xaml+xml" />
            <mimeMap fileExtension=".xap" mimeType="application/x-silverlight-app" />
            <mimeMap fileExtension=".xbap" mimeType="application/x-ms-xbap" />
            <mimeMap fileExtension=".xbm" mimeType="image/x-xbitmap" />
            <mimeMap fileExtension=".xdr" mimeType="text/plain" />
            <mimeMap fileExtension=".xht" mimeType="application/xhtml+xml" />
            <mimeMap fileExtension=".xhtml" mimeType="application/xhtml+xml" />
            <mimeMap fileExtension=".xla" mimeType="application/vnd.ms-excel" />
            <mimeMap fileExtension=".xlam" mimeType="application/vnd.ms-excel.addin.macroEnabled.12" />
            <mimeMap fileExtension=".xlc" mimeType="application/vnd.ms-excel" />
            <mimeMap fileExtension=".xlm" mimeType="application/vnd.ms-excel" />
            <mimeMap fileExtension=".xls" mimeType="application/vnd.ms-excel" />
            <mimeMap fileExtension=".xlsb" mimeType="application/vnd.ms-excel.sheet.binary.macroEnabled.12" />
            <mimeMap fileExtension=".xlsm" mimeType="application/vnd.ms-excel.sheet.macroEnabled.12" />
            <mimeMap fileExtension=".xlsx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
            <mimeMap fileExtension=".xlt" mimeType="application/vnd.ms-excel" />
            <mimeMap fileExtension=".xltm" mimeType="application/vnd.ms-excel.template.macroEnabled.12" />
            <mimeMap fileExtension=".xltx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.template" />
            <mimeMap fileExtension=".xlw" mimeType="application/vnd.ms-excel" />
            <mimeMap fileExtension=".xml" mimeType="text/xml" />
            <mimeMap fileExtension=".xof" mimeType="x-world/x-vrml" />
            <mimeMap fileExtension=".xpm" mimeType="image/x-xpixmap" />
            <mimeMap fileExtension=".xps" mimeType="application/vnd.ms-xpsdocument" />
            <mimeMap fileExtension=".xsd" mimeType="text/xml" />
            <mimeMap fileExtension=".xsf" mimeType="text/xml" />
            <mimeMap fileExtension=".xsl" mimeType="text/xml" />
            <mimeMap fileExtension=".xslt" mimeType="text/xml" />
            <mimeMap fileExtension=".xsn" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".xtp" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".xwd" mimeType="image/x-xwindowdump" />
            <mimeMap fileExtension=".z" mimeType="application/x-compress" />
            <mimeMap fileExtension=".zip" mimeType="application/x-zip-compressed" />
        </staticContent>
        <tracing>
            <traceFailedRequests>
                <add path="*">
                    <traceAreas>
                        <add provider="ASP" verbosity="Verbose" />
                        <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
                        <add provider="ISAPI Extension" verbosity="Verbose" />
                        <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket" verbosity="Verbose" />
                    </traceAreas>
                    <failureDefinitions statusCodes="200-999" />
                </add>
            </traceFailedRequests>
            <traceProviderDefinitions>
                <add name="WWW Server" guid="{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}">
                    <areas>
                        <clear />
                        <add name="Authentication" value="2" />
                        <add name="Security" value="4" />
                        <add name="Filter" value="8" />
                        <add name="StaticFile" value="16" />
                        <add name="CGI" value="32" />
                        <add name="Compression" value="64" />
                        <add name="Cache" value="128" />
                        <add name="RequestNotifications" value="256" />
                        <add name="Module" value="512" />
                        <add name="Rewrite" value="1024" />
                        <add name="FastCGI" value="4096" />
                        <add name="WebSocket" value="16384" />
                        <add name="ANCM" value="65536" />
                    </areas>
                </add>
                <add name="ASP" guid="{06b94d9a-b15e-456e-a4ef-37c984a2cb4b}">
                    <areas>
                        <clear />
                    </areas>
                </add>
                <add name="ISAPI Extension" guid="{a1c2040e-8840-4c31-ba11-9871031a19ea}">
                    <areas>
                        <clear />
                    </areas>
                </add>
                <add name="ASPNET" guid="{AFF081FE-0247-4275-9C4E-021F3DC1DA35}">
                    <areas>
                        <add name="Infrastructure" value="1" />
                        <add name="Module" value="2" />
                        <add name="Page" value="4" />
                        <add name="AppServices" value="8" />
                    </areas>
                </add>
            </traceProviderDefinitions>
        </tracing>
        <urlCompression />
        <validation />
        <webdav>
            <globalSettings>
                <propertyStores>
                    <add name="webdav_simple_prop" image="%IIS_BIN%\webdav_simple_prop.dll" image32="%IIS_BIN%\webdav_simple_prop.dll" />
                </propertyStores>
                <lockStores>
                    <add name="webdav_simple_lock" image="%IIS_BIN%\webdav_simple_lock.dll" image32="%IIS_BIN%\webdav_simple_lock.dll" />
                </lockStores>
            </globalSettings>
            <authoring>
                <locks enabled="true" lockStore="webdav_simple_lock" />
            </authoring>
            <authoringRules />
        </webdav>
        <webSocket />
        <applicationInitialization />
    </system.webServer>
    <location path="" overrideMode="Allow">
        <system.webServer>
            <modules>
                <add name="IsapiFilterModule" lockItem="true" />
                <add name="BasicAuthenticationModule" lockItem="true" />
                <add name="IsapiModule" lockItem="true" />
                <add name="HttpLoggingModule" lockItem="true" />
                <add name="DynamicCompressionModule" lockItem="true" />
                <add name="StaticCompressionModule" lockItem="true" />
                <add name="DefaultDocumentModule" lockItem="true" />
                <add name="DirectoryListingModule" lockItem="true" />
                <add name="ProtocolSupportModule" lockItem="true" />
                <add name="HttpRedirectionModule" lockItem="true" />
                <add name="ServerSideIncludeModule" lockItem="true" />
                <add name="StaticFileModule" lockItem="true" />
                <add name="AnonymousAuthenticationModule" lockItem="true" />
                <add name="CertificateMappingAuthenticationModule" lockItem="true" />
                <add name="UrlAuthorizationModule" lockItem="true" />
                <add name="WindowsAuthenticationModule" lockItem="true" />
                <add name="IISCertificateMappingAuthenticationModule" lockItem="true" />
                <add name="WebMatrixSupportModule" lockItem="true" />
                <add name="IpRestrictionModule" lockItem="true" />
                <add name="DynamicIpRestrictionModule" lockItem="true" />
                <add name="RequestFilteringModule" lockItem="true" />
                <add name="CustomLoggingModule" lockItem="true" />
                <add name="CustomErrorModule" lockItem="true" />
                <add name="FailedRequestsTracingModule" lockItem="true" />
                <add name="CgiModule" lockItem="true" />
                <add name="FastCgiModule" lockItem="true" />
<!--                <add name="WebDAVModule" /> -->
                <add name="RewriteModule" />
                <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" preCondition="managedHandler" />
                <add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="managedHandler" />
                <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" preCondition="managedHandler" />
                <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition="managedHandler" />
                <add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" preCondition="managedHandler" />
                <add name="RoleManager" type="System.Web.Security.RoleManagerModule" preCondition="managedHandler" />
                <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="managedHandler" />
                <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" preCondition="managedHandler" />
                <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" preCondition="managedHandler" />
                <add name="Profile" type="System.Web.Profile.ProfileModule" preCondition="managedHandler" />
                <add name="UrlMappingsModule" type="System.Web.UrlMappingsModule" preCondition="managedHandler" />
                <add name="ApplicationInitializationModule" lockItem="true" />
                <add name="WebSocketModule" lockItem="true" />
                <add name="ServiceModel-4.0" type="System.ServiceModel.Activation.ServiceHttpModule,System.ServiceModel.Activation,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
                <add name="ConfigurationValidationModule" lockItem="true" />
                <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" />
                <add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
                <add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler,runtimeVersionv2.0" />
                <add name="AspNetCoreModule" lockItem="true" />
                <add name="AspNetCoreModuleV2" lockItem="true" />
            </modules>
            <handlers accessPolicy="Read, Script">
<!--                <add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" /> -->
                <add name="AXD-ISAPI-4.0_64bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
                <add name="PageHandlerFactory-ISAPI-4.0_64bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
                <add name="SimpleHandlerFactory-ISAPI-4.0_64bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
                <add name="WebServiceHandlerFactory-ISAPI-4.0_64bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
                <add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_64bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
                <add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_64bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
                <add name="svc-ISAPI-4.0_64bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
                <add name="rules-ISAPI-4.0_64bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
                <add name="xoml-ISAPI-4.0_64bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
                <add name="xamlx-ISAPI-4.0_64bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
                <add name="aspq-ISAPI-4.0_64bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
                <add name="cshtm-ISAPI-4.0_64bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
                <add name="cshtml-ISAPI-4.0_64bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
                <add name="vbhtm-ISAPI-4.0_64bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
                <add name="vbhtml-ISAPI-4.0_64bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
                <add name="svc-Integrated" path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
                <add name="svc-ISAPI-2.0" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
                <add name="xoml-Integrated" path="*.xoml" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
                <add name="xoml-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
                <add name="rules-Integrated" path="*.rules" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
                <add name="rules-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
                <add name="AXD-ISAPI-4.0_32bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
                <add name="PageHandlerFactory-ISAPI-4.0_32bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
                <add name="SimpleHandlerFactory-ISAPI-4.0_32bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
                <add name="WebServiceHandlerFactory-ISAPI-4.0_32bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
                <add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_32bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
                <add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_32bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
                <add name="svc-ISAPI-4.0_32bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
                <add name="rules-ISAPI-4.0_32bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
                <add name="xoml-ISAPI-4.0_32bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
                <add name="xamlx-ISAPI-4.0_32bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
                <add name="aspq-ISAPI-4.0_32bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
                <add name="cshtm-ISAPI-4.0_32bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
                <add name="cshtml-ISAPI-4.0_32bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
                <add name="vbhtm-ISAPI-4.0_32bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
                <add name="vbhtml-ISAPI-4.0_32bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
                <add name="TraceHandler-Integrated-4.0" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv4.0" />
                <add name="WebAdminHandler-Integrated-4.0" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv4.0" />
                <add name="AssemblyResourceLoader-Integrated-4.0" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv4.0" />
                <add name="PageHandlerFactory-Integrated-4.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
                <add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
                <add name="WebServiceHandlerFactory-Integrated-4.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
                <add name="HttpRemotingHandlerFactory-rem-Integrated-4.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
                <add name="HttpRemotingHandlerFactory-soap-Integrated-4.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
                <add name="svc-Integrated-4.0" path="*.svc" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
                <add name="rules-Integrated-4.0" path="*.rules" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
                <add name="xoml-Integrated-4.0" path="*.xoml" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
                <add name="xamlx-Integrated-4.0" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" type="System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
                <add name="aspq-Integrated-4.0" path="*.aspq" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
                <add name="cshtm-Integrated-4.0" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
                <add name="cshtml-Integrated-4.0" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
                <add name="vbhtm-Integrated-4.0" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
                <add name="vbhtml-Integrated-4.0" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
                <add name="ScriptHandlerFactoryAppServices-Integrated-4.0" path="*_AppService.axd" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
                <add name="ScriptResourceIntegrated-4.0" path="*ScriptResource.axd" verb="GET,HEAD" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
                <add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
                <add name="SecurityCertificate" path="*.cer" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
                <add name="ISAPI-dll" path="*.dll" verb="*" modules="IsapiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
                <add name="TraceHandler-Integrated" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv2.0" />
                <add name="WebAdminHandler-Integrated" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv2.0" />
                <add name="AssemblyResourceLoader-Integrated" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv2.0" />
                <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
                <add name="SimpleHandlerFactory-Integrated" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
                <add name="WebServiceHandlerFactory-Integrated" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Services.Protocols.WebServiceHandlerFactory,System.Web.Services,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" preCondition="integratedMode,runtimeVersionv2.0" />
                <add name="HttpRemotingHandlerFactory-rem-Integrated" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
                <add name="HttpRemotingHandlerFactory-soap-Integrated" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
                <add name="AXD-ISAPI-2.0" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
                <add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
                <add name="SimpleHandlerFactory-ISAPI-2.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
                <add name="WebServiceHandlerFactory-ISAPI-2.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
                <add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
                <add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
                <add name="svc-ISAPI-2.0-64" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
                <add name="AXD-ISAPI-2.0-64" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
                <add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
                <add name="SimpleHandlerFactory-ISAPI-2.0-64" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
                <add name="WebServiceHandlerFactory-ISAPI-2.0-64" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
                <add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0-64" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
                <add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0-64" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
                <add name="rules-64-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
                <add name="xoml-64-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
                <add name="CGI-exe" path="*.exe" verb="*" modules="CgiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
                <add name="SSINC-stm" path="*.stm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
                <add name="SSINC-shtm" path="*.shtm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
                <add name="SSINC-shtml" path="*.shtml" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
                <add name="TRACEVerbHandler" path="*" verb="TRACE" modules="ProtocolSupportModule" requireAccess="None" />
                <add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" />
                <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
                <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
                <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
                <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
            </handlers>
        </system.webServer>
    </location>
</configuration>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoRepository/WIDESEAWCS_BasicInfoRepository.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <ProjectReference Include="..\WIDESEAWCS_IBasicInfoRepository\WIDESEAWCS_IBasicInfoRepository.csproj" />
  </ItemGroup>
</Project>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/WIDESEAWCS_BasicInfoService.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="WIDESEAWCS_QuartzJob" Version="1.0.0" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\WIDESEAWCS_IBasicInfoService\WIDESEAWCS_IBasicInfoService.csproj" />
  </ItemGroup>
</Project>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/AreaInfo.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Common
{
    public enum AreaInfo
    {
        CLOutAreaA,
        CLOutAreaB,
        CLOutAreaC
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskEnumHelper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.TaskEnum;
namespace WIDESEAWCS_Common.TaskEnum
{
    public static class TaskEnumHelper
    {
        public static List<int> GetEnumIndexList(this Type type)
        {
            if (type is null) throw new ArgumentNullException("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))
            {
                return TaskTypeGroup.OutbondGroup;
            }
            else if (!int.TryParse(Enum.Parse<TaskInStatusEnum>(taskType.ToString()).ToString(), out result))
            {
                return TaskTypeGroup.InboundGroup;
            }
            else if (!int.TryParse(Enum.Parse<TaskRelocationTypeEnum>(taskType.ToString()).ToString(), out result))
            {
                return TaskTypeGroup.RelocationGroup;
            }
            else if (!int.TryParse(Enum.Parse<TaskOtherTypeEnum>(taskType.ToString()).ToString(), out result))
            {
                return TaskTypeGroup.OtherGroup;
            }
            else
            {
                throw new NotImplementedException();
            }
        }
        public static int GetNextNotCompletedStatus<T>(this int currentStatus) where T : Enum
        {
            Type type = typeof(T);
            if (type is null) throw new ArgumentNullException();
            if (!type.IsEnum) return 0;
            if (type == typeof(TaskInStatusEnum))
            {
                List<int> taskInboundTypes = type.GetEnumIndexList();
                return taskInboundTypes.Where(x => x > currentStatus && x < (int)TaskInStatusEnum.InFinish).OrderBy(x => x).FirstOrDefault();
            }
            else if (type == typeof(TaskOutStatusEnum))
            {
                return type.GetEnumIndexList().Where(x => x > currentStatus && x < (int)TaskOutStatusEnum.OutFinish).OrderBy(x => x).FirstOrDefault();
            }
            else
            {
                throw new NotImplementedException();
            }
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,147 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Common.TaskEnum
{
    public enum TaskInStatusEnum
    {
        /// <summary>
        /// æ–°å»ºå…¥åº“任务
        /// </summary>
        [Description("新建入库任务")]
        InNew = 200,
        ///// <summary>
        ///// AGV入库执行中
        ///// </summary>
        //[Description("AGV入库执行中")]
        //AGV_InExecuting = 210,
        ///// <summary>
        ///// AGV入库完成
        ///// </summary>
        //[Description("AGV搬运完成")]
        //AGV_InFinish = 215,
        /// <summary>
        /// è¾“送线入库执行中
        /// </summary>
        [Description("输送线入库执行中")]
        Line_InExecuting = 220,
        /// <summary>
        /// è¾“送线入库完成
        /// </summary>
        [Description("输送线输送完成")]
        Line_InFinish = 225,
        /// <summary>
        /// å †åž›æœºå…¥åº“执行中
        /// </summary>
        [Description("堆垛机入库执行中")]
        SC_InExecuting = 230,
        /// <summary>
        /// å †åž›æœºå…¥åº“完成
        /// </summary>
        [Description("堆垛机入库完成")]
        SC_InFinish = 235,
        /// <summary>
        /// å…¥åº“任务完成
        /// </summary>
        [Description("入库任务完成")]
        InFinish = 290,
        /// <summary>
        /// å…¥åº“任务挂起
        /// </summary>
        [Description("入库任务挂起")]
        InPending = 297,
        /// <summary>
        /// å…¥åº“任务取消
        /// </summary>
        [Description("入库任务取消")]
        InCancel = 298,
        /// <summary>
        /// å…¥åº“任务异常
        /// </summary>
        [Description("入库任务异常")]
        InException = 299,
    }
    public enum TaskOutStatusEnum
    {
        /// <summary>
        /// æ–°å»ºå‡ºåº“任务
        /// </summary>
        [Description("新建出库任务")]
        OutNew = 100,
        /// <summary>
        /// å †åž›æœºå‡ºåº“执行中
        /// </summary>
        [Description("堆垛机出库执行中")]
        SC_OutExecuting = 110,
        /// <summary>
        /// å †åž›æœºå‡ºåº“完成
        /// </summary>
        [Description("堆垛机出库完成")]
        SC_OutFinish = 115,
        /// <summary>
        /// è¾“送线出库执行中
        /// </summary>
        [Description("输送线出库执行中")]
        Line_OutExecuting = 120,
        /// <summary>
        /// è¾“送线出库完成
        /// </summary>
        [Description("输送线输送完成")]
        Line_OutFinish = 125,
        ///// <summary>
        ///// AGV出库执行中
        ///// </summary>
        //[Description("AGV出库执行中")]
        //AGV_OutExecuting = 130,
        ///// <summary>
        ///// AGV出库完成
        ///// </summary>
        //[Description("AGV搬运完成")]
        //AGV_OutFinish = 135,
        /// <summary>
        /// å‡ºåº“任务完成
        /// </summary>
        [Description("出库任务完成")]
        OutFinish = 190,
        /// <summary>
        /// å‡ºåº“任务挂起
        /// </summary>
        [Description("出库任务挂起")]
        OutPending = 197,
        /// <summary>
        /// å‡ºåº“任务取消
        /// </summary>
        [Description("出库任务取消")]
        OutCancel = 198,
        /// <summary>
        /// å‡ºåº“任务异常
        /// </summary>
        [Description("出库任务异常")]
        OutException = 199,
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusGroup.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Common.TaskEnum
{
    public enum TaskStatusGroup
    {
        NotCompleted,
        Completed,
        Exception
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Common.TaskEnum
{
    public enum TaskInboundTypeEnum
    {
        /// <summary>
        /// å…¥åº“
        /// </summary>
        [Description("入库")]
        Inbound = 200,
        /// <summary>
        /// ç›˜ç‚¹å…¥åº“
        /// </summary>
        [Description("盘点入库")]
        InInventory = 201,
        /// <summary>
        /// åˆ†æ‹£å…¥åº“
        /// </summary>
        [Description("分拣入库")]
        InPick = 202,
        /// <summary>
        /// è´¨æ£€å…¥åº“
        /// </summary>
        [Description("质检入库")]
        InQuality = 203
    }
    public enum TaskOutboundTypeEnum
    {
        /// <summary>
        /// å‡ºåº“
        /// </summary>
        [Description("出库")]
        Outbound = 100,
        /// <summary>
        /// ç›˜ç‚¹å‡ºåº“
        /// </summary>
        [Description("盘点出库")]
        OutInventory = 101,
        /// <summary>
        /// åˆ†æ‹£å‡ºåº“
        /// </summary>
        [Description("分拣出库")]
        OutPick = 102,
        /// <summary>
        /// è´¨æ£€å‡ºåº“
        /// </summary>
        [Description("质检出库")]
        OutQuality = 103,
    }
    public enum TaskRelocationTypeEnum
    {
        /// <summary>
        /// åº“内移库
        /// </summary>
        [Description("库内移库")]
        Relocation = 300,
        /// <summary>
        /// åº“外移库
        /// </summary>
        [Description("库外移库")]
        RelocationIn = 301
    }
    public enum TaskOtherTypeEnum
    {
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeGroup.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Common.TaskEnum
{
    public enum TaskTypeGroup
    {
        InboundGroup,
        OutbondGroup,
        RelocationGroup,
        OtherGroup
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
</Project>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/StackerCarneTaskDTO.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_DTO
{
    public class StackerCarneTaskDTO
    {
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/System/ActionDTO.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_DTO.System
{
    public class ActionDTO
    {
        public int ActionId { get; set; }
        public int MenuId { get; set; }
        public string Text { get; set; }
        public string Value { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/System/MenuDTO.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Model.Models;
namespace WIDESEA_DTO.System
{
    public class MenuDTO : Sys_Menu
    {
        public List<ActionDTO>? Actions { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/System/UserPermissions.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_DTO.System
{
    public class UserPermissionDTO
    {
        public int Id { get; set; }
        public int Pid { get; set; }
        public string Text { get; set; }
        public bool IsApp { get; set; }
        public List<ActionDTO> Actions { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/System/VueDictionaryDTO.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_DTO.System
{
    public class VueDictionaryDTO
    {
        public string DicNo { get; set; }
        public string Config { get; set; }
        public object Data {  get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_DTO.TaskInfo
{
    public class WMSTaskDTO
    {
        /// <summary>
        /// WMS任务主键
        /// </summary>
        public int Id {  get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        public int TaskNum {  get; set; }
        /// <summary>
        /// æ‰˜ç›˜å·
        /// </summary>
        public string PalletCode {  get; set; }
        /// <summary>
        /// å··é“号
        /// </summary>
        public string RoadWay { get; set; }
        /// <summary>
        /// ä»»åŠ¡ç±»åž‹
        /// </summary>
        public int TaskType {  get; set; }
        /// <summary>
        /// ä»»åŠ¡çŠ¶æ€
        /// </summary>
        public int TaskState { get; set; }
        /// <summary>
        /// èµ·ç‚¹
        /// </summary>
        public string SourceAddress {  get; set; }
        /// <summary>
        /// ç»ˆç‚¹
        /// </summary>
        public string TargetAddress {  get; set; }
        /// <summary>
        /// ä¼˜å…ˆçº§
        /// </summary>
        public int Grade {  get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/WIDESEAWCS_DTO.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    </PropertyGroup>
    <ItemGroup>
        <ProjectReference Include="..\WIDESEAWCS_Model\WIDESEAWCS_Model.csproj" />
    </ItemGroup>
    <ItemGroup>
      <Folder Include="BasicInfo\" />
    </ItemGroup>
</Project>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoRepository/WIDESEAWCS_IBasicInfoRepository.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <ProjectReference Include="..\WIDESEAWCS_DTO\WIDESEAWCS_DTO.csproj" />
  </ItemGroup>
</Project>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoService/WIDESEAWCS_IBasicInfoService.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <ProjectReference Include="..\WIDESEAWCS_BasicInfoRepository\WIDESEAWCS_BasicInfoRepository.csproj" />
  </ItemGroup>
</Project>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_DictionaryListRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ISystemRepository
{
    public interface ISys_DictionaryListRepository : IRepository<Sys_DictionaryList>
    {
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_DictionaryRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ISystemRepository
{
    public interface ISys_DictionaryRepository : IRepository<Sys_Dictionary>
    {
        IEnumerable<Sys_Dictionary> GetDictionaries(IEnumerable<string> dicNos, bool executeSql = true);
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_LogRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ISystemRepository
{
    public interface ISys_LogRepository : IRepository<Sys_Log>
    {
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_MenuRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ISystemRepository
{
    public interface ISys_MenuRepository : IRepository<Sys_Menu>
    {
        List<Sys_Menu> GetAllMenu();
        object GetSuperAdminMenu();
        object GetMenuByRoleId(int roleId);
        List<Permissions> GetPermissions(int roleId);
        object GetMenu(List<int> menuIds);
        object GetTreeItem(int menuId);
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_RoleAuthRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ISystemRepository
{
    public interface ISys_RoleAuthRepository : IRepository<Sys_RoleAuth>
    {
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_RoleRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ISystemRepository
{
    public interface ISys_RoleRepository : IRepository<Sys_Role>
    {
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_TenantRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ISystemRepository
{
    public interface ISys_TenantRepository : IRepository<Sys_Tenant>
    {
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/ISys_UserRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Core.HttpContextUser;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ISystemRepository
{
    public interface ISys_UserRepository : IRepository<Sys_User>
    {
        UserInfo GetUserInfo(string userName, string password);
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/WIDESEAWCS_ISystemRepository.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    </PropertyGroup>
    <ItemGroup>
        <ProjectReference Include="..\WIDESEAWCS_DTO\WIDESEAWCS_DTO.csproj" />
    </ItemGroup>
</Project>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_DictionaryListService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ISystemServices
{
    public interface ISys_DictionaryListService : IService<Sys_DictionaryList>
    {
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_DictionaryService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_DTO.System;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ISystemServices
{
    public interface ISys_DictionaryService : IService<Sys_Dictionary>
    {
        List<VueDictionaryDTO> GetVueDictionary(string[] dicNos);
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_LogService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ISystemServices
{
    public interface ISys_LogService : IService<Sys_Log>
    {
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_MenuService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ISystemServices
{
    public interface ISys_MenuService : IService<Sys_Menu>
    {
        object GetCurrentMenuActionList();
        object GetMenuActionList(int roleId);
        List<Sys_Menu> GetUserMenuList(int roleId);
        List<Sys_Actions> GetActions(int menuId, List<Sys_Actions> menuActions, List<Permissions> permissions, int roleId);
        object GetMenu();
        object GetTreeItem(int menuId);
        WebResponseContent Save(Sys_Menu menu);
        WebResponseContent DelMenu(int menuId);
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_RoleAuthService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ISystemServices
{
    public interface ISys_RoleAuthService : IService<Sys_RoleAuth>
    {
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_RoleService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
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;
using WIDESEAWCS_Model.Models.System;
namespace WIDESEAWCS_ISystemServices
{
    public interface ISys_RoleService : IService<Sys_Role>
    {
        List<RoleNodes> GetAllChildren(int roleId);
        WebResponseContent GetCurrentTreePermission();
        WebResponseContent GetUserTreePermission(int role_Id);
        WebResponseContent SavePermission(List<UserPermissionDTO> userPermissions, int roleId);
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_TenantService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ISystemServices
{
    public interface ISys_TenantService : IService<Sys_Tenant>
    {
        WebResponseContent InitTenantInfo(string tenantName, int tenantType);
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_UserService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Model;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ISystemServices
{
    public interface ISys_UserService : IService<Sys_User>
    {
        WebResponseContent Login(LoginInfo loginInfo);
        WebResponseContent GetCurrentUserInfo();
        WebResponseContent ModifyPwd(string oldPwd, string newPwd);
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/WIDESEAWCS_ISystemServices.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    </PropertyGroup>
    <ItemGroup>
        <ProjectReference Include="..\WIDESEAWCS_SystemRepository\WIDESEAWCS_SystemRepository.csproj" />
    </ItemGroup>
</Project>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoRepository/ITaskExecuteDetailRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_ITaskInfoRepository
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ITaskInfoRepository
{
    public interface ITaskExecuteDetailRepository: IRepository<Dt_TaskExecuteDetail>
    {
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoRepository/ITaskRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_ITaskInfoRepository
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ITaskInfoRepository
{
    public interface ITaskRepository : IRepository<Dt_Task>
    {
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoRepository/WIDESEAWCS_ITaskInfoRepository.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    </PropertyGroup>
    <ItemGroup>
      <ProjectReference Include="..\WIDESEAWCS_DTO\WIDESEAWCS_DTO.csproj" />
    </ItemGroup>
</Project>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskExecuteDetailService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_ITaskInfoService
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ITaskInfoService
{
    public interface ITaskExecuteDetailService : IService<Dt_TaskExecuteDetail>
    {
        void AddTaskExecuteDetail(int taskId, string description = "");
        WebResponseContent GetDetailInfo(int taskNum);
        WebResponseContent GetDetailDatas(int taskNum);
        void AddTaskExecuteDetail(List<int> taskNums, string description = "");
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,186 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_ITaskInfoService
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ITaskInfoService
{
    public interface ITaskService : IService<Dt_Task>
    {
        /// <summary>
        /// ä»»åŠ¡æŽ’åº
        /// </summary>
        public Dictionary<string, OrderByType> TaskOrderBy { get; set; }
        /// <summary>
        /// æ‰€æœ‰å…¥åº“任务类型
        /// </summary>
        public List<int> TaskInboundTypes { get; }
        /// <summary>
        /// æ‰€æœ‰å‡ºåº“任务类型
        /// </summary>
        public List<int> TaskOutboundTypes {  get; }
        /// <summary>
        /// æŽ¥æ”¶WMS任务信息
        /// </summary>
        /// <param name="taskDTOs">WMS任务对象集合</param>
        /// <returns>返回处理结果</returns>
        WebResponseContent ReceiveWMSTask([NotNull] List<WMSTaskDTO> taskDTOs);
        /// <summary>
        /// æ ¹æ®æ‰˜ç›˜å·ã€èµ·å§‹åœ°å€å‘WMS请求任务
        /// </summary>
        /// <param name="palletCode">托盘号</param>
        /// <param name="sourceAddress">起始地址</param>
        /// <returns></returns>
        WebResponseContent RequestWMSTask(string palletCode, string sourceAddress);
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址查询输送线未执行的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        Dt_Task QueryConveyorLineTask(string deviceNo, string currentAddress);
        /// <summary>
        /// æ ¹æ®ä»»åŠ¡å·ã€ä¸‹ä¸€åœ°å€æŸ¥è¯¢è¾“é€çº¿æ‰§è¡Œä¸­çš„ä»»åŠ¡
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="nextAddress">下一地址</param>
        /// <returns></returns>
        Dt_Task QueryExecutingConveyorLineTask(int taskNum, string nextAddress);
        /// <summary>
        /// æ ¹æ®ä»»åŠ¡å·ã€å½“å‰åœ°å€æŸ¥è¯¢è¾“é€çº¿å®Œæˆçš„ä»»åŠ¡
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        Dt_Task QueryCompletedConveyorLineTask(int taskNum, string currentAddress);
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、任务类型分组(可选)按照优先级以及创建时间排序查询任务池新增的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="taskTypeGroup">任务类型分组(可选)</param>
        /// <returns></returns>
        Dt_Task? QuertStackerCraneTask(string deviceNo, TaskTypeGroup? taskTypeGroup = null);
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址按照优先级以及创建时间排序查询任务池新增的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns>返回任务实体对象,可能为null</returns>
        Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "");
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址按照优先级以及创建时间排序查询任务池入库类型的新增的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns>返回任务实体对象,可能为null</returns>
        Dt_Task QueryStackerCraneInTask(string deviceNo, string currentAddress = "");
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址按照优先级以及创建时间排序查询任务池出库类型的新增的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns>返回任务实体对象,可能为null</returns>
        Dt_Task QueryStackerCraneOutTask(string deviceNo, string currentAddress = "");
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址按照优先级以及创建时间排序查询任务池出库类型的新增的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="outStationCodes">当前地址</param>
        /// <returns>返回任务实体对象集合,可能为null</returns>
        List<Dt_Task> QueryStackerCraneOutTasks(string deviceNo, List<string> outStationCodes);
        /// <summary>
        /// æ›´æ–°ä»»åŠ¡å¼‚å¸¸ä¿¡æ¯æ˜¾ç¤º
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="message">异常信息</param>
        WebResponseContent UpdateTaskExceptionMessage(int taskNum, string message);
        /// <summary>
        /// æ›´æ–°ä»»åŠ¡çŠ¶æ€ä¿¡æ¯ï¼Œå¹¶åŒæ­¥è‡³WMS
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="status">任务状态</param>
        void UpdateTaskStatus(int taskNum, int status);
        /// <summary>
        /// å°†ä»»åŠ¡çŠ¶æ€ä¿®æ”¹ä¸ºä¸‹ä¸€ä¸ªçŠ¶æ€
        /// </summary>
        /// <param name="taskNum">任务号</param>
        WebResponseContent UpdateTaskStatusToNext(int taskNum);
        /// <summary>
        /// å°†ä»»åŠ¡çŠ¶æ€ä¿®æ”¹ä¸ºä¸‹ä¸€ä¸ªçŠ¶æ€
        /// </summary>
        /// <param name="task">任务实体对象</param>
        /// <returns></returns>
        WebResponseContent UpdateTaskStatusToNext([NotNull] Dt_Task task);
        /// <summary>
        /// æ ¹æ®ä»»åŠ¡å·ã€å½“å‰åœ°å€æ›´æ–°ä»»åŠ¡ä½ç½®ä¿¡æ¯
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        Dt_Task? UpdatePosition(int taskNum, string currentAddress);
        /// <summary>
        /// ä»»åŠ¡å®Œæˆ
        /// </summary>
        /// <param name="taskNum">任务编号</param>
        /// <returns>返回处理结果</returns>
        WebResponseContent StackCraneTaskCompleted(int taskNum);
        /// <summary>
        /// æ¢å¤æŒ‚起任务
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <returns>返回处理结果</returns>
        WebResponseContent TaskStatusRecovery(int taskNum);
        /// <summary>
        /// å›žæ»šä»»åŠ¡çŠ¶æ€
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <returns>返回处理结果</returns>
        WebResponseContent RollbackTaskStatusToLast(int taskNum);
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/WIDESEAWCS_ITaskInfoService.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    </PropertyGroup>
    <ItemGroup>
        <ProjectReference Include="..\WIDESEAWCS_TaskInfoRepository\WIDESEAWCS_TaskInfoRepository.csproj" />
    </ItemGroup>
</Project>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/LoginInfo.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Model
{
    public class LoginInfo
    {
        public string UserName { get; set; }
        public string Password { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/RoleAuthor.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Model
{
    public class RoleAuthor
    {
        public int menuId { get; set; }
        public string actions { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/RoleNodes.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Model.Models.System
{
    public class RoleNodes
    {
        public int Id { get; set; }
        public int ParentId { get; set; }
        public string RoleName { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Actions.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Model.Models
{
    public class Sys_Actions
    {
        public int ActionId { get; set; }
        public int MenuId { get; set; }
        public string Text { get; set; }
        public string Value { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Department.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
using WIDESEAWCS_Core.DB.Models;
using WIDESEAWCS_Core.Tenants;
namespace WIDESEAWCS_Model.Models
{
    [SugarTable("Sys_Department", "组织架构"), MultiTenant]
    public class Sys_Department : BaseEntity
    {
        /// <summary>
        /// ç»„织ID
        /// </summary>
        [SugarColumn(IsIdentity = true, IsPrimaryKey = true, ColumnDescription = "组织ID")]
        public int DepartmentId { get; set; }
        /// <summary>
        /// ç»„织名称
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "组织名称")]
        public string DepartmentName { get; set; }
        /// <summary>
        /// ç»„织编号
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "组织编号")]
        public string DepartmentCode { get; set; }
        /// <summary>
        /// ä¸Šçº§ç»„织
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "上级组织")]
        public int ParentId { get; set; }
        /// <summary>
        /// éƒ¨é—¨ç±»åž‹
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "部门类型")]
        public string DepartmentType { get; set; }
        /// <summary>
        /// æ˜¯å¦å¯ç”¨
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "是否可用")]
        public int Enable { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 2000, ColumnDescription = "备注")]
        public string Remark { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Dictionary.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,95 @@
using Magicodes.ExporterAndImporter.Core;
using SqlSugar;
using WIDESEAWCS_Core.DB.Models;
using WIDESEAWCS_Core.Filter;
using WIDESEAWCS_Core.Tenants;
namespace WIDESEAWCS_Model.Models
{
    [MultiTenant]
    [Exporter(ExporterHeaderFilter = typeof(ExporterHeaderFilter))]
    [SugarTable("Sys_Dictionary", "字典数据")]
    public class Sys_Dictionary : BaseEntity
    {
        /// <summary>
        /// å­—å…¸ID
        /// </summary>
        [ExporterHeader(DisplayName = "字典ID")]
        [SugarColumn(IsIdentity = true, IsPrimaryKey = true, ColumnDescription = "字典ID")]
        public int DicId { get; set; }
        /// <summary>
        /// é…ç½®é¡¹
        /// </summary>
        [ExporterHeader(DisplayName = "配置项")]
        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "配置项")]
        public string Config { get; set; }
        /// <summary>
        /// æ•°æ®åº“服务
        /// </summary>
        [ExporterHeader(DisplayName = "数据库服务")]
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "数据库服务")]
        public string DBServer { get; set; }
        /// <summary>
        /// Sql语句
        /// </summary>
        [ExporterHeader(DisplayName = "Sql语句")]
        [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "Sql语句")]
        public string DBSql { get; set; }
        /// <summary>
        /// å­—典名称
        /// </summary>
        [ExporterHeader(DisplayName = "字典名称")]
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "字典名称")]
        public string DicName { get; set; }
        /// <summary>
        /// å­—典编号
        /// </summary>
        [ExporterHeader(DisplayName = "字典编号")]
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "字典编号")]
        public string DicNo { get; set; }
        /// <summary>
        /// æ˜¯å¦å¯ç”¨
        /// </summary>
        [ExporterHeader(DisplayName = "是否启用")]
        [SugarColumn(IsNullable = true, ColumnDescription = "是否启用")]
        public byte? Enable { get; set; }
        /// <summary>
        /// æŽ’序号
        /// </summary>
        [ExporterHeader(DisplayName = "排序号")]
        [SugarColumn(IsNullable = true, ColumnDescription = "排序号")]
        public int? OrderNo { get; set; }
        /// <summary>
        /// çˆ¶çº§ID
        /// </summary>
        [ExporterHeader(DisplayName = "父级ID")]
        [SugarColumn(IsNullable = true, ColumnDescription = "父级ID")]
        public int ParentId { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [ExporterHeader(DisplayName = "备注")]
        [SugarColumn(IsNullable = true, Length = 2000, ColumnDescription = "备注")]
        public string Remark { get; set; }
        /// <summary>
        /// ç³»ç»Ÿç±»åž‹
        /// </summary>
        [ExporterHeader(DisplayName = "系统类型")]
        [SugarColumn(IsNullable = false, ColumnDescription = "系统类型")]
        public int SystemType { get; set; }
        [ExporterHeader(IsIgnore = true)]
        [Navigate(NavigateType.OneToMany, nameof(DicId),nameof(DicId)), SugarColumn(IsIgnore = true, IsNullable = true)]
        public List<Sys_DictionaryList> DicList { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_DictionaryList.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.DB.Models;
using SqlSugar;
using WIDESEAWCS_Core.Tenants;
namespace WIDESEAWCS_Model.Models
{
    [SugarTable("Sys_DictionaryList", "字典明细"), MultiTenant]
    public class Sys_DictionaryList : BaseEntity
    {
        /// <summary>
        /// å­—典列表ID
        /// </summary>
        [SugarColumn(IsIdentity = true, IsPrimaryKey = true, ColumnDescription = "字典列表ID")]
        public int DicListId { get; set; }
        /// <summary>
        /// æ•°æ®æºText
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "数据源Text")]
        public string DicName { get; set; }
        /// <summary>
        /// æ•°æ®æºValue
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "数据源Value")]
        public string DicValue { get; set; }
        /// <summary>
        /// æ•°æ®æºID
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "数据源ID")]
        public int DicId { get; set; }
        /// <summary>
        /// æ˜¯å¦å¯ç”¨
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "是否可用")]
        public byte? Enable { get; set; }
        /// <summary>
        /// æŽ’序号
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "排序号")]
        public int? OrderNo { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 2000, ColumnDescription = "备注")]
        public string Remark { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Log.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,86 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SqlSugar;
using WIDESEAWCS_Core.DB.Models;
using WIDESEAWCS_Core.Tenants;
namespace WIDESEAWCS_Model.Models
{
    [SugarTable("Sys_Log", "系统日志表"), MultiTenant]
    public class Sys_Log
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int Id { get; set; }
        /// <summary>
        /// å¼€å§‹æ—¶é—´
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "开始时间")]
        public DateTime? BeginDate { get; set; }
        /// <summary>
        /// æ—¶é•¿
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "时长")]
        public int? ElapsedTime { get; set; }
        /// <summary>
        /// ç»“束时间
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "结束时间")]
        public DateTime EndDate { get; set; }
        /// <summary>
        /// æ—¥å¿—类型
        /// </summary>
        //[SugarColumn(IsNullable = true, ColumnDescription = "日志类型")]
        //public DateTime LogType { get; set; }
        /// <summary>
        /// è¯·æ±‚参数
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 2000, ColumnDescription = "请求参数")]
        public string RequestParam { get; set; }
        /// <summary>
        /// å“åº”参数
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 2000, ColumnDescription = "响应参数")]
        public string ResponseParam { get; set; }
        /// <summary>
        /// å“åº”状态
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "响应状态")]
        public int? Success { get; set; }
        /// <summary>
        /// è¯·æ±‚地址
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 2000, ColumnDescription = "请求地址")]
        public string Url { get; set; }
        /// <summary>
        /// ç”¨æˆ·IP
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "用户IP")]
        public string UserIP { get; set; }
        /// <summary>
        /// ç”¨æˆ·åç§°
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "用户名称")]
        public string UserName { get; set; }
        /// <summary>
        /// ç”¨æˆ·ä¸»é”®
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "用户主键")]
        public int? User_Id { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Menu.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,87 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
using WIDESEAWCS_Core.DB.Models;
using WIDESEAWCS_Core.Tenants;
namespace WIDESEAWCS_Model.Models
{
    [SugarTable("Sys_Menu", "菜单配置"), MultiTenant]
    public class Sys_Menu : BaseEntity
    {
        /// <summary>
        /// èœå•ID
        /// </summary>
        [SugarColumn(IsIdentity = true, IsPrimaryKey = true, ColumnDescription = "菜单ID")]
        public int MenuId { get; set; }
        /// <summary>
        /// èœå•名称
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "菜单名称")]
        public string MenuName { get; set; }
        /// <summary>
        /// æƒé™
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 2000, ColumnDescription = "权限")]
        public string Auth { get; set; }
        /// <summary>
        /// å›¾æ ‡
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "图标")]
        public string Icon { get; set; }
        /// <summary>
        /// æè¿°
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 2000, ColumnDescription = "描述")]
        public string Description { get; set; }
        /// <summary>
        /// æ˜¯å¦å¯ç”¨
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "是否启用")]
        public byte? Enable { get; set; }
        /// <summary>
        /// è¡¨å
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "表名")]
        public string TableName { get; set; }
        /// <summary>
        /// çˆ¶çº§ID
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "父级ID")]
        public int ParentId { get; set; }
        /// <summary>
        /// è·¯å¾„
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "路径")]
        public string Url { get; set; }
        /// <summary>
        /// æŽ’序号
        /// </summary>
        [SugarColumn(IsNullable = true,ColumnDescription ="排序号")]
        public int? OrderNo { get; set; }
        /// <summary>
        /// èœå•类型
        /// </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; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Role.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
using WIDESEAWCS_Core.DB.Models;
using WIDESEAWCS_Core.Tenants;
namespace WIDESEAWCS_Model.Models
{
    [SugarTable("Sys_Role", "角色表"), MultiTenant]
    public class Sys_Role : BaseEntity
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [SugarColumn(IsIdentity = true, IsPrimaryKey = true, ColumnDescription = "主键")]
        public int RoleId { get; set; }
        /// <summary>
        /// éƒ¨é—¨åç§°
        /// </summary>
        [SugarColumn(IsNullable = true, IsIgnore = true, Length = 50, ColumnDescription = "部门名称")]
        public string DeptName { get; set; }
        /// <summary>
        /// éƒ¨é—¨ä¸»é”®
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "部门主键")]
        public int? DeptId { get; set; }
        /// <summary>
        /// æ˜¯å¦å¯ç”¨
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "是否启用")]
        public byte Enable { get; set; }
        /// <summary>
        /// çˆ¶ID
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "父ID")]
        public int ParentId { get; set; }
        /// <summary>
        /// è§’色名称
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "角色名称")]
        public string RoleName { get; set; }
        [Navigate(NavigateType.OneToMany, nameof(ParentId), nameof(RoleId)), SugarColumn(IsIgnore = true, IsNullable = true)]
        public List<Sys_Role> Roles { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_RoleAuth.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
using WIDESEAWCS_Core.DB.Models;
using WIDESEAWCS_Core.Tenants;
namespace WIDESEAWCS_Model.Models
{
    /// <summary>
    /// è§’色身份验证管理表
    /// </summary>
    [SugarTable("Sys_RoleAuth", "角色身份验证管理"), MultiTenant]
    public class Sys_RoleAuth : BaseEntity
    {
        /// <summary>
        /// è§’色身份验证ID
        /// </summary>
        [SugarColumn(IsIdentity = true, IsPrimaryKey = true, ColumnDescription = "角色身份验证ID")]
        public int AuthId { get; set; }
        /// <summary>
        /// ç”¨æˆ·æƒé™
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "用户权限")]
        public string AuthValue { get; set; }
        /// <summary>
        /// èœå•ID
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "菜单ID")]
        public int MenuId { get; set; }
        /// <summary>
        /// è§’色ID
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "角色ID")]
        public int? RoleId { get; set; }
        /// <summary>
        /// ç”¨æˆ·ID
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "用户ID")]
        public int? UserId { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_Tenant.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.DB.Models;
using WIDESEAWCS_Core.Tenants;
namespace WIDESEAWCS_Model.Models
{
    [SugarTable("Sys_Tenant", "租户")]
    public class Sys_Tenant : BaseEntity
    {
        /// <summary>
        /// ç§Ÿæˆ·ID
        /// </summary>
        [SugarColumn(IsIdentity = true, IsPrimaryKey = true, ColumnDescription = "租户ID")]
        public int TenantId { get; set; }
        /// <summary>
        /// ç§Ÿæˆ·åç§°
        /// </summary>
        [SugarColumn(Length = 200, IsNullable = false, ColumnDescription = "租户名称")]
        public string TenantName { get; set; }
        /// <summary>
        /// ç§Ÿæˆ·ç±»åž‹
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "租户类型")]
        public int TenantType { get; set; }
        /// <summary>
        /// æ•°æ®åº“类型
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "数据库类型")]
        public int DbType { get; set; }
        /// <summary>
        /// è¿žæŽ¥å­—符串
        /// </summary>
        [SugarColumn(Length = 1000, IsNullable = false, ColumnDescription = "连接字符串")]
        public string ConnectionString { get; set; }
        /// <summary>
        /// çŠ¶æ€
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "状态")]
        public int Status { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [SugarColumn(Length = 2000, IsNullable = true, ColumnDescription = "备注")]
        public string Remark { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_User.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,145 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.DB.Models;
using WIDESEAWCS_Core.Tenants;
namespace WIDESEAWCS_Model.Models
{
    /// <summary>
    /// ç”¨æˆ·ä¿¡æ¯è¡¨
    /// </summary>
    //[SugarTable("SysUserInfo")]
    [SugarTable("Sys_User", "用户表")] //('数据库表名','数据库表备注')
    public class Sys_User : BaseEntity
    {
        /// <summary>
        /// ç”¨æˆ·ID
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "用户ID")]
        public int User_Id { get; set; }
        /// <summary>
        ///帐号
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = false, ColumnDescription = "帐号")]
        public string UserName { get; set; }
        /// <summary>
        /// è§’色ID
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "角色ID")]
        public int Role_Id { get; set; }
        /// <summary>
        /// è§’色名称
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "角色名称")]
        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 = "备注")]
        public string Remark { get; set; }
        /// <summary>
        /// å¯†ç 
        /// </summary>
        [SugarColumn(Length = 200, IsNullable = false, ColumnDescription = "密码")]
        public string UserPwd { get; set; }
        /// <summary>
        /// çœŸå®žå§“名
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = false, ColumnDescription = "真实姓名")]
        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>
        /// å¤´åƒ
        /// </summary>
        [SugarColumn(Length = 500, IsNullable = true, ColumnDescription = "头像")]
        public string HeadImageUrl { get; set; }
        /// <summary>
        /// æœ€åŽå¯†ç ä¿®æ”¹æ—¶é—´
        /// </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
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "租户ID",DefaultValue = "0")]
        public long TenantId { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/UserPermissions.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Model.Models.System
{
    public class UserPermissions
    {
        public int Id { get; set; }
        public int Pid { get; set; }
        public string Text { get; set; }
        public bool IsApp { get; set; }
        public List<Sys_Actions> Actions { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,152 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_Model.Models.TaskInfo
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using Magicodes.ExporterAndImporter.Core;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.DB.Models;
namespace WIDESEAWCS_Model.Models
{
    [SugarTable(nameof(Dt_Task), "任务信息")]
    public class Dt_Task : BaseEntity
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [ImporterHeader(Name = "主键")]
        [ExporterHeader(DisplayName = "主键")]
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int TaskId { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        [ImporterHeader(Name = "任务号")]
        [ExporterHeader(DisplayName = "任务号")]
        [SugarColumn(IsNullable = false, ColumnDescription = "任务号")]
        public int TaskNum { get; set; }
        /// <summary>
        /// æ‰˜ç›˜ç¼–号
        /// </summary>
        [ImporterHeader(Name = "托盘编号")]
        [ExporterHeader(DisplayName = "托盘编号")]
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "托盘编号")]
        public string PalletCode { get; set; }
        /// <summary>
        /// å··é“号
        /// </summary>
        [ImporterHeader(Name = "巷道号")]
        [ExporterHeader(DisplayName = "巷道号")]
        [SugarColumn(IsNullable = false, Length = 10, ColumnDescription = "巷道号")]
        public string Roadway { get; set; }
        /// <summary>
        /// ä»»åŠ¡ç±»åž‹
        /// </summary>
        [ImporterHeader(Name = "任务类型")]
        [ExporterHeader(DisplayName = "任务类型")]
        [SugarColumn(IsNullable = false, ColumnDescription = "任务类型")]
        public int TaskType { get; set; }
        /// <summary>
        /// ä»»åŠ¡çŠ¶æ€
        /// </summary>
        [ImporterHeader(Name = "任务状态")]
        [ExporterHeader(DisplayName = "任务状态")]
        [SugarColumn(IsNullable = false, ColumnDescription = "任务状态")]
        public int TaskState { get; set; }
        /// <summary>
        /// èµ·å§‹åœ°å€
        /// </summary>
        [ImporterHeader(Name = "起始地址")]
        [ExporterHeader(DisplayName = "起始地址")]
        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "起始地址")]
        public string SourceAddress { get; set; }
        /// <summary>
        /// ç›®æ ‡åœ°å€
        /// </summary>
        [ImporterHeader(Name = "目标地址")]
        [ExporterHeader(DisplayName = "目标地址")]
        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "目标地址")]
        public string TargetAddress { get; set; }
        /// <summary>
        /// å½“前位置
        /// </summary>
        [ImporterHeader(Name = "当前位置")]
        [ExporterHeader(DisplayName = "当前位置")]
        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "当前位置")]
        public string CurrentAddress { get; set; }
        /// <summary>
        /// ä¸‹ä¸€åœ°å€
        /// </summary>
        [ImporterHeader(Name = "下一地址")]
        [ExporterHeader(DisplayName = "下一地址")]
        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "下一地址")]
        public string NextAddress { get; set; }
        /// <summary>
        /// å¼‚常信息
        /// </summary>
        [ImporterHeader(Name = "异常信息")]
        [ExporterHeader(DisplayName = "异常信息")]
        [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "异常信息")]
        public string? ExceptionMessage { get; set; }
        /// <summary>
        /// ä¼˜å…ˆçº§
        /// </summary>
        [ImporterHeader(Name = "优先级")]
        [ExporterHeader(DisplayName = "优先级")]
        [SugarColumn(IsNullable = false, ColumnDescription = "优先级")]
        public int Grade { get; set; }
        /// <summary>
        /// WMS任务主键
        /// </summary>
        [ImporterHeader(Name = "WMS任务主键")]
        [ExporterHeader(DisplayName = "WMS任务主键")]
        [SugarColumn(IsNullable = false, ColumnDescription = "WMS任务主键")]
        public int WMSId { get; set; }
        /// <summary>
        /// ä»»åŠ¡ä¸‹å‘æ—¶é—´
        /// </summary>
        [ImporterHeader(Name = "任务下发时间")]
        [ExporterHeader(DisplayName = "任务下发时间")]
        [SugarColumn(IsNullable = true, ColumnDescription = "任务下发时间")]
        public DateTime? Dispatchertime { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [ImporterHeader(Name = "备注")]
        [ExporterHeader(DisplayName = "备注")]
        [SugarColumn(IsNullable = true, Length = 255, ColumnDescription = "备注")]
        public string Remark { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_TaskExecuteDetail.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,112 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_Model.Models.TaskInfo
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using Magicodes.ExporterAndImporter.Core;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.DB.Models;
namespace WIDESEAWCS_Model.Models
{
    [SugarTable(nameof(Dt_TaskExecuteDetail), "任务执行明细")]
    public class Dt_TaskExecuteDetail : BaseEntity
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [ImporterHeader(Name = "主键")]
        [ExporterHeader(DisplayName = "主键")]
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int TaskDetailId { get; set; }
        /// <summary>
        /// ä»»åС䏻键
        /// </summary>
        [ImporterHeader(Name = "任务主键")]
        [ExporterHeader(DisplayName = "任务主键")]
        [SugarColumn(IsNullable = false, ColumnDescription = "任务主键")]
        public int TaskId { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        [ImporterHeader(Name = "任务号")]
        [ExporterHeader(DisplayName = "任务号")]
        [SugarColumn(IsNullable = false, ColumnDescription = "任务号")]
        public int TaskNum { get; set; }
        /// <summary>
        /// ä»»åŠ¡çŠ¶æ€
        /// </summary>
        [ImporterHeader(Name = "主键")]
        [ExporterHeader(DisplayName = "主键")]
        [SugarColumn(IsNullable = false, ColumnDescription = "任务状态")]
        public int TaskState { get; set; }
        /// <summary>
        /// å½“前位置
        /// </summary>
        [ImporterHeader(Name = "当前位置")]
        [ExporterHeader(DisplayName = "当前位置")]
        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "当前位置")]
        public string CurrentAddress { get; set; }
        /// <summary>
        /// ä¸‹ä¸€åœ°å€
        /// </summary>
        [ImporterHeader(Name = "下一地址")]
        [ExporterHeader(DisplayName = "下一地址")]
        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "下一地址")]
        public string NextAddress { get; set; }
        /// <summary>
        /// æ˜¯å¦äººå·¥æ“ä½œ
        /// </summary>
        [ImporterHeader(Name = "是否人工操作")]
        [ExporterHeader(DisplayName = "是否人工操作")]
        [SugarColumn(IsNullable = false, ColumnDescription = "是否人工操作")]
        public bool IsManual { get; set; }
        /// <summary>
        /// æ˜¯å¦æ­£å¸¸
        /// </summary>
        [ImporterHeader(Name = "是否正常")]
        [ExporterHeader(DisplayName = "是否正常")]
        [SugarColumn(IsNullable = false, ColumnDescription = "是否正常")]
        public bool IsNormal { get; set; }
        /// <summary>
        /// æè¿°
        /// </summary>
        [ImporterHeader(Name = "描述")]
        [ExporterHeader(DisplayName = "描述")]
        [SugarColumn(IsNullable = false, Length = int.MaxValue, ColumnDescription = "描述")]
        public string Description { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [ImporterHeader(Name = "备注")]
        [ExporterHeader(DisplayName = "备注")]
        [SugarColumn(IsNullable = true, Length = 255, ColumnDescription = "备注")]
        public string Remark { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/WIDESEAWCS_Model.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="System.Text.RegularExpressions" Version="4.3.1" />
        <PackageReference Include="WIDESEAWCS_Core" Version="1.0.5" />
    </ItemGroup>
    <ItemGroup>
        <ProjectReference Include="..\WIDESEAWCS_Common\WIDESEAWCS_Common.csproj" />
    </ItemGroup>
    <ItemGroup>
      <Folder Include="Models\BasicInfo\" />
    </ItemGroup>
</Project>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server.sln
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,162 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.9.34728.123
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_Server", "WIDESEAWCS_Server\WIDESEAWCS_Server.csproj", "{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_Tasks", "WIDESEAWCS_Tasks\WIDESEAWCS_Tasks.csproj", "{294E4915-0241-4C8C-BA99-7588B945863A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_Model", "WIDESEAWCS_Model\WIDESEAWCS_Model.csproj", "{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_DTO", "WIDESEAWCS_DTO\WIDESEAWCS_DTO.csproj", "{C2D3D138-9109-481B-8BEB-A27597890B2C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_Common", "WIDESEAWCS_Common\WIDESEAWCS_Common.csproj", "{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Repository", "Repository", "{4FF30CF7-DA79-4EDD-9A6E-0B0BEAD72A1A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Service", "Service", "{A12315CA-9D81-412C-A09B-B23D95CFFE16}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "System", "System", "{93EFF637-042E-4DD0-A74B-7F0CF998CF96}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TaskInfo", "TaskInfo", "{684035E2-174F-47CE-AA5C-36624C7E26F3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "System", "System", "{6295C9FB-DAC4-4C07-97C5-C0332ABDD13D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TaskInfo", "TaskInfo", "{D9CF90D0-AFB3-42AA-A2F1-BEE741E0AC0D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_ISystemRepository", "WIDESEAWCS_ISystemRepository\WIDESEAWCS_ISystemRepository.csproj", "{F302E6D6-5A95-4D22-8DC2-21BE2CB30275}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_SystemRepository", "WIDESEAWCS_SystemRepository\WIDESEAWCS_SystemRepository.csproj", "{5777BDEC-4726-4425-85F2-A090524F692D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_ITaskInfoRepository", "WIDESEAWCS_ITaskInfoRepository\WIDESEAWCS_ITaskInfoRepository.csproj", "{09D05F35-CEA2-48D9-86D0-FB95982BA511}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_TaskInfoRepository", "WIDESEAWCS_TaskInfoRepository\WIDESEAWCS_TaskInfoRepository.csproj", "{35054AA5-CF40-4F38-9414-C76742C29382}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_ISystemServices", "WIDESEAWCS_ISystemServices\WIDESEAWCS_ISystemServices.csproj", "{9E4BFF47-52BF-4FD8-9CC7-3763BF19D9E0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_SystemServices", "WIDESEAWCS_SystemServices\WIDESEAWCS_SystemServices.csproj", "{A14242DD-DA06-4DC3-8598-1761AA7C76D1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_ITaskInfoService", "WIDESEAWCS_ITaskInfoService\WIDESEAWCS_ITaskInfoService.csproj", "{7279A2AE-8D1F-4E66-A73A-01AF7927A336}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_TaskInfoService", "WIDESEAWCS_TaskInfoService\WIDESEAWCS_TaskInfoService.csproj", "{83F18A31-5983-4587-A0B2-414BF70E50B5}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F3797CD6-35D2-40F6-8CAF-39A7130697A7}"
    ProjectSection(SolutionItems) = preProject
        .editorconfig = .editorconfig
    EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BasicInfo", "BasicInfo", "{5CC8AEFF-2F75-4053-9569-73419839875A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BasicInfo", "BasicInfo", "{9CB2F821-BB23-48E5-88E8-C326477733C0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_IBasicInfoRepository", "WIDESEAWCS_IBasicInfoRepository\WIDESEAWCS_IBasicInfoRepository.csproj", "{266D07B7-3648-4F3D-818A-89EDA7D84C58}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_BasicInfoRepository", "WIDESEAWCS_BasicInfoRepository\WIDESEAWCS_BasicInfoRepository.csproj", "{206FDF79-9BF3-433A-B7FF-627287BBD760}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_IBasicInfoService", "WIDESEAWCS_IBasicInfoService\WIDESEAWCS_IBasicInfoService.csproj", "{8C2CC25B-DE5D-433E-A550-63864C7A716D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WIDESEAWCS_BasicInfoService", "WIDESEAWCS_BasicInfoService\WIDESEAWCS_BasicInfoService.csproj", "{FFAB2C76-1C9E-4006-95C8-A0B2AA53139D}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
        Release|Any CPU = Release|Any CPU
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}.Release|Any CPU.Build.0 = Release|Any CPU
        {294E4915-0241-4C8C-BA99-7588B945863A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {294E4915-0241-4C8C-BA99-7588B945863A}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {294E4915-0241-4C8C-BA99-7588B945863A}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {294E4915-0241-4C8C-BA99-7588B945863A}.Release|Any CPU.Build.0 = Release|Any CPU
        {7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}.Release|Any CPU.Build.0 = Release|Any CPU
        {C2D3D138-9109-481B-8BEB-A27597890B2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {C2D3D138-9109-481B-8BEB-A27597890B2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {C2D3D138-9109-481B-8BEB-A27597890B2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {C2D3D138-9109-481B-8BEB-A27597890B2C}.Release|Any CPU.Build.0 = Release|Any CPU
        {9FBC654C-51DE-422D-9E1E-6A38268DE1E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {9FBC654C-51DE-422D-9E1E-6A38268DE1E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {9FBC654C-51DE-422D-9E1E-6A38268DE1E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {9FBC654C-51DE-422D-9E1E-6A38268DE1E2}.Release|Any CPU.Build.0 = Release|Any CPU
        {F302E6D6-5A95-4D22-8DC2-21BE2CB30275}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {F302E6D6-5A95-4D22-8DC2-21BE2CB30275}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {F302E6D6-5A95-4D22-8DC2-21BE2CB30275}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {F302E6D6-5A95-4D22-8DC2-21BE2CB30275}.Release|Any CPU.Build.0 = Release|Any CPU
        {5777BDEC-4726-4425-85F2-A090524F692D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {5777BDEC-4726-4425-85F2-A090524F692D}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {5777BDEC-4726-4425-85F2-A090524F692D}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {5777BDEC-4726-4425-85F2-A090524F692D}.Release|Any CPU.Build.0 = Release|Any CPU
        {09D05F35-CEA2-48D9-86D0-FB95982BA511}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {09D05F35-CEA2-48D9-86D0-FB95982BA511}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {09D05F35-CEA2-48D9-86D0-FB95982BA511}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {09D05F35-CEA2-48D9-86D0-FB95982BA511}.Release|Any CPU.Build.0 = Release|Any CPU
        {35054AA5-CF40-4F38-9414-C76742C29382}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {35054AA5-CF40-4F38-9414-C76742C29382}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {35054AA5-CF40-4F38-9414-C76742C29382}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {35054AA5-CF40-4F38-9414-C76742C29382}.Release|Any CPU.Build.0 = Release|Any CPU
        {9E4BFF47-52BF-4FD8-9CC7-3763BF19D9E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {9E4BFF47-52BF-4FD8-9CC7-3763BF19D9E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {9E4BFF47-52BF-4FD8-9CC7-3763BF19D9E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {9E4BFF47-52BF-4FD8-9CC7-3763BF19D9E0}.Release|Any CPU.Build.0 = Release|Any CPU
        {A14242DD-DA06-4DC3-8598-1761AA7C76D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {A14242DD-DA06-4DC3-8598-1761AA7C76D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {A14242DD-DA06-4DC3-8598-1761AA7C76D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {A14242DD-DA06-4DC3-8598-1761AA7C76D1}.Release|Any CPU.Build.0 = Release|Any CPU
        {7279A2AE-8D1F-4E66-A73A-01AF7927A336}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {7279A2AE-8D1F-4E66-A73A-01AF7927A336}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {7279A2AE-8D1F-4E66-A73A-01AF7927A336}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {7279A2AE-8D1F-4E66-A73A-01AF7927A336}.Release|Any CPU.Build.0 = Release|Any CPU
        {83F18A31-5983-4587-A0B2-414BF70E50B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {83F18A31-5983-4587-A0B2-414BF70E50B5}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {83F18A31-5983-4587-A0B2-414BF70E50B5}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {83F18A31-5983-4587-A0B2-414BF70E50B5}.Release|Any CPU.Build.0 = Release|Any CPU
        {266D07B7-3648-4F3D-818A-89EDA7D84C58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {266D07B7-3648-4F3D-818A-89EDA7D84C58}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {266D07B7-3648-4F3D-818A-89EDA7D84C58}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {266D07B7-3648-4F3D-818A-89EDA7D84C58}.Release|Any CPU.Build.0 = Release|Any CPU
        {206FDF79-9BF3-433A-B7FF-627287BBD760}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {206FDF79-9BF3-433A-B7FF-627287BBD760}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {206FDF79-9BF3-433A-B7FF-627287BBD760}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {206FDF79-9BF3-433A-B7FF-627287BBD760}.Release|Any CPU.Build.0 = Release|Any CPU
        {8C2CC25B-DE5D-433E-A550-63864C7A716D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {8C2CC25B-DE5D-433E-A550-63864C7A716D}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {8C2CC25B-DE5D-433E-A550-63864C7A716D}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {8C2CC25B-DE5D-433E-A550-63864C7A716D}.Release|Any CPU.Build.0 = Release|Any CPU
        {FFAB2C76-1C9E-4006-95C8-A0B2AA53139D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {FFAB2C76-1C9E-4006-95C8-A0B2AA53139D}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {FFAB2C76-1C9E-4006-95C8-A0B2AA53139D}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {FFAB2C76-1C9E-4006-95C8-A0B2AA53139D}.Release|Any CPU.Build.0 = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
    EndGlobalSection
    GlobalSection(NestedProjects) = preSolution
        {93EFF637-042E-4DD0-A74B-7F0CF998CF96} = {4FF30CF7-DA79-4EDD-9A6E-0B0BEAD72A1A}
        {684035E2-174F-47CE-AA5C-36624C7E26F3} = {4FF30CF7-DA79-4EDD-9A6E-0B0BEAD72A1A}
        {6295C9FB-DAC4-4C07-97C5-C0332ABDD13D} = {A12315CA-9D81-412C-A09B-B23D95CFFE16}
        {D9CF90D0-AFB3-42AA-A2F1-BEE741E0AC0D} = {A12315CA-9D81-412C-A09B-B23D95CFFE16}
        {F302E6D6-5A95-4D22-8DC2-21BE2CB30275} = {93EFF637-042E-4DD0-A74B-7F0CF998CF96}
        {5777BDEC-4726-4425-85F2-A090524F692D} = {93EFF637-042E-4DD0-A74B-7F0CF998CF96}
        {09D05F35-CEA2-48D9-86D0-FB95982BA511} = {684035E2-174F-47CE-AA5C-36624C7E26F3}
        {35054AA5-CF40-4F38-9414-C76742C29382} = {684035E2-174F-47CE-AA5C-36624C7E26F3}
        {9E4BFF47-52BF-4FD8-9CC7-3763BF19D9E0} = {6295C9FB-DAC4-4C07-97C5-C0332ABDD13D}
        {A14242DD-DA06-4DC3-8598-1761AA7C76D1} = {6295C9FB-DAC4-4C07-97C5-C0332ABDD13D}
        {7279A2AE-8D1F-4E66-A73A-01AF7927A336} = {D9CF90D0-AFB3-42AA-A2F1-BEE741E0AC0D}
        {83F18A31-5983-4587-A0B2-414BF70E50B5} = {D9CF90D0-AFB3-42AA-A2F1-BEE741E0AC0D}
        {5CC8AEFF-2F75-4053-9569-73419839875A} = {4FF30CF7-DA79-4EDD-9A6E-0B0BEAD72A1A}
        {9CB2F821-BB23-48E5-88E8-C326477733C0} = {A12315CA-9D81-412C-A09B-B23D95CFFE16}
        {266D07B7-3648-4F3D-818A-89EDA7D84C58} = {5CC8AEFF-2F75-4053-9569-73419839875A}
        {206FDF79-9BF3-433A-B7FF-627287BBD760} = {5CC8AEFF-2F75-4053-9569-73419839875A}
        {8C2CC25B-DE5D-433E-A550-63864C7A716D} = {9CB2F821-BB23-48E5-88E8-C326477733C0}
        {FFAB2C76-1C9E-4006-95C8-A0B2AA53139D} = {9CB2F821-BB23-48E5-88E8-C326477733C0}
    EndGlobalSection
    GlobalSection(ExtensibilityGlobals) = postSolution
        SolutionGuid = {C9A356D5-D4FE-414B-B982-6C97792BE6C6}
    EndGlobalSection
EndGlobal
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/BasicInfo/RouterController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,113 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.DataProtection.KeyManagement;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using Quartz.Util;
using SqlSugar;
using System.ComponentModel;
using System.Reflection;
using WIDESEAWCS_Common;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.BasicInfo;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
namespace WIDESEAWCS_Server.Controllers.BasicInfo
{
    [Route("api/Router")]
    [ApiController]
    public class RouterController : ApiBaseController<IRouterService, Dt_Router>
    {
        private readonly IDeviceInfoRepository _deviceInfoRepository;
        private readonly IDeviceProtocolRepository _deviceProtocolRepository;
        public RouterController(IRouterService service, IDeviceInfoRepository deviceInfoRepository, IDeviceProtocolRepository deviceProtocolRepository) : base(service)
        {
            _deviceInfoRepository = deviceInfoRepository;
            _deviceProtocolRepository = deviceProtocolRepository;
        }
        [HttpPost, Route("QueryRoutes"), AllowAnonymous]
        public List<Dt_Router> QueryRoutes(string startPosi, string endPosi)
        {
            return Service.QueryNextRoutes(startPosi, endPosi);
        }
        [HttpPost, Route("QueryAllPositions"), AllowAnonymous]
        public List<string> QueryAllPositions(string deviceCode)
        {
            return Service.QueryAllPositions(deviceCode);
        }
        [HttpPost, Route("GetAllWholeRouters"), AllowAnonymous]
        public WebResponseContent GetAllWholeRouters()
        {
            WebResponseContent content = new();
            try
            {
                List<dynamic> dynamics = Service.GetAllWholeRouters();
                content = WebResponseContent.Instance.OK(data: dynamics);
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error(ex.Message);
            }
            return content;        }
        [HttpPost, Route("GetBaseRouterInfo"), AllowAnonymous]
        public WebResponseContent GetBaseRouterInfo()
        {
            try
            {
                #region èŽ·å–è·¯ç”±ç±»åž‹
                List<object> routerTypes = new List<object>();
                Type routerType = typeof(RouterInOutType);
                List<int> routerIndexs = Enum.GetValues(typeof(RouterInOutType)).Cast<int>().ToList();
                int routerIndex = 0;
                foreach (var item in routerIndexs)
                {
                    FieldInfo? fieldInfo = routerType.GetField(((RouterInOutType)item).ToString());
                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                    if (description != null)
                    {
                        routerTypes.Add(new { key = item.ToString(), value = description.Description });
                    }
                    else
                    {
                        routerTypes.Add(new { key = item.ToString(), value = item.ToString() });
                    }
                    routerIndex++;
                }
                #endregion
                #region èŽ·å–è®¾å¤‡ç¼–å·
                object deviceCodes = _deviceProtocolRepository.QueryData(x => true).GroupBy(x => x.DeviceChildCode).Select(x => new { key = x.Key, value = x.Key }).ToList();
                object areaInfos = Enum.GetNames(typeof(AreaInfo)).Select(x => new { key = x, value = x }).ToList();
                #endregion
                return WebResponseContent.Instance.OK(data: new { routerTypes, deviceCodes, areaInfos });
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        [HttpPost, Route("AddRouters"), AllowAnonymous]
        public WebResponseContent AddRouters([FromBody] List<RoutersAddDTO> routersAddDTOs, int routerType)
        {
            return Service.AddRouters(routersAddDTOs, routerType);
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceInfoController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Service;
namespace WIDESEAWCS_WCSServer.Controllers.QuartzJob
{
    [Route("api/DeviceInfo")]
    [ApiController]
    public class DeviceInfoController : ApiBaseController<DeviceInfoService, Dt_DeviceInfo>
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
        public DeviceInfoController(DeviceInfoService service, IHttpContextAccessor httpContextAccessor) : base(service)
        {
            _httpContextAccessor = httpContextAccessor;
        }
        [HttpPost, Route("GetDeviceProInfos"), AllowAnonymous]
        public async Task<List<DeviceInfoDTO>> GetDeviceProInfos()
        {
            return await Service.QueryDeviceProInfos();
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceProtocolController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Service;
namespace WIDESEAWCS_Server.Controllers.QuartzJob
{
    [Route("api/DeviceProtocol")]
    [ApiController]
    public class DeviceProtocolController : ApiBaseController<IDeviceProtocolService, Dt_DeviceProtocol>
    {
        public DeviceProtocolController(IDeviceProtocolService service) : base(service)
        {
        }
        [HttpPost, Route("GetImportData"), AllowAnonymous]
        public WebResponseContent GetImportData(List<IFormFile> fileInput)
        {
            return Service.GetImportData(fileInput);
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceProtocolDetailController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Service;
namespace WIDESEAWCS_Server.Controllers.QuartzJob
{
    [Route("api/DeviceProtocolDetail")]
    [ApiController]
    public class DeviceProtocolDetailController : ApiBaseController<IDeviceProtocolDetailService, Dt_DeviceProtocolDetail>
    {
        public DeviceProtocolDetailController(IDeviceProtocolDetailService service) : base(service)
        {
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DispatchInfoController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Service;
namespace WIDESEAWCS_Server.Controllers.QuartzJob
{
    [Route("api/DispatchInfo")]
    [ApiController]
    public class DispatchInfoController : ApiBaseController<IDispatchInfoService, Dt_DispatchInfo>
    {
        public DispatchInfoController(IDispatchInfoService service) : base(service)
        {
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,377 @@
using Autofac.Core;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyModel;
using Newtonsoft.Json;
using System.Reflection;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model.Models;
using System.IO;
using WIDESEAWCS_QuartzJob.DeviceBase;
using WIDESEAWCS_DTO.System;
using System.ComponentModel;
using System.Collections.Generic;
using WIDESEAWCS_Communicator;
using Quartz;
using WIDESEAWCS_QuartzJob;
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core.Caches;
using WIDESEAWCS_QuartzJob.DeviceEnum;
using WIDESEAWCS_Core.Enums;
namespace WIDESEAWCS_WCSServer.Controllers.System
{
    [Route("api/Sys_Dictionary")]
    [ApiController]
    public class Sys_DictionaryController : ApiBaseController<ISys_DictionaryService, Sys_Dictionary>
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
        private readonly ICacheService _cacheService;
        public Sys_DictionaryController(ISys_DictionaryService service, IHttpContextAccessor httpContextAccessor, ICacheService cacheService) : base(service)
        {
            _httpContextAccessor = httpContextAccessor;
            _cacheService = cacheService;
        }
        [HttpPost, Route("GetVueDictionary"), AllowAnonymous]
        public IActionResult GetVueDictionary([FromBody] string[] dicNos)
        {
            List<VueDictionaryDTO> vueDictionaryDTOs = Service.GetVueDictionary(dicNos);
            try
            {
                List<string> selectDicNos = vueDictionaryDTOs.Select(x => x.DicNo).ToList();
                List<string> cacheDicNos = new List<string>();
                foreach (string n in dicNos.Where(x => !selectDicNos.Contains(x)))
                {
                    string? str = _cacheService.Get(n);
                    if (!string.IsNullOrEmpty(str))
                    {
                        VueDictionaryDTO? vueDictionary = JsonConvert.DeserializeObject<VueDictionaryDTO>(str);
                        if (vueDictionary != null)
                        {
                            vueDictionaryDTOs.Add(vueDictionary);
                            cacheDicNos.Add(n);
                        }
                    }
                }
                List<string> dicList = dicNos.ToList();
                List<string> otherDicNos = dicNos.Where(x => !cacheDicNos.Contains(x) && !selectDicNos.Contains(x)).ToList();
                if (otherDicNos.Count() > 0)
                {
                    string str = AppSettings.Configuration["dics"];
                    if (!string.IsNullOrEmpty(str))
                    {
                        List<string> cusDics = new List<string>();
                        List<string> dics = str.Split(",").ToList();
                        foreach (var item in otherDicNos)
                        {
                            if (dics.Contains(item))
                            {
                                cusDics.Add(item);
                            }
                        }
                        foreach (var item in cusDics)
                        {
                            VueDictionaryDTO? vueDictionaryDTO = GetVueDictionary(item.Trim());
                            if (vueDictionaryDTO != null)
                            {
                                vueDictionaryDTOs.Add(vueDictionaryDTO);
                                if (!_cacheService.Exists(item))
                                {
                                    _cacheService.Add(item, vueDictionaryDTO.Serialize());
                                }
                            }
                        }
                    }
                }
            }
            catch
            {
            }
            return Json(vueDictionaryDTOs);
        }
        private VueDictionaryDTO? GetVueDictionary(string key)
        {
            VueDictionaryDTO? result = null;
            try
            {
                switch (key)
                {
                    case "deviceType":
                        {
                            Type type = typeof(IDevice);
                            var basePath = AppContext.BaseDirectory;
                            List<Type> types = type.Assembly.GetTypes().Where(x => type.IsAssignableFrom(x) && !x.IsAbstract && !x.IsInterface).ToList();
                            List<object> data = new List<object>();
                            foreach (var deviceType in types)
                            {
                                DescriptionAttribute? description = deviceType.GetCustomAttribute<DescriptionAttribute>();
                                if (description != null)
                                {
                                    data.Add(new { key = deviceType.Name, value = description.Description });
                                }
                                else
                                {
                                    data.Add(new { key = deviceType.Name, value = deviceType.Name });
                                }
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "jobAssembly":
                        {
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = new List<object>() { new { key = "WIDESEAWCS_Tasks", value = "WIDESEAWCS_Tasks" } } };
                        }
                        break;
                    case "jobClassName":
                        {
                            Type type = typeof(IJob);
                            var basePath = AppContext.BaseDirectory;
                            string path = Path.Combine(basePath, $"WIDESEAWCS_Tasks");
                            Assembly assembly = Assembly.LoadFrom(path);
                            List<Type> types = assembly.GetTypes().Where(x => type.IsAssignableFrom(x) && !x.IsAbstract && !x.IsInterface).ToList();
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = types.Select(x => new { key = x.Name, value = x.Name }) };
                        }
                        break;
                    case "deviceStatus":
                        {
                            List<object> data = new List<object>();
                            Type type = typeof(DeviceStatusEnum);
                            List<int> enums = Enum.GetValues(type).Cast<int>().ToList();
                            int index = 0;
                            foreach (var item in enums)
                            {
                                FieldInfo? fieldInfo = type.GetField(((DeviceStatusEnum)item).ToString());
                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                if (description != null)
                                {
                                    data.Add(new { key = item.ToString(), value = description.Description });
                                }
                                else
                                {
                                    data.Add(new { key = item.ToString(), value = item.ToString() });
                                }
                                index++;
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "taskType":
                        {
                            List<object> data = new List<object>();
                            #region TaskInboundTypeEnum
                            {
                                Type type = typeof(TaskInboundTypeEnum);
                                List<int> enums = Enum.GetValues(typeof(TaskInboundTypeEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(TaskInboundTypeEnum).GetField(((TaskInboundTypeEnum)item).ToString());
                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                    if (description != null)
                                    {
                                        data.Add(new { key = item.ToString(), value = description.Description });
                                    }
                                    else
                                    {
                                        data.Add(new { key = item.ToString(), value = item.ToString() });
                                    }
                                    index++;
                                }
                            }
                            #endregion
                            #region TaskOutboundTypeEnum
                            {
                                Type type = typeof(TaskOutboundTypeEnum);
                                List<int> enums = Enum.GetValues(typeof(TaskOutboundTypeEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(TaskOutboundTypeEnum).GetField(((TaskOutboundTypeEnum)item).ToString());
                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                    if (description != null)
                                    {
                                        data.Add(new { key = item.ToString(), value = description.Description });
                                    }
                                    else
                                    {
                                        data.Add(new { key = item.ToString(), value = item.ToString() });
                                    }
                                    index++;
                                }
                            }
                            #endregion
                            #region TaskRelocationTypeEnum
                            {
                                Type type = typeof(TaskRelocationTypeEnum);
                                List<int> enums = Enum.GetValues(typeof(TaskRelocationTypeEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(TaskRelocationTypeEnum).GetField(((TaskRelocationTypeEnum)item).ToString());
                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                    if (description != null)
                                    {
                                        data.Add(new { key = item.ToString(), value = description.Description });
                                    }
                                    else
                                    {
                                        data.Add(new { key = item.ToString(), value = item.ToString() });
                                    }
                                    index++;
                                }
                            }
                            #endregion
                            #region TaskOtherTypeEnum
                            {
                                Type type = typeof(TaskOtherTypeEnum);
                                List<int> enums = Enum.GetValues(typeof(TaskOtherTypeEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(TaskOtherTypeEnum).GetField(((TaskOtherTypeEnum)item).ToString());
                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                    if (description != null)
                                    {
                                        data.Add(new { key = item.ToString(), value = description.Description });
                                    }
                                    else
                                    {
                                        data.Add(new { key = item.ToString(), value = item.ToString() });
                                    }
                                    index++;
                                }
                            }
                            #endregion
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "taskState":
                        {
                            List<object> data = new List<object>();
                            #region TaskInStatusEnum
                            {
                                Type type = typeof(TaskInStatusEnum);
                                List<int> enums = Enum.GetValues(typeof(TaskInStatusEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(TaskInStatusEnum).GetField(((TaskInStatusEnum)item).ToString());
                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                    if (description != null)
                                    {
                                        data.Add(new { key = item.ToString(), value = description.Description });
                                    }
                                    else
                                    {
                                        data.Add(new { key = item.ToString(), value = item.ToString() });
                                    }
                                    index++;
                                }
                            }
                            #endregion
                            #region TaskOutStatusEnum
                            {
                                Type type = typeof(TaskOutStatusEnum);
                                List<int> enums = Enum.GetValues(typeof(TaskOutStatusEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(TaskOutStatusEnum).GetField(((TaskOutStatusEnum)item).ToString());
                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                    if (description != null)
                                    {
                                        data.Add(new { key = item.ToString(), value = description.Description });
                                    }
                                    else
                                    {
                                        data.Add(new { key = item.ToString(), value = item.ToString() });
                                    }
                                    index++;
                                }
                            }
                            #endregion
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "devicePlcType":
                        {
                            Type type = typeof(BaseCommunicator);
                            var basePath = AppContext.BaseDirectory;
                            string path = Path.Combine(basePath, $"WIDESEAWCS_Communicator.dll");
                            Assembly assembly = Assembly.LoadFrom(path);
                            List<Type> types = assembly.GetTypes().Where(x => type.IsAssignableFrom(x) && !x.IsAbstract && !x.IsInterface).ToList();
                            List<object> data = new List<object>();
                            foreach (var deviceType in types)
                            {
                                DescriptionAttribute? description = deviceType.GetCustomAttribute<DescriptionAttribute>();
                                if (description != null)
                                {
                                    data.Add(new { key = deviceType.Name, value = description.Description });
                                }
                                else
                                {
                                    data.Add(new { key = deviceType.Name, value = deviceType.Name });
                                }
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "inOutType":
                        {
                            List<object> data = new List<object>();
                            Type type = typeof(RouterInOutType);
                            List<int> enums = Enum.GetValues(typeof(RouterInOutType)).Cast<int>().ToList();
                            int index = 0;
                            foreach (var item in enums)
                            {
                                FieldInfo? fieldInfo = typeof(RouterInOutType).GetField(((RouterInOutType)item).ToString());
                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                if (description != null)
                                {
                                    data.Add(new { key = item.ToString(), value = description.Description });
                                }
                                else
                                {
                                    data.Add(new { key = item.ToString(), value = item.ToString() });
                                }
                                index++;
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                }
                return result;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryListController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_Server.Controllers.System
{
    [Route("api/Sys_DictionaryList")]
    [ApiController]
    public class Sys_DictionaryListController : ApiBaseController<ISys_DictionaryListService, Sys_DictionaryList>
    {
        public Sys_DictionaryListController(ISys_DictionaryListService service) : base(service)
        {
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_LogController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_Server.Controllers.System
{
    [Route("api/[controller]")]
    [ApiController]
    public class Sys_LogController : ApiBaseController<ISys_LogService, Sys_Log>
    {
        public Sys_LogController(ISys_LogService service) : base(service)
        {
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_MenuController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_WCSServer.Controllers
{
    [Route("api/Sys_Menu")]
    [ApiController]
    public class Sys_MenuController : ApiBaseController<ISys_MenuService, Sys_Menu>
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
        public Sys_MenuController(ISys_MenuService menuService, IHttpContextAccessor httpContextAccessor) : base(menuService)
        {
            _httpContextAccessor = httpContextAccessor;
        }
        [HttpGet, HttpPost, Route("getTreeMenu")]
        public IActionResult GetTreeMenu()
        {
            return Json(Service.GetCurrentMenuActionList());
        }
        [HttpPost, Route("getMenu")]
        public IActionResult GetMenu()
        {
            return Json(Service.GetMenu());
        }
        [HttpPost, Route("getTreeItem")]
        public IActionResult GetTreeItem(int menuId)
        {
            return Json(Service.GetTreeItem(menuId));
        }
        [HttpPost, Route("save")]
        public ActionResult Save([FromBody] Sys_Menu menu)
        {
            if (App.User.UserId == 1)
            {
                return Json(Service.Save(menu));
            }
            else
            {
                return Json(WebResponseContent.Instance.Error("仅限超级管理员修改数据"));
            }
        }
        [HttpPost, Route("delMenu")]
        public WebResponseContent DelMenu(int menuId)
        {
            return Service.DelMenu(menuId);
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_RoleAuthController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_Server.Controllers.System
{
    [Route("api/Sys_RoleAuth")]
    [ApiController]
    public class Sys_RoleAuthController : ApiBaseController<ISys_RoleAuthService, Sys_RoleAuth>
    {
        public Sys_RoleAuthController(ISys_RoleAuthService service) : base(service)
        {
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_RoleController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Routing;
using WIDESEA_DTO.System;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_Model.Models.System;
namespace WIDESEAWCS_WCSServer.Controllers.System
{
    [Route("api/Sys_Role")]
    [ApiController]
    public class Sys_RoleController : ApiBaseController<ISys_RoleService, Sys_Role>
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
        public Sys_RoleController(ISys_RoleService service, IHttpContextAccessor httpContextAccessor) : base(service)
        {
            _httpContextAccessor = httpContextAccessor;
        }
        [HttpPost, Route("getUserChildRoles")]
        public IActionResult GetUserChildRoles()
        {
            int roleId = App.User.RoleId;
            var data = Service.GetAllChildren(roleId);
            if (App.User.IsSuperAdmin)
            {
                return Json(WebResponseContent.Instance.OK(null, data));
            }
            //不是超级管理,将自己的角色查出来,在树形菜单上作为根节点
            var self = data.Where(x => x.Id == roleId)
                 .Select(s => new RoleNodes()
                 {
                     Id = s.Id,
                     ParentId = 0,//将自己的角色作为root节点
                     RoleName = s.RoleName
                 }).ToList();
            data.AddRange(self);
            return Json(WebResponseContent.Instance.OK(null, data));
        }
        [HttpPost, Route("getCurrentTreePermission")]
        public IActionResult GetCurrentTreePermission()
        {
            return Json(Service.GetCurrentTreePermission());
        }
        [HttpPost, Route("getUserTreePermission")]
        public IActionResult GetUserTreePermission(int roleId)
        {
            return Json(Service.GetUserTreePermission(roleId));
        }
        [HttpPost, Route("savePermission")]
        public IActionResult SavePermission([FromBody] List<UserPermissionDTO> userPermissions, int roleId)
        {
            return Json(Service.SavePermission(userPermissions, roleId));
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_TenantController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_Core.Const;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.HttpContextUser;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_WCSServer.Controllers
{
    [Route("api/tenant")]
    [ApiController]
    public class Sys_TenantController : ApiBaseController<ISys_TenantService, Sys_Tenant>
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
        public Sys_TenantController(ISys_TenantService tenantService, IHttpContextAccessor httpContextAccessor) : base(tenantService)
        {
            _httpContextAccessor = httpContextAccessor;
        }
        [HttpGet, Route("initTenantInfo"), AllowAnonymous]
        public WebResponseContent InitTenantInfo(string tenantName, int tenantType)
        {
            return Service.InitTenantInfo(tenantName, tenantType);
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_UserController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Memory;
using StackExchange.Profiling;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Authorization;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_Core.Const;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.HttpContextUser;
using WIDESEAWCS_Core.Utilities;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_WCSServer.Controllers
{
    [Route("api/User")]
    [ApiController]
    public class Sys_UserController : ApiBaseController<ISys_UserService, Sys_User>
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
        public Sys_UserController(ISys_UserService userService, IHttpContextAccessor httpContextAccessor) : base(userService)
        {
            _httpContextAccessor = httpContextAccessor;
        }
        [HttpPost, Route("login"), AllowAnonymous]
        public IActionResult Login([FromBody] LoginInfo loginInfo)
        {
            return Json(Service.Login(loginInfo));
        }
        [HttpPost, Route("getCurrentUserInfo")]
        public WebResponseContent GetCurrentUser()
        {
            return Service.GetCurrentUserInfo();
        }
        [HttpPost, Route("modifyPwd")]
        public IActionResult ModifyPwd(string oldPwd, string newPwd)
        {
            return Json(Service.ModifyPwd(oldPwd, newPwd));
        }
        [HttpGet, Route("getVierificationCode"), AllowAnonymous]
        public IActionResult GetVierificationCode()
        {
            //var html = MiniProfiler.Current.RenderIncludes(_httpContextAccessor.HttpContext);
            string code = "1234" /*VierificationCode.RandomText()*/;
            var data = new
            {
                img = VierificationCode.CreateBase64Imgage(code),
                uuid = Guid.NewGuid()
            };
            return Json(data);
        }
        [HttpGet, Route("SerializeJwt"), AllowAnonymous]
        public WebResponseContent SerializeJwt(string code)
        {
            return WebResponseContent.Instance.OK(data: JwtHelper.SerializeJwt(code));
        }
        [HttpPost, Route("replaceToken")]
        public WebResponseContent ReplaceToken()
        {
            WebResponseContent responseContent = new WebResponseContent();
            try
            {
                string token = App.User.GetToken();
                if (string.IsNullOrEmpty(token))
                {
                    return responseContent = WebResponseContent.Instance.Error("token无效,请重新登录!");
                }
                TokenModelJwt tokenModelJwt = new TokenModelJwt()
                {
                    RoleId = App.User.RoleId,
                    TenantId = App.User.TenantId,
                    UserId = App.User.UserId,
                    UserName = App.User.UserName
                };
                string newToken = JwtHelper.IssueJwt(tokenModelJwt);
                return responseContent = WebResponseContent.Instance.OK(data: newToken);
            }
            catch (Exception ex)
            {
                return responseContent.Error(ex.Message);
            }
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_WCSServer.Controllers.Task
{
    [Route("api/Task")]
    [ApiController]
    public class TaskController : ApiBaseController<ITaskService, Dt_Task>
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
        public TaskController(ITaskService service, IHttpContextAccessor httpContextAccessor) : base(service)
        {
            _httpContextAccessor = httpContextAccessor;
        }
        [HttpPost, Route("ReceiveTask"), AllowAnonymous]
        public WebResponseContent ReceiveWMSTask([FromBody] List<WMSTaskDTO> taskDTOs)
        {
            return Service.ReceiveWMSTask(taskDTOs);
        }
        [HttpPost, HttpGet, Route("UpdateTaskExceptionMessage")]
        public WebResponseContent UpdateTaskExceptionMessage(int taskNum, string message)
        {
            return Service.UpdateTaskExceptionMessage(taskNum, message);
        }
        [HttpPost, HttpGet, Route("UpdateTaskStatusToNext")]
        public WebResponseContent UpdateTaskStatusToNext(int taskNum)
        {
            return Service.UpdateTaskStatusToNext(taskNum);
        }
        [HttpPost, HttpGet, Route("TaskStatusRecovery")]
        public WebResponseContent TaskStatusRecovery(int taskNum)
        {
            return Service.TaskStatusRecovery(taskNum);
        }
        [HttpPost, HttpGet, Route("RollbackTaskStatusToLast")]
        public WebResponseContent RollbackTaskStatusToLast(int taskNum)
        {
            return Service.RollbackTaskStatusToLast(taskNum);
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskExecuteDetailController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_Server.Controllers.Task
{
    [Route("api/TaskExecuteDetail")]
    [ApiController]
    public class TaskExecuteDetailController : ApiBaseController<ITaskExecuteDetailService, Dt_TaskExecuteDetail>
    {
        public TaskExecuteDetailController(ITaskExecuteDetailService service) : base(service)
        {
        }
        [HttpPost, HttpGet, Route("GetDetailInfo")]
        public WebResponseContent GetDetailInfo(int taskNum)
        {
            return Service.GetDetailInfo(taskNum);
        }
        [HttpPost, HttpGet, Route("GetDetailDatas")]
        public WebResponseContent GetDetailDatas(int taskNum)
        {
            return Service.GetDetailDatas(taskNum);
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Filter/AutoMapperConfig.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using AutoMapper;
namespace WIDESEAWCS_WCSServer.Filter
{
    /// <summary>
    /// é™æ€å…¨å±€ AutoMapper é…ç½®æ–‡ä»¶
    /// </summary>
    public class AutoMapperConfig
    {
        public static MapperConfiguration RegisterMappings()
        {
            return new MapperConfiguration(cfg =>
            {
                cfg.AddProfile(new CustomProfile());
            });
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Filter/AutoMapperSetup.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
namespace WIDESEAWCS_WCSServer.Filter
{
    /// <summary>
    /// Automapper å¯åŠ¨æœåŠ¡
    /// </summary>
    public static class AutoMapperSetup
    {
        public static void AddAutoMapperSetup(this IServiceCollection services)
        {
            if (services == null) throw new ArgumentNullException(nameof(services));
            services.AddAutoMapper(typeof(AutoMapperConfig));
            AutoMapperConfig.RegisterMappings();
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Filter/AutofacPropertityModuleReg.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using Autofac;
using Microsoft.AspNetCore.Mvc;
namespace WIDESEAWCS_WCSServer.Filter
{
    public class AutofacPropertityModuleReg : Autofac.Module
    {
        protected override void Load(ContainerBuilder builder)
        {
            var controllerBaseType = typeof(ControllerBase);
            builder.RegisterAssemblyTypes(typeof(Program).Assembly)
                .Where(t => controllerBaseType.IsAssignableFrom(t) && t != controllerBaseType)
                .PropertiesAutowired();
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Filter/CustomAuthorizeFilter.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc;
namespace WIDESEAWCS_Server.Filter
{
    public class CustomAuthorizeFilter : IAuthorizationFilter
    {
        public void OnAuthorization(AuthorizationFilterContext context)
        {
            // ä½ çš„自定义授权逻辑
            // ä¾‹å¦‚,‌检查用户是否已登录,‌或者他们是否有特定的角色或权限
            if (!context.HttpContext.User.Identity.IsAuthenticated)
            {
                // ç”¨æˆ·æœªç™»å½•,‌重定向到登录页面或返回401状态码
                context.Result = new ChallengeResult();
            }
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Filter/CustomProfile.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
using AutoMapper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_Tasks.ConveyorLineJob;
namespace WIDESEAWCS_WCSServer.Filter
{
    public class CustomProfile : Profile
    {
        /// <summary>
        /// é…ç½®æž„造函数,用来创建关系映射
        /// </summary>
        public CustomProfile()
        {
            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));
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,140 @@
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.Extensions;
using WIDESEAWCS_Core.Middlewares;
using System.Reflection;
using WIDESEAWCS_Core.Filter;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using Newtonsoft.Json;
using System.Text;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseServices;
using Autofac.Extensions.DependencyInjection;
using Autofac;
using WIDESEAWCS_WCSServer.Filter;
using WIDESEAWCS_Core.Authorization;
using WIDESEAWCS_Core.Core;
using WIDESEAWCS_QuartzJob.Seed;
using Autofac.Core;
using WIDESEAWCS_QuartzJob.QuartzExtensions;
using Microsoft.AspNetCore.Builder;
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()).ConfigureContainer<ContainerBuilder>(builder =>
{
    builder.RegisterModule(new AutofacModuleRegister());//带有接口层的服务注入
    builder.RegisterModule(new QuartzJobAutofacModuleRegister());
    builder.RegisterModule<AutofacPropertityModuleReg>();//
}).ConfigureAppConfiguration((hostingContext, config) =>
{
    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.AddDbSetup();//Db å¯åŠ¨æœåŠ¡
builder.Services.AddScoped<QuartzJobCreateDataTabel>();
builder.Services.AddHostedService<QuartzJobDataTableHostedService>();
builder.Services.AddAutoMapperSetup();
builder.Services.AddCorsSetup();
builder.Services.AddMiniProfilerSetup();
builder.Services.AddSwaggerSetup();
builder.Services.AddJobSetup();//任务调度 å¯åŠ¨æœåŠ¡
builder.Services.AddHttpContextSetup();
builder.Services.AddHostedService<QuartzJobHostedService>();
builder.Services.AddMvc(options =>
{
    options.Filters.Add(typeof(ApiAuthorizeFilter));
    options.Filters.Add(typeof(ActionExecuteFilter));
});
builder.Services.AddAuthorizationSetup();
builder.Services.AddIpPolicyRateLimitSetup(builder.Configuration);//IPLimit限流 å¯åŠ¨æœåŠ¡
builder.Services.AddScoped<UseServiceDIAttribute>();
builder.Services.AddSession();
builder.Services.AddHttpClient();
builder.Services.AddControllers(o =>
{
    o.Filters.Add(typeof(GlobalExceptionsFilter));//全局异常
})
.AddNewtonsoftJson(options =>
{
    options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
    //options.SerializerSettings.ContractResolver = new DefaultContractResolver();
    options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
    options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
    options.SerializerSettings.NullValueHandling = NullValueHandling.Include;
    options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
    options.SerializerSettings.Converters.Add(new StringEnumConverter());
});
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
var app = builder.Build();
// 3、配置中间件
app.UseMiniProfiler();//性能分析器
app.ConfigureApplication();//配置文件
app.UseApplicationSetup();//启动配置
app.UseSession();
if (app.Environment.IsDevelopment())
{
    //todo
    //app.UseSwaggerAuthorized();
    app.UseSwaggerMiddle(() => Assembly.GetExecutingAssembly().GetManifestResourceStream("WIDESEAWCS_Server.index.html"));
}//判断是否需要打开swagger
app.UseIpLimitMiddle();
app.UseApiLogMiddleware();
//todo
//app.UseRecordAccessLogsMiddle();
app.UseCors(AppSettings.Get(new string[] { "Cors", "PolicyName" }));
DefaultFilesOptions defaultFilesOptions = new DefaultFilesOptions();
defaultFilesOptions.DefaultFileNames.Clear();
defaultFilesOptions.DefaultFileNames.Add("index.html");
app.UseDefaultFiles(defaultFilesOptions);
app.UseMiddleware<HttpRequestMiddleware>();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseStatusCodePages();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/PublishProfiles/FolderProfile.pubxml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
  <PropertyGroup>
    <DeleteExistingFiles>false</DeleteExistingFiles>
    <ExcludeApp_Data>false</ExcludeApp_Data>
    <LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <PublishProvider>FileSystem</PublishProvider>
    <PublishUrl>bin\Release\net6.0\publish\</PublishUrl>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <_TargetId>Folder</_TargetId>
  </PropertyGroup>
</Project>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/launchSettings.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
{
  "$schema": "https://json.schemastore.org/launchsettings.json",
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:27002",
      "sslPort": 0
    }
  },
  "profiles": {
    "WIDESEAWCS_Server": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "launchUrl": "swagger",
      "applicationUrl": "http://localhost:5208",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "swagger",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <Nullable>enable</Nullable>
        <ImplicitUsings>enable</ImplicitUsings>
        <GenerateDocumentationFile>False</GenerateDocumentationFile>
    </PropertyGroup>
    <ItemGroup>
        <Content Remove="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Dt_DeviceInfo.tsv" />
        <Content Remove="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Dt_DeviceProtocol.tsv" />
        <Content Remove="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Dt_DeviceProtocolDetail.tsv" />
        <Content Remove="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Dt_DispatchInfo.tsv" />
        <Content Remove="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Dt_Router.tsv" />
        <Content Remove="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Dt_Task.tsv" />
        <Content Remove="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Dt_TaskExecuteDetail.tsv" />
        <Content Remove="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_Dictionary.tsv" />
        <Content Remove="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_DictionaryList.tsv" />
        <Content Remove="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_Menu.tsv" />
        <Content Remove="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_Role.tsv" />
        <Content Remove="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_RoleAuth.tsv" />
        <Content Remove="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_User.tsv" />
    </ItemGroup>
    <ItemGroup>
        <None Remove="index.html" />
    </ItemGroup>
    <ItemGroup>
        <EmbeddedResource Include="index.html">
            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </EmbeddedResource>
        <EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Dt_DeviceInfo.tsv">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </EmbeddedResource>
        <EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Dt_DeviceProtocol.tsv">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </EmbeddedResource>
        <EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Dt_DeviceProtocolDetail.tsv">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </EmbeddedResource>
        <EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Dt_DispatchInfo.tsv">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </EmbeddedResource>
        <EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Dt_Router.tsv">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </EmbeddedResource>
        <EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Dt_Task.tsv">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </EmbeddedResource>
        <EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Dt_TaskExecuteDetail.tsv">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </EmbeddedResource>
        <EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_Dictionary.tsv">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </EmbeddedResource>
        <EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_DictionaryList.tsv">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </EmbeddedResource>
        <EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_Menu.tsv">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </EmbeddedResource>
        <EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_Role.tsv">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </EmbeddedResource>
        <EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_RoleAuth.tsv">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </EmbeddedResource>
        <EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_User.tsv">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </EmbeddedResource>
    </ItemGroup>
    <ItemGroup>
        <PackageReference Include="Swashbuckle.AspNetCore" Version="6.9.0" />
    </ItemGroup>
    <ItemGroup>
        <ProjectReference Include="..\WIDESEAWCS_SystemServices\WIDESEAWCS_SystemServices.csproj" />
        <ProjectReference Include="..\WIDESEAWCs_TaskInfoService\WIDESEAWCs_TaskInfoService.csproj" />
        <ProjectReference Include="..\WIDESEAWCS_Tasks\WIDESEAWCS_Tasks.csproj" />
    </ItemGroup>
    <ItemGroup>
        <Content Update="nlog.config">
            <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </Content>
        <Content Update="wwwroot\swg-login.html">
          <CopyToOutputDirectory>Never</CopyToOutputDirectory>
        </Content>
        <Content Update="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_Tenant.tsv">
          <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        </Content>
    </ItemGroup>
</Project>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.Development.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
{
  "urls": "http://*:9291", //web服务端口,如果用IIS部署,把这个去掉
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "dics": "deviceType,devicePlcType,jobAssembly,jobClassName,deviceStatus,taskType,taskState,inOutType",
  "AllowedHosts": "*",
  "ConnectionStringsEncryption": false,
  "MainDB": "DB_WIDESEA", //当前项目的主库,所对应的连接字符串的Enabled必须为true
  //连接字符串
  //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=",
  "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWCS_TEST;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //跨域
  "Cors": {
    "PolicyName": "CorsIpAccess", //策略名称
    "EnableAllIPs": true, //当为true时,开放所有IP均可访问。
    // æ”¯æŒå¤šä¸ªåŸŸåç«¯å£ï¼Œæ³¨æ„ç«¯å£å·åŽä¸è¦å¸¦/斜杆:比如localhost:8000/,是错的
    // æ³¨æ„ï¼Œhttp://127.0.0.1:1818 å’Œ http://localhost:1818 æ˜¯ä¸ä¸€æ ·çš„
    "IPs": "http://127.0.0.1:8080,http://localhost:8080"
  },
  "ApiName": "WIDESEA",
  "ExpMinutes": 120,
  "QuartzJobAutoStart": true
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/index.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,124 @@

<!--1、版本号要与nuget包一致;2、id不能为空-->
<script async="async" id="mini-profiler" src="/profiler/includes.min.js?v=4.3.8+1120572909" data-version="4.3.8+1120572909" data-path="/profiler/" data-current-id="0d7e468e-0bb5-4c81-90fc-91fd1543640a" data-ids="0d7e468e-0bb5-4c81-90fc-91fd1543640a" data-position="Left" data-scheme="Light" data-authorized="true" data-children="true" data-max-traces="15" data-toggle-shortcut="Alt+P" data-trivial-milliseconds="2.0" data-ignored-duplicate-execute-types="Open,OpenAsync,Close,CloseAsync"></script>
<!-- HTML for static distribution bundle build -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <!--极速模式-->
    <meta name="renderer" content="webkit" />
    <meta name="force-rendering" content="webkit" />
    <title>%(DocumentTitle)</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" type="text/css" href="./swagger-ui.css">
    <link rel="icon" type="image/png" href="./logo/favicon-32x32.png" sizes="32x32" />
    <script src="js/jquery-3.3.1.min.js"></script>
    <style>
        html {
            box-sizing: border-box;
            overflow-y: scroll;
        }
        *,
        *:before,
        *:after {
            box-sizing: inherit;
        }
        body {
            margin: 0;
            background: #fafafa;
        }
        .qqgroup {
            position: absolute;
            top: 67px;
            right: 10px;
        }
        .info {
            float: left;
        }
        .download-contents {
            display: none;
        }
    </style>
    %(HeadContent)
</head>
<body>
    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="position:absolute;width:0;height:0">
        <defs>
            <symbol viewBox="0 0 20 20" id="unlocked">
                <path d="M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V6h2v-.801C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8z"></path>
            </symbol>
            <symbol viewBox="0 0 20 20" id="locked">
                <path d="M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8zM12 8H8V5.199C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8z" />
            </symbol>
            <symbol viewBox="0 0 20 20" id="close">
                <path d="M14.348 14.849c-.469.469-1.229.469-1.697 0L10 11.819l-2.651 3.029c-.469.469-1.229.469-1.697 0-.469-.469-.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-.469-.469-.469-1.228 0-1.697.469-.469 1.228-.469 1.697 0L10 8.183l2.651-3.031c.469-.469 1.228-.469 1.697 0 .469.469.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c.469.469.469 1.229 0 1.698z" />
            </symbol>
            <symbol viewBox="0 0 20 20" id="large-arrow">
                <path d="M13.25 10L6.109 2.58c-.268-.27-.268-.707 0-.979.268-.27.701-.27.969 0l7.83 7.908c.268.271.268.709 0 .979l-7.83 7.908c-.268.271-.701.27-.969 0-.268-.269-.268-.707 0-.979L13.25 10z" />
            </symbol>
            <symbol viewBox="0 0 20 20" id="large-arrow-down">
                <path d="M17.418 6.109c.272-.268.709-.268.979 0s.271.701 0 .969l-7.908 7.83c-.27.268-.707.268-.979 0l-7.908-7.83c-.27-.268-.27-.701 0-.969.271-.268.709-.268.979 0L10 13.25l7.418-7.141z" />
            </symbol>
            <symbol viewBox="0 0 24 24" id="jump-to">
                <path d="M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.41L5.83 13H21V7z" />
            </symbol>
            <symbol viewBox="0 0 24 24" id="expand">
                <path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z" />
            </symbol>
        </defs>
    </svg>
    <div id="swagger-ui"></div>
    <div id="footer" style="text-align: center;margin-bottom: 10px;">
        Copyright Â© 2024-2030 WIDESEA.Core
        <br><span id="poweredby">Powered by .NET 6.0.28</span>
    </div>
    <!-- Workaround for https://github.com/swagger-api/swagger-editor/issues/1371 -->
    <script>
        if (window.navigator.userAgent.indexOf("Edge") > -1) {
            console.log("Removing native Edge fetch in favor of swagger-ui's polyfill")
            window.fetch = undefined;
        }
    </script>
    <script src="./swagger-ui-bundle.js"></script>
    <script src="./swagger-ui-standalone-preset.js"></script>
    <script>
        var int = null;
        window.onload = function () {
            var configObject = JSON.parse('%(ConfigObject)');
            var oauthConfigObject = JSON.parse('%(OAuthConfigObject)');
            // Apply mandatory parameters
            configObject.dom_id = "#swagger-ui";
            configObject.presets = [SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset];
            configObject.layout = "StandaloneLayout";
            // If oauth2RedirectUrl isn't specified, use the built-in default
            if (!configObject.hasOwnProperty("oauth2RedirectUrl"))
                configObject.oauth2RedirectUrl = window.location.href.replace("index.html", "oauth2-redirect.html");
            // Build a system
            const ui = SwaggerUIBundle(configObject);
            // Apply OAuth config
            ui.initOAuth(oauthConfigObject);
            $(".link img").attr("src", "./logo/favicon-32x32.png");
            $('#swagger-ui').after("<div class='qqgroup'><img src='https://img.neters.club/doc/wechatgongzhonghao.png' alt='QQ二维码' style='width: 150px;'><div style=\"color: #4990e2;\"><a href=\"../allservices\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"link\">1、查看所有依赖注册的服务</a><br><a href=\"../ui\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"link\">2、查看前端配套页面</a></div></div><div style='clear: both;'></div>");
        }
    </script>
</body>
</html>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_DeviceInfo.tsv
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
[
  {
    "Id": 1,
    "DeviceCode": "SC01",
    "DeviceName": "1号堆垛机",
    "DeviceType": "CommonStackerCrane",
    "DeviceStatus": "1",
    "DeviceIp": "127.0.0.1",
    "DevicePort": 102,
    "DevicePlcType": "SiemensS7",
    "DeviceRemark": "1",
    "ProtocolList": null,
    "Creater": "1",
    "CreateDate": "2024-08-23T11:32:25.507",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 3,
    "DeviceCode": "1002",
    "DeviceName": "输送线",
    "DeviceType": "CommonConveyorLine",
    "DeviceStatus": "1",
    "DeviceIp": "127.0.0.1",
    "DevicePort": 103,
    "DevicePlcType": "SiemensS7",
    "DeviceRemark": "1",
    "ProtocolList": null,
    "Creater": "1",
    "CreateDate": "2024-08-23T11:32:25.507",
    "Modifier": null,
    "ModifyDate": null
  }
]
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_DeviceProtocol.tsv
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2977 @@
[
  {
    "Id": 1,
    "DeviceId": 1,
    "DeviceChildCode": "SC01",
    "DeviceProDataBlock": "DB106",
    "DeviceProOffset": 2.0,
    "DeviceProDataType": "byte",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "StackerCraneStatus",
    "DeviceProParamType": "StackerCraneStatus",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 2,
    "DeviceId": 1,
    "DeviceChildCode": "SC01",
    "DeviceProDataBlock": "DB106",
    "DeviceProOffset": 3.0,
    "DeviceProDataType": "byte",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "StackerCraneAutoStatus",
    "DeviceProParamType": "StackerCraneAutoStatus",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 3,
    "DeviceId": 1,
    "DeviceChildCode": "SC01",
    "DeviceProDataBlock": "DB106",
    "DeviceProOffset": 18.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "CurrentTaskNum",
    "DeviceProParamType": "CurrentTaskNum",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 4,
    "DeviceId": 1,
    "DeviceChildCode": "SC01",
    "DeviceProDataBlock": "DB106",
    "DeviceProOffset": 22.0,
    "DeviceProDataType": "byte",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "StackerCraneWorkStatus",
    "DeviceProParamType": "StackerCraneWorkStatus",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 5,
    "DeviceId": 1,
    "DeviceChildCode": "SC01",
    "DeviceProDataBlock": "DB105",
    "DeviceProOffset": 2.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "TaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 6,
    "DeviceId": 1,
    "DeviceChildCode": "SC01",
    "DeviceProDataBlock": "DB105",
    "DeviceProOffset": 6.0,
    "DeviceProDataType": "int",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WorkType",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 7,
    "DeviceId": 1,
    "DeviceChildCode": "SC01",
    "DeviceProDataBlock": "DB105",
    "DeviceProOffset": 8.0,
    "DeviceProDataType": "int",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "TrayType",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 8,
    "DeviceId": 1,
    "DeviceChildCode": "SC01",
    "DeviceProDataBlock": "DB105",
    "DeviceProOffset": 10.0,
    "DeviceProDataType": "int",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "StartRow",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 9,
    "DeviceId": 1,
    "DeviceChildCode": "SC01",
    "DeviceProDataBlock": "DB105",
    "DeviceProOffset": 12.0,
    "DeviceProDataType": "int",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "StartColumn",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 10,
    "DeviceId": 1,
    "DeviceChildCode": "SC01",
    "DeviceProDataBlock": "DB105",
    "DeviceProOffset": 14.0,
    "DeviceProDataType": "int",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "StartLayer",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 11,
    "DeviceId": 1,
    "DeviceChildCode": "SC01",
    "DeviceProDataBlock": "DB105",
    "DeviceProOffset": 16.0,
    "DeviceProDataType": "int",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "EndRow",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 12,
    "DeviceId": 1,
    "DeviceChildCode": "SC01",
    "DeviceProDataBlock": "DB105",
    "DeviceProOffset": 18.0,
    "DeviceProDataType": "int",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "EndColumn",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 13,
    "DeviceId": 1,
    "DeviceChildCode": "SC01",
    "DeviceProDataBlock": "DB105",
    "DeviceProOffset": 20.0,
    "DeviceProDataType": "int",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "EndLayer",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 14,
    "DeviceId": 1,
    "DeviceChildCode": "SC01",
    "DeviceProDataBlock": "DB105",
    "DeviceProOffset": 22.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "Barcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 15,
    "DeviceId": 3,
    "DeviceChildCode": "101",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 0.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 16,
    "DeviceId": 3,
    "DeviceChildCode": "101",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 2.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 17,
    "DeviceId": 3,
    "DeviceChildCode": "101",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 30.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 18,
    "DeviceId": 3,
    "DeviceChildCode": "101",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 34.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 19,
    "DeviceId": 3,
    "DeviceChildCode": "102",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 50.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 20,
    "DeviceId": 3,
    "DeviceChildCode": "102",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 52.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 21,
    "DeviceId": 3,
    "DeviceChildCode": "102",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 80.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 22,
    "DeviceId": 3,
    "DeviceChildCode": "102",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 84.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 23,
    "DeviceId": 3,
    "DeviceChildCode": "103",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 100.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 24,
    "DeviceId": 3,
    "DeviceChildCode": "103",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 102.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 25,
    "DeviceId": 3,
    "DeviceChildCode": "103",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 130.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 26,
    "DeviceId": 3,
    "DeviceChildCode": "103",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 134.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 27,
    "DeviceId": 3,
    "DeviceChildCode": "104",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 150.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 28,
    "DeviceId": 3,
    "DeviceChildCode": "104",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 152.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 29,
    "DeviceId": 3,
    "DeviceChildCode": "104",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 180.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 30,
    "DeviceId": 3,
    "DeviceChildCode": "104",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 184.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 31,
    "DeviceId": 3,
    "DeviceChildCode": "105",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 200.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 32,
    "DeviceId": 3,
    "DeviceChildCode": "105",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 202.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 33,
    "DeviceId": 3,
    "DeviceChildCode": "105",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 230.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 34,
    "DeviceId": 3,
    "DeviceChildCode": "105",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 234.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 35,
    "DeviceId": 3,
    "DeviceChildCode": "106",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 250.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 36,
    "DeviceId": 3,
    "DeviceChildCode": "106",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 252.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 37,
    "DeviceId": 3,
    "DeviceChildCode": "106",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 280.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 38,
    "DeviceId": 3,
    "DeviceChildCode": "106",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 284.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 39,
    "DeviceId": 3,
    "DeviceChildCode": "107",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 300.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 40,
    "DeviceId": 3,
    "DeviceChildCode": "107",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 302.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 41,
    "DeviceId": 3,
    "DeviceChildCode": "107",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 330.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 42,
    "DeviceId": 3,
    "DeviceChildCode": "107",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 334.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 43,
    "DeviceId": 3,
    "DeviceChildCode": "108",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 350.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 44,
    "DeviceId": 3,
    "DeviceChildCode": "108",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 352.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 45,
    "DeviceId": 3,
    "DeviceChildCode": "108",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 380.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 46,
    "DeviceId": 3,
    "DeviceChildCode": "108",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 384.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 47,
    "DeviceId": 3,
    "DeviceChildCode": "109",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 400.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 48,
    "DeviceId": 3,
    "DeviceChildCode": "109",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 402.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 49,
    "DeviceId": 3,
    "DeviceChildCode": "109",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 430.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 50,
    "DeviceId": 3,
    "DeviceChildCode": "109",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 438.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 51,
    "DeviceId": 3,
    "DeviceChildCode": "110",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 450.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 52,
    "DeviceId": 3,
    "DeviceChildCode": "110",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 452.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 53,
    "DeviceId": 3,
    "DeviceChildCode": "110",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 480.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 54,
    "DeviceId": 3,
    "DeviceChildCode": "110",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 484.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 55,
    "DeviceId": 3,
    "DeviceChildCode": "111",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 500.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 56,
    "DeviceId": 3,
    "DeviceChildCode": "111",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 502.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 57,
    "DeviceId": 3,
    "DeviceChildCode": "111",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 530.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 58,
    "DeviceId": 3,
    "DeviceChildCode": "111",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 534.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 59,
    "DeviceId": 3,
    "DeviceChildCode": "112",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 550.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 60,
    "DeviceId": 3,
    "DeviceChildCode": "112",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 552.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 61,
    "DeviceId": 3,
    "DeviceChildCode": "112",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 580.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 62,
    "DeviceId": 3,
    "DeviceChildCode": "112",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 584.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 63,
    "DeviceId": 3,
    "DeviceChildCode": "113",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 600.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 64,
    "DeviceId": 3,
    "DeviceChildCode": "113",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 602.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 65,
    "DeviceId": 3,
    "DeviceChildCode": "113",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 630.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 66,
    "DeviceId": 3,
    "DeviceChildCode": "113",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 634.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 67,
    "DeviceId": 3,
    "DeviceChildCode": "114",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 650.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 68,
    "DeviceId": 3,
    "DeviceChildCode": "114",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 652.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 69,
    "DeviceId": 3,
    "DeviceChildCode": "114",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 680.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 70,
    "DeviceId": 3,
    "DeviceChildCode": "114",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 684.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 71,
    "DeviceId": 3,
    "DeviceChildCode": "115",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 700.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 72,
    "DeviceId": 3,
    "DeviceChildCode": "115",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 702.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 73,
    "DeviceId": 3,
    "DeviceChildCode": "115",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 730.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 74,
    "DeviceId": 3,
    "DeviceChildCode": "115",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 734.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 75,
    "DeviceId": 3,
    "DeviceChildCode": "116",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 750.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 76,
    "DeviceId": 3,
    "DeviceChildCode": "116",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 752.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 77,
    "DeviceId": 3,
    "DeviceChildCode": "116",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 780.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 78,
    "DeviceId": 3,
    "DeviceChildCode": "116",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 784.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 79,
    "DeviceId": 3,
    "DeviceChildCode": "117",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 800.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 80,
    "DeviceId": 3,
    "DeviceChildCode": "117",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 802.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 81,
    "DeviceId": 3,
    "DeviceChildCode": "117",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 830.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 82,
    "DeviceId": 3,
    "DeviceChildCode": "117",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 834.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 83,
    "DeviceId": 3,
    "DeviceChildCode": "118",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 850.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 84,
    "DeviceId": 3,
    "DeviceChildCode": "118",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 852.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 85,
    "DeviceId": 3,
    "DeviceChildCode": "118",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 880.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 86,
    "DeviceId": 3,
    "DeviceChildCode": "118",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 884.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 87,
    "DeviceId": 3,
    "DeviceChildCode": "119",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 900.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 88,
    "DeviceId": 3,
    "DeviceChildCode": "119",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 902.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 89,
    "DeviceId": 3,
    "DeviceChildCode": "119",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 930.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 90,
    "DeviceId": 3,
    "DeviceChildCode": "119",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 934.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 91,
    "DeviceId": 3,
    "DeviceChildCode": "120",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 950.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "InteractiveSignal",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 92,
    "DeviceId": 3,
    "DeviceChildCode": "120",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 952.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "ConveyorLineBarcode",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 93,
    "DeviceId": 3,
    "DeviceChildCode": "120",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 980.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTargetAddress",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 94,
    "DeviceId": 3,
    "DeviceChildCode": "120",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 984.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "ConveyorLineTaskNum",
    "DeviceProParamType": "ReadDeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 95,
    "DeviceId": 3,
    "DeviceChildCode": "101",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 0.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 96,
    "DeviceId": 3,
    "DeviceChildCode": "101",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 2.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 97,
    "DeviceId": 3,
    "DeviceChildCode": "101",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 30.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 98,
    "DeviceId": 3,
    "DeviceChildCode": "101",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 34.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 99,
    "DeviceId": 3,
    "DeviceChildCode": "102",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 50.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 100,
    "DeviceId": 3,
    "DeviceChildCode": "102",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 52.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 101,
    "DeviceId": 3,
    "DeviceChildCode": "102",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 80.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 102,
    "DeviceId": 3,
    "DeviceChildCode": "102",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 84.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 103,
    "DeviceId": 3,
    "DeviceChildCode": "103",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 100.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 104,
    "DeviceId": 3,
    "DeviceChildCode": "103",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 102.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 105,
    "DeviceId": 3,
    "DeviceChildCode": "103",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 130.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 106,
    "DeviceId": 3,
    "DeviceChildCode": "103",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 134.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 107,
    "DeviceId": 3,
    "DeviceChildCode": "104",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 150.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 108,
    "DeviceId": 3,
    "DeviceChildCode": "104",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 152.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 109,
    "DeviceId": 3,
    "DeviceChildCode": "104",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 180.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 110,
    "DeviceId": 3,
    "DeviceChildCode": "104",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 184.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 111,
    "DeviceId": 3,
    "DeviceChildCode": "105",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 200.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 112,
    "DeviceId": 3,
    "DeviceChildCode": "105",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 202.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 113,
    "DeviceId": 3,
    "DeviceChildCode": "105",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 230.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 114,
    "DeviceId": 3,
    "DeviceChildCode": "105",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 234.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 115,
    "DeviceId": 3,
    "DeviceChildCode": "106",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 250.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 116,
    "DeviceId": 3,
    "DeviceChildCode": "106",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 252.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 117,
    "DeviceId": 3,
    "DeviceChildCode": "106",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 280.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 118,
    "DeviceId": 3,
    "DeviceChildCode": "106",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 284.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 119,
    "DeviceId": 3,
    "DeviceChildCode": "107",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 300.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 120,
    "DeviceId": 3,
    "DeviceChildCode": "107",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 302.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 121,
    "DeviceId": 3,
    "DeviceChildCode": "107",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 330.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 122,
    "DeviceId": 3,
    "DeviceChildCode": "107",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 334.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 123,
    "DeviceId": 3,
    "DeviceChildCode": "108",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 350.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 124,
    "DeviceId": 3,
    "DeviceChildCode": "108",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 352.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 125,
    "DeviceId": 3,
    "DeviceChildCode": "108",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 380.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 126,
    "DeviceId": 3,
    "DeviceChildCode": "108",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 384.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 127,
    "DeviceId": 3,
    "DeviceChildCode": "109",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 400.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 128,
    "DeviceId": 3,
    "DeviceChildCode": "109",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 402.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 129,
    "DeviceId": 3,
    "DeviceChildCode": "109",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 430.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 130,
    "DeviceId": 3,
    "DeviceChildCode": "109",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 438.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 131,
    "DeviceId": 3,
    "DeviceChildCode": "110",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 450.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 132,
    "DeviceId": 3,
    "DeviceChildCode": "110",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 452.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 133,
    "DeviceId": 3,
    "DeviceChildCode": "110",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 480.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 134,
    "DeviceId": 3,
    "DeviceChildCode": "110",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 484.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 135,
    "DeviceId": 3,
    "DeviceChildCode": "111",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 500.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 136,
    "DeviceId": 3,
    "DeviceChildCode": "111",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 502.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 137,
    "DeviceId": 3,
    "DeviceChildCode": "111",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 530.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 138,
    "DeviceId": 3,
    "DeviceChildCode": "111",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 534.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 139,
    "DeviceId": 3,
    "DeviceChildCode": "112",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 550.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 140,
    "DeviceId": 3,
    "DeviceChildCode": "112",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 552.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 141,
    "DeviceId": 3,
    "DeviceChildCode": "112",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 580.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 142,
    "DeviceId": 3,
    "DeviceChildCode": "112",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 584.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 143,
    "DeviceId": 3,
    "DeviceChildCode": "113",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 600.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 144,
    "DeviceId": 3,
    "DeviceChildCode": "113",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 602.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 145,
    "DeviceId": 3,
    "DeviceChildCode": "113",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 630.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 146,
    "DeviceId": 3,
    "DeviceChildCode": "113",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 634.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 147,
    "DeviceId": 3,
    "DeviceChildCode": "114",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 650.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 148,
    "DeviceId": 3,
    "DeviceChildCode": "114",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 652.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 149,
    "DeviceId": 3,
    "DeviceChildCode": "114",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 680.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 150,
    "DeviceId": 3,
    "DeviceChildCode": "114",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 684.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 151,
    "DeviceId": 3,
    "DeviceChildCode": "115",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 700.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 152,
    "DeviceId": 3,
    "DeviceChildCode": "115",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 702.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 153,
    "DeviceId": 3,
    "DeviceChildCode": "115",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 730.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 154,
    "DeviceId": 3,
    "DeviceChildCode": "115",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 734.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 155,
    "DeviceId": 3,
    "DeviceChildCode": "116",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 750.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 156,
    "DeviceId": 3,
    "DeviceChildCode": "116",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 752.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 157,
    "DeviceId": 3,
    "DeviceChildCode": "116",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 780.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 158,
    "DeviceId": 3,
    "DeviceChildCode": "116",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 784.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 159,
    "DeviceId": 3,
    "DeviceChildCode": "117",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 800.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 160,
    "DeviceId": 3,
    "DeviceChildCode": "117",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 802.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 161,
    "DeviceId": 3,
    "DeviceChildCode": "117",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 830.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 162,
    "DeviceId": 3,
    "DeviceChildCode": "117",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 834.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 163,
    "DeviceId": 3,
    "DeviceChildCode": "118",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 850.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 164,
    "DeviceId": 3,
    "DeviceChildCode": "118",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 852.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 165,
    "DeviceId": 3,
    "DeviceChildCode": "118",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 880.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 166,
    "DeviceId": 3,
    "DeviceChildCode": "118",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 884.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 167,
    "DeviceId": 3,
    "DeviceChildCode": "119",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 900.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 168,
    "DeviceId": 3,
    "DeviceChildCode": "119",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 902.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 169,
    "DeviceId": 3,
    "DeviceChildCode": "119",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 930.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 170,
    "DeviceId": 3,
    "DeviceChildCode": "119",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 934.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 171,
    "DeviceId": 3,
    "DeviceChildCode": "120",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 950.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteInteractiveSignal",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 172,
    "DeviceId": 3,
    "DeviceChildCode": "120",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 952.0,
    "DeviceProDataType": "string",
    "DeviceProDataLength": 25,
    "DeviceProParamName": "WriteConveyorLineBarcode",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 173,
    "DeviceId": 3,
    "DeviceChildCode": "120",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 980.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTargetAddress",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 174,
    "DeviceId": 3,
    "DeviceChildCode": "120",
    "DeviceProDataBlock": "DB90",
    "DeviceProOffset": 984.0,
    "DeviceProDataType": "dint",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "WriteConveyorLineTaskNum",
    "DeviceProParamType": "DeviceCommand",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 175,
    "DeviceId": 3,
    "DeviceChildCode": "111",
    "DeviceProDataBlock": "DB80",
    "DeviceProOffset": 500.0,
    "DeviceProDataType": "w",
    "DeviceProDataLength": 1,
    "DeviceProParamName": "IsOccupied",
    "DeviceProParamType": "IsOccupied",
    "DeviceProParamDes": "1",
    "DeviceProRemark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:25.857",
    "Modifier": null,
    "ModifyDate": null
  }
]
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_DeviceProtocolDetail.tsv
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,262 @@
[
  {
    "Id": 1,
    "DeviceType": "CommonStackerCrane",
    "DeviceProParamName": "StackerCraneStatus",
    "ProtocolDetailType": "Normal",
    "ProtocalDetailValue": "1",
    "ProtocolDetailDes": "设备状态(1:正常)",
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:26.157",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 2,
    "DeviceType": "CommonStackerCrane",
    "DeviceProParamName": "StackerCraneStatus",
    "ProtocolDetailType": "Fault",
    "ProtocalDetailValue": "2",
    "ProtocolDetailDes": "设备状态(2:故障)",
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:26.157",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 3,
    "DeviceType": "CommonStackerCrane",
    "DeviceProParamName": "StackerCraneStatus",
    "ProtocolDetailType": "EmergencyStop",
    "ProtocalDetailValue": "3",
    "ProtocolDetailDes": "设备状态(3:急停)",
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:26.157",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 4,
    "DeviceType": "CommonStackerCrane",
    "DeviceProParamName": "StackerCraneAutoStatus",
    "ProtocolDetailType": "Maintenance",
    "ProtocalDetailValue": "0",
    "ProtocolDetailDes": "工作模式(0:ç»´ä¿®)",
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:26.157",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 5,
    "DeviceType": "CommonStackerCrane",
    "DeviceProParamName": "StackerCraneAutoStatus",
    "ProtocolDetailType": "Manual",
    "ProtocalDetailValue": "1",
    "ProtocolDetailDes": "工作模式(1:手动",
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:26.157",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 6,
    "DeviceType": "CommonStackerCrane",
    "DeviceProParamName": "StackerCraneAutoStatus",
    "ProtocolDetailType": "SemiAutomatic",
    "ProtocalDetailValue": "2",
    "ProtocolDetailDes": "工作模式(2:半自动)",
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:26.157",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 7,
    "DeviceType": "CommonStackerCrane",
    "DeviceProParamName": "StackerCraneAutoStatus",
    "ProtocolDetailType": "Automatic",
    "ProtocalDetailValue": "3",
    "ProtocolDetailDes": "工作模式(3:自动)",
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:26.157",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 8,
    "DeviceType": "CommonStackerCrane",
    "DeviceProParamName": "StackerCraneWorkStatus",
    "ProtocolDetailType": "Standby",
    "ProtocalDetailValue": "0",
    "ProtocolDetailDes": "作业状态(0:待机)",
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:26.157",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 9,
    "DeviceType": "CommonStackerCrane",
    "DeviceProParamName": "StackerCraneWorkStatus",
    "ProtocolDetailType": "PickUp",
    "ProtocalDetailValue": "1",
    "ProtocolDetailDes": "作业状态(1:取货中)",
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:26.157",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 10,
    "DeviceType": "CommonStackerCrane",
    "DeviceProParamName": "StackerCraneWorkStatus",
    "ProtocolDetailType": "PickUpCompleted",
    "ProtocalDetailValue": "2",
    "ProtocolDetailDes": "作业状态(2:取货完成)",
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:26.157",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 11,
    "DeviceType": "CommonStackerCrane",
    "DeviceProParamName": "StackerCraneWorkStatus",
    "ProtocolDetailType": "Putting",
    "ProtocalDetailValue": "4",
    "ProtocolDetailDes": "作业状态(4:放货中)",
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:26.157",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 12,
    "DeviceType": "CommonStackerCrane",
    "DeviceProParamName": "StackerCraneWorkStatus",
    "ProtocolDetailType": "PutCompleted",
    "ProtocalDetailValue": "5",
    "ProtocolDetailDes": "作业状态(5:放货完成)",
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:26.157",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 13,
    "DeviceType": "CommonStackerCrane",
    "DeviceProParamName": "StackerCraneWorkStatus",
    "ProtocolDetailType": "WorkCompleted",
    "ProtocalDetailValue": "6",
    "ProtocolDetailDes": "作业状态(6:任务完成)",
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:26.157",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 14,
    "DeviceType": "CommonConveyorLine",
    "DeviceProParamName": "InteractiveSignal",
    "ProtocolDetailType": "RequestInbound",
    "ProtocalDetailValue": "1",
    "ProtocolDetailDes": "1",
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:26.157",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 15,
    "DeviceType": "CommonConveyorLine",
    "DeviceProParamName": "InteractiveSignal",
    "ProtocolDetailType": "RequestInNextAddress",
    "ProtocalDetailValue": "2",
    "ProtocolDetailDes": "2",
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:26.157",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 32,
    "DeviceType": "CommonConveyorLine",
    "DeviceProParamName": "InteractiveSignal",
    "ProtocolDetailType": "ConveyorLineInFinish",
    "ProtocalDetailValue": "3",
    "ProtocolDetailDes": "3",
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:26.157",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 34,
    "DeviceType": "CommonConveyorLine",
    "DeviceProParamName": "IsOccupied",
    "ProtocolDetailType": "IsOccupied",
    "ProtocalDetailValue": "0",
    "ProtocolDetailDes": "0",
    "Remark": null,
    "Creater": "1",
    "CreateDate": "2024-08-23T23:05:46",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 35,
    "DeviceType": "CommonConveyorLine",
    "DeviceProParamName": "InteractiveSignal",
    "ProtocolDetailType": "RequestOutbound",
    "ProtocalDetailValue": "4",
    "ProtocolDetailDes": "4",
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:26.157",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 36,
    "DeviceType": "CommonConveyorLine",
    "DeviceProParamName": "InteractiveSignal",
    "ProtocolDetailType": "RequestOutNextAddress",
    "ProtocalDetailValue": "5",
    "ProtocolDetailDes": "5",
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:26.157",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 37,
    "DeviceType": "CommonConveyorLine",
    "DeviceProParamName": "InteractiveSignal",
    "ProtocolDetailType": "ConveyorLineOutFinish",
    "ProtocalDetailValue": "6",
    "ProtocolDetailDes": "6",
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:26.157",
    "Modifier": null,
    "ModifyDate": null
  }
]
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_DispatchInfo.tsv
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
[
  {
    "Id": 1,
    "Name": "测试",
    "JobGroup": "CommonStackerCrane",
    "AssemblyName": "WIDESEAWCS_Tasks",
    "ClassName": "CommonStackerCraneJob",
    "IntervalSecond": 1,
    "BeginTime": null,
    "EndTime": null,
    "Remark": null,
    "Creater": "1",
    "CreateDate": "2024-08-23T11:32:26.513",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 3,
    "Name": "测试2",
    "JobGroup": "CommonConveyorLine",
    "AssemblyName": "WIDESEAWCS_Tasks",
    "ClassName": "CommonConveyorLineJob",
    "IntervalSecond": 1,
    "BeginTime": null,
    "EndTime": null,
    "Remark": null,
    "Creater": "1",
    "CreateDate": "2024-08-23T11:32:26.513",
    "Modifier": null,
    "ModifyDate": null
  }
]
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_Router.tsv
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,362 @@
[
  {
    "Id": 42,
    "StartPosi": "101",
    "NextPosi": "102",
    "InOutType": 1,
    "ChildPosi": "102",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": null,
    "SrmColumn": null,
    "SrmLayer": null,
    "Depth": 1,
    "IsEnd": false,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T23:34:41.067",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 43,
    "StartPosi": "102",
    "NextPosi": "103",
    "InOutType": 1,
    "ChildPosi": "103",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": null,
    "SrmColumn": null,
    "SrmLayer": null,
    "Depth": 1,
    "IsEnd": false,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T23:34:41.07",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 44,
    "StartPosi": "103",
    "NextPosi": "104",
    "InOutType": 1,
    "ChildPosi": "104",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": null,
    "SrmColumn": null,
    "SrmLayer": null,
    "Depth": 1,
    "IsEnd": false,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T23:34:41.07",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 45,
    "StartPosi": "104",
    "NextPosi": "105",
    "InOutType": 1,
    "ChildPosi": "105",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": null,
    "SrmColumn": null,
    "SrmLayer": null,
    "Depth": 1,
    "IsEnd": false,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T23:34:41.07",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 46,
    "StartPosi": "105",
    "NextPosi": "106",
    "InOutType": 1,
    "ChildPosi": "106",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": null,
    "SrmColumn": null,
    "SrmLayer": null,
    "Depth": 1,
    "IsEnd": false,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T23:34:41.073",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 47,
    "StartPosi": "106",
    "NextPosi": "107",
    "InOutType": 1,
    "ChildPosi": "107",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": null,
    "SrmColumn": null,
    "SrmLayer": null,
    "Depth": 1,
    "IsEnd": false,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T23:34:41.073",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 48,
    "StartPosi": "107",
    "NextPosi": "108",
    "InOutType": 1,
    "ChildPosi": "108",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": null,
    "SrmColumn": null,
    "SrmLayer": null,
    "Depth": 1,
    "IsEnd": false,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T23:34:41.073",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 49,
    "StartPosi": "108",
    "NextPosi": "109",
    "InOutType": 1,
    "ChildPosi": "109",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": null,
    "SrmColumn": null,
    "SrmLayer": null,
    "Depth": 1,
    "IsEnd": false,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T23:34:41.073",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 50,
    "StartPosi": "109",
    "NextPosi": "110",
    "InOutType": 1,
    "ChildPosi": "110",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": null,
    "SrmColumn": null,
    "SrmLayer": null,
    "Depth": 1,
    "IsEnd": false,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T23:34:41.077",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 51,
    "StartPosi": "110",
    "NextPosi": "SC01",
    "InOutType": 1,
    "ChildPosi": "SC01",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": 1,
    "SrmColumn": 100,
    "SrmLayer": 1,
    "Depth": 1,
    "IsEnd": true,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T23:34:41.077",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 52,
    "StartPosi": "SC01",
    "NextPosi": "111",
    "InOutType": 2,
    "ChildPosi": "111",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": 2,
    "SrmColumn": 100,
    "SrmLayer": 1,
    "Depth": 1,
    "IsEnd": false,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-25T00:05:09.283",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 53,
    "StartPosi": "111",
    "NextPosi": "112",
    "InOutType": 2,
    "ChildPosi": "112",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": null,
    "SrmColumn": null,
    "SrmLayer": null,
    "Depth": 1,
    "IsEnd": false,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-25T00:05:09.287",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 54,
    "StartPosi": "112",
    "NextPosi": "113",
    "InOutType": 2,
    "ChildPosi": "113",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": null,
    "SrmColumn": null,
    "SrmLayer": null,
    "Depth": 1,
    "IsEnd": false,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-25T00:05:09.287",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 55,
    "StartPosi": "113",
    "NextPosi": "114",
    "InOutType": 2,
    "ChildPosi": "114",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": null,
    "SrmColumn": null,
    "SrmLayer": null,
    "Depth": 1,
    "IsEnd": false,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-25T00:05:09.29",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 56,
    "StartPosi": "114",
    "NextPosi": "115",
    "InOutType": 2,
    "ChildPosi": "115",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": null,
    "SrmColumn": null,
    "SrmLayer": null,
    "Depth": 1,
    "IsEnd": false,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-25T00:05:09.29",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 57,
    "StartPosi": "115",
    "NextPosi": "116",
    "InOutType": 2,
    "ChildPosi": "116",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": null,
    "SrmColumn": null,
    "SrmLayer": null,
    "Depth": 1,
    "IsEnd": false,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-25T00:05:09.29",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 58,
    "StartPosi": "116",
    "NextPosi": "117",
    "InOutType": 2,
    "ChildPosi": "117",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": null,
    "SrmColumn": null,
    "SrmLayer": null,
    "Depth": 1,
    "IsEnd": false,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-25T00:05:09.293",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 59,
    "StartPosi": "117",
    "NextPosi": "118",
    "InOutType": 2,
    "ChildPosi": "118",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": null,
    "SrmColumn": null,
    "SrmLayer": null,
    "Depth": 1,
    "IsEnd": false,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-25T00:05:09.293",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 60,
    "StartPosi": "118",
    "NextPosi": "119",
    "InOutType": 2,
    "ChildPosi": "119",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": null,
    "SrmColumn": null,
    "SrmLayer": null,
    "Depth": 1,
    "IsEnd": false,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-25T00:05:09.297",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "Id": 61,
    "StartPosi": "119",
    "NextPosi": "CLOutAreaA",
    "InOutType": 2,
    "ChildPosi": "120",
    "ChildPosiDeviceCode": "1002",
    "SrmRow": null,
    "SrmColumn": null,
    "SrmLayer": null,
    "Depth": 1,
    "IsEnd": true,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-25T00:05:09.297",
    "Modifier": null,
    "ModifyDate": null
  }
]
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_Task.tsv
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_TaskExecuteDetail.tsv
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Sys_Dictionary.tsv
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,254 @@
[
  {
    "DicId": 3,
    "Config": "{valueField: 'Enable',\r\ntextField: 'Enable',\r\n containField: null,\r\n  handler: null }",
    "DBServer": "1",
    "DBSql": null,
    "DicName": "是否值",
    "DicNo": "enable",
    "Enable": 1,
    "OrderNo": null,
    "ParentId": 0,
    "Remark": null,
    "SystemType": 10,
    "DicList": null,
    "Creater": "system",
    "CreateDate": "2024-08-23T11:32:22.233",
    "Modifier": "超级管理员",
    "ModifyDate": "2022-01-03T18:30:18.113"
  },
  {
    "DicId": 30,
    "Config": "{valueField: 'Success',\r\n textField: 'Success', \r\n containField: null,\r\n handler: null }\r\n",
    "DBServer": null,
    "DBSql": null,
    "DicName": "响应状态",
    "DicNo": "restatus",
    "Enable": 1,
    "OrderNo": null,
    "ParentId": 0,
    "Remark": null,
    "SystemType": 10,
    "DicList": null,
    "Creater": "system",
    "CreateDate": "2024-08-23T11:32:22.233",
    "Modifier": "测试超级管理员",
    "ModifyDate": "2018-06-12T10:21:48"
  },
  {
    "DicId": 31,
    "Config": "{valueField: 'LogType',\r\n textField: 'LogType', \r\n containField: null,\r\n handler: null }\r\n",
    "DBServer": null,
    "DBSql": null,
    "DicName": "日志类型",
    "DicNo": "log",
    "Enable": 1,
    "OrderNo": null,
    "ParentId": 0,
    "Remark": null,
    "SystemType": 10,
    "DicList": null,
    "Creater": "system",
    "CreateDate": "2024-08-23T11:32:22.233",
    "Modifier": "超级管理员",
    "ModifyDate": "2022-04-04T13:21:54.927"
  },
  {
    "DicId": 32,
    "Config": "{valueField: 'Role_Id',\r\n textField: 'RoleName', \r\n containField: ['Role_Id','RoleName'],\r\n handler: null }\r\n",
    "DBServer": null,
    "DBSql": "SELECT RoleId as 'key',RoleName as 'value' FROM Sys_Role WHERE Enable=1",
    "DicName": "角色列表",
    "DicNo": "roles",
    "Enable": 1,
    "OrderNo": 123,
    "ParentId": 0,
    "Remark": "sql语句需要key,value列,界面才能绑定数据源",
    "SystemType": 10,
    "DicList": null,
    "Creater": "system",
    "CreateDate": "2024-08-23T11:32:22.233",
    "Modifier": "测试超级管理员",
    "ModifyDate": "2018-07-13T15:03:53"
  },
  {
    "DicId": 35,
    "Config": "{\r\n valueField: 'AuditStatus',\r\n textField: 'AuditStatus',\r\n  containField:null \r\n}",
    "DBServer": null,
    "DBSql": null,
    "DicName": "审核状态",
    "DicNo": "audit",
    "Enable": 1,
    "OrderNo": null,
    "ParentId": 0,
    "Remark": null,
    "SystemType": 10,
    "DicList": null,
    "Creater": "system",
    "CreateDate": "2024-08-23T11:32:22.233",
    "Modifier": "超级管理员",
    "ModifyDate": "2023-05-08T01:05:44.193"
  },
  {
    "DicId": 49,
    "Config": "{\r\n valueField: 'Gender',\r\n textField: 'Gender',\r\n  containField:null \r\n}",
    "DBServer": null,
    "DBSql": null,
    "DicName": "性别",
    "DicNo": "gender",
    "Enable": 1,
    "OrderNo": null,
    "ParentId": 0,
    "Remark": null,
    "SystemType": 10,
    "DicList": null,
    "Creater": "system",
    "CreateDate": "2024-08-23T11:32:22.233",
    "Modifier": "测试超级管理员",
    "ModifyDate": "2018-07-23T11:10:28"
  },
  {
    "DicId": 50,
    "Config": "{\r\n valueField: 'Enable',\r\n textField: 'Enable',\r\n  containField:null \r\n}",
    "DBServer": null,
    "DBSql": null,
    "DicName": "启用状态",
    "DicNo": "status",
    "Enable": 1,
    "OrderNo": null,
    "ParentId": 0,
    "Remark": null,
    "SystemType": 10,
    "DicList": null,
    "Creater": "system",
    "CreateDate": "2024-08-23T11:32:22.233",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "DicId": 59,
    "Config": "{\r\n valueField: 'IsRegregisterPhone',\r\n textField: 'IsRegregisterPhone',\r\n  containField:null \r\n}",
    "DBServer": null,
    "DBSql": null,
    "DicName": "手机用户",
    "DicNo": "isphone",
    "Enable": 1,
    "OrderNo": null,
    "ParentId": 0,
    "Remark": null,
    "SystemType": 10,
    "DicList": null,
    "Creater": "system",
    "CreateDate": "2024-08-23T11:32:22.233",
    "Modifier": "超级管理员",
    "ModifyDate": "2020-11-20T23:05:48.303"
  },
  {
    "DicId": 66,
    "Config": null,
    "DBServer": null,
    "DBSql": "SELECT RoleId AS id,parentId,RoleId AS [key],RoleName AS value FROM Sys_Role",
    "DicName": "级联角色",
    "DicNo": "tree_roles",
    "Enable": 1,
    "OrderNo": null,
    "ParentId": 0,
    "Remark": null,
    "SystemType": 10,
    "DicList": null,
    "Creater": "system",
    "CreateDate": "2024-08-23T11:32:22.233",
    "Modifier": "超级管理员",
    "ModifyDate": "2020-11-20T23:08:03.217"
  },
  {
    "DicId": 67,
    "Config": null,
    "DBServer": null,
    "DBSql": null,
    "DicName": "nav",
    "DicNo": "nav",
    "Enable": 1,
    "OrderNo": null,
    "ParentId": 0,
    "Remark": null,
    "SystemType": 10,
    "DicList": null,
    "Creater": "system",
    "CreateDate": "2024-08-23T11:32:22.233",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "DicId": 70,
    "Config": null,
    "DBServer": null,
    "DBSql": null,
    "DicName": "请求方式",
    "DicNo": "请求方式",
    "Enable": 1,
    "OrderNo": null,
    "ParentId": 0,
    "Remark": null,
    "SystemType": 10,
    "DicList": null,
    "Creater": "system",
    "CreateDate": "2024-08-23T11:32:22.233",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "DicId": 71,
    "Config": null,
    "DBServer": null,
    "DBSql": null,
    "DicName": "定时任务状态",
    "DicNo": "定时任务状态",
    "Enable": 1,
    "OrderNo": null,
    "ParentId": 0,
    "Remark": null,
    "SystemType": 10,
    "DicList": null,
    "Creater": "system",
    "CreateDate": "2024-08-23T11:32:22.233",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "DicId": 72,
    "Config": null,
    "DBServer": null,
    "DBSql": "SELECT DepartmentId AS 'key',DepartmentId AS 'id',ParentId AS parentId,DepartmentName as 'value' FROM Sys_Department",
    "DicName": "组织机构",
    "DicNo": "组织机构",
    "Enable": 1,
    "OrderNo": null,
    "ParentId": 0,
    "Remark": null,
    "SystemType": 10,
    "DicList": null,
    "Creater": "system",
    "CreateDate": "2024-08-23T11:32:22.233",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "DicId": 75,
    "Config": null,
    "DBServer": null,
    "DBSql": null,
    "DicName": "日志状态",
    "DicNo": "LogState",
    "Enable": 1,
    "OrderNo": null,
    "ParentId": 0,
    "Remark": null,
    "SystemType": 1,
    "DicList": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.233",
    "Modifier": null,
    "ModifyDate": null
  }
]
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Sys_DictionaryList.tsv
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,548 @@
[
  {
    "DicListId": 3,
    "DicName": "否",
    "DicValue": "0",
    "DicId": "3",
    "Enable": null,
    "OrderNo": 2,
    "Remark": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2022-01-03T18:30:18.113"
  },
  {
    "DicListId": 4,
    "DicName": "是",
    "DicValue": "1",
    "DicId": "3",
    "Enable": null,
    "OrderNo": 1,
    "Remark": null,
    "Creater": "xxx",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2022-01-03T18:30:18.113"
  },
  {
    "DicListId": 22,
    "DicName": "其他",
    "DicValue": "0",
    "DicId": "30",
    "Enable": null,
    "OrderNo": 10,
    "Remark": null,
    "Creater": "测试超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2019-08-21T16:49:43"
  },
  {
    "DicListId": 23,
    "DicName": "成功",
    "DicValue": "1",
    "DicId": "30",
    "Enable": null,
    "OrderNo": 100,
    "Remark": null,
    "Creater": "测试超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2019-08-21T16:49:43"
  },
  {
    "DicListId": 24,
    "DicName": "异常",
    "DicValue": "2",
    "DicId": "30",
    "Enable": null,
    "OrderNo": 50,
    "Remark": null,
    "Creater": "测试超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2019-08-21T16:49:43"
  },
  {
    "DicListId": 25,
    "DicName": "系统",
    "DicValue": "System",
    "DicId": "31",
    "Enable": null,
    "OrderNo": 100,
    "Remark": null,
    "Creater": "测试超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2022-04-04T13:21:54.947"
  },
  {
    "DicListId": 26,
    "DicName": "登陆",
    "DicValue": "Login",
    "DicId": "31",
    "Enable": null,
    "OrderNo": 90,
    "Remark": null,
    "Creater": "测试超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2022-04-04T13:21:54.947"
  },
  {
    "DicListId": 27,
    "DicName": "新建",
    "DicValue": "Add",
    "DicId": "31",
    "Enable": null,
    "OrderNo": null,
    "Remark": null,
    "Creater": "测试超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2022-04-04T13:21:54.943"
  },
  {
    "DicListId": 28,
    "DicName": "删除",
    "DicValue": "Del",
    "DicId": "31",
    "Enable": 1,
    "OrderNo": null,
    "Remark": null,
    "Creater": "测试超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2022-04-04T13:21:54.943"
  },
  {
    "DicListId": 29,
    "DicName": "编辑",
    "DicValue": "Edit",
    "DicId": "31",
    "Enable": 1,
    "OrderNo": null,
    "Remark": null,
    "Creater": "测试超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2022-04-04T13:21:54.943"
  },
  {
    "DicListId": 37,
    "DicName": "待审核",
    "DicValue": "0",
    "DicId": "35",
    "Enable": 0,
    "OrderNo": null,
    "Remark": null,
    "Creater": "测试超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2023-05-08T01:05:44.193"
  },
  {
    "DicListId": 38,
    "DicName": "审核通过",
    "DicValue": "1",
    "DicId": "35",
    "Enable": null,
    "OrderNo": null,
    "Remark": null,
    "Creater": "测试超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2023-05-08T01:05:44.193"
  },
  {
    "DicListId": 39,
    "DicName": "审核中",
    "DicValue": "2",
    "DicId": "35",
    "Enable": 0,
    "OrderNo": null,
    "Remark": null,
    "Creater": "测试超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2023-05-08T01:05:44.193"
  },
  {
    "DicListId": 71,
    "DicName": "异常",
    "DicValue": "Exception",
    "DicId": "31",
    "Enable": 0,
    "OrderNo": null,
    "Remark": null,
    "Creater": "测试超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2022-04-04T13:21:54.943"
  },
  {
    "DicListId": 90,
    "DicName": "男",
    "DicValue": "0",
    "DicId": "49",
    "Enable": null,
    "OrderNo": null,
    "Remark": null,
    "Creater": "测试超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "测试超级管理员",
    "ModifyDate": "2018-07-23T11:10:28"
  },
  {
    "DicListId": 91,
    "DicName": "女",
    "DicValue": "1",
    "DicId": "49",
    "Enable": null,
    "OrderNo": null,
    "Remark": null,
    "Creater": "测试超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "测试超级管理员",
    "ModifyDate": "2018-07-23T11:10:28"
  },
  {
    "DicListId": 96,
    "DicName": "未启用",
    "DicValue": "0",
    "DicId": "50",
    "Enable": 1,
    "OrderNo": null,
    "Remark": null,
    "Creater": "测试超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2019-08-16T18:17:47"
  },
  {
    "DicListId": 97,
    "DicName": "已启用",
    "DicValue": "1",
    "DicId": "50",
    "Enable": 1,
    "OrderNo": null,
    "Remark": null,
    "Creater": "测试超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2019-08-16T18:17:47"
  },
  {
    "DicListId": 98,
    "DicName": "已删除",
    "DicValue": "2",
    "DicId": "50",
    "Enable": 1,
    "OrderNo": null,
    "Remark": null,
    "Creater": "测试超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2019-08-16T18:17:47"
  },
  {
    "DicListId": 128,
    "DicName": "是",
    "DicValue": "1",
    "DicId": "59",
    "Enable": 0,
    "OrderNo": null,
    "Remark": null,
    "Creater": "测试超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2020-11-20T23:05:48.303"
  },
  {
    "DicListId": 129,
    "DicName": "否",
    "DicValue": "0",
    "DicId": "59",
    "Enable": 1,
    "OrderNo": null,
    "Remark": null,
    "Creater": "测试超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2020-11-20T23:05:48.303"
  },
  {
    "DicListId": 144,
    "DicName": "刷新Token",
    "DicValue": "ReplaceToeken",
    "DicId": "31",
    "Enable": null,
    "OrderNo": 110,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2022-04-04T13:21:54.937"
  },
  {
    "DicListId": 145,
    "DicName": "Info",
    "DicValue": "3",
    "DicId": "30",
    "Enable": null,
    "OrderNo": null,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "DicListId": 423,
    "DicName": "是",
    "DicValue": "1",
    "DicId": "67",
    "Enable": 0,
    "OrderNo": null,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "DicListId": 424,
    "DicName": "否",
    "DicValue": "0",
    "DicId": "67",
    "Enable": 0,
    "OrderNo": null,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "DicListId": 435,
    "DicName": "审核未通过",
    "DicValue": "3",
    "DicId": "35",
    "Enable": 0,
    "OrderNo": null,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2023-05-08T01:05:44.193"
  },
  {
    "DicListId": 436,
    "DicName": "get",
    "DicValue": "get",
    "DicId": "70",
    "Enable": 0,
    "OrderNo": null,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "DicListId": 437,
    "DicName": "post",
    "DicValue": "post",
    "DicId": "70",
    "Enable": 0,
    "OrderNo": null,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "DicListId": 438,
    "DicName": "正常",
    "DicValue": "0",
    "DicId": "71",
    "Enable": 0,
    "OrderNo": null,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "DicListId": 439,
    "DicName": "暂停",
    "DicValue": "1",
    "DicId": "71",
    "Enable": 0,
    "OrderNo": null,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "DicListId": 442,
    "DicName": "驳回",
    "DicValue": "4",
    "DicId": "35",
    "Enable": 0,
    "OrderNo": null,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "DicListId": 443,
    "DicName": "禁用",
    "DicValue": "DisEnable",
    "DicId": "73",
    "Enable": 1,
    "OrderNo": 1,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "开发",
    "ModifyDate": "2023-07-14T14:17:01.037"
  },
  {
    "DicListId": 444,
    "DicName": "启用",
    "DicValue": "Enable",
    "DicId": "73",
    "Enable": 1,
    "OrderNo": 0,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "开发",
    "ModifyDate": "2023-07-14T14:17:01.017"
  },
  {
    "DicListId": 449,
    "DicName": "信息",
    "DicValue": "Info",
    "DicId": "75",
    "Enable": 0,
    "OrderNo": 1,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "DicListId": 450,
    "DicName": "成功",
    "DicValue": "Sucess",
    "DicId": "75",
    "Enable": 0,
    "OrderNo": 2,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "DicListId": 451,
    "DicName": "失败",
    "DicValue": "Error",
    "DicId": "75",
    "Enable": 0,
    "OrderNo": 3,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "DicListId": 452,
    "DicName": "1",
    "DicValue": "1",
    "DicId": "80",
    "Enable": 0,
    "OrderNo": null,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2023-12-12T10:28:05.55"
  },
  {
    "DicListId": 453,
    "DicName": "2",
    "DicValue": "2",
    "DicId": "80",
    "Enable": 0,
    "OrderNo": null,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2023-12-12T10:28:05.55"
  },
  {
    "DicListId": 454,
    "DicName": "3",
    "DicValue": "3",
    "DicId": "80",
    "Enable": 0,
    "OrderNo": null,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2023-12-12T10:28:05.55"
  },
  {
    "DicListId": 455,
    "DicName": "4",
    "DicValue": "4",
    "DicId": "80",
    "Enable": 0,
    "OrderNo": null,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": "超级管理员",
    "ModifyDate": "2023-12-12T10:28:05.55"
  },
  {
    "DicListId": 456,
    "DicName": "未审核",
    "DicValue": "OrderState_Unaudited",
    "DicId": "84",
    "Enable": 0,
    "OrderNo": null,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "DicListId": 457,
    "DicName": "已审核",
    "DicValue": "OrderState_Audited",
    "DicId": "84",
    "Enable": 0,
    "OrderNo": null,
    "Remark": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:22.553",
    "Modifier": null,
    "ModifyDate": null
  }
]
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Sys_Menu.tsv
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,344 @@
[
  {
    "MenuId": 1,
    "MenuName": "用户管理",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"导入\",\"value\":\"Import\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": "el-icon-user",
    "Description": null,
    "Enable": 1,
    "TableName": ".",
    "ParentId": 0,
    "Url": null,
    "OrderNo": 4000,
    "MenuType": 99,
    "Menus": null,
    "Actions": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:22.907",
    "Modifier": "admin",
    "ModifyDate": "2024-05-09T15:50:07.567"
  },
  {
    "MenuId": 2,
    "MenuName": "用户管理",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"导入\",\"value\":\"Import\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": null,
    "Description": null,
    "Enable": 1,
    "TableName": "Sys_User",
    "ParentId": 1,
    "Url": "/Sys_User",
    "OrderNo": 2000,
    "MenuType": 99,
    "Menus": null,
    "Actions": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:22.907",
    "Modifier": "admin",
    "ModifyDate": "2024-05-09T15:50:14.03"
  },
  {
    "MenuId": 3,
    "MenuName": "权限管理",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"导入\",\"value\":\"Import\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": "ivu-icon ivu-icon-ios-boat",
    "Description": null,
    "Enable": 1,
    "TableName": ",",
    "ParentId": 1,
    "Url": "/permission",
    "OrderNo": 1000,
    "MenuType": 99,
    "Menus": null,
    "Actions": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:22.907",
    "Modifier": "admin",
    "ModifyDate": "2024-05-09T15:50:20.727"
  },
  {
    "MenuId": 4,
    "MenuName": "角色管理",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"导入\",\"value\":\"Import\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": null,
    "Description": null,
    "Enable": 1,
    "TableName": "Sys_Role",
    "ParentId": 1,
    "Url": "/Sys_Role",
    "OrderNo": 900,
    "MenuType": 99,
    "Menus": null,
    "Actions": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:22.907",
    "Modifier": "admin",
    "ModifyDate": "2024-05-09T15:50:23.177"
  },
  {
    "MenuId": 5,
    "MenuName": "系统设置",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"导入\",\"value\":\"Import\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": "el-icon-setting",
    "Description": null,
    "Enable": 1,
    "TableName": "系统设置",
    "ParentId": 0,
    "Url": "/",
    "OrderNo": 0,
    "MenuType": 99,
    "Menus": null,
    "Actions": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:22.907",
    "Modifier": "admin",
    "ModifyDate": "2024-05-09T15:50:38.703"
  },
  {
    "MenuId": 6,
    "MenuName": "菜单设置",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"导入\",\"value\":\"Import\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": null,
    "Description": null,
    "Enable": 1,
    "TableName": "Sys_Menu",
    "ParentId": 5,
    "Url": "/sysmenu",
    "OrderNo": 10,
    "MenuType": 99,
    "Menus": null,
    "Actions": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:22.907",
    "Modifier": "admin",
    "ModifyDate": "2024-05-09T15:50:42.007"
  },
  {
    "MenuId": 7,
    "MenuName": "下拉框绑定设置",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"导入\",\"value\":\"Import\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": null,
    "Description": null,
    "Enable": 1,
    "TableName": "Sys_Dictionary",
    "ParentId": 5,
    "Url": "/Sys_Dictionary",
    "OrderNo": 10,
    "MenuType": 99,
    "Menus": null,
    "Actions": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:22.907",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "MenuId": 8,
    "MenuName": "日志管理",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"导入\",\"value\":\"Import\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": "el-icon-date",
    "Description": null,
    "Enable": 1,
    "TableName": "xxx",
    "ParentId": 0,
    "Url": "/",
    "OrderNo": 500,
    "MenuType": 99,
    "Menus": null,
    "Actions": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:22.907",
    "Modifier": "admin",
    "ModifyDate": "2024-05-09T15:50:30.557"
  },
  {
    "MenuId": 9,
    "MenuName": "接口日志",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"导入\",\"value\":\"Import\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": null,
    "Description": null,
    "Enable": 1,
    "TableName": "Sys_Log",
    "ParentId": 8,
    "Url": "/Sys_Log/Manager",
    "OrderNo": 0,
    "MenuType": 99,
    "Menus": null,
    "Actions": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:22.907",
    "Modifier": "admin",
    "ModifyDate": "2024-05-09T15:50:34.273"
  },
  {
    "MenuId": 10,
    "MenuName": "设备管理",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"导入\",\"value\":\"Import\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": "el-icon-date",
    "Description": null,
    "Enable": 1,
    "TableName": "",
    "ParentId": 0,
    "Url": "/",
    "OrderNo": 8000,
    "MenuType": 99,
    "Menus": null,
    "Actions": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:22.907",
    "Modifier": "admin",
    "ModifyDate": "2024-05-09T15:50:30.557"
  },
  {
    "MenuId": 11,
    "MenuName": "设备信息",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"导入\",\"value\":\"Import\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": "el-icon-date",
    "Description": null,
    "Enable": 1,
    "TableName": "Dt_DeviceInfo",
    "ParentId": 10,
    "Url": "/deviceInfo",
    "OrderNo": 500,
    "MenuType": 99,
    "Menus": null,
    "Actions": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:22.907",
    "Modifier": "admin",
    "ModifyDate": "2024-05-09T15:50:30.557"
  },
  {
    "MenuId": 12,
    "MenuName": "任务管理",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"导入\",\"value\":\"Import\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": "el-icon-date",
    "Description": null,
    "Enable": 1,
    "TableName": "",
    "ParentId": 0,
    "Url": "/",
    "OrderNo": 7000,
    "MenuType": 99,
    "Menus": null,
    "Actions": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:22.907",
    "Modifier": "admin",
    "ModifyDate": "2024-05-09T15:50:30.557"
  },
  {
    "MenuId": 13,
    "MenuName": "任务信息",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"回滚到上一步\",\"value\":\"Previous\"},{\"text\":\"跳转到下一步\",\"value\":\"Next\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"导入\",\"value\":\"Import\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": "el-icon-date",
    "Description": null,
    "Enable": 1,
    "TableName": "Dt_Task",
    "ParentId": 12,
    "Url": "/task",
    "OrderNo": 500,
    "MenuType": 99,
    "Menus": null,
    "Actions": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:22.907",
    "Modifier": "admin",
    "ModifyDate": "2024-05-09T15:50:30.557"
  },
  {
    "MenuId": 14,
    "MenuName": "设备协议信息",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"导入\",\"value\":\"Import\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": "el-icon-date",
    "Description": null,
    "Enable": 1,
    "TableName": "Dt_DeviceProtocol",
    "ParentId": 10,
    "Url": "/deviceProtocol",
    "OrderNo": 500,
    "MenuType": 99,
    "Menus": null,
    "Actions": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:22.907",
    "Modifier": "admin",
    "ModifyDate": "2024-05-09T15:50:30.557"
  },
  {
    "MenuId": 15,
    "MenuName": "设备协议明细信息",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"导入\",\"value\":\"Import\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": "el-icon-date",
    "Description": null,
    "Enable": 1,
    "TableName": "Dt_DeviceProtocolDetail",
    "ParentId": 10,
    "Url": "/deviceProtocolDetail",
    "OrderNo": 500,
    "MenuType": 99,
    "Menus": null,
    "Actions": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:22.907",
    "Modifier": "admin",
    "ModifyDate": "2024-05-09T15:50:30.557"
  },
  {
    "MenuId": 16,
    "MenuName": "调度服务配置信息",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"导入\",\"value\":\"Import\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": "el-icon-date",
    "Description": null,
    "Enable": 1,
    "TableName": "Dt_DispatchInfo",
    "ParentId": 10,
    "Url": "/dispatchInfo",
    "OrderNo": 500,
    "MenuType": 99,
    "Menus": null,
    "Actions": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:22.907",
    "Modifier": "admin",
    "ModifyDate": "2024-05-09T15:50:30.557"
  },
  {
    "MenuId": 17,
    "MenuName": "基础管理",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"导入\",\"value\":\"Import\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": "el-icon-date",
    "Description": null,
    "Enable": 1,
    "TableName": "",
    "ParentId": 0,
    "Url": "/",
    "OrderNo": 7000,
    "MenuType": 99,
    "Menus": null,
    "Actions": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:22.907",
    "Modifier": "admin",
    "ModifyDate": "2024-05-09T15:50:30.557"
  },
  {
    "MenuId": 18,
    "MenuName": "路由配置信息",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"查看全部路由\",\"value\":\"ViewAllRouter\"},{\"text\":\"路由配置\",\"value\":\"AddRouters\"},{\"text\":\"导入\",\"value\":\"Import\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": "el-icon-date",
    "Description": null,
    "Enable": 1,
    "TableName": "Dt_Router",
    "ParentId": 17,
    "Url": "/router",
    "OrderNo": 500,
    "MenuType": 99,
    "Menus": null,
    "Actions": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:22.907",
    "Modifier": "admin",
    "ModifyDate": "2024-05-09T15:50:30.557"
  }
]
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Sys_Role.tsv
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
[
  {
    "RoleId": 1,
    "DeptName": null,
    "DeptId": 111,
    "Enable": 1,
    "ParentId": 0,
    "RoleName": "超级管理员",
    "Roles": null,
    "Creater": "超级管理员",
    "CreateDate": "2024-08-23T11:32:23.227",
    "Modifier": "admin",
    "ModifyDate": "2024-04-29T13:53:44.717"
  }
]
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Sys_RoleAuth.tsv
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,167 @@
[
  {
    "AuthId": 136,
    "AuthValue": "Search,Add,Delete,Update,Import,Export",
    "MenuId": 1,
    "RoleId": 1,
    "UserId": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:23.527",
    "Modifier": "admin",
    "ModifyDate": "2024-02-22T09:31:16.363"
  },
  {
    "AuthId": 137,
    "AuthValue": "Search,Add,Delete,Update,Import,Export",
    "MenuId": 2,
    "RoleId": 1,
    "UserId": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:23.527",
    "Modifier": "admin",
    "ModifyDate": "2024-04-29T15:04:07.83"
  },
  {
    "AuthId": 138,
    "AuthValue": "Search,Add,Delete,Update,Import,Export",
    "MenuId": 3,
    "RoleId": 1,
    "UserId": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:23.527",
    "Modifier": "admin",
    "ModifyDate": "2024-02-22T09:31:16.363"
  },
  {
    "AuthId": 140,
    "AuthValue": "Search,Add,Delete,Update,Import,Export",
    "MenuId": 4,
    "RoleId": 1,
    "UserId": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:23.527",
    "Modifier": "admin",
    "ModifyDate": "2024-02-22T09:31:16.363"
  },
  {
    "AuthId": 141,
    "AuthValue": "Search,Add,Delete,Update,Import,Export",
    "MenuId": 5,
    "RoleId": 1,
    "UserId": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:23.527",
    "Modifier": "admin",
    "ModifyDate": "2024-02-22T09:31:16.363"
  },
  {
    "AuthId": 143,
    "AuthValue": "Search,Add,Delete,Update,Import,Export",
    "MenuId": 6,
    "RoleId": 1,
    "UserId": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:23.527",
    "Modifier": "admin",
    "ModifyDate": "2024-02-22T09:31:16.363"
  },
  {
    "AuthId": 144,
    "AuthValue": "Search,Add,Delete,Update,Import,Export",
    "MenuId": 7,
    "RoleId": 1,
    "UserId": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:23.527",
    "Modifier": "admin",
    "ModifyDate": "2024-04-29T15:00:47.033"
  },
  {
    "AuthId": 146,
    "AuthValue": "Search,Add,Delete,Update,Import,Export",
    "MenuId": 8,
    "RoleId": 1,
    "UserId": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:23.527",
    "Modifier": "admin",
    "ModifyDate": "2024-04-29T15:04:07.83"
  },
  {
    "AuthId": 148,
    "AuthValue": "Search,Add,Delete,Update,Import,Export",
    "MenuId": 9,
    "RoleId": 1,
    "UserId": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:23.527",
    "Modifier": "admin",
    "ModifyDate": "2024-02-22T09:31:16.363"
  },
  {
    "AuthId": 153,
    "AuthValue": "Search,Add,Delete,Update,Import,Export",
    "MenuId": 10,
    "RoleId": 1,
    "UserId": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:23.527",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "AuthId": 154,
    "AuthValue": "Search,Add,Delete,Update,Import,Export",
    "MenuId": 12,
    "RoleId": 1,
    "UserId": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:23.527",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "AuthId": 155,
    "AuthValue": "Search,Add,Delete,Update,Import,Export",
    "MenuId": 13,
    "RoleId": 1,
    "UserId": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:23.527",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "AuthId": 156,
    "AuthValue": "Search",
    "MenuId": 11,
    "RoleId": 1,
    "UserId": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:23.527",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "AuthId": 157,
    "AuthValue": "Search",
    "MenuId": 11,
    "RoleId": 2,
    "UserId": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:23.527",
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "AuthId": 158,
    "AuthValue": "Search,Add,Delete,Update,Import,Export",
    "MenuId": 10,
    "RoleId": 2,
    "UserId": null,
    "Creater": "admin",
    "CreateDate": "2024-08-23T11:32:23.527",
    "Modifier": null,
    "ModifyDate": null
  }
]
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Sys_User.tsv
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
[
  {
    "User_Id": 1,
    "UserName": "admin",
    "Role_Id": 1,
    "RoleName": "超级管理员",
    "PhoneNo": "",
    "Remark": "",
    "UserPwd": "j79rYYvCz4vdhcboB1Ausg==",
    "UserTrueName": "超级管理员",
    "DeptName": "",
    "Dept_Id": 0,
    "Email": "",
    "Enable": 1,
    "Gender": 1,
    "HeadImageUrl": "",
    "LastModifyPwdDate": "2024-04-16T19:58:55",
    "Address": "系统服务器",
    "AuditDate": "2024-04-16T00:54:06",
    "AuditStatus": 1,
    "Auditor": "超级管理员",
    "Token": "",
    "TenantId": 0,
    "Creater": "系统",
    "CreateDate": "2024-08-23T11:32:24.367",
    "Modifier": null,
    "ModifyDate": null
  }
]
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/css/style.css
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,132 @@
@charset "utf-8";
::selection {
  background: #2D2F36;
}
::-webkit-selection {
  background: #2D2F36;
}
::-moz-selection {
  background: #2D2F36;
}
body {
  background: white;
  font-family: 'Inter UI', sans-serif;
  margin: 0;
  padding: 20px;
}
.page {
  background: #e2e2e5;
  display: flex;
  flex-direction: column;
  height: calc(100% - 40px);
  position: absolute;
  place-content: center;
  width: calc(100% - 40px);
}
@media (max-width: 767px) {
  .page {
    height: auto;
    margin-bottom: 20px;
    padding-bottom: 20px;
  }
}
.container {
  display: flex;
  height: 320px;
  margin: 0 auto;
  width: 640px;
}
@media (max-width: 767px) {
  .container {
    flex-direction: column;
    height: 630px;
    width: 320px;
  }
}
.left {
  background: white;
  height: calc(100% - 40px);
  top: 20px;
  position: relative;
  width: 50%;
}
@media (max-width: 767px) {
  .left {
    height: 100%;
    left: 20px;
    width: calc(100% - 40px);
    max-height: 270px;
  }
}
.login {
  font-size: 33px;
  font-weight: 900;
  margin: 50px 40px 40px;
}
.eula {
  color: #999;
  font-size: 14px;
  line-height: 1.5;
  margin: 40px;
}
.right {
  background: #474A59;
  box-shadow: 0px 0px 40px 16px rgba(0,0,0,0.22);
  color: #F1F1F2;
  position: relative;
  width: 50%;
}
@media (max-width: 767px) {
  .right {
    flex-shrink: 0;
    height: 100%;
    width: 100%;
    max-height: 350px;
  }
}
svg {
  position: absolute;
  width: 320px;
}
path {
  fill: none;
  stroke: url(#linearGradient);;
  stroke-width: 4;
  stroke-dasharray: 240 1386;
}
.form {
  margin: 40px;
  position: absolute;
}
label {
  color:  #c2c2c5;
  display: block;
  font-size: 14px;
  height: 16px;
  margin-top: 20px;
  margin-bottom: 5px;
}
input {
  background: transparent;
  border: 0;
  color: #f2f2f2;
  font-size: 20px;
  height: 30px;
  line-height: 30px;
  outline: none !important;
  width: 100%;
}
input::-moz-focus-inner {
  border: 0;
}
#submit {
  color: #707075;
  margin-top: 40px;
  transition: color 300ms;
}
#submit:focus {
  color: #f2f2f2;
}
#submit:active {
  color: #d0d0d2;
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/favicon.ico
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/js/anime.min.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
/*
 2017 Julian Garnier
 Released under the MIT license
*/
var $jscomp={scope:{}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(e,r,p){if(p.get||p.set)throw new TypeError("ES3 does not support getters and setters.");e!=Array.prototype&&e!=Object.prototype&&(e[r]=p.value)};$jscomp.getGlobal=function(e){return"undefined"!=typeof window&&window===e?e:"undefined"!=typeof global&&null!=global?global:e};$jscomp.global=$jscomp.getGlobal(this);$jscomp.SYMBOL_PREFIX="jscomp_symbol_";
$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)};$jscomp.symbolCounter_=0;$jscomp.Symbol=function(e){return $jscomp.SYMBOL_PREFIX+(e||"")+$jscomp.symbolCounter_++};
$jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var e=$jscomp.global.Symbol.iterator;e||(e=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator"));"function"!=typeof Array.prototype[e]&&$jscomp.defineProperty(Array.prototype,e,{configurable:!0,writable:!0,value:function(){return $jscomp.arrayIterator(this)}});$jscomp.initSymbolIterator=function(){}};$jscomp.arrayIterator=function(e){var r=0;return $jscomp.iteratorPrototype(function(){return r<e.length?{done:!1,value:e[r++]}:{done:!0}})};
$jscomp.iteratorPrototype=function(e){$jscomp.initSymbolIterator();e={next:e};e[$jscomp.global.Symbol.iterator]=function(){return this};return e};$jscomp.array=$jscomp.array||{};$jscomp.iteratorFromArray=function(e,r){$jscomp.initSymbolIterator();e instanceof String&&(e+="");var p=0,m={next:function(){if(p<e.length){var u=p++;return{value:r(u,e[u]),done:!1}}m.next=function(){return{done:!0,value:void 0}};return m.next()}};m[Symbol.iterator]=function(){return m};return m};
$jscomp.polyfill=function(e,r,p,m){if(r){p=$jscomp.global;e=e.split(".");for(m=0;m<e.length-1;m++){var u=e[m];u in p||(p[u]={});p=p[u]}e=e[e.length-1];m=p[e];r=r(m);r!=m&&null!=r&&$jscomp.defineProperty(p,e,{configurable:!0,writable:!0,value:r})}};$jscomp.polyfill("Array.prototype.keys",function(e){return e?e:function(){return $jscomp.iteratorFromArray(this,function(e){return e})}},"es6-impl","es3");var $jscomp$this=this;
(function(e,r){"function"===typeof define&&define.amd?define([],r):"object"===typeof module&&module.exports?module.exports=r():e.anime=r()})(this,function(){function e(a){if(!h.col(a))try{return document.querySelectorAll(a)}catch(c){}}function r(a,c){for(var d=a.length,b=2<=arguments.length?arguments[1]:void 0,f=[],n=0;n<d;n++)if(n in a){var k=a[n];c.call(b,k,n,a)&&f.push(k)}return f}function p(a){return a.reduce(function(a,d){return a.concat(h.arr(d)?p(d):d)},[])}function m(a){if(h.arr(a))return a;
h.str(a)&&(a=e(a)||a);return a instanceof NodeList||a instanceof HTMLCollection?[].slice.call(a):[a]}function u(a,c){return a.some(function(a){return a===c})}function C(a){var c={},d;for(d in a)c[d]=a[d];return c}function D(a,c){var d=C(a),b;for(b in a)d[b]=c.hasOwnProperty(b)?c[b]:a[b];return d}function z(a,c){var d=C(a),b;for(b in c)d[b]=h.und(a[b])?c[b]:a[b];return d}function T(a){a=a.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(a,c,d,k){return c+c+d+d+k+k});var c=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(a);
a=parseInt(c[1],16);var d=parseInt(c[2],16),c=parseInt(c[3],16);return"rgba("+a+","+d+","+c+",1)"}function U(a){function c(a,c,b){0>b&&(b+=1);1<b&&--b;return b<1/6?a+6*(c-a)*b:.5>b?c:b<2/3?a+(c-a)*(2/3-b)*6:a}var d=/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.exec(a)||/hsla\((\d+),\s*([\d.]+)%,\s*([\d.]+)%,\s*([\d.]+)\)/g.exec(a);a=parseInt(d[1])/360;var b=parseInt(d[2])/100,f=parseInt(d[3])/100,d=d[4]||1;if(0==b)f=b=a=f;else{var n=.5>f?f*(1+b):f+b-f*b,k=2*f-n,f=c(k,n,a+1/3),b=c(k,n,a);a=c(k,n,a-1/3)}return"rgba("+
255*f+","+255*b+","+255*a+","+d+")"}function y(a){if(a=/([\+\-]?[0-9#\.]+)(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(a))return a[2]}function V(a){if(-1<a.indexOf("translate")||"perspective"===a)return"px";if(-1<a.indexOf("rotate")||-1<a.indexOf("skew"))return"deg"}function I(a,c){return h.fnc(a)?a(c.target,c.id,c.total):a}function E(a,c){if(c in a.style)return getComputedStyle(a).getPropertyValue(c.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase())||"0"}function J(a,c){if(h.dom(a)&&
u(W,c))return"transform";if(h.dom(a)&&(a.getAttribute(c)||h.svg(a)&&a[c]))return"attribute";if(h.dom(a)&&"transform"!==c&&E(a,c))return"css";if(null!=a[c])return"object"}function X(a,c){var d=V(c),d=-1<c.indexOf("scale")?1:0+d;a=a.style.transform;if(!a)return d;for(var b=[],f=[],n=[],k=/(\w+)\((.+?)\)/g;b=k.exec(a);)f.push(b[1]),n.push(b[2]);a=r(n,function(a,b){return f[b]===c});return a.length?a[0]:d}function K(a,c){switch(J(a,c)){case "transform":return X(a,c);case "css":return E(a,c);case "attribute":return a.getAttribute(c)}return a[c]||
0}function L(a,c){var d=/^(\*=|\+=|-=)/.exec(a);if(!d)return a;var b=y(a)||0;c=parseFloat(c);a=parseFloat(a.replace(d[0],""));switch(d[0][0]){case "+":return c+a+b;case "-":return c-a+b;case "*":return c*a+b}}function F(a,c){return Math.sqrt(Math.pow(c.x-a.x,2)+Math.pow(c.y-a.y,2))}function M(a){a=a.points;for(var c=0,d,b=0;b<a.numberOfItems;b++){var f=a.getItem(b);0<b&&(c+=F(d,f));d=f}return c}function N(a){if(a.getTotalLength)return a.getTotalLength();switch(a.tagName.toLowerCase()){case "circle":return 2*
Math.PI*a.getAttribute("r");case "rect":return 2*a.getAttribute("width")+2*a.getAttribute("height");case "line":return F({x:a.getAttribute("x1"),y:a.getAttribute("y1")},{x:a.getAttribute("x2"),y:a.getAttribute("y2")});case "polyline":return M(a);case "polygon":var c=a.points;return M(a)+F(c.getItem(c.numberOfItems-1),c.getItem(0))}}function Y(a,c){function d(b){b=void 0===b?0:b;return a.el.getPointAtLength(1<=c+b?c+b:0)}var b=d(),f=d(-1),n=d(1);switch(a.property){case "x":return b.x;case "y":return b.y;
case "angle":return 180*Math.atan2(n.y-f.y,n.x-f.x)/Math.PI}}function O(a,c){var d=/-?\d*\.?\d+/g,b;b=h.pth(a)?a.totalLength:a;if(h.col(b))if(h.rgb(b)){var f=/rgb\((\d+,\s*[\d]+,\s*[\d]+)\)/g.exec(b);b=f?"rgba("+f[1]+",1)":b}else b=h.hex(b)?T(b):h.hsl(b)?U(b):void 0;else f=(f=y(b))?b.substr(0,b.length-f.length):b,b=c&&!/\s/g.test(b)?f+c:f;b+="";return{original:b,numbers:b.match(d)?b.match(d).map(Number):[0],strings:h.str(a)||c?b.split(d):[]}}function P(a){a=a?p(h.arr(a)?a.map(m):m(a)):[];return r(a,
function(a,d,b){return b.indexOf(a)===d})}function Z(a){var c=P(a);return c.map(function(a,b){return{target:a,id:b,total:c.length}})}function aa(a,c){var d=C(c);if(h.arr(a)){var b=a.length;2!==b||h.obj(a[0])?h.fnc(c.duration)||(d.duration=c.duration/b):a={value:a}}return m(a).map(function(a,b){b=b?0:c.delay;a=h.obj(a)&&!h.pth(a)?a:{value:a};h.und(a.delay)&&(a.delay=b);return a}).map(function(a){return z(a,d)})}function ba(a,c){var d={},b;for(b in a){var f=I(a[b],c);h.arr(f)&&(f=f.map(function(a){return I(a,
c)}),1===f.length&&(f=f[0]));d[b]=f}d.duration=parseFloat(d.duration);d.delay=parseFloat(d.delay);return d}function ca(a){return h.arr(a)?A.apply(this,a):Q[a]}function da(a,c){var d;return a.tweens.map(function(b){b=ba(b,c);var f=b.value,e=K(c.target,a.name),k=d?d.to.original:e,k=h.arr(f)?f[0]:k,w=L(h.arr(f)?f[1]:f,k),e=y(w)||y(k)||y(e);b.from=O(k,e);b.to=O(w,e);b.start=d?d.end:a.offset;b.end=b.start+b.delay+b.duration;b.easing=ca(b.easing);b.elasticity=(1E3-Math.min(Math.max(b.elasticity,1),999))/
1E3;b.isPath=h.pth(f);b.isColor=h.col(b.from.original);b.isColor&&(b.round=1);return d=b})}function ea(a,c){return r(p(a.map(function(a){return c.map(function(b){var c=J(a.target,b.name);if(c){var d=da(b,a);b={type:c,property:b.name,animatable:a,tweens:d,duration:d[d.length-1].end,delay:d[0].delay}}else b=void 0;return b})})),function(a){return!h.und(a)})}function R(a,c,d,b){var f="delay"===a;return c.length?(f?Math.min:Math.max).apply(Math,c.map(function(b){return b[a]})):f?b.delay:d.offset+b.delay+
b.duration}function fa(a){var c=D(ga,a),d=D(S,a),b=Z(a.targets),f=[],e=z(c,d),k;for(k in a)e.hasOwnProperty(k)||"targets"===k||f.push({name:k,offset:e.offset,tweens:aa(a[k],d)});a=ea(b,f);return z(c,{children:[],animatables:b,animations:a,duration:R("duration",a,c,d),delay:R("delay",a,c,d)})}function q(a){function c(){return window.Promise&&new Promise(function(a){return p=a})}function d(a){return g.reversed?g.duration-a:a}function b(a){for(var b=0,c={},d=g.animations,f=d.length;b<f;){var e=d[b],
k=e.animatable,h=e.tweens,n=h.length-1,l=h[n];n&&(l=r(h,function(b){return a<b.end})[0]||l);for(var h=Math.min(Math.max(a-l.start-l.delay,0),l.duration)/l.duration,w=isNaN(h)?1:l.easing(h,l.elasticity),h=l.to.strings,p=l.round,n=[],m=void 0,m=l.to.numbers.length,t=0;t<m;t++){var x=void 0,x=l.to.numbers[t],q=l.from.numbers[t],x=l.isPath?Y(l.value,w*x):q+w*(x-q);p&&(l.isColor&&2<t||(x=Math.round(x*p)/p));n.push(x)}if(l=h.length)for(m=h[0],w=0;w<l;w++)p=h[w+1],t=n[w],isNaN(t)||(m=p?m+(t+p):m+(t+" "));
else m=n[0];ha[e.type](k.target,e.property,m,c,k.id);e.currentValue=m;b++}if(b=Object.keys(c).length)for(d=0;d<b;d++)H||(H=E(document.body,"transform")?"transform":"-webkit-transform"),g.animatables[d].target.style[H]=c[d].join(" ");g.currentTime=a;g.progress=a/g.duration*100}function f(a){if(g[a])g[a](g)}function e(){g.remaining&&!0!==g.remaining&&g.remaining--}function k(a){var k=g.duration,n=g.offset,w=n+g.delay,r=g.currentTime,x=g.reversed,q=d(a);if(g.children.length){var u=g.children,v=u.length;
if(q>=g.currentTime)for(var G=0;G<v;G++)u[G].seek(q);else for(;v--;)u[v].seek(q)}if(q>=w||!k)g.began||(g.began=!0,f("begin")),f("run");if(q>n&&q<k)b(q);else if(q<=n&&0!==r&&(b(0),x&&e()),q>=k&&r!==k||!k)b(k),x||e();f("update");a>=k&&(g.remaining?(t=h,"alternate"===g.direction&&(g.reversed=!g.reversed)):(g.pause(),g.completed||(g.completed=!0,f("complete"),"Promise"in window&&(p(),m=c()))),l=0)}a=void 0===a?{}:a;var h,t,l=0,p=null,m=c(),g=fa(a);g.reset=function(){var a=g.direction,c=g.loop;g.currentTime=
0;g.progress=0;g.paused=!0;g.began=!1;g.completed=!1;g.reversed="reverse"===a;g.remaining="alternate"===a&&1===c?2:c;b(0);for(a=g.children.length;a--;)g.children[a].reset()};g.tick=function(a){h=a;t||(t=h);k((l+h-t)*q.speed)};g.seek=function(a){k(d(a))};g.pause=function(){var a=v.indexOf(g);-1<a&&v.splice(a,1);g.paused=!0};g.play=function(){g.paused&&(g.paused=!1,t=0,l=d(g.currentTime),v.push(g),B||ia())};g.reverse=function(){g.reversed=!g.reversed;t=0;l=d(g.currentTime)};g.restart=function(){g.pause();
g.reset();g.play()};g.finished=m;g.reset();g.autoplay&&g.play();return g}var ga={update:void 0,begin:void 0,run:void 0,complete:void 0,loop:1,direction:"normal",autoplay:!0,offset:0},S={duration:1E3,delay:0,easing:"easeOutElastic",elasticity:500,round:0},W="translateX translateY translateZ rotate rotateX rotateY rotateZ scale scaleX scaleY scaleZ skewX skewY perspective".split(" "),H,h={arr:function(a){return Array.isArray(a)},obj:function(a){return-1<Object.prototype.toString.call(a).indexOf("Object")},
pth:function(a){return h.obj(a)&&a.hasOwnProperty("totalLength")},svg:function(a){return a instanceof SVGElement},dom:function(a){return a.nodeType||h.svg(a)},str:function(a){return"string"===typeof a},fnc:function(a){return"function"===typeof a},und:function(a){return"undefined"===typeof a},hex:function(a){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(a)},rgb:function(a){return/^rgb/.test(a)},hsl:function(a){return/^hsl/.test(a)},col:function(a){return h.hex(a)||h.rgb(a)||h.hsl(a)}},A=function(){function a(a,
d,b){return(((1-3*b+3*d)*a+(3*b-6*d))*a+3*d)*a}return function(c,d,b,f){if(0<=c&&1>=c&&0<=b&&1>=b){var e=new Float32Array(11);if(c!==d||b!==f)for(var k=0;11>k;++k)e[k]=a(.1*k,c,b);return function(k){if(c===d&&b===f)return k;if(0===k)return 0;if(1===k)return 1;for(var h=0,l=1;10!==l&&e[l]<=k;++l)h+=.1;--l;var l=h+(k-e[l])/(e[l+1]-e[l])*.1,n=3*(1-3*b+3*c)*l*l+2*(3*b-6*c)*l+3*c;if(.001<=n){for(h=0;4>h;++h){n=3*(1-3*b+3*c)*l*l+2*(3*b-6*c)*l+3*c;if(0===n)break;var m=a(l,c,b)-k,l=l-m/n}k=l}else if(0===
n)k=l;else{var l=h,h=h+.1,g=0;do m=l+(h-l)/2,n=a(m,c,b)-k,0<n?h=m:l=m;while(1e-7<Math.abs(n)&&10>++g);k=m}return a(k,d,f)}}}}(),Q=function(){function a(a,b){return 0===a||1===a?a:-Math.pow(2,10*(a-1))*Math.sin(2*(a-1-b/(2*Math.PI)*Math.asin(1))*Math.PI/b)}var c="Quad Cubic Quart Quint Sine Expo Circ Back Elastic".split(" "),d={In:[[.55,.085,.68,.53],[.55,.055,.675,.19],[.895,.03,.685,.22],[.755,.05,.855,.06],[.47,0,.745,.715],[.95,.05,.795,.035],[.6,.04,.98,.335],[.6,-.28,.735,.045],a],Out:[[.25,
.46,.45,.94],[.215,.61,.355,1],[.165,.84,.44,1],[.23,1,.32,1],[.39,.575,.565,1],[.19,1,.22,1],[.075,.82,.165,1],[.175,.885,.32,1.275],function(b,c){return 1-a(1-b,c)}],InOut:[[.455,.03,.515,.955],[.645,.045,.355,1],[.77,0,.175,1],[.86,0,.07,1],[.445,.05,.55,.95],[1,0,0,1],[.785,.135,.15,.86],[.68,-.55,.265,1.55],function(b,c){return.5>b?a(2*b,c)/2:1-a(-2*b+2,c)/2}]},b={linear:A(.25,.25,.75,.75)},f={},e;for(e in d)f.type=e,d[f.type].forEach(function(a){return function(d,f){b["ease"+a.type+c[f]]=h.fnc(d)?
d:A.apply($jscomp$this,d)}}(f)),f={type:f.type};return b}(),ha={css:function(a,c,d){return a.style[c]=d},attribute:function(a,c,d){return a.setAttribute(c,d)},object:function(a,c,d){return a[c]=d},transform:function(a,c,d,b,f){b[f]||(b[f]=[]);b[f].push(c+"("+d+")")}},v=[],B=0,ia=function(){function a(){B=requestAnimationFrame(c)}function c(c){var b=v.length;if(b){for(var d=0;d<b;)v[d]&&v[d].tick(c),d++;a()}else cancelAnimationFrame(B),B=0}return a}();q.version="2.2.0";q.speed=1;q.running=v;q.remove=
function(a){a=P(a);for(var c=v.length;c--;)for(var d=v[c],b=d.animations,f=b.length;f--;)u(a,b[f].animatable.target)&&(b.splice(f,1),b.length||d.pause())};q.getValue=K;q.path=function(a,c){var d=h.str(a)?e(a)[0]:a,b=c||100;return function(a){return{el:d,property:a,totalLength:N(d)*(b/100)}}};q.setDashoffset=function(a){var c=N(a);a.setAttribute("stroke-dasharray",c);return c};q.bezier=A;q.easings=Q;q.timeline=function(a){var c=q(a);c.pause();c.duration=0;c.add=function(d){c.children.forEach(function(a){a.began=
!0;a.completed=!0});m(d).forEach(function(b){var d=z(b,D(S,a||{}));d.targets=d.targets||a.targets;b=c.duration;var e=d.offset;d.autoplay=!1;d.direction=c.direction;d.offset=h.und(e)?b:L(e,b);c.began=!0;c.completed=!0;c.seek(d.offset);d=q(d);d.began=!0;d.completed=!0;d.duration>b&&(c.duration=d.duration);c.children.push(d)});c.seek(0);c.reset();c.autoplay&&c.restart();return c};return c};q.random=function(a,c){return Math.floor(Math.random()*(c-a+1))+a};return q});
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/logo.jpg.jpg
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/swg-login.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,130 @@
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>登录 - æŽ¥å£æ–‡æ¡£</title>
    <!--<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>-->
    <script src="js/jquery-1.8.3.min.js"></script>
    <link type="text/css" href="css/style.css" rel="stylesheet" />
    <script src="js/anime.min.js"></script>
</head>
<body>
    <div class="page">
        <div class="container">
            <div class="left">
                <div></div>
                <div class="login"><img src="/logo.jpg.jpg" height="30" alt="Alternate Text" /> æŽ¥å£æ–‡æ¡£</div>
                <div class="eula">欢迎使用!</div>
                <!--<div class="eula">用户名:admin,密码:admin</div>-->
            </div>
            <div class="right">
                <svg viewBox="0 0 320 300">
                    <defs>
                        <linearGradient inkscape:collect="always"
                                        id="linearGradient"
                                        x1="13"
                                        y1="193.49992"
                                        x2="307"
                                        y2="193.49992"
                                        gradientUnits="userSpaceOnUse">
                            <stop style="stop-color:#ff00ff;"
                                  offset="0"
                                  id="stop876" />
                            <stop style="stop-color:#ff0000;"
                                  offset="1"
                                  id="stop878" />
                        </linearGradient>
                    </defs>
                    <path d="m 40,120.00016 239.99984,-3.2e-4 c 0,0 24.99263,0.79932 25.00016,35.00016 0.008,34.20084 -25.00016,35 -25.00016,35 h -239.99984 c 0,-0.0205 -25,4.01348 -25,38.5 0,34.48652 25,38.5 25,38.5 h 215 c 0,0 20,-0.99604 20,-25 0,-24.00396 -20,-25 -20,-25 h -190 c 0,0 -20,1.71033 -20,25 0,24.00396 20,25 20,25 h 168.57143" />
                </svg>
                <div class="form">
                    <label for="email">用户名</label>
                    <input type="email" id="email">
                    <label for="password">密码</label>
                    <input type="password" id="password">
                    <input type="submit" id="submit" onclick="submit()" value="登 å½•">
                </div>
            </div>
        </div>
    </div>
    <script>
        var current = null;
        document.querySelector('#email').addEventListener('focus', function (e) {
            if (current) current.pause();
            current = anime({
                targets: 'path',
                strokeDashoffset: {
                    value: 0,
                    duration: 700,
                    easing: 'easeOutQuart'
                },
                strokeDasharray: {
                    value: '240 1386',
                    duration: 700,
                    easing: 'easeOutQuart'
                }
            });
        });
        document.querySelector('#password').addEventListener('focus', function (e) {
            if (current) current.pause();
            current = anime({
                targets: 'path',
                strokeDashoffset: {
                    value: -336,
                    duration: 700,
                    easing: 'easeOutQuart'
                },
                strokeDasharray: {
                    value: '240 1386',
                    duration: 700,
                    easing: 'easeOutQuart'
                }
            });
        });
        document.querySelector('#submit').addEventListener('focus', function (e) {
            if (current) current.pause();
            current = anime({
                targets: 'path',
                strokeDashoffset: {
                    value: -730,
                    duration: 700,
                    easing: 'easeOutQuart'
                },
                strokeDasharray: {
                    value: '530 1386',
                    duration: 700,
                    easing: 'easeOutQuart'
                }
            });
        });
        function submit() {
            let postdata = {
                "name": $("#email").val(),
                "pwd": $("#password").val(),
            };
            if (!(postdata.name && postdata.pwd)) {
                alert('参数不正确');
                return
            }
            $.ajax({
                url: "/api/User/swgLogin",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify(postdata),
                dataType: 'json',
                success: function (data) {
                    if (data?.result) {
                        window.location.href = "/index.html";
                    } else {
                        alert('参数不正确');
                    }
                }
            });
        }
    </script>
</body>
</html>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_DictionaryListRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_SystemRepository
{
    public class Sys_DictionaryListRepository : RepositoryBase<Sys_DictionaryList>, ISys_DictionaryListRepository
    {
        public Sys_DictionaryListRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_DictionaryRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
using Microsoft.AspNetCore.DataProtection.KeyManagement;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_SystemRepository
{
    public class Sys_DictionaryRepository : RepositoryBase<Sys_Dictionary>, ISys_DictionaryRepository
    {
        public Sys_DictionaryRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="dicNos"></param>
        /// <param name="executeSql">是否执行自定义sql</param>
        /// <returns></returns>
        public IEnumerable<Sys_Dictionary> GetDictionaries(IEnumerable<string> dicNos, bool executeSql = false)
        {
            List<Sys_Dictionary> Dictionaries = GetAllDictionary(dicNos);
            //foreach (var item in Dictionaries.Where(x => dicNos.Contains(x.DicNo)))
            //{
            //    if (executeSql)
            //    {
            //        //  2020.05.01增加根据用户信息加载字典数据源sql
            //        string sql = item.DBSql;
            //        if (!string.IsNullOrEmpty(sql))
            //        {
            //            item.DicList = Query(sql);
            //        }
            //    }
            //}
            return Dictionaries;
        }
        List<Sys_DictionaryList> Query(string sql)
        {
            try
            {
                return base.QueryDynamicDataBySql(sql, null).Select(s => new Sys_DictionaryList()
                {
                    DicName = s.Value,
                    DicValue = s.Key.ToString()
                }).ToList();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        private List<Sys_Dictionary> GetAllDictionary(IEnumerable<string> dicNos)
        {
            //base.QueryData().ToList();
            List<Sys_Dictionary> _dictionaries = Db.Queryable<Sys_Dictionary>().Includes(x => x.DicList).Where(x => x.Enable == 1 && dicNos.Contains(x.DicNo)).ToList();
            return _dictionaries;
        }
    }
    public class SourceKeyVaule
    {
        public object Key { get; set; }
        public string Value { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_LogRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_SystemRepository
{
    public class Sys_LogRepository : RepositoryBase<Sys_Log>, ISys_LogRepository
    {
        public Sys_LogRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_MenuRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,201 @@
using SqlSugar;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_Model;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_SystemRepository
{
    public class Sys_MenuRepository : RepositoryBase<Sys_Menu>, ISys_MenuRepository
    {
        public Sys_MenuRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
        public List<Sys_Menu> GetAllMenu()
        {
            List<Sys_Menu> _menus = base.QueryData(x => x.Enable == 1 || x.Enable == 2).OrderByDescending(a => a.OrderNo).ThenByDescending(q => q.ParentId).ToList();
            _menus.ForEach(x =>
            {
                x.MenuType ??= 0;
                if (!string.IsNullOrEmpty(x.Auth) && x.Auth.Length > 10)
                {
                    try
                    {
                        x.Actions = x.Auth.DeserializeObject<List<Sys_Actions>>();
                    }
                    catch { }
                }
                x.Actions ??= new List<Sys_Actions>();
            });
            string test = _menus.Serialize();
            return _menus;
        }
        public object GetSuperAdminMenu()
        {
            return GetAllMenu().Select(x =>
                  new
                  {
                      id = x.MenuId,
                      name = x.MenuName,
                      url = x.Url,
                      parentId = x.ParentId,
                      icon = x.Icon,
                      x.Enable,
                      x.TableName, // 2022.03.26增移动端加菜单类型
                      permission = x.Actions.Select(s => s.Value).ToArray()
                  }).ToList();
        }
        public object GetMenuByRoleId(int roleId)
        {
            var menu = from a in GetPermissions(roleId)
                       join b in GetAllMenu()
                       on a.MenuId equals b.MenuId
                       orderby b.OrderNo descending
                       select new
                       {
                           id = a.MenuId,
                           name = b.MenuName,
                           url = b.Url,
                           parentId = b.ParentId,
                           icon = b.Icon,
                           b.Enable,
                           b.TableName,
                           permission = a.UserAuthArr
                       };
            return menu.ToList();
        }
        /// <summary>
        /// èŽ·å–è§’è‰²æƒé™æ—¶é€šè¿‡å®‰å…¨å­—å…¸é”å®šçš„è§’è‰²id
        /// </summary>
        private static ConcurrentDictionary<string, object> objKeyValue = new ConcurrentDictionary<string, object>();
        public List<Permissions> GetPermissions(int roleId)
        {
            if (App.User.IsRoleIdSuperAdmin(roleId))
            {
                //2020.12.27增加菜单界面上不显示,但可以分配权限
                var permissions = QueryData(x => x.Enable == 1 || x.Enable == 2)
                    .Select(a => new Permissions
                    {
                        MenuId = a.MenuId,
                        ParentId = a.ParentId,
                        TableName = (a.TableName ?? "").ToLower(),
                        UserAuth = a.Auth,
                        MenuType = a.MenuType ?? 0
                    }).ToList();
                return MenuActionToArray(permissions);
            }
            //锁定每个角色,通过安全字典减少锁粒度,否则多个同时角色获取缓存会导致阻塞
            object objId = objKeyValue.GetOrAdd(roleId.ToString(), new object());
            //锁定每个角色
            lock (objId)
            {
                //没有redis/memory缓存角色的版本号或与当前服务器的角色版本号不同时,刷新缓存
                List<Permissions> _permissions = QueryTabs<Sys_Menu, Sys_RoleAuth, Permissions>((a, b) => new object[] { JoinType.Inner, a.MenuId == b.MenuId }, (a, b) => new Permissions { MenuId = a.MenuId, ParentId = a.ParentId, TableName = (a.TableName ?? "").ToLower(), MenuAuth = a.Auth, UserAuth = b.AuthValue ?? "", MenuType = a.MenuType ?? 0 }, (a, b) => b.RoleId == roleId, x => true);
                ActionToArray(_permissions);
                return _permissions;
            }
        }
        private List<Permissions> MenuActionToArray(List<Permissions> permissions)
        {
            permissions.ForEach(x =>
            {
                try
                {
                    x.UserAuthArr = string.IsNullOrEmpty(x.UserAuth)
                    ? new string[0]
                    : x.UserAuth.DeserializeObject<List<Sys_Actions>>().Select(s => s.Value).ToArray();
                }
                catch { }
                finally
                {
                    if (x.UserAuthArr == null)
                    {
                        x.UserAuthArr = new string[0];
                    }
                }
            });
            return permissions;
        }
        private List<Permissions> ActionToArray(List<Permissions> permissions)
        {
            permissions.ForEach(x =>
            {
                try
                {
                    var menuAuthArr = x.MenuAuth.DeserializeObject<List<Sys_Actions>>();
                    x.UserAuthArr = string.IsNullOrEmpty(x.UserAuth)
                    ? new string[0]
                    : x.UserAuth.Split(",").Where(c => menuAuthArr.Any(m => m.Value == c)).ToArray();
                }
                catch { }
                finally
                {
                    if (x.UserAuthArr == null)
                    {
                        x.UserAuthArr = new string[0];
                    }
                }
            });
            return permissions;
        }
        public object GetMenu(List<int> menuIds)
        {
            return QueryData(x => menuIds.Contains(x.MenuId)).Select(a =>
             new
             {
                 id = a.MenuId,
                 parentId = a.ParentId,
                 name = a.MenuName,
                 a.MenuType,
                 a.OrderNo
             }).OrderByDescending(a => a.OrderNo)
                .ThenByDescending(q => q.parentId).ToList();
        }
        public object GetTreeItem(int menuId)
        {
            var sysMenu = base.QueryData(x => x.MenuId == menuId)
                .Select(
                p => new
                {
                    p.MenuId,
                    p.ParentId,
                    p.MenuName,
                    p.Url,
                    p.Auth,
                    p.OrderNo,
                    p.Icon,
                    p.Enable,
                    // 2022.03.26增移动端加菜单类型
                    MenuType = p.MenuType ?? 0,
                    p.CreateDate,
                    p.Creater,
                    p.TableName,
                    p.ModifyDate
                }).FirstOrDefault();
            return sysMenu;
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_RoleAuthRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_SystemRepository
{
    internal class Sys_RoleAuthRepository : RepositoryBase<Sys_RoleAuth>, ISys_RoleAuthRepository
    {
        public Sys_RoleAuthRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_RoleRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_SystemRepository
{
    public class Sys_RoleRepository : RepositoryBase<Sys_Role>, ISys_RoleRepository
    {
        public Sys_RoleRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_TenantRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_SystemRepository
{
    public class Sys_TenantRepository : RepositoryBase<Sys_Tenant>, ISys_TenantRepository
    {
        public Sys_TenantRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_UserRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Core.HttpContextUser;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_Model;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_SystemRepository
{
    public class Sys_UserRepository : RepositoryBase<Sys_User>, ISys_UserRepository
    {
        public Sys_UserRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
        public UserInfo GetUserInfo(string userName, string password)
        {
            return QueryFirst(x => x.UserName == userName && x.UserPwd == password, x => new UserInfo { HeadImageUrl = x.HeadImageUrl, RoleId = x.Role_Id, TenantId = x.TenantId, UserId = x.User_Id, UserName = x.UserName, UserTrueName = x.UserTrueName });
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/WIDESEAWCS_SystemRepository.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    </PropertyGroup>
    <ItemGroup>
        <ProjectReference Include="..\WIDESEAWCS_ISystemRepository\WIDESEAWCS_ISystemRepository.csproj" />
    </ItemGroup>
</Project>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_DictionaryListService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_SystemServices
{
    public class Sys_DictionaryListService : ServiceBase<Sys_DictionaryList, ISys_DictionaryListRepository>, ISys_DictionaryListService
    {
        public Sys_DictionaryListService(ISys_DictionaryListRepository BaseDal) : base(BaseDal)
        {
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_DictionaryService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,114 @@
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Core.Caches;
using WIDESEAWCS_Core.DB;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.System;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_SystemServices
{
    public class Sys_DictionaryService : ServiceBase<Sys_Dictionary, ISys_DictionaryRepository>, ISys_DictionaryService
    {
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly ICacheService _cacheService;
        public Sys_DictionaryService(ISys_DictionaryRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, ICacheService cacheService) : base(BaseDal)
        {
            _unitOfWorkManage = unitOfWorkManage;
            _cacheService = cacheService;
        }
        public List<VueDictionaryDTO> GetVueDictionary(string[] dicNos)
        {
            if (dicNos == null || dicNos.Count() == 0) return new List<VueDictionaryDTO>();
            List<VueDictionaryDTO> vueDictionaryDTOs = new List<VueDictionaryDTO>();
            List<string> cacheDicNos = new List<string>();
            foreach (string n in dicNos)
            {
                string str = _cacheService.Get(n);
                if (!string.IsNullOrEmpty(str))
                {
                    VueDictionaryDTO? vueDictionary = JsonConvert.DeserializeObject<VueDictionaryDTO>(str);
                    if (vueDictionary != null)
                    {
                        vueDictionaryDTOs.Add(vueDictionary);
                        cacheDicNos.Add(n);
                    }
                }
            }
            if (dicNos.Where(x => !cacheDicNos.Contains(x)).Count() > 0)
            {
                List<string> list = dicNos.Where(x => !cacheDicNos.Contains(x)).ToList();
                List<Sys_Dictionary> dictionaries = BaseDal.GetDictionaries(list).ToList();
                List<VueDictionaryDTO> selectDics = dictionaries.Select(s => new VueDictionaryDTO
                {
                    DicNo = s.DicNo,
                    Config = s.Config,
                    //dbSql = s.Sql,
                    Data = s.DicList.OrderByDescending(o => o.OrderNo).Select(list => new { key = list.DicValue, value = list.DicName })
                }).ToList();
                foreach (var v in dictionaries)
                {
                    if (!string.IsNullOrEmpty(v.DBSql))
                    {
                        VueDictionaryDTO? temp = selectDics.FirstOrDefault(x => x.DicNo == v.DicNo);
                        if (temp != null)
                            selectDics.Remove(temp);
                        selectDics.Add(new VueDictionaryDTO
                        {
                            Config = v.Config,
                            DicNo = v.DicNo,
                            Data = BaseDal.QueryDynamicDataBySql(v.DBSql)
                        });
                    }
                }
                foreach (var item in selectDics)
                {
                    if (!_cacheService.Exists(item.DicNo))
                    {
                        _cacheService.Add(item.DicNo, item.Serialize());
                    }
                }
                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;
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_LogService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_SystemServices
{
    public class Sys_LogService : ServiceBase<Sys_Log, ISys_LogRepository>, ISys_LogService
    {
        public Sys_LogService(ISys_LogRepository BaseDal) : base(BaseDal)
        {
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_MenuService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,190 @@
using SqlSugar;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_SystemServices
{
    public class Sys_MenuService : ServiceBase<Sys_Menu, ISys_MenuRepository>, ISys_MenuService
    {
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        public Sys_MenuService(ISys_MenuRepository BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
        {
            _unitOfWorkManage = unitOfWorkManage;
        }
        /// <summary>
        /// èŽ·å–å½“å‰ç”¨æˆ·æ‰€æœ‰èœå•ä¸Žæƒé™
        /// </summary>
        /// <returns></returns>
        public object GetCurrentMenuActionList()
        {
            object obj = GetMenuActionList(App.User.RoleId);
            if (obj is IEnumerable<object> list)
            {
                if (list.Any())
                {
                    return obj;
                }
                else
                {
                    return WebResponseContent.Instance.Error("未获取到菜单信息");
                }
            }
            return obj;
        }
        /// <summary>
        /// æ ¹æ®è§’色ID获取菜单与权限
        /// </summary>
        /// <param name="roleId"></param>
        /// <returns></returns>
        public object GetMenuActionList(int roleId)
        {
            if (App.User.IsRoleIdSuperAdmin(roleId))
            {
                return BaseDal.GetSuperAdminMenu();
            }
            return BaseDal.GetMenuByRoleId(roleId);
        }
        public List<Sys_Menu> GetUserMenuList(int roleId)
        {
            if (App.User.IsRoleIdSuperAdmin(roleId))
            {
                return BaseDal.GetAllMenu();
            }
            List<int> menuIds = BaseDal.GetPermissions(roleId).Select(x => x.MenuId).ToList();
            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)
        {
            if (App.User.IsRoleIdSuperAdmin(roleId))
            {
                return menuActions;
            }
            return menuActions.Where(p => permissions
                 .Exists(w => menuId == w.MenuId
                 && w.UserAuthArr.Contains(p.Value)))
                  .ToList();
        }
        /// <summary>
        /// ç¼–辑修改菜单时,获取所有菜单
        /// </summary>
        /// <returns></returns>
        public object GetMenu()
        {
            if (App.User.IsRoleIdSuperAdmin(App.User.RoleId))
            {
                List<int> menuIds = BaseDal.QueryData().Select(x => x.MenuId).ToList();
                return BaseDal.GetMenu(menuIds);
            }
            else
            {
                List<int> menuIds = BaseDal.GetPermissions(App.User.RoleId).Select(x => x.MenuId).ToList();
                return BaseDal.GetMenu(menuIds);
            }
        }
        /// <summary>
        /// ç¼–辑菜单时,获取菜单信息
        /// </summary>
        /// <param name="menuId"></param>
        /// <returns></returns>
        public object GetTreeItem(int menuId)
        {
            return BaseDal.GetTreeItem(menuId);
        }
        /// <summary>
        /// æ–°å»ºæˆ–编辑菜单
        /// </summary>
        /// <param name="menu"></param>
        /// <returns></returns>
        public WebResponseContent Save(Sys_Menu menu)
        {
            WebResponseContent webResponse = new WebResponseContent();
            if (menu == null) return webResponse.Error("没有获取到提交的参数");
            if (menu.MenuId > 0 && menu.MenuId == menu.ParentId) return webResponse.Error("父级ID不能是当前菜单的ID");
            try
            {
                //webResponse = menu.ValidationEntity(x => new { x.MenuName, x.TableName });
                //if (!webResponse.Status) return webResponse;
                if (menu.TableName != "/" && menu.TableName != ".")
                {
                    // 2022.03.26增移动端加菜单类型判断
                    Sys_Menu sysMenu = BaseDal.QueryFirst(x => x.TableName == menu.TableName);
                    if (sysMenu != null)
                    {
                        sysMenu.MenuType ??= 0;
                        if (sysMenu.MenuType == menu.MenuType)
                        {
                            if ((menu.MenuId > 0 && sysMenu.MenuId != menu.MenuId)
                            || menu.MenuId <= 0)
                            {
                                return webResponse.Error($"视图/表名【{menu.TableName}】已被其他菜单使用");
                            }
                        }
                    }
                }
                bool _changed = false;
                if (menu.MenuId <= 0)
                {
                    int id = BaseDal.AddData(menu);
                    menu.MenuId = id;
                }
                else
                {
                    //2020.05.07新增禁止选择上级角色为自己
                    if (menu.MenuId == menu.ParentId)
                    {
                        return webResponse.Error($"父级id不能为自己");
                    }
                    if (BaseDal.QueryFirst(x => x.ParentId == menu.MenuId && menu.ParentId == x.MenuId) != null)
                    {
                        return webResponse.Error($"不能选择此父级id,选择的父级id与当前菜单形成依赖关系");
                    }
                    _changed = BaseDal.QueryData(c => c.MenuId == menu.MenuId).Select(s => s.Auth).FirstOrDefault() != menu.Auth;
                    BaseDal.UpdateData(menu);
                }
                webResponse.OK("保存成功", menu);
            }
            catch (Exception ex)
            {
                webResponse.Error(ex.Message);
            }
            return webResponse;
        }
        public WebResponseContent DelMenu(int menuId)
        {
            WebResponseContent webResponse = new WebResponseContent();
            if(BaseDal.QueryFirst(x=>x.ParentId == menuId) != null)
            {
                return webResponse = WebResponseContent.Instance.Error("当前菜单存在子菜单,请先删除子菜单!");
            }
            BaseDal.DeleteDataById(menuId);
            return webResponse = WebResponseContent.Instance.OK("删除成功");
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_RoleAuthService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_SystemServices
{
    public class Sys_RoleAuthService : ServiceBase<Sys_RoleAuth, ISys_RoleAuthRepository>, ISys_RoleAuthService
    {
        public Sys_RoleAuthService(ISys_RoleAuthRepository BaseDal) : base(BaseDal)
        {
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_RoleService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,213 @@
using Microsoft.AspNetCore.DataProtection.KeyManagement;
using SqlSugar;
using System;
using System.Collections.Generic;
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;
using WIDESEAWCS_Core.HttpContextUser;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_Model.Models.System;
using WIDESEAWCS_SystemRepository;
namespace WIDESEAWCS_SystemServices.System
{
    public class Sys_RoleService : ServiceBase<Sys_Role, ISys_RoleRepository>, ISys_RoleService
    {
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly ISys_MenuRepository _MenuRepository;
        private readonly ISys_MenuService _MenuService;
        private readonly ISys_RoleAuthRepository _RoleAuthRepository;
        public Sys_RoleService(ISys_RoleRepository BaseDal, ISys_MenuRepository MenuRepository, ISys_MenuService MenuService, ISys_RoleAuthRepository roleAuthRepository, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
        {
            _unitOfWorkManage = unitOfWorkManage;
            _MenuRepository = MenuRepository;
            _MenuService = MenuService;
            _RoleAuthRepository = roleAuthRepository;
        }
        public List<RoleNodes> GetAllChildren(int roleId)
        {
            if (roleId <= 0) return new List<RoleNodes>() { };
            var roles = GetAllRoleId();
            if (App.User.IsRoleIdSuperAdmin(roleId)) return roles;
            var list = GetChildren(roles, roleId);
            return list;
        }
        public  List<RoleNodes> GetAllRoleId()
        {
            List<RoleNodes> roles = BaseDal.QueryData().Select(s => new RoleNodes() { Id = s.RoleId, ParentId = s.ParentId, RoleName = s.RoleName }).ToList();
            return roles;
        }
        /// <summary>
        /// èŽ·å–æ‰€æœ‰å­èŠ‚ç‚¹
        /// </summary>
        /// <param name="roleId"></param>
        private List<RoleNodes> GetChildren(List<RoleNodes> roles, int roleId)
        {
            List<RoleNodes> rolesChildren = roles.Where(x => x.Id == roleId).Distinct().ToList();
            for (int i = 0; i < rolesChildren.Count; i++)
            {
                RoleNodes node = rolesChildren[i];
                var children = roles.Where(x => x.ParentId == node.Id && !rolesChildren.Any(c => c.Id == x.Id)).Distinct().ToList();
                rolesChildren.AddRange(children);
            }
            return rolesChildren;
        }
        /// <summary>
        /// ç¼–辑权限时获取当前用户下的所有角色与当前用户的菜单权限
        /// </summary>
        /// <returns></returns>
        public WebResponseContent GetCurrentTreePermission()
        {
            WebResponseContent content = GetCurrentUserTreePermission();
            int roleId = App.User.RoleId;
            return WebResponseContent.Instance.OK(null, new
            {
                tree = content.Data,
                roles = GetAllChildren(roleId)
            });
        }
        /// <summary>
        /// ç¼–辑权限时,获取当前用户的所有菜单权限
        /// </summary>
        /// <returns></returns>
        public WebResponseContent GetCurrentUserTreePermission()
        {
            return GetUserTreePermission(App.User.RoleId);
        }
        /// <summary>
        /// ç¼–辑权限时,获取指定角色的所有菜单权限
        /// </summary>
        /// <param name="roleId"></param>
        /// <returns></returns>
        public WebResponseContent GetUserTreePermission(int roleId)
        {
            if (!App.User.IsRoleIdSuperAdmin(roleId) && App.User.RoleId != roleId)
            {
                if (!(GetAllChildren(App.User.RoleId)).Exists(x => x.Id == roleId))
                {
                    return WebResponseContent.Instance.Error("没有权限获取此角色的权限信息");
                }
            }
            //获取用户权限
            List<Permissions> permissions = _MenuRepository.GetPermissions(roleId);
            //权限用户权限查询所有的菜单信息
            List<Sys_Menu> menus =  _MenuService.GetUserMenuList(roleId);
            //获取当前用户权限如:(Add,Search)对应的显示文本信息如:Add:添加,Search:查询
            var data = menus.Select(x => new
            {
                Id = x.MenuId,
                Pid = x.ParentId,
                Text = x.MenuName,
                IsApp = x.MenuType == 1,
                Actions = _MenuService.GetActions(x.MenuId, x.Actions, permissions, roleId)
            });
            return WebResponseContent.Instance.OK(null, data);
        }
        /// <summary>
        /// ä¿å­˜è§’色权限
        /// </summary>
        /// <param name="userPermissions"></param>
        /// <param name="roleId"></param>
        /// <returns></returns>
        public WebResponseContent SavePermission(List<UserPermissionDTO> userPermissions, int roleId)
        {
            WebResponseContent content = new WebResponseContent();
            string message = "";
            try
            {
                if (!GetAllChildren(App.User.RoleId).Exists(x => x.Id == roleId))
                    return WebResponseContent.Instance.Error("没有权限修改此角色的权限信息");
                //当前用户的权限
                List<Permissions> permissions = _MenuRepository.GetPermissions(App.User.RoleId);
                List<int> originalMeunIds = new List<int>();
                //被分配角色的权限
                List<Sys_RoleAuth> roleAuths = _RoleAuthRepository.QueryData(x => x.RoleId == roleId);
                List<Sys_RoleAuth> updateAuths = new List<Sys_RoleAuth>();
                foreach (UserPermissionDTO x in userPermissions)
                {
                    Permissions per = permissions.FirstOrDefault(p => p.MenuId == x.Id);
                    //不能分配超过当前用户的权限
                    if (per == null) continue;
                    //per.UserAuthArr.Contains(a.Value)校验权限范围
                    string[] arr = x.Actions == null || x.Actions.Count == 0
                      ? new string[0]
                      : x.Actions.Where(a => per.UserAuthArr.Contains(a.Value))
                      .Select(s => s.Value).ToArray();
                    //如果当前权限没有分配过,设置Auth_Id默认为0,表示新增的权限
                    var auth = roleAuths.Where(r => r.MenuId == x.Id).Select(s => new { s.AuthId, s.AuthValue, s.MenuId }).FirstOrDefault();
                    string newAuthValue = string.Join(",", arr);
                    //权限没有发生变化则不处理
                    if (auth == null || auth.AuthValue != newAuthValue)
                    {
                        updateAuths.Add(new Sys_RoleAuth()
                        {
                            RoleId = roleId,
                            MenuId = x.Id,
                            AuthValue = string.Join(",", arr),
                            AuthId = auth == null ? 0 : auth.AuthId,
                            ModifyDate = DateTime.Now,
                            Modifier = App.User.UserName,
                            CreateDate = DateTime.Now,
                            Creater = App.User.UserName
                        });
                    }
                    else
                    {
                        originalMeunIds.Add(auth.MenuId);
                    }
                }
                //更新权限
                _RoleAuthRepository.UpdateData(updateAuths);
                //新增的权限
                _RoleAuthRepository.AddData(updateAuths);
                //获取权限取消的权限
                int[] authIds = roleAuths.Where(x => userPermissions.Select(u => u.Id)
                 .ToList().Contains(x.MenuId) || originalMeunIds.Contains(x.MenuId))
                .Select(s => s.AuthId)
                .ToArray();
                List<Sys_RoleAuth> delAuths = roleAuths.Where(x => x.AuthValue != "" && !authIds.Contains(x.AuthId)).ToList();
                delAuths.ForEach(x =>
                {
                    x.AuthValue = "";
                });
                //将取消的权限设置为""
                _RoleAuthRepository.DeleteData(delAuths);
                int addCount = updateAuths.Where(x => x.AuthId <= 0).Count();
                int updateCount = updateAuths.Where(x => x.AuthId > 0).Count();
                string _version = DateTime.Now.ToString("yyyyMMddHHMMssfff");
                content.OK($"保存成功:新增加配菜单权限{addCount}条,更新菜单{updateCount}条,删除权限{delAuths.Count}条");
            }
            catch (Exception ex)
            {
                message = "异常信息:" + ex.Message + ex.StackTrace + ",";
            }
            return content;
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_TenantService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,80 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.AOP;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Core.Const;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.Seed;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_SystemServices
{
    public class Sys_TenantService : ServiceBase<Sys_Tenant, ISys_TenantRepository>, ISys_TenantService
    {
        private IUnitOfWorkManage _unitOfWorkManage;
        public Sys_TenantService(ISys_TenantRepository BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
        {
            _unitOfWorkManage = unitOfWorkManage;
        }
        public WebResponseContent InitTenantInfo(string tenantName, int tenantType)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Sys_Tenant tenant = new Sys_Tenant()
                {
                    ConnectionString = TenantConst.DBConStr,
                    DbType = 1,
                    Status = 1,
                    TenantName = tenantName,
                    TenantType = tenantType,
                    CreateDate = DateTime.Now,
                    Creater = "1111"
                };
                int tenantId = BaseDal.Db.Insertable(tenant).ExecuteReturnIdentity();
                tenant = BaseDal.QueryFirst(x => x.TenantId == tenantId);
                tenant.ConnectionString = string.Format(TenantConst.DBConStr, ".", "Tenant_WMSDB_" + tenantId, "sa", "P@ssw0rd").EncryptDES(AppSecret.DB);
                BaseDal.UpdateData(tenant);
                InitTenantDb(tenant);
                content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error(ex.Message);
            }
            return content;
        }
        public void InitTenantDb(Sys_Tenant tenant)
        {
            string conStr = tenant.ConnectionString.DecryptDES(AppSecret.DB);
            ConnectionConfig connectionConfig = new ConnectionConfig()
            {
                ConfigId = tenant.TenantId,
                ConnectionString = conStr,
                DbType = (DbType)tenant.DbType,
                IsAutoCloseConnection = true,
                AopEvents = new AopEvents()
                {
                    DataExecuting = SqlSugarAop.DataExecuting
                }
            };
            DBSeed.InitTenantSeedAsync(Db.AsTenant(), connectionConfig);
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,187 @@
using WIDESEAWCS_Core.Authorization;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Core.Const;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.HttpContextUser;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_ISystemRepository;
using WIDESEAWCS_Core.BaseRepository;
using System.Net;
using WIDESEAWCS_Core.Caches;
namespace WIDESEAWCS_SystemServices
{
    public class Sys_UserService : ServiceBase<Sys_User, ISys_UserRepository>, ISys_UserService
    {
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly ICacheService _cacheService;
        private readonly ISys_MenuService _menuService;
        public Sys_UserService(ISys_UserRepository repository, IUnitOfWorkManage unitOfWorkManage, ICacheService cacheService, ISys_MenuService menuService) : base(repository)
        {
            _unitOfWorkManage = unitOfWorkManage;
            _cacheService = cacheService;
            _menuService = menuService;
        }
        public WebResponseContent Login(LoginInfo loginInfo)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                //BaseDal.QueryFirst(x => x.UserName == loginInfo.UserName);
                string msg = string.Empty;
                #region ä¸´æ—¶ä½¿ç”¨
                try
                {
                    loginInfo.Password = loginInfo.Password.EncryptDES(AppSecret.User);
                }
                catch
                {
                }
                #endregion
                UserInfo user = BaseDal.GetUserInfo(loginInfo.UserName, loginInfo.Password);
                if (user != null)
                {
                    object obj = _menuService.GetMenuActionList(user.RoleId);
                    if (obj is not IEnumerable<object> list)
                    {
                        return WebResponseContent.Instance.Error("无登录权限");
                    }
                    if (!list.Any())
                    {
                        return WebResponseContent.Instance.Error("无登录权限");
                    }
                    string token = JwtHelper.IssueJwt(new TokenModelJwt()
                    {
                        UserId = user.UserId,
                        RoleId = user.RoleId,
                        UserName = user.UserName,
                        TenantId = user.TenantId,
                    });
                    _cacheService.AddOrUpdate(user.UserId.ToString(), token);
                    content = WebResponseContent.Instance.OK(data: new { token, userName = user.UserTrueName, img = user.HeadImageUrl });
                }
                else
                {
                    content = WebResponseContent.Instance.Error("账号或密码错误");
                }
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error(ex.Message);
            }
            return content;
        }
        public override WebResponseContent UpdateData(SaveModel saveModel)
        {
            UpdateIgnoreColOnExecute = x =>
            {
                return new List<string>
                {
                    nameof(Sys_User.UserPwd),
                    nameof(Sys_User.TenantId)
                };
            };
            return base.UpdateData(saveModel);
        }
        public override WebResponseContent AddData(SaveModel saveModel)
        {
            string pwd = "123456";
            string uesrName = saveModel.MainData[nameof(Sys_User.UserName).FirstLetterToLower()].ToString();
            saveModel.MainData[nameof(Sys_User.UserPwd).FirstLetterToLower()] = pwd.EncryptDES(AppSecret.User);
            WebResponseContent content = base.AddData(saveModel);
            if (content.Status)
            {
                return WebResponseContent.Instance.OK($"用户新建成功.帐号{uesrName}密码{pwd}");
            }
            else
            {
                return content;
            }
        }
        /// <summary>
        /// ä¸ªäººä¸­å¿ƒèŽ·å–å½“å‰ç”¨æˆ·ä¿¡æ¯
        /// </summary>
        /// <returns></returns>
        public WebResponseContent GetCurrentUserInfo()
        {
            var data = BaseDal.QueryFirst(x => x.User_Id == App.User.UserId, s => new
            {
                s.UserName,
                s.UserTrueName,
                s.Address,
                s.PhoneNo,
                s.Email,
                s.Remark,
                s.Gender,
                s.RoleName,
                s.HeadImageUrl,
                s.CreateDate
            });
            return WebResponseContent.Instance.OK(null, data);
        }
        /// <summary>
        /// ä¿®æ”¹å¯†ç 
        /// </summary>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public WebResponseContent ModifyPwd(string oldPwd, string newPwd)
        {
            WebResponseContent content = WebResponseContent.Instance;
            oldPwd = oldPwd?.Trim();
            newPwd = newPwd?.Trim();
            string message = "";
            try
            {
                if (string.IsNullOrEmpty(oldPwd)) return WebResponseContent.Instance.Error("旧密码不能为空");
                if (string.IsNullOrEmpty(newPwd)) return WebResponseContent.Instance.Error("新密码不能为空");
                if (newPwd.Length < 6) return WebResponseContent.Instance.Error("密码不能少于6位");
                int userId = App.User.UserId;
                string userCurrentPwd = BaseDal.QueryFirst(x => x.User_Id == userId, s => s.UserPwd);
                string _oldPwd = oldPwd.EncryptDES(AppSecret.User);
                if (_oldPwd != userCurrentPwd) return WebResponseContent.Instance.Error("旧密码不正确");
                string _newPwd = newPwd.EncryptDES(AppSecret.User);
                if (userCurrentPwd == _newPwd) return WebResponseContent.Instance.Error("新密码不能与旧密码相同");
                BaseDal.UpdateData(new Sys_User
                {
                    User_Id = userId,
                    UserPwd = _newPwd,
                    LastModifyPwdDate = DateTime.Now
                }, new List<string>
                {
                    nameof(Sys_User.LastModifyPwdDate),
                    nameof(Sys_User.UserPwd)
                });
                content = WebResponseContent.Instance.OK("密码修改成功");
            }
            catch (Exception ex)
            {
                message = ex.Message;
                content = WebResponseContent.Instance.Error("服务器了点问题,请稍后再试");
            }
            return content;
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/WIDESEAWCS_SystemServices.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    </PropertyGroup>
    <ItemGroup>
        <ProjectReference Include="..\WIDESEAWCS_ISystemServices\WIDESEAWCS_ISystemServices.csproj" />
    </ItemGroup>
</Project>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/TaskExecuteDetailRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_TaskInfoRepository
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_TaskInfoRepository
{
    public class TaskExecuteDetailRepository : RepositoryBase<Dt_TaskExecuteDetail>, ITaskExecuteDetailRepository
    {
        public TaskExecuteDetailRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/TaskRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_TaskInfoRepository
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_TaskInfoRepository
{
    public class TaskRepository : RepositoryBase<Dt_Task>, ITaskRepository
    {
        public TaskRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/WIDESEAWCS_TaskInfoRepository.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    </PropertyGroup>
    <ItemGroup>
        <ProjectReference Include="..\WIDESEAWCS_ITaskInfoRepository\WIDESEAWCS_ITaskInfoRepository.csproj" />
        <ProjectReference Include="..\WIDESEAWCS_Model\WIDESEAWCS_Model.csproj" />
    </ItemGroup>
</Project>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,228 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_TaskInfoService
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_TaskInfoService
{
    public class TaskExecuteDetailService : ServiceBase<Dt_TaskExecuteDetail, ITaskExecuteDetailRepository>, ITaskExecuteDetailService
    {
        private readonly ITaskRepository _taskRepository;
        public TaskExecuteDetailService(ITaskExecuteDetailRepository BaseDal, ITaskRepository taskRepository) : base(BaseDal)
        {
            _taskRepository = taskRepository;
        }
        public void AddTaskExecuteDetail(int taskId, string description = "")
        {
            try
            {
                bool isNormal = true;
                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskId == taskId);
                if (task == null) return;
                int taskNum = task.TaskNum;
                int taskState = task.TaskState;
                if (!int.TryParse(Enum.Parse<TaskOutStatusEnum>(taskState.ToString()).ToString(), out int result))
                {
                    if ((int)(TaskOutStatusEnum)result > (int)TaskOutStatusEnum.OutFinish)
                        isNormal = false;
                }
                else if (!int.TryParse(Enum.Parse<TaskInStatusEnum>(taskState.ToString()).ToString(), out result))
                {
                    if ((int)(TaskInStatusEnum)result > (int)TaskInStatusEnum.InFinish)
                        isNormal = false;
                }
                Dt_TaskExecuteDetail taskExecuteDetail = new()
                {
                    IsManual = App.User.UserId > 0,
                    IsNormal = isNormal,
                    TaskNum = taskNum,
                    TaskId = taskId,
                    TaskState = taskState,
                    Description = description,
                    CurrentAddress = task.CurrentAddress,
                    NextAddress = task.NextAddress,
                };
                BaseDal.AddData(taskExecuteDetail);
            }
            catch (Exception ex)
            {
            }
        }
        public void AddTaskExecuteDetail(List<int> taskNums, string description = "")
        {
            try
            {
                List<Dt_TaskExecuteDetail> taskExecuteDetails = new List<Dt_TaskExecuteDetail>();
                foreach (var item in taskNums)
                {
                    bool isNormal = true;
                    Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == item);
                    if (task == null) return;
                    int taskNum = task.TaskNum;
                    int taskState = task.TaskState;
                    if (!int.TryParse(Enum.Parse<TaskOutStatusEnum>(taskState.ToString()).ToString(), out int result))
                    {
                        if ((int)(TaskOutStatusEnum)result > (int)TaskOutStatusEnum.OutFinish)
                            isNormal = false;
                    }
                    else if (!int.TryParse(Enum.Parse<TaskInStatusEnum>(taskState.ToString()).ToString(), out result))
                    {
                        if ((int)(TaskInStatusEnum)result > (int)TaskInStatusEnum.InFinish)
                            isNormal = false;
                    }
                    Dt_TaskExecuteDetail taskExecuteDetail = new()
                    {
                        IsManual = App.User.UserId > 0,
                        IsNormal = isNormal,
                        TaskNum = taskNum,
                        TaskId = task.TaskId,
                        TaskState = taskState,
                        Description = description,
                        CurrentAddress = task.CurrentAddress,
                        NextAddress = task.NextAddress,
                    };
                    taskExecuteDetails.Add(taskExecuteDetail);
                }
                BaseDal.AddData(taskExecuteDetails);
            }
            catch (Exception ex)
            {
            }
        }
        public WebResponseContent GetDetailInfo(int taskNum)
        {
            WebResponseContent content = new();
            try
            {
                int active = -1;
                List<object> list = new();
                List<int> steps = new();
                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum);
                if (task != null)
                {
                    if (!int.TryParse(Enum.Parse<TaskOutboundTypeEnum>(task.TaskType.ToString()).ToString(), out int result))
                    {
                        steps = Enum.GetValues(typeof(TaskOutStatusEnum)).Cast<int>().Where(x => x <= (int)TaskOutStatusEnum.OutFinish).ToList();
                        foreach (var item in steps)
                        {
                            object obj;
                            FieldInfo? fieldInfo = typeof(TaskOutStatusEnum).GetField(((TaskOutStatusEnum)item).ToString());
                            DescriptionAttribute? descriptionAttribute = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                            if (descriptionAttribute != null)
                            {
                                obj = new { title = item, description = descriptionAttribute.Description };
                            }
                            else
                            {
                                obj = new { title = item, description = ((TaskOutStatusEnum)item).ToString() };
                            }
                            list.Add(obj);
                        }
                    }
                    else if (!int.TryParse(Enum.Parse<TaskInboundTypeEnum>(task.TaskType.ToString()).ToString(), out result))
                    {
                        steps = Enum.GetValues(typeof(TaskInStatusEnum)).Cast<int>().Where(x => x <= (int)TaskInStatusEnum.InFinish).ToList();
                        foreach (var item in steps)
                        {
                            object obj;
                            FieldInfo? fieldInfo = typeof(TaskInStatusEnum).GetField(((TaskInStatusEnum)item).ToString());
                            DescriptionAttribute? descriptionAttribute = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                            if (descriptionAttribute != null)
                            {
                                obj = new { title = item, description = descriptionAttribute.Description };
                            }
                            else
                            {
                                obj = new { title = item, description = ((TaskInStatusEnum)item).ToString() };
                            }
                            list.Add(obj);
                        }
                    }
                    else if (!int.TryParse(Enum.Parse<TaskRelocationTypeEnum>(task.TaskType.ToString()).ToString(), out result))
                    {
                        //todo è°ƒç”¨WMS移库完成
                    }
                    else if (!int.TryParse(Enum.Parse<TaskOtherTypeEnum>(task.TaskType.ToString()).ToString(), out result))
                    {
                    }
                    else
                    {
                        throw new Exception($"任务类型错误,未找到该任务类型,任务号:【{taskNum}】,任务类型:【{task.TaskType}】");
                    }
                    active = steps.IndexOf(task.TaskState) + 1;
                }
                content = WebResponseContent.Instance.OK(data: new { active, list });
            }
            catch (Exception ex)
            {
            }
            return content;
        }
        public WebResponseContent GetDetailDatas(int taskNum)
        {
            WebResponseContent content = new();
            try
            {
                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum);
                if (task != null)
                {
                    List<Dt_TaskExecuteDetail> taskExecuteDetails = BaseDal.QueryData(x => x.TaskId == task.TaskId, new Dictionary<string, SqlSugar.OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), SqlSugar.OrderByType.Asc } });
                    content = WebResponseContent.Instance.OK(data: taskExecuteDetails);
                }
                else
                {
                    content = WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                }
            }
            catch (Exception ex)
            {
            }
            return content;
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,598 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_TaskInfoService
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using AutoMapper;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Service;
namespace WIDESEAWCS_TaskInfoService
{
    public class TaskService : ServiceBase<Dt_Task, ITaskRepository>, ITaskService
    {
        private readonly IRouterService _routerService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository;
        private readonly IMapper _mapper;
        private Dictionary<string, OrderByType> _taskOrderBy = new()
            {
                {nameof(Dt_Task.Grade),OrderByType.Desc },
                {nameof(Dt_Task.CreateDate),OrderByType.Asc},
            };
        public Dictionary<string, OrderByType> TaskOrderBy { get { return _taskOrderBy; } set { _taskOrderBy = value; } }
        public List<int> TaskInboundTypes => typeof(TaskInboundTypeEnum).GetEnumIndexList();
        public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList();
        public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper) : base(BaseDal)
        {
            _routerService = routerService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _taskExecuteDetailRepository = taskExecuteDetailRepository;
            _mapper = mapper;
        }
        /// <summary>
        /// æŽ¥æ”¶WMS任务信息
        /// </summary>
        /// <param name="taskDTOs">WMS任务对象集合</param>
        /// <returns>返回处理结果</returns>
        public WebResponseContent ReceiveWMSTask([NotNull]List<WMSTaskDTO> taskDTOs)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                List<Dt_Task> tasks = new List<Dt_Task>();
                foreach (var item in taskDTOs)
                {
                    if (BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum || x.PalletCode == item.PalletCode) != null)
                    {
                        continue;
                    }
                    Dt_Task task = _mapper.Map<Dt_Task>(item);
                    task.Creater = "WMS";
                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                    {
                        List<Dt_Router> routers = _routerService.QueryNextRoutes(item.RoadWay, item.TargetAddress);
                        //暂不考虑多路径
                        if (routers.Count > 0)
                        {
                            task.TaskState = (int)TaskOutStatusEnum.OutNew;
                            task.CurrentAddress = item.SourceAddress;
                            task.NextAddress = routers.FirstOrDefault().ChildPosi;
                        }
                    }
                    else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                    {
                        List<Dt_Router> routers = _routerService.QueryNextRoutes(item.SourceAddress, item.TargetAddress);
                        //暂不考虑多路径
                        if (routers.Count > 0)
                        {
                            task.TaskState = (int)TaskInStatusEnum.InNew;
                            task.CurrentAddress = item.SourceAddress;
                            task.NextAddress = routers.FirstOrDefault().ChildPosi;
                        }
                    }
                    tasks.Add(task);
                }
                BaseDal.AddData(tasks);
                _taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskNum).ToList(), "接收WMS任务");
                content = WebResponseContent.Instance.OK("成功");
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error($"任务接收错误,错误信息:{ex.Message}");
            }
            return content;
        }
        /// <summary>
        /// æ ¹æ®æ‰˜ç›˜å·ã€èµ·å§‹åœ°å€å‘WMS请求任务
        /// </summary>
        /// <param name="palletCode">托盘号</param>
        /// <param name="sourceAddress">起始地址</param>
        /// <returns></returns>
        public WebResponseContent RequestWMSTask(string palletCode, string sourceAddress)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                WMSTaskDTO taskDTO = new WMSTaskDTO()
                {
                    TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
                    Grade = 1,
                    PalletCode = palletCode,
                    RoadWay = "SC01",
                    SourceAddress = sourceAddress,
                    TargetAddress = "SC01",
                    TaskState = (int)TaskInStatusEnum.InNew,
                    Id = 0,
                    TaskType = (int)TaskInboundTypeEnum.Inbound
                };
                content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址查询输送线未执行的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        public Dt_Task QueryConveyorLineTask(string deviceNo, string currentAddress)
        {
            return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress, TaskOrderBy);
        }
        /// <summary>
        /// æ ¹æ®ä»»åŠ¡å·ã€ä¸‹ä¸€åœ°å€æŸ¥è¯¢è¾“é€çº¿æ‰§è¡Œä¸­çš„ä»»åŠ¡
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="nextAddress">下一地址</param>
        /// <returns></returns>
        public Dt_Task QueryExecutingConveyorLineTask(int taskNum, string nextAddress)
        {
            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy);
        }
        /// <summary>
        /// æ ¹æ®ä»»åŠ¡å·ã€å½“å‰åœ°å€æŸ¥è¯¢è¾“é€çº¿å®Œæˆçš„ä»»åŠ¡
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        public Dt_Task QueryCompletedConveyorLineTask(int taskNum, string currentAddress)
        {
            return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy);
        }
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、任务类型分组(可选)按照优先级以及创建时间排序查询任务池新增的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="taskTypeGroup">任务类型分组(可选)</param>
        /// <returns></returns>
        public Dt_Task? QuertStackerCraneTask(string deviceNo, TaskTypeGroup? taskTypeGroup = null)
        {
            if(taskTypeGroup == null)
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
            if(taskTypeGroup.Value == TaskTypeGroup.InboundGroup)
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy);
            if(taskTypeGroup.Value == TaskTypeGroup.OutbondGroup)
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
            return null;
        }
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址按照优先级以及创建时间排序查询任务池新增的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns>返回任务实体对象,可能为null</returns>
        public Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "")
        {
            if (string.IsNullOrEmpty(currentAddress))
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
            else
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
        }
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址按照优先级以及创建时间排序查询任务池入库类型的新增的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns>返回任务实体对象,可能为null</returns>
        public Dt_Task QueryStackerCraneInTask(string deviceNo, string currentAddress = "")
        {
            if (string.IsNullOrEmpty(currentAddress))
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy);
            else
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.CurrentAddress == currentAddress, TaskOrderBy);
        }
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址按照优先级以及创建时间排序查询任务池出库类型的新增的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns>返回任务实体对象,可能为null</returns>
        public Dt_Task QueryStackerCraneOutTask(string deviceNo, string currentAddress = "")
        {
            if (string.IsNullOrEmpty(currentAddress))
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy);
            else
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy);
        }
        /// <summary>
        /// æ ¹æ®è®¾å¤‡ç¼–号、当前地址按照优先级以及创建时间排序查询任务池出库类型的新增的任务
        /// </summary>
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns>返回任务实体对象集合,可能为null</returns>
        public List<Dt_Task> QueryStackerCraneOutTasks(string deviceNo, List<string> outStationCodes)
        {
            return BaseDal.QueryData(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew && outStationCodes.Contains(x.CurrentAddress), TaskOrderBy);
        }
        /// <summary>
        /// æ›´æ–°ä»»åŠ¡å¼‚å¸¸ä¿¡æ¯æ˜¾ç¤º
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="message">异常信息</param>
        public WebResponseContent UpdateTaskExceptionMessage(int taskNum, string message)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    task.TaskState = (int)TaskOutStatusEnum.OutPending;
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                {
                    task.TaskState = (int)TaskInStatusEnum.InPending;
                }
                task.ExceptionMessage = message;
                task.ModifyDate = DateTime.Now;
                BaseDal.UpdateData(task);
                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, task.ExceptionMessage);
                content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// æ›´æ–°ä»»åŠ¡çŠ¶æ€ä¿¡æ¯ï¼Œå¹¶åŒæ­¥è‡³WMS
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="status">任务状态</param>
        public void UpdateTaskStatus(int taskNum, int status)
        {
            Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
            if (task == null) return;
            task.TaskState = status;
            task.ModifyDate = DateTime.Now;
            BaseDal.UpdateData(task);
        }
        /// <summary>
        /// å°†ä»»åŠ¡çŠ¶æ€ä¿®æ”¹ä¸ºä¸‹ä¸€ä¸ªçŠ¶æ€
        /// </summary>
        /// <param name="taskNum">任务号</param>
        public WebResponseContent UpdateTaskStatusToNext(int taskNum)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                return UpdateTaskStatusToNext(task);
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// å°†ä»»åŠ¡çŠ¶æ€ä¿®æ”¹ä¸ºä¸‹ä¸€ä¸ªçŠ¶æ€
        /// </summary>
        /// <param name="task">任务实体对象</param>
        /// <returns></returns>
        public WebResponseContent UpdateTaskStatusToNext([NotNull] Dt_Task task)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                int oldState = task.TaskState;
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    if (task.TaskState >= (int)TaskOutStatusEnum.OutFinish)
                    {
                        return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】");
                    }
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
                    task.TaskState = nextStatus;
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                {
                    if (task.TaskState >= (int)TaskInStatusEnum.InFinish)
                    {
                        return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】");
                    }
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                    task.TaskState = nextStatus;
                    if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish)
                    {
                        Random random = new Random();
                        task.CurrentAddress = task.NextAddress;
                        task.NextAddress = $"{random.Next(1, 100).ToString().PadLeft(3, '0')}-{random.Next(1, 100).ToString().PadLeft(3, '0')}-{random.Next(1, 100).ToString().PadLeft(3, '0')}";
                        task.TargetAddress = task.NextAddress;
                    }
                }
                else
                {
                    throw new Exception($"任务类型错误,未找到该任务类型,任务号:【{task.TaskNum}】,任务类型:【{task.TaskType}】");
                }
                if (task.TaskState <= 0)
                {
                    return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】");
                }
                task.ModifyDate = DateTime.Now;
                task.Modifier = "System";
                BaseDal.UpdateData(task);
                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, App.User.UserId > 0 ? $"人工手动将任务状态从【{oldState}】跳转到【{task.TaskState}】" : $"系统自动流程,任务状态从【{oldState}】转到【{task.TaskState}】");
                content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// æ ¹æ®ä»»åŠ¡å·ã€å½“å‰åœ°å€æ›´æ–°ä»»åŠ¡ä½ç½®ä¿¡æ¯
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns></returns>
        public Dt_Task? UpdatePosition(int taskNum, string currentAddress)
        {
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress);
                if (task == null) throw new Exception($"未找到该任务信息,任务号:【{taskNum}】");
                string oldCurrentPos = task.CurrentAddress;
                string oldNextPos = task.NextAddress;
                List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress);
                if (!routers.Any()) throw new Exception($"未找到设备路由信息");
                task.CurrentAddress = task.NextAddress;
                task.NextAddress = routers.FirstOrDefault().ChildPosi;
                task.ModifyDate = DateTime.Now;
                task.Modifier = "System";
                BaseDal.UpdateData(task);
                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"系统自动流程,更新当前位置【{oldCurrentPos} ----> {task.CurrentAddress}】和下一位置【{oldNextPos} ----> {task.NextAddress}】");
                return task;
            }
            catch (Exception ex)
            {
            }
            return null;
        }
        /// <summary>
        /// ä»»åŠ¡å®Œæˆ
        /// </summary>
        /// <param name="taskNum">任务编号</param>
        /// <returns>返回处理结果</returns>
        public WebResponseContent StackCraneTaskCompleted(int taskNum)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
                {
                    List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress);
                    if (!routers.Any()) return WebResponseContent.Instance.Error($"未找到设备路由信息");
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
                    task.TaskState = nextStatus;
                    task.CurrentAddress = task.NextAddress;
                    task.NextAddress = routers.FirstOrDefault().ChildPosi;
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.UpdateData(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成");
                    //todo åŒæ­¥åˆ°WMS
                    //暂不考虑多个出库口
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
                {
                    //todo
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                    task.TaskState = nextStatus;
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
                    BaseDal.UpdateData(task);
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机入库完成");
                    WMSTaskDTO taskDTO = new WMSTaskDTO()
                    {
                        TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
                        Grade = 1,
                        PalletCode = task.PalletCode + "S",
                        RoadWay = "SC01",
                        SourceAddress = task.TargetAddress,
                        TargetAddress = "CLOutAreaA",
                        TaskState = (int)TaskOutStatusEnum.OutNew,
                        Id = 0,
                        TaskType = (int)TaskOutboundTypeEnum.Outbound
                    };
                    content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                {
                    //todo è°ƒç”¨WMS移库完成
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup)
                {
                }
                else
                {
                    throw new Exception($"任务类型错误,未找到该任务类型,任务号:【{taskNum}】,任务类型:【{task.TaskType}】");
                }
                content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error($"任务完成异常,任务号:【{taskNum}】");
            }
            return content;
        }
        /// <summary>
        /// æ¢å¤æŒ‚起任务
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <returns>返回处理结果</returns>
        public WebResponseContent TaskStatusRecovery(int taskNum)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                if (task.TaskState != (int)TaskInStatusEnum.InPending && task.TaskState != (int)TaskOutStatusEnum.OutPending)
                {
                    return content = WebResponseContent.Instance.Error($"该任务状态不可恢复,任务号:【{taskNum}】,任务状态:【{task.TaskState}】");
                }
                Dt_TaskExecuteDetail taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.IsNormal, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } });
                if (taskExecuteDetail != null)
                {
                    task.TaskState = taskExecuteDetail.TaskState;
                }
                else
                {
                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                    {
                        task.TaskState = (int)TaskOutStatusEnum.OutNew;
                    }
                    else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                    {
                        task.TaskState = (int)TaskInStatusEnum.InNew;
                    }
                    //todo
                }
                task.ExceptionMessage = string.Empty;
                BaseDal.UpdateData(task);
                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"人工恢复挂起任务,恢复挂起时任务状态【{task.TaskState}】");
                content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// å›žæ»šä»»åŠ¡çŠ¶æ€
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <returns>返回处理结果</returns>
        public WebResponseContent RollbackTaskStatusToLast(int taskNum)
        {
            WebResponseContent content = new();
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                int oldState = task.TaskState;
                Dt_TaskExecuteDetail taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.TaskState < task.TaskState && x.TaskState > 0, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } });
                if (taskExecuteDetail != null)
                {
                    task.TaskState = taskExecuteDetail.TaskState;
                    task.CurrentAddress = taskExecuteDetail.CurrentAddress;
                    task.NextAddress = taskExecuteDetail.NextAddress;
                }
                else
                {
                    return content = WebResponseContent.Instance.Error($"未找到任务明细信息,该任务状态不可回滚到上一步,任务号:【{taskNum}】,任务状态:【{task.TaskState}】");
                }
                task.ExceptionMessage = string.Empty;
                BaseDal.UpdateData(task);
                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"人工将任务状态从【{oldState}】回滚到【{task.TaskState}】");
                content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error(ex.Message);
            }
            return content;
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WIDESEAWCS_TaskInfoService.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    </PropertyGroup>
    <ItemGroup>
        <ProjectReference Include="..\WIDESEAWCS_BasicInfoService\WIDESEAWCS_BasicInfoService.csproj" />
        <ProjectReference Include="..\WIDESEAWCS_ITaskInfoService\WIDESEAWCS_ITaskInfoService.csproj" />
    </ItemGroup>
</Project>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,221 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_Tasks.ConveyorLineJob
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using AutoMapper;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_Tasks.ConveyorLineJob;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class CommonConveyorLineJob : IJob
    {
        private readonly ITaskService _taskService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly IRouterService _routerService;
        private readonly IMapper _mapper;
        public CommonConveyorLineJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _routerService = routerService;
            _mapper = mapper;
        }
        public Task Execute(IJobExecutionContext context)
        {
            Console.Out.WriteLine(DateTime.Now);
            try
            {
                CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams");
                if (conveyorLine != null)
                {
                    List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode);
                    List<Task> tasks = new List<Task>();
                    foreach (string childDeviceCode in childDeviceCodes)
                    {
                        //Task task = Task.Run(() =>
                        //{
                            ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(childDeviceCode);
                            if (command != null)
                            {
                                DeviceProtocolDetailDTO? deviceProtocolDetail = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.ProtocalDetailValue == command.InteractiveSignal.ToString() && x.DeviceProParamName == nameof(ConveyorLineTaskCommand.InteractiveSignal));
                                if (deviceProtocolDetail != null)
                                {
                                    MethodInfo? method = GetType().GetMethod(deviceProtocolDetail.ProtocolDetailType);
                                    if (method != null)
                                    {
                                        method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode });
                                    }
                                    else
                                    {
                                        //todo æœªæ‰¾åˆ°æ–¹æ³•æ—¶
                                    }
                                }
                            }
                        //});
                        //tasks.Add(task);
                    }
                    Task.WaitAll(tasks.ToArray());
                }
            }
            catch (Exception ex)
            {
                Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString());
            }
            finally
            {
                Console.Out.WriteLine(DateTime.Now);
            }
            return Task.CompletedTask;
        }
        /// <summary>
        /// è¾“送线请求入库
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        public void RequestInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command,string childDeviceCode)
        {
            if (_taskService.RequestWMSTask(command.Barcode, childDeviceCode).Status)
            {
                Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
                if (task != null)
                {
                    ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(task);
                    taskCommand.InteractiveSignal = command.InteractiveSignal;
                    conveyorLine.SendCommand(taskCommand, childDeviceCode);
                    _taskService.UpdateTaskStatusToNext(task);
                }
            }
        }
        /// <summary>
        /// è¾“送线请求入库下一地址
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        public void RequestInNextAddress(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode)
        {
            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
            if (task != null)
            {
                Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
                if (newTask != null)
                {
                    ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(newTask);
                    taskCommand.InteractiveSignal = command.InteractiveSignal;
                    conveyorLine.SendCommand(taskCommand, childDeviceCode);
                }
            }
        }
        /// <summary>
        /// è¾“送线入库完成
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        public void ConveyorLineInFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode)
        {
            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
            if (task != null)
            {
                conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode);
                WebResponseContent content = _taskService.UpdateTaskStatusToNext(task);
                Console.Out.WriteLine(content.Serialize());
            }
        }
        /// <summary>
        /// è¾“送线请求出信息
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        public void RequestOutbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode)
        {
            Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
            if (task != null)
            {
                ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(task);
                taskCommand.InteractiveSignal = command.InteractiveSignal;
                conveyorLine.SendCommand(taskCommand, childDeviceCode);
                _taskService.UpdateTaskStatusToNext(task);
            }
        }
        /// <summary>
        /// è¾“送线请求出库下一地址
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        public void RequestOutNextAddress(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode)
        {
            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
            if (task != null)
            {
                Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
                if (newTask != null)
                {
                    ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(newTask);
                    taskCommand.InteractiveSignal = command.InteractiveSignal;
                    conveyorLine.SendCommand(taskCommand, childDeviceCode);
                }
            }
        }
        /// <summary>
        /// è¾“送线出库完成
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        public void ConveyorLineOutFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode)
        {
            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
            if (task != null)
            {
                conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode);
                WebResponseContent content = _taskService.UpdateTaskStatusToNext(task);
                Console.Out.WriteLine(content.Serialize());
            }
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineDBName.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_Tasks.ConveyorLineJob
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Tasks.ConveyorLineJob
{
    public enum ConveyorLineDBName
    {
        InteractiveSignal,
        ConveyorLineBarcode,
        ConveyorLineTargetAddress,
        ConveyorLineTaskNum,
        ConveyorLineTrayType,
        WriteInteractiveSignal,
        WriteConveyorLineBarcode,
        WriteConveyorLineTargetAddress,
        WriteConveyorLineTaskNum,
        WriteConveyorLineTrayType
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_Tasks.ConveyorLineJob
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_QuartzJob.DeviceBase;
namespace WIDESEAWCS_Tasks.ConveyorLineJob
{
    public class ConveyorLineTaskCommand : DeviceCommand
    {
        public ushort InteractiveSignal { get; set; }
        [DataLength(25)]
        public string Barcode { get; set; }
        public int TargetAddress { get; set; }
        public int TaskNum { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,288 @@
using Microsoft.AspNetCore.Components.Routing;
using Quartz;
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DeviceBase;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
using WIDESEAWCS_Tasks.StackerCraneJob;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class CommonStackerCraneJob : IJob
    {
        private readonly ITaskService _taskService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly ITaskRepository _taskRepository;
        private readonly IRouterService _routerService;
        public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _taskRepository = taskRepository;
            _routerService = routerService;
        }
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
                if (commonStackerCrane != null)
                {
                    if (!commonStackerCrane.IsEventSubscribed)
                    {
                        commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//订阅任务完成事件
                    }
                    if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal)
                    {
                        commonStackerCrane.CheckStackerCraneTaskCompleted();//防止任务完成事件监测超时,再手动触发一次
                        if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby)
                        {
                            Dt_Task? task = GetTask(commonStackerCrane);
                            if (task != null)
                            {
                                StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
                                if (stackerCraneTaskCommand != null)
                                {
                                    bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand);
                                    if (sendFlag)
                                    {
                                        commonStackerCrane.LastTaskType = task.TaskType;
                                        _taskService.UpdateTaskStatusToNext(task.TaskNum);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(nameof(CommonStackerCraneJob) + ":" + ex.ToString());
            }
            return Task.CompletedTask;
        }
        /// <summary>
        /// ä»»åŠ¡å®Œæˆäº‹ä»¶è®¢é˜…çš„æ–¹æ³•
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, WIDESEAWCS_QuartzJob.StackerCrane.StackerCraneTaskCompletedEventArgs e)
        {
            CommonStackerCrane? commonStackerCrane = sender as CommonStackerCrane;
            if (commonStackerCrane != null)
            {
                if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
                {
                    Console.Out.WriteLine("TaskCompleted" + e.TaskNum);
                    _taskService.StackCraneTaskCompleted(e.TaskNum);
                    commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                }
            }
        }
        /// <summary>
        /// èŽ·å–ä»»åŠ¡
        /// </summary>
        /// <param name="commonStackerCrane">堆垛机对象</param>
        /// <returns></returns>
        private Dt_Task? GetTask(CommonStackerCrane commonStackerCrane)
        {
            Dt_Task task;
            if (commonStackerCrane.LastTaskType == null)
            {
                task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
            }
            else
            {
                if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                    if (task == null)
                    {
                        task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
                    }
                }
                else
                {
                    task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
                }
            }
            if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
            {
                if (OutTaskStationIsOccupied(task) != null)
                {
                    return task;
                }
                else
                {
                    List<string> otherOutStaionCodes = _routerService.QueryNextRoutes(commonStackerCrane.DeviceCode, task.NextAddress).Select(x => x.ChildPosi).ToList();
                    List<Dt_Task> tasks = _taskService.QueryStackerCraneOutTasks(commonStackerCrane.DeviceCode, otherOutStaionCodes);
                    foreach (var item in tasks)
                    {
                        if (OutTaskStationIsOccupied(task) != null)
                        {
                            return task;
                        }
                    }
                    task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                }
            }
            return task;
        }
        /// <summary>
        /// å‡ºåº“任务判断出库站台是否被占用
        /// </summary>
        /// <param name="task">任务实体</param>
        /// <returns>如果未被占用,返回传入的任务信息,否则,返回null</returns>
        private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
        {
            Dt_Router? router = _routerService.QueryNextRoutes(task.Roadway, task.NextAddress).FirstOrDefault();
            if (router != null)
            {
                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == router.ChildPosiDeviceCode);
                if (device != null)
                {
                    CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
                    if (conveyorLine.IsOccupied(router.ChildPosi))//出库站台未被占用
                    {
                        return task;
                    }
                }
                else
                {
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"未找到出库站台【{router.ChildPosiDeviceCode}】对应的通讯对象,无法判断出库站台是否被占用");
                }
            }
            else
            {
                _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"未找到站台【{task.NextAddress}】信息,无法校验站台");
            }
            return null;
        }
        /// <summary>
        /// ä»»åŠ¡å®žä½“è½¬æ¢æˆå‘½ä»¤Model
        /// </summary>
        /// <param name="task">任务实体</param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public StackerCraneTaskCommand? ConvertToStackerCraneTaskCommand([NotNull] Dt_Task task)
        {
            StackerCraneTaskCommand stackerCraneTaskCommand = new StackerCraneTaskCommand();
            stackerCraneTaskCommand.Barcode = task.PalletCode;
            stackerCraneTaskCommand.TaskNum = task.TaskNum;
            stackerCraneTaskCommand.WorkType = 1;
            stackerCraneTaskCommand.TrayType = 0;
            if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//判断是否是入库任务
            {
                List<Dt_Router> routers = _routerService.QueryNextRoutes(task.CurrentAddress, task.Roadway);
                if (routers.Count > 0)
                {
                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(routers.FirstOrDefault().SrmRow);
                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(routers.FirstOrDefault().SrmColumn);
                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(routers.FirstOrDefault().SrmLayer);
                    string[] targetCodes = task.NextAddress.Split("-");
                    if (targetCodes.Length == 3)
                    {
                        stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
                        stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
                        stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
                    }
                    else
                    {
                        //数据配置错误
                        _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"入库任务终点错误,起点:【{task.NextAddress}】");
                        return null;
                    }
                }
                else
                {
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"未找到站台【{task.NextAddress}】信息,无法获取对应的堆垛机取货站台信息");
                    return null;
                }
            }
            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
            {
                List<Dt_Router> routers = _routerService.QueryNextRoutes(task.Roadway, task.TargetAddress);
                if (routers.Count > 0)
                {
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(routers.FirstOrDefault().SrmRow);
                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(routers.FirstOrDefault().SrmColumn);
                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(routers.FirstOrDefault().SrmLayer);
                    string[] sourceCodes = task.CurrentAddress.Split("-");
                    if (sourceCodes.Length == 3)
                    {
                        stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
                        stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
                        stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
                    }
                    else
                    {
                        //数据配置错误
                        _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"出库任务起点错误,起点:【{task.CurrentAddress}】");
                        return null;
                    }
                }
                else
                {
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"未找到站台【{task.NextAddress}】信息,无法获取对应的堆垛机放货站台信息");
                    return null;
                }
            }
            else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
            {
                string[] targetCodes = task.NextAddress.Split("-");
                if (targetCodes.Length == 3)
                {
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"移库任务终点错误,起点:【{task.NextAddress}】");
                    return null;
                }
                string[] sourceCodes = task.CurrentAddress.Split("-");
                if (sourceCodes.Length == 3)
                {
                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"移库任务起点错误,起点:【{task.CurrentAddress}】");
                    return null;
                }
            }
            return stackerCraneTaskCommand;
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneDBName.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_Tasks.StackerCraneJob
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Tasks.StackerCraneJob
{
    public enum StackerCraneDBName
    {
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        TaskNum,
        /// <summary>
        /// ä½œä¸šç±»åž‹
        /// </summary>
        WorkType,
        /// <summary>
        /// æ‰˜ç›˜ç±»åž‹
        /// </summary>
        TrayType,
        /// <summary>
        /// èµ·å§‹è¡Œ
        /// </summary>
        StartRow,
        /// <summary>
        /// èµ·å§‹åˆ—
        /// </summary>
        StartColumn,
        /// <summary>
        /// èµ·å§‹å±‚
        /// </summary>
        StartLayer,
        /// <summary>
        /// ç›®æ ‡è¡Œ
        /// </summary>
        EndRow,
        /// <summary>
        /// ç›®æ ‡åˆ—
        /// </summary>
        EndColumn,
        /// <summary>
        /// ç›®æ ‡å±‚
        /// </summary>
        EndLayer,
        /// <summary>
        /// æ‰˜ç›˜å·
        /// </summary>
        Barcode,
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskCommand.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_Tasks.StackerCraneJob
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.DeviceBase;
namespace WIDESEAWCS_Tasks.StackerCraneJob
{
    public class StackerCraneTaskCommand : DeviceCommand
    {
        #region <Public Menber>
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        public int TaskNum { get; set; }
        /// <summary>
        /// ä½œä¸šç±»åž‹
        /// </summary>
        public short WorkType { get; set; }
        /// <summary>
        /// æ‰˜ç›˜ç±»åž‹
        /// </summary>
        public short TrayType { get; set; }
        /// <summary>
        /// èµ·å§‹è¡Œ
        /// </summary>
        public short StartRow { get; set; }
        /// <summary>
        /// èµ·å§‹åˆ—
        /// </summary>
        public short StartColumn { get; set; }
        /// <summary>
        /// èµ·å§‹å±‚
        /// </summary>
        public short StartLayer { get; set; }
        /// <summary>
        /// ç›®æ ‡è¡Œ
        /// </summary>
        public short EndRow { get; set; }
        /// <summary>
        /// ç›®æ ‡åˆ—
        /// </summary>
        public short EndColumn { get; set; }
        /// <summary>
        /// ç›®æ ‡å±‚
        /// </summary>
        public short EndLayer { get; set; }
        /// <summary>
        /// æ‰˜ç›˜å·
        /// </summary>
        [DataLength(25)]
        public string Barcode { get; set; }
        #endregion <Public Menber>
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
using HslCommunication;
using HslCommunication.Core;
using Microsoft.VisualBasic.FileIO;
using Quartz;
using SixLabors.ImageSharp.PixelFormats;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Communicator;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DeviceBase;
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class TestJob : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
                Console.Out.WriteLine(commonStackerCrane.DeviceName + "状态:" + commonStackerCrane.StackerCraneStatusDes);
                Console.Out.WriteLine(commonStackerCrane.DeviceName + "手自动状态:" + commonStackerCrane.StackerCraneAutoStatusDes);
                Console.Out.WriteLine(commonStackerCrane.DeviceName + "作业状态:" + commonStackerCrane.StackerCraneWorkStatusDes);
                //Console.Out.WriteLine(commonStackerCrane.DeviceName + "当前任务号:" + commonStackerCrane.GetValue<StackerCraneDBName, int>(StackerCraneDBName.CurrentTaskNum));
                //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());
                Console.Out.WriteLine(DateTime.Now);
                Console.Out.WriteLine();
            }
            catch (Exception ex)
            {
                Console.Out.WriteLine(nameof(TestJob) + ":" + ex.Message);
            }
            return Task.CompletedTask;
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/WIDESEAWCS_Tasks.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    </PropertyGroup>
    <ItemGroup>
      <PackageReference Include="WIDESEAWCS_QuartzJob" Version="2.0.4" />
    </ItemGroup>
    <ItemGroup>
        <ProjectReference Include="..\WIDESEAWCS_TaskInfoService\WIDESEAWCS_TaskInfoService.csproj" />
    </ItemGroup>
</Project>
´úÂë¹ÜÀí/WCS/³õʼ»¯.txt
ÎļþÒÑɾ³ý
´úÂë¹ÜÀí/WMS/³õʼ»¯.txt
ÎļþÒÑɾ³ý
ÏîÄ¿×ÊÁÏ/¼¼ÊõЭÒé/³õʼ»¯.txt
ÏîÄ¿×ÊÁÏ/¼¼ÊõЭÒé/¹ùµê-°Ë³§×Ô¶¯»¯ÏîÄ¿Á¢Ìå¿â¼¼ÊõЭÒé0302(2).docx
Binary files differ
ÏîÄ¿×ÊÁÏ/½Ó¿ÚЭÒé/³õʼ»¯.txt
ÏîÄ¿×ÊÁÏ/ͨÐÅЭÒé/³õʼ»¯.txt
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/³õʼ»¯.txt
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/¹ùµê-²úÆ·89³§Á¢¿â²¼¾Öͼ(1).dwg
Binary files differ