1
huangxiaoqiang
2025-04-16 18a9a7d44f0d3293e80a2eb750f46f12d33aba36
1
已修改4个文件
已添加56个文件
123523 ■■■■■ 文件已修改
.gitignore 388 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Client/package-lock.json 15549 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Client/package.json 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_IProcessService/IPlatFormService.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_IProcessService/WIDESEAWCS_IProcessService.csproj 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_ProcessService/PlatFormService.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_ProcessService/WIDESEAWCS_ProcessService.csproj 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/.config/dotnet-tools.json 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/ProcessParameters/PlatformController.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/PublishProfiles/FolderProfile.pubxml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/PublishProfiles/FolderProfile.pubxml.user 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/launchSettings.json 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj.user 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.Development.json 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_DeviceInfo.tsv 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_DeviceProtocol.tsv 2977 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_DeviceProtocolDetail.tsv 262 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_DispatchInfo.tsv 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_Router.tsv 362 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_Task.tsv 5651 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_TaskExecuteDetail.tsv 83282 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Sys_Dictionary.tsv 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Sys_DictionaryList.tsv 548 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Sys_Menu.tsv 344 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Sys_Role.tsv 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Sys_RoleAuth.tsv 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Sys_User.tsv 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Partial/TaskService.cs 667 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs 632 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_After/CommonConveyorLine_AfterJob.cs 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_GW/CommonConveyorLine_GWJob.cs 533 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_GW/GWTask/RequestInbound.cs 506 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs 595 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSClient/.prettierrc.json 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSClient/.vs/ProjectSettings.json 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSClient/.vs/VSWorkspaceState.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSClient/.vs/WIDESEA_WMSClient/FileContentIndex/9fcfba1d-4549-4902-97a9-99389faa1364.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSClient/env.d.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSClient/package-lock.json 6025 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSClient/package.json 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSClient/tsconfig.json 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSClient/tsconfig.node.json 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSClient/vite.config.ts 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Common/HttpClient/HttpsClient.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/MCS/Partial/NotifyFinishTest.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs 2310 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs 1290 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/.config/dotnet-tools.json 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile.pubxml.user 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile3.pubxml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile3.pubxml.user 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/launchSettings.json 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj.user 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.Development.json 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_Menu.tsv 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_Tenant.tsv 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_User.tsv 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,388 @@
CodeManagement/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.13.444.19527/CodeChunks.db
CodeManagement/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.13.444.19527/CodeChunks.db-shm
CodeManagement/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.13.444.19527/CodeChunks.db-wal
CodeManagement/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.13.444.19527/SemanticSymbols.db
CodeManagement/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.13.444.19527/SemanticSymbols.db-shm
CodeManagement/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.13.444.19527/SemanticSymbols.db-wal
CodeManagement/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/87de0d9a-307b-4c51-93b4-45670f0ff4f3.vsidx
CodeManagement/WMS/WIDESEA_WMSServer/LogLibrary/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/LogLibrary/obj/Debug/net6.0/LogLibrary.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/LogLibrary/obj/Debug/net6.0/LogLibrary.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/LogLibrary/obj/LogLibrary.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/LogLibrary/obj/LogLibrary.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/LogLibrary/obj/LogLibrary.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/LogLibrary/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/LogLibrary/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessesRepository/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessesRepository/obj/Debug/net6.0/WIDESEA_BusinessesRepository.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessesRepository/obj/Debug/net6.0/WIDESEA_BusinessesRepository.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessesRepository/obj/Debug/net6.0/WIDESEA_BusinessesRepository.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessesRepository/obj/Debug/net6.0/WIDESEA_BusinessesRepository.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessesRepository/obj/Debug/net6.0/WIDESEA_BusinessesRepository.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessesRepository/obj/Debug/net6.0/WIDESEA_BusinessesRepository.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessesRepository/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessesRepository/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessesRepository/obj/WIDESEA_BusinessesRepository.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessesRepository/obj/WIDESEA_BusinessesRepository.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessesRepository/obj/WIDESEA_BusinessesRepository.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessServices/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessServices/obj/Debug/net6.0/WIDESEA_BusinessServices.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessServices/obj/Debug/net6.0/WIDESEA_BusinessServices.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessServices/obj/Debug/net6.0/WIDESEA_BusinessServices.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessServices/obj/Debug/net6.0/WIDESEA_BusinessServices.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessServices/obj/Debug/net6.0/WIDESEA_BusinessServices.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessServices/obj/Debug/net6.0/WIDESEA_BusinessServices.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessServices/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessServices/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessServices/obj/WIDESEA_BusinessServices.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessServices/obj/WIDESEA_BusinessServices.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_BusinessServices/obj/WIDESEA_BusinessServices.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Cache/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Cache/obj/Debug/net6.0/WIDESEA_Cache.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Cache/obj/Debug/net6.0/WIDESEA_Cache.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Cache/obj/Debug/net6.0/WIDESEA_Cache.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Cache/obj/Debug/net6.0/WIDESEA_Cache.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Cache/obj/Debug/net6.0/WIDESEA_Cache.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Cache/obj/Debug/net6.0/WIDESEA_Cache.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Cache/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Cache/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Cache/obj/WIDESEA_Cache.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Cache/obj/WIDESEA_Cache.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Cache/obj/WIDESEA_Cache.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Common/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Common/obj/Debug/net6.0/WIDESEA_Common.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Common/obj/Debug/net6.0/WIDESEA_Common.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Common/obj/Debug/net6.0/WIDESEA_Common.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Common/obj/Debug/net6.0/WIDESEA_Common.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Common/obj/Debug/net6.0/WIDESEA_Common.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Common/obj/Debug/net6.0/WIDESEA_Common.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Common/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Common/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Common/obj/WIDESEA_Common.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Common/obj/WIDESEA_Common.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Common/obj/WIDESEA_Common.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Core/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Core/obj/Debug/net6.0/WIDESEA_Core.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Core/obj/Debug/net6.0/WIDESEA_Core.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Core/obj/Debug/net6.0/WIDESEA_Core.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Core/obj/Debug/net6.0/WIDESEA_Core.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Core/obj/Debug/net6.0/WIDESEA_Core.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Core/obj/Debug/net6.0/WIDESEA_Core.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Core/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Core/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Core/obj/WIDESEA_Core.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Core/obj/WIDESEA_Core.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Core/obj/WIDESEA_Core.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_DTO/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_DTO/obj/Debug/net6.0/WIDESEA_DTO.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_DTO/obj/Debug/net6.0/WIDESEA_DTO.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_DTO/obj/Debug/net6.0/WIDESEA_DTO.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_DTO/obj/Debug/net6.0/WIDESEA_DTO.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_DTO/obj/Debug/net6.0/WIDESEA_DTO.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_DTO/obj/Debug/net6.0/WIDESEA_DTO.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_DTO/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_DTO/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_DTO/obj/WIDESEA_DTO.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_DTO/obj/WIDESEA_DTO.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_DTO/obj/WIDESEA_DTO.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessesRepository/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessesRepository/obj/Debug/net6.0/WIDESEA_IBusinessesRepository.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessesRepository/obj/Debug/net6.0/WIDESEA_IBusinessesRepository.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessesRepository/obj/Debug/net6.0/WIDESEA_IBusinessesRepository.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessesRepository/obj/Debug/net6.0/WIDESEA_IBusinessesRepository.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessesRepository/obj/Debug/net6.0/WIDESEA_IBusinessesRepository.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessesRepository/obj/Debug/net6.0/WIDESEA_IBusinessesRepository.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessesRepository/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessesRepository/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessesRepository/obj/WIDESEA_IBusinessesRepository.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessesRepository/obj/WIDESEA_IBusinessesRepository.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessesRepository/obj/WIDESEA_IBusinessesRepository.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessServices/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessServices/obj/Debug/net6.0/WIDESEA_IBusinessServices.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessServices/obj/Debug/net6.0/WIDESEA_IBusinessServices.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessServices/obj/Debug/net6.0/WIDESEA_IBusinessServices.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessServices/obj/Debug/net6.0/WIDESEA_IBusinessServices.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessServices/obj/Debug/net6.0/WIDESEA_IBusinessServices.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessServices/obj/Debug/net6.0/WIDESEA_IBusinessServices.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessServices/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessServices/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessServices/obj/WIDESEA_IBusinessServices.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessServices/obj/WIDESEA_IBusinessServices.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessServices/obj/WIDESEA_IBusinessServices.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IRepository/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IRepository/obj/Debug/net6.0/WIDESEA_IRepository.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IRepository/obj/Debug/net6.0/WIDESEA_IRepository.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IRepository/obj/Debug/net6.0/WIDESEA_IRepository.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IRepository/obj/Debug/net6.0/WIDESEA_IRepository.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IRepository/obj/Debug/net6.0/WIDESEA_IRepository.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IRepository/obj/Debug/net6.0/WIDESEA_IRepository.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IRepository/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IRepository/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IRepository/obj/WIDESEA_IRepository.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IRepository/obj/WIDESEA_IRepository.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IRepository/obj/WIDESEA_IRepository.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IServices/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IServices/obj/Debug/net6.0/WIDESEA_IServices.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IServices/obj/Debug/net6.0/WIDESEA_IServices.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IServices/obj/Debug/net6.0/WIDESEA_IServices.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IServices/obj/Debug/net6.0/WIDESEA_IServices.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IServices/obj/Debug/net6.0/WIDESEA_IServices.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IServices/obj/Debug/net6.0/WIDESEA_IServices.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IServices/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IServices/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IServices/obj/WIDESEA_IServices.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IServices/obj/WIDESEA_IServices.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IServices/obj/WIDESEA_IServices.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/obj/Debug/net6.0/WIDESEA_IStorageBasicRepository.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/obj/Debug/net6.0/WIDESEA_IStorageBasicRepository.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/obj/Debug/net6.0/WIDESEA_IStorageBasicRepository.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/obj/Debug/net6.0/WIDESEA_IStorageBasicRepository.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/obj/Debug/net6.0/WIDESEA_IStorageBasicRepository.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/obj/Debug/net6.0/WIDESEA_IStorageBasicRepository.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/obj/WIDESEA_IStorageBasicRepository.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/obj/WIDESEA_IStorageBasicRepository.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/obj/WIDESEA_IStorageBasicRepository.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/obj/Debug/net6.0/WIDESEA_IStorageBasicServices.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/obj/Debug/net6.0/WIDESEA_IStorageBasicServices.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/obj/Debug/net6.0/WIDESEA_IStorageBasicServices.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/obj/Debug/net6.0/WIDESEA_IStorageBasicServices.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/obj/Debug/net6.0/WIDESEA_IStorageBasicServices.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/obj/Debug/net6.0/WIDESEA_IStorageBasicServices.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/obj/WIDESEA_IStorageBasicServices.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/obj/WIDESEA_IStorageBasicServices.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/obj/WIDESEA_IStorageBasicServices.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderRepository/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderRepository/obj/Debug/net6.0/WIDESEA_IStorageOutOrderRepository.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderRepository/obj/Debug/net6.0/WIDESEA_IStorageOutOrderRepository.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderRepository/obj/Debug/net6.0/WIDESEA_IStorageOutOrderRepository.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderRepository/obj/Debug/net6.0/WIDESEA_IStorageOutOrderRepository.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderRepository/obj/Debug/net6.0/WIDESEA_IStorageOutOrderRepository.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderRepository/obj/Debug/net6.0/WIDESEA_IStorageOutOrderRepository.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderRepository/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderRepository/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderRepository/obj/WIDESEA_IStorageOutOrderRepository.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderRepository/obj/WIDESEA_IStorageOutOrderRepository.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderRepository/obj/WIDESEA_IStorageOutOrderRepository.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderService/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderService/obj/Debug/net6.0/WIDESEA_IStorageOutOrderServices.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderService/obj/Debug/net6.0/WIDESEA_IStorageOutOrderServices.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderService/obj/Debug/net6.0/WIDESEA_IStorageOutOrderServices.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderService/obj/Debug/net6.0/WIDESEA_IStorageOutOrderServices.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderService/obj/Debug/net6.0/WIDESEA_IStorageOutOrderServices.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderService/obj/Debug/net6.0/WIDESEA_IStorageOutOrderServices.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderService/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderService/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderService/obj/WIDESEA_IStorageOutOrderServices.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderService/obj/WIDESEA_IStorageOutOrderServices.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderService/obj/WIDESEA_IStorageOutOrderServices.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskRepository/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskRepository/obj/Debug/net6.0/WIDESEA_IStorageTaskRepository.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskRepository/obj/Debug/net6.0/WIDESEA_IStorageTaskRepository.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskRepository/obj/Debug/net6.0/WIDESEA_IStorageTaskRepository.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskRepository/obj/Debug/net6.0/WIDESEA_IStorageTaskRepository.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskRepository/obj/Debug/net6.0/WIDESEA_IStorageTaskRepository.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskRepository/obj/Debug/net6.0/WIDESEA_IStorageTaskRepository.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskRepository/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskRepository/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskRepository/obj/WIDESEA_IStorageTaskRepository.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskRepository/obj/WIDESEA_IStorageTaskRepository.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskRepository/obj/WIDESEA_IStorageTaskRepository.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/obj/Debug/net6.0/WIDESEA_IStorageTaskServices.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/obj/Debug/net6.0/WIDESEA_IStorageTaskServices.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/obj/Debug/net6.0/WIDESEA_IStorageTaskServices.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/obj/Debug/net6.0/WIDESEA_IStorageTaskServices.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/obj/Debug/net6.0/WIDESEA_IStorageTaskServices.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/obj/Debug/net6.0/WIDESEA_IStorageTaskServices.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/obj/WIDESEA_IStorageTaskServices.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/obj/WIDESEA_IStorageTaskServices.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/obj/WIDESEA_IStorageTaskServices.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationRepository/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationRepository/obj/Debug/net6.0/WIDESEA_IStoragIntegrationRepository.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationRepository/obj/Debug/net6.0/WIDESEA_IStoragIntegrationRepository.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationRepository/obj/Debug/net6.0/WIDESEA_IStoragIntegrationRepository.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationRepository/obj/Debug/net6.0/WIDESEA_IStoragIntegrationRepository.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationRepository/obj/Debug/net6.0/WIDESEA_IStoragIntegrationRepository.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationRepository/obj/Debug/net6.0/WIDESEA_IStoragIntegrationRepository.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationRepository/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationRepository/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationRepository/obj/WIDESEA_IStoragIntegrationRepository.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationRepository/obj/WIDESEA_IStoragIntegrationRepository.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationRepository/obj/WIDESEA_IStoragIntegrationRepository.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationServices/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationServices/obj/Debug/net6.0/WIDESEA_IStoragIntegrationServices.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationServices/obj/Debug/net6.0/WIDESEA_IStoragIntegrationServices.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationServices/obj/Debug/net6.0/WIDESEA_IStoragIntegrationServices.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationServices/obj/Debug/net6.0/WIDESEA_IStoragIntegrationServices.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationServices/obj/Debug/net6.0/WIDESEA_IStoragIntegrationServices.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationServices/obj/Debug/net6.0/WIDESEA_IStoragIntegrationServices.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationServices/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationServices/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationServices/obj/WIDESEA_IStoragIntegrationServices.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationServices/obj/WIDESEA_IStoragIntegrationServices.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationServices/obj/WIDESEA_IStoragIntegrationServices.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Model/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Model/obj/Debug/net6.0/WIDESEA_Model.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Model/obj/Debug/net6.0/WIDESEA_Model.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Model/obj/Debug/net6.0/WIDESEA_Model.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Model/obj/Debug/net6.0/WIDESEA_Model.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Model/obj/Debug/net6.0/WIDESEA_Model.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Model/obj/Debug/net6.0/WIDESEA_Model.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Model/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Model/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Model/obj/WIDESEA_Model.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Model/obj/WIDESEA_Model.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Model/obj/WIDESEA_Model.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Repository/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Repository/obj/Debug/net6.0/WIDESEA_Repository.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Repository/obj/Debug/net6.0/WIDESEA_Repository.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Repository/obj/Debug/net6.0/WIDESEA_Repository.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Repository/obj/Debug/net6.0/WIDESEA_Repository.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Repository/obj/Debug/net6.0/WIDESEA_Repository.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Repository/obj/Debug/net6.0/WIDESEA_Repository.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Repository/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Repository/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Repository/obj/WIDESEA_Repository.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Repository/obj/WIDESEA_Repository.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Repository/obj/WIDESEA_Repository.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Services/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Services/obj/Debug/net6.0/WIDESEA_Services.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Services/obj/Debug/net6.0/WIDESEA_Services.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Services/obj/Debug/net6.0/WIDESEA_Services.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Services/obj/Debug/net6.0/WIDESEA_Services.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Services/obj/Debug/net6.0/WIDESEA_Services.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Services/obj/Debug/net6.0/WIDESEA_Services.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Services/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Services/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Services/obj/WIDESEA_Services.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Services/obj/WIDESEA_Services.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Services/obj/WIDESEA_Services.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/obj/Debug/net6.0/WIDESEA_StorageBasicRepository.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/obj/Debug/net6.0/WIDESEA_StorageBasicRepository.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/obj/Debug/net6.0/WIDESEA_StorageBasicRepository.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/obj/Debug/net6.0/WIDESEA_StorageBasicRepository.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/obj/Debug/net6.0/WIDESEA_StorageBasicRepository.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/obj/Debug/net6.0/WIDESEA_StorageBasicRepository.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/obj/WIDESEA_StorageBasicRepository.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/obj/WIDESEA_StorageBasicRepository.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/obj/WIDESEA_StorageBasicRepository.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/obj/Debug/net6.0/WIDESEA_StorageBasicServices.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/obj/Debug/net6.0/WIDESEA_StorageBasicServices.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/obj/Debug/net6.0/WIDESEA_StorageBasicServices.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/obj/Debug/net6.0/WIDESEA_StorageBasicServices.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/obj/Debug/net6.0/WIDESEA_StorageBasicServices.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/obj/Debug/net6.0/WIDESEA_StorageBasicServices.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/obj/WIDESEA_StorageBasicServices.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/obj/WIDESEA_StorageBasicServices.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/obj/WIDESEA_StorageBasicServices.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderRepository/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderRepository/obj/Debug/net6.0/WIDESEA_StorageOutOrderRepository.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderRepository/obj/Debug/net6.0/WIDESEA_StorageOutOrderRepository.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderRepository/obj/Debug/net6.0/WIDESEA_StorageOutOrderRepository.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderRepository/obj/Debug/net6.0/WIDESEA_StorageOutOrderRepository.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderRepository/obj/Debug/net6.0/WIDESEA_StorageOutOrderRepository.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderRepository/obj/Debug/net6.0/WIDESEA_StorageOutOrderRepository.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderRepository/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderRepository/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderRepository/obj/WIDESEA_StorageOutOrderRepository.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderRepository/obj/WIDESEA_StorageOutOrderRepository.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderRepository/obj/WIDESEA_StorageOutOrderRepository.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderServices/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderServices/obj/Debug/net6.0/WIDESEA_StorageOutOrderServices.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderServices/obj/Debug/net6.0/WIDESEA_StorageOutOrderServices.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderServices/obj/Debug/net6.0/WIDESEA_StorageOutOrderServices.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderServices/obj/Debug/net6.0/WIDESEA_StorageOutOrderServices.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderServices/obj/Debug/net6.0/WIDESEA_StorageOutOrderServices.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderServices/obj/Debug/net6.0/WIDESEA_StorageOutOrderServices.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderServices/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderServices/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderServices/obj/WIDESEA_StorageOutOrderServices.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderServices/obj/WIDESEA_StorageOutOrderServices.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderServices/obj/WIDESEA_StorageOutOrderServices.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskRepository/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskRepository/obj/Debug/net6.0/WIDESEA_StorageTaskRepository.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskRepository/obj/Debug/net6.0/WIDESEA_StorageTaskRepository.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskRepository/obj/Debug/net6.0/WIDESEA_StorageTaskRepository.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskRepository/obj/Debug/net6.0/WIDESEA_StorageTaskRepository.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskRepository/obj/Debug/net6.0/WIDESEA_StorageTaskRepository.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskRepository/obj/Debug/net6.0/WIDESEA_StorageTaskRepository.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskRepository/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskRepository/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskRepository/obj/WIDESEA_StorageTaskRepository.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskRepository/obj/WIDESEA_StorageTaskRepository.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskRepository/obj/WIDESEA_StorageTaskRepository.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/obj/Debug/net6.0/WIDESEA_StorageTaskServices.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/obj/Debug/net6.0/WIDESEA_StorageTaskServices.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/obj/Debug/net6.0/WIDESEA_StorageTaskServices.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/obj/Debug/net6.0/WIDESEA_StorageTaskServices.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/obj/Debug/net6.0/WIDESEA_StorageTaskServices.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/obj/Debug/net6.0/WIDESEA_StorageTaskServices.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/obj/WIDESEA_StorageTaskServices.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/obj/WIDESEA_StorageTaskServices.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/obj/WIDESEA_StorageTaskServices.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationRepository/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationRepository/obj/Debug/net6.0/WIDESEA_StoragIntegrationRepository.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationRepository/obj/Debug/net6.0/WIDESEA_StoragIntegrationRepository.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationRepository/obj/Debug/net6.0/WIDESEA_StoragIntegrationRepository.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationRepository/obj/Debug/net6.0/WIDESEA_StoragIntegrationRepository.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationRepository/obj/Debug/net6.0/WIDESEA_StoragIntegrationRepository.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationRepository/obj/Debug/net6.0/WIDESEA_StoragIntegrationRepository.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationRepository/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationRepository/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationRepository/obj/WIDESEA_StoragIntegrationRepository.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationRepository/obj/WIDESEA_StoragIntegrationRepository.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationRepository/obj/WIDESEA_StoragIntegrationRepository.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/obj/Debug/net6.0/WIDESEA_StoragIntegrationServices.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/obj/Debug/net6.0/WIDESEA_StoragIntegrationServices.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/obj/Debug/net6.0/WIDESEA_StoragIntegrationServices.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/obj/Debug/net6.0/WIDESEA_StoragIntegrationServices.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/obj/Debug/net6.0/WIDESEA_StoragIntegrationServices.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/obj/Debug/net6.0/WIDESEA_StoragIntegrationServices.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/obj/WIDESEA_StoragIntegrationServices.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/obj/WIDESEA_StoragIntegrationServices.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/obj/WIDESEA_StoragIntegrationServices.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Tasks/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Tasks/obj/Debug/net6.0/WIDESEA_Tasks.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Tasks/obj/Debug/net6.0/WIDESEA_Tasks.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Tasks/obj/Debug/net6.0/WIDESEA_Tasks.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Tasks/obj/Debug/net6.0/WIDESEA_Tasks.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Tasks/obj/Debug/net6.0/WIDESEA_Tasks.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Tasks/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Tasks/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Tasks/obj/WIDESEA_Tasks.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Tasks/obj/WIDESEA_Tasks.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Tasks/obj/WIDESEA_Tasks.csproj.nuget.g.targets
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/obj/Debug/net6.0/staticwebassets.removed.txt
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/obj/Debug/net6.0/WIDESEA_WMSServer.AssemblyInfo.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/obj/Debug/net6.0/WIDESEA_WMSServer.AssemblyInfoInputs.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/obj/Debug/net6.0/WIDESEA_WMSServer.assets.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/obj/Debug/net6.0/WIDESEA_WMSServer.csproj.AssemblyReference.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/obj/Debug/net6.0/WIDESEA_WMSServer.GeneratedMSBuildEditorConfig.editorconfig
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/obj/Debug/net6.0/WIDESEA_WMSServer.GlobalUsings.g.cs
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/obj/project.assets.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/obj/project.nuget.cache
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/obj/WIDESEA_WMSServer.csproj.nuget.dgspec.json
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/obj/WIDESEA_WMSServer.csproj.nuget.g.props
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/obj/WIDESEA_WMSServer.csproj.nuget.g.targets
CodeManagement/WCS/WIDESEAWCS_Client/package-lock.json
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
CodeManagement/WCS/WIDESEAWCS_Client/package.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,69 @@
{
  "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",
    "bootstrap": "^5.3.3",
    "core-js": "^3.6.5",
    "echarts": "^5.0.2",
    "element-plus": "^2.2.14",
    "less": "^4.1.1",
    "mitt": "^3.0.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": [
    "*"
  ],
  "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
}
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs
@@ -159,7 +159,7 @@
                {
                    //return true;
                    object? obj = null;
                    for (int i = 0; i < 3; i++)
                    for (int i = 0; i < 5; i++)
                    {
                        T readValue = Read<T>(address);
                        stringBuilder.AppendLine(string.Format(CommunicationInfoMessage.WriteAfterRead, readValue, value));
@@ -169,7 +169,7 @@
                            stringBuilder.AppendLine(string.Format(CommunicationInfoMessage.WriteAndReadCheckSuccess, address, value, readValue));
                            return true;
                        }
                        else if (i < 2)
                        else if (i < 4)
                        {
                            Write(address, value);
                        }
@@ -609,7 +609,6 @@
                {
                    //return true;
                    object? obj = null;
                    for (int i = 0; i < 3; i++)
                    {
                        T readValue = ReadCustomer<T>(address);
                        stringBuilder.AppendLine(string.Format(CommunicationInfoMessage.WriteAfterRead, address, JsonConvert.SerializeObject(readValue)));
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_IProcessService/IPlatFormService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_IProcessService
{
    public interface IPlatFormService : IService<Platform>
    {
    }
}
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_IProcessService/WIDESEAWCS_IProcessService.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_ISystemServices\WIDESEAWCS_ISystemServices.csproj" />
    <ProjectReference Include="..\WIDESEAWCS_ProcessParameters\WIDESEAWCS_IProcessRepository.csproj" />
  </ItemGroup>
</Project>
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_ProcessService/PlatFormService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_IProcessRepository;
using WIDESEAWCS_IProcessService;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ProcessService
{
    public partial class PlatFormService:ServiceBase<Platform,IPlatFormRepository>,IPlatFormService
    {
        public PlatFormService(IPlatFormRepository BaseDal) : base(BaseDal)
        {
        }
    }
}
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_ProcessService/WIDESEAWCS_ProcessService.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_IProcessService\WIDESEAWCS_IProcessService.csproj" />
    <ProjectReference Include="..\WIDESEAWCS_QuartzJob\WIDESEAWCS_QuartzJob.csproj" />
  </ItemGroup>
</Project>
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/.config/dotnet-tools.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
{
  "version": 1,
  "isRoot": true,
  "tools": {
    "dotnet-ef": {
      "version": "9.0.3",
      "commands": [
        "dotnet-ef"
      ],
      "rollForward": false
    }
  }
}
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/ProcessParameters/PlatformController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
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_BasicInfoService;
using WIDESEAWCS_Common;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.BasicInfo;
using WIDESEAWCS_IProcessService;
using WIDESEAWCS_ITaskInfo_HtyService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
namespace WIDESEAWCS_Server.Controllers.ProcessParameters
{
    [Route("api/Platform")]
    [ApiController]
    public class PlatformController : ApiBaseController<IPlatFormService, Platform>
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
        public PlatformController(IPlatFormService service, IHttpContextAccessor httpContextAccessor) : base(service)
        {
            _httpContextAccessor = httpContextAccessor;
        }
    }
}
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/PublishProfiles/FolderProfile.pubxml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
<?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>Debug</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <PublishProvider>FileSystem</PublishProvider>
    <PublishUrl>bin\Debug\net6.0\publish\</PublishUrl>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <_TargetId>Folder</_TargetId>
    <SiteUrlToLaunchAfterPublish />
    <TargetFramework>net6.0</TargetFramework>
    <ProjectGuid>487fa45b-ea1a-4aca-bb5b-0f6708f462c0</ProjectGuid>
    <SelfContained>false</SelfContained>
  </PropertyGroup>
</Project>
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Properties/PublishProfiles/FolderProfile.pubxml.user
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
  <PropertyGroup>
    <_PublishTargetUrl>D:\Git\BaiBuSanlou\CodeManagement\WCS\WIDESEAWCS_Server\WIDESEAWCS_Server\bin\Debug\net6.0\publish\</_PublishTargetUrl>
    <History>True|2025-03-27T05:37:49.9939026Z||;True|2025-03-27T13:29:20.1926150+08:00||;True|2025-03-26T23:19:20.7301591+08:00||;True|2025-03-26T23:17:14.1194337+08:00||;True|2025-03-26T23:06:39.1521743+08:00||;True|2025-03-26T22:45:13.0771457+08:00||;True|2025-03-26T15:49:56.7831444+08:00||;True|2025-03-26T11:17:59.8156703+08:00||;True|2025-03-25T10:07:06.2413400+08:00||;True|2025-03-24T22:07:19.1662430+08:00||;True|2025-03-24T17:46:50.5366700+08:00||;True|2025-03-23T22:21:52.3680226+08:00||;True|2025-03-23T22:04:03.0344904+08:00||;True|2025-03-23T18:11:25.3235647+08:00||;True|2025-03-23T16:46:42.6441101+08:00||;True|2025-03-22T17:15:44.8475192+08:00||;True|2025-03-22T16:40:56.2937788+08:00||;True|2025-03-22T16:16:19.5470008+08:00||;True|2025-03-22T15:49:39.1178646+08:00||;True|2025-03-22T15:44:56.2071472+08:00||;True|2025-03-22T15:38:57.0439012+08:00||;True|2025-03-22T15:02:20.9416020+08:00||;True|2025-03-22T14:33:13.6730569+08:00||;True|2025-03-21T23:34:47.6039521+08:00||;True|2025-03-21T02:10:54.8314020+08:00||;True|2025-03-18T16:25:46.4649995+08:00||;True|2025-02-19T11:41:36.9348078+08:00||;True|2025-02-18T18:28:41.9967285+08:00||;True|2025-02-18T18:25:36.2264950+08:00||;True|2025-02-18T10:30:56.5234743+08:00||;True|2025-02-15T15:24:40.7310549+08:00||;True|2025-02-15T14:26:13.5854743+08:00||;True|2025-02-15T14:23:09.9103735+08:00||;True|2025-02-15T14:11:58.0255348+08:00||;True|2025-02-15T13:55:31.3438054+08:00||;True|2025-02-15T13:47:31.3307267+08:00||;True|2025-02-15T13:46:24.9001959+08:00||;True|2025-02-15T13:23:47.4161644+08:00||;True|2025-02-15T13:10:20.4988808+08:00||;True|2025-02-15T13:05:10.7619905+08:00||;True|2025-02-15T12:55:42.2397751+08:00||;True|2025-02-15T12:43:42.1819119+08:00||;True|2025-02-15T10:19:42.3871047+08:00||;True|2025-01-03T16:15:25.4007394+08:00||;True|2025-01-03T15:59:55.6586669+08:00||;True|2025-01-03T15:58:54.7953589+08:00||;True|2025-01-03T15:54:46.8938743+08:00||;True|2025-01-03T15:30:32.7439557+08:00||;True|2025-01-03T15:27:53.2337341+08:00||;True|2025-01-03T15:24:30.7045349+08:00||;True|2025-01-02T14:13:36.7820311+08:00||;</History>
    <LastFailureDetails />
  </PropertyGroup>
</Project>
CodeManagement/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"
      }
    }
  }
}
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj.user
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <NameOfLastUsedPublishProfile>D:\Git\BaiBuSanlou\CodeManagement\WCS\WIDESEAWCS_Server\WIDESEAWCS_Server\Properties\PublishProfiles\FolderProfile.pubxml</NameOfLastUsedPublishProfile>
  </PropertyGroup>
</Project>
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.Development.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  }
}
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
{
  "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": "Data Source=.;Initial Catalog=WIDESEA_WCSDB3F;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //"ConnectionString": "Data Source=127.0.0.1;Initial Catalog=WIDESEA_WCSDB_BB3F;User ID=sa;Password=P@ssw0rd;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,
  "LogDeubgEnable": true
}
CodeManagement/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
  }
]
CodeManagement/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
  }
]
CodeManagement/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
  }
]
CodeManagement/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
  }
]
CodeManagement/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
  }
]
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_Task.tsv
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_TaskExecuteDetail.tsv
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
CodeManagement/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
  }
]
CodeManagement/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
  }
]
CodeManagement/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"
  }
]
CodeManagement/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"
  }
]
CodeManagement/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
  }
]
CodeManagement/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
  }
]
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Partial/TaskService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,667 @@
using HslCommunication;
using Mapster;
using Newtonsoft.Json;
using System.Diagnostics.CodeAnalysis;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.Models;
namespace WIDESEAWCS_TaskInfoService
{
    public partial class TaskService
    {
        /// <summary>
        /// æ ¹æ®æ‰˜ç›˜å·ã€èµ·å§‹åœ°å€å‘WMS请求任务
        /// </summary>
        /// <param name="palletCode">托盘号</param>
        /// <param name="sourceAddress">起始地址</param>
        /// <returns></returns>
        public async Task<WebResponseContent> RequestTask(string palletCode, string EquiCodeMOM, string Roadways, string area, string CurrentChildCode)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                var hasTask = await BaseDal.QueryFirstAsync(x => x.PalletCode == palletCode);
                if (hasTask != null)
                {
                    return content.Error("当前托盘存在任务");
                }
                var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestInTask)?.ConfigValue;
                if (wmsBase == null || requestTask == null)
                {
                    throw new InvalidOperationException("WMS IP æœªé…ç½®");
                }
                var wmsIpAddrss = wmsBase + requestTask;
                var result = await HttpHelper.PostAsync(wmsIpAddrss, new { palletCode = palletCode, EquiCodeMOM = EquiCodeMOM, Roadways = Roadways, area = area, Position = CurrentChildCode }.ToJsonString());
                content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                if (!content.Status)
                {
                    // wms失败返回去NG口任务
                    return content;
                }
                var task = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
                return ReceiveByWMSTask(task);
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        #region æ ¹æ®æ‰˜ç›˜å·ã€ç«™å°å‘WMS请求任务
        /// <summary>
        /// æ ¹æ®æ‰˜ç›˜å·ã€ç«™å°å‘WMS请求任务
        /// </summary>
        /// <param name="palletCode">托盘号</param>
        /// <param name="stationManager">站台</param>
        /// <returns></returns>
        public async Task<WebResponseContent> RequestTask1(string palletCode, Dt_StationManager stationManager)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                StaticVariable.isLineRun = false;
                var hasTask = await BaseDal.QueryFirstAsync(x => x.PalletCode == palletCode);
                if (hasTask != null)
                {
                    return content.Error("当前托盘存在任务");
                }
                var Station = await _stationManagerRepository.QueryFirstAsync(x => x.stationType == 6 && x.productLine == stationManager.productLine && x.stationArea == stationManager.stationArea);
                var tasks = await BaseDal.QueryFirstAsync(x => x.TaskType == (int)TaskOutboundTypeEnum.InToOut && x.TargetAddress == stationManager.stationLocation && x.CurrentAddress == Station.stationChildCode);
                if (tasks != null)
                {
                    ConsoleHelper.WriteErrorLine($"【{stationManager.stationChildCode}】已存在直接出库任务任务");
                    return content.Error($"【{stationManager.stationChildCode}】已存在直接出库任务任务");
                }
                if (StaticVariable.isStackerRun)
                {
                    if (stationManager.stationType == 7)
                    {
                        var runTask = await BaseDal.QueryFirstAsync(x => x.CurrentAddress == Station.stationChildCode && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.TaskType == (int)TaskInboundTypeEnum.InTray);
                        if (runTask != null)
                        {
                            runTask.TargetAddress = stationManager.stationLocation;
                            runTask.NextAddress = stationManager.stationChildCode;
                            runTask.Grade = 3;
                            runTask.TaskType = (int)TaskOutboundTypeEnum.InToOut;
                            runTask.TaskState = (int)TaskOutStatusEnum.OutNew;
                            var config1 = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                            var wmsBase1 = config1.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                            var requestTask1 = config1.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.SetEmptyOutbyInToOutAsync)?.ConfigValue;
                            if (wmsBase1 == null || requestTask1 == null)
                            {
                                throw new InvalidOperationException("WMS IP æœªé…ç½®");
                            }
                            var wmsIpAddrss1 = wmsBase1 + requestTask1;
                            var result1 = await HttpHelper.PostAsync(wmsIpAddrss1, new { palletCode = runTask.PalletCode, EquiCodeMOM = stationManager.stationEquipMOM, Roadways = stationManager.Roadway, area = stationManager.stationArea, Position = Station.stationChildCode }.ToJsonString());
                            content = JsonConvert.DeserializeObject<WebResponseContent>(result1);
                            if (content.Status)
                            {
                                await BaseDal.UpdateDataAsync(runTask);
                                ConsoleHelper.WriteSuccessLine($"【{runTask.PalletCode}直接出库至二封】");
                                return content.OK("成功");
                            }
                            else
                                ConsoleHelper.WriteErrorLine(content.Message);
                        }
                        else
                            ConsoleHelper.WriteErrorLine($"【{Station.stationChildCode}】未找到空托盘入库任务");
                    }
                    else if (stationManager.stationType == 6)
                    {
                        var emptyStation = await _stationManagerRepository.QueryFirstAsync(x => x.stationType == 7 && x.productLine == stationManager.productLine && x.stationArea == stationManager.stationArea);
                        var runTask = await BaseDal.QueryFirstAsync(x => x.NextAddress == emptyStation.stationChildCode && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.TaskType == (int)TaskInboundTypeEnum.InTray);
                        if (runTask != null)
                        {
                            runTask.SourceAddress = stationManager.stationLocation;
                            runTask.CurrentAddress = stationManager.stationChildCode;
                            runTask.Grade = 3;
                            runTask.TaskType = (int)TaskOutboundTypeEnum.InToOut;
                            runTask.TaskState = (int)TaskOutStatusEnum.OutNew;
                            runTask.PalletCode = palletCode;
                            var config1 = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                            var wmsBase1 = config1.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                            var requestTask1 = config1.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.SetEmptyOutbyInToOutOneAsync)?.ConfigValue;
                            if (wmsBase1 == null || requestTask1 == null)
                            {
                                throw new InvalidOperationException("WMS IP æœªé…ç½®");
                            }
                            var wmsIpAddrss1 = wmsBase1 + requestTask1;
                            var result1 = await HttpHelper.PostAsync(wmsIpAddrss1, new { palletCode = runTask.PalletCode, EquiCodeMOM = stationManager.stationEquipMOM, Roadways = stationManager.Roadway, area = stationManager.stationArea, Position = emptyStation.stationChildCode }.ToJsonString());
                            content = JsonConvert.DeserializeObject<WebResponseContent>(result1);
                            if (content.Status)
                            {
                                await BaseDal.UpdateDataAsync(runTask);
                                ConsoleHelper.WriteSuccessLine($"【{runTask.PalletCode}直接出库至二封】");
                                return content.OK("成功");
                            }
                            else
                                ConsoleHelper.WriteErrorLine(content.Message);
                        }
                    }
                }
                var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestInTask)?.ConfigValue;
                if (wmsBase == null || requestTask == null)
                {
                    throw new InvalidOperationException("WMS IP æœªé…ç½®");
                }
                var wmsIpAddrss = wmsBase + requestTask;
                var result = await HttpHelper.PostAsync(wmsIpAddrss, new { palletCode = palletCode, EquiCodeMOM = stationManager.stationEquipMOM, Roadways = stationManager.Roadway, area = stationManager.stationArea, Position = stationManager.stationChildCode }.ToJsonString());
                content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                ConsoleHelper.WriteErrorLine($"{stationManager.stationChildCode}站台请求响应信息:{content.ToJsonString()}");
                if (!content.Status)
                {
                    // wms失败返回去NG口任务
                    //if (stationManager.stationChildCode != stationManager.stationNGChildCode)
                    //{
                    //    WMSTaskDTO taskDTO = new WMSTaskDTO()
                    //    {
                    //        Grade = 8,
                    //        PalletCode = palletCode,
                    //        SourceAddress = stationManager.stationLocation,
                    //        TargetAddress = stationManager.stationNGLocation,
                    //        RoadWay = stationManager.Roadway,
                    //        TaskNum = 1000,
                    //        TaskState = (int)TaskOutStatusEnum.OutNew,
                    //        TaskType = (int)TaskOutboundTypeEnum.InToOut
                    //    };
                    //}
                    return content;
                }
                var task = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
                ConsoleHelper.WriteSuccessLine(content.Data.ToString());
                return ReceiveByWMSTask(task);
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
            finally
            {
                StaticVariable.isLineRun = true;
            }
        }
        /// <summary>
        /// æ ¹æ®æ‰˜ç›˜å·ã€ç«™å°å‘WMS请求任务
        /// </summary>
        /// <param name="palletCode">托盘号</param>
        /// <param name="stationManager">站台</param>
        /// <returns></returns>
        public async Task<WebResponseContent> RequestTask(string palletCode, Dt_StationManager stationManager)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                // æ£€æŸ¥å½“前托盘是否存在任务
                if (await HasTask(palletCode))
                {
                    return content.Error("当前托盘存在任务");
                }
                //// æ£€æŸ¥æ˜¯å¦å·²å­˜åœ¨ç›´æŽ¥å‡ºåº“任务
                //if (await HasDirectOutboundTask(stationManager))
                //{
                //    return content.Error($"【{stationManager.stationChildCode}】已存在直接出库任务任务");
                //}
                //if (stationManager.stationType == 7)
                //{
                //    var result = await HandleStationType7(palletCode, stationManager);
                //    if (result != null)
                //    {
                //        return result;
                //    }
                //}
                //else if (stationManager.stationType == 6)
                //{
                //    var result = await HandleStationType6(palletCode, stationManager);
                //    if (result != null)
                //    {
                //        return result;
                //    }
                //}
                // å‘起请求获取入库任务
                content = await RequestInTask(palletCode, stationManager);
                ConsoleHelper.WriteErrorLine($"{stationManager.stationChildCode}站台请求响应信息:{content.ToJsonString()}");
                if (!content.Status)
                {
                    return content;
                }
                var task = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
                ConsoleHelper.WriteSuccessLine(content.Data.ToString());
                return ReceiveByWMSTask(task);
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        // æ£€æŸ¥å½“前托盘是否存在任务
        private async Task<bool> HasTask(string palletCode)
        {
            var hasTask = await BaseDal.QueryFirstAsync(x => x.PalletCode == palletCode);
            return hasTask != null;
        }
        // æ£€æŸ¥æ˜¯å¦å·²å­˜åœ¨ç›´æŽ¥å‡ºåº“任务
        private async Task<bool> HasDirectOutboundTask(Dt_StationManager stationManager)
        {
            var station = await _stationManagerRepository.QueryFirstAsync(x => x.stationType == 6 && x.productLine == stationManager.productLine && x.stationArea == stationManager.stationArea);
            var tasks = await BaseDal.QueryFirstAsync(x => x.TaskType == (int)TaskOutboundTypeEnum.InToOut && x.TargetAddress == stationManager.stationLocation && x.CurrentAddress == station.stationChildCode);
            return tasks != null;
        }
        // å¤„理 stationType ä¸º 7 çš„æƒ…况
        private async Task<WebResponseContent> HandleStationType7(Dt_StationManager stationManager)
        {
            var station = await _taskNeedBarcodeRepository.QueryFirstAsync(x => x.toArea == stationManager.stationChildCode && x.productLine == stationManager.productLine);
            return null;
        }
        // å¤„理 stationType ä¸º 6 çš„æƒ…况
        private async Task<WebResponseContent> HandleStationType6(string palletCode, Dt_StationManager stationManager)
        {
            var emptyStation = await _stationManagerRepository.QueryFirstAsync(x => x.stationType == 7 && x.productLine == stationManager.productLine && x.stationArea == stationManager.stationArea);
            var runTask = await BaseDal.QueryFirstAsync(x => x.NextAddress == emptyStation.stationChildCode && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.TaskType == (int)TaskInboundTypeEnum.InTray);
            if (runTask != null)
            {
                runTask.SourceAddress = stationManager.stationLocation;
                runTask.CurrentAddress = stationManager.stationChildCode;
                runTask.Grade = 3;
                runTask.TaskType = (int)TaskOutboundTypeEnum.InToOut;
                runTask.TaskState = (int)TaskOutStatusEnum.OutNew;
                runTask.PalletCode = palletCode;
                var wmsIpAddrss = GetWmsIpAddress(SysConfigKeyConst.SetEmptyOutbyInToOutAsync);
                var result = await HttpHelper.PostAsync(wmsIpAddrss, new { palletCode = runTask.PalletCode, EquiCodeMOM = stationManager.stationEquipMOM, Roadways = stationManager.Roadway, area = stationManager.stationArea, Position = emptyStation.stationChildCode }.ToJsonString());
                var content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                if (content.Status)
                {
                    await BaseDal.UpdateDataAsync(runTask);
                    ConsoleHelper.WriteSuccessLine($"【{runTask.PalletCode}直接出库至二封】");
                    return content.OK("成功");
                }
                else
                {
                    ConsoleHelper.WriteErrorLine(content.Message);
                }
            }
            return null;
        }
        // èŽ·å– WMS è¯·æ±‚地址
        private string GetWmsIpAddress(string configKey)
        {
            var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
            var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
            var requestTask = config.FirstOrDefault(x => x.ConfigKey == configKey)?.ConfigValue;
            if (wmsBase == null || requestTask == null)
            {
                throw new InvalidOperationException("WMS IP æœªé…ç½®");
            }
            return wmsBase + requestTask;
        }
        // å‘起请求获取入库任务
        private async Task<WebResponseContent> RequestInTask(string palletCode, Dt_StationManager stationManager)
        {
            var wmsIpAddrss = GetWmsIpAddress(SysConfigKeyConst.RequestInTask);
            var result = await HttpHelper.PostAsync(wmsIpAddrss, new { palletCode = palletCode, EquiCodeMOM = stationManager.stationEquipMOM, Roadways = stationManager.Roadway, area = stationManager.stationArea, Position = stationManager.stationChildCode, ProductionLine = stationManager.productLine}.ToJsonString());
            return JsonConvert.DeserializeObject<WebResponseContent>(result);
        }
        #endregion æ ¹æ®æ‰˜ç›˜å·ã€ç«™å°å‘WMS请求任务
        public async Task<WebResponseContent> RequestOutTaskToBZAsync(Dt_StationManager stationManager)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestOutTaskToBZ)?.ConfigValue;
                if (wmsBase == null || requestTask == null)
                {
                    throw new InvalidOperationException("WMS IP æœªé…ç½®");
                }
                var wmsIpAddrss = wmsBase + requestTask;
                var result = await HttpHelper.PostAsync(wmsIpAddrss, new { Position = stationManager.stationChildCode }.ToJsonString());
                content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                if (!content.Status)
                {
                    //无满足条件可出库至包装的库存
                    return content;
                }
                var task = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
                ConsoleHelper.WriteSuccessLine(content.Data.ToString());
                content = ReceiveWMSTask(new List<WMSTaskDTO> { task });
                return content;
            }
            catch (Exception ex)
            {
                return content.Error(ex.Message);
            }
        }
        /// <summary>
        /// æŽ¥æ”¶WMS任务信息
        /// </summary>
        /// <param name="taskDTOs">WMS任务对象集合</param>
        /// <returns>返回处理结果</returns>
        public WebResponseContent ReceiveByWMSTask([NotNull] WMSTaskDTO taskDTO)
        {
            WebResponseContent content = new WebResponseContent();
            ConsoleHelper.WriteSuccessLine($"接收到任务,任务数据:{JsonConvert.SerializeObject(taskDTO, Formatting.Indented)}");
            try
            {
                if (BaseDal.QueryFirst(x => x.TaskNum == taskDTO.TaskNum || x.PalletCode == taskDTO.PalletCode) != null)
                {
                    return content.OK();
                }
                Dt_Task task = _mapper.Map<Dt_Task>(taskDTO);
                task.Creater = "WMS";
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    if (task.TaskType == (int)TaskOutboundTypeEnum.OutTray)
                    {
                        // æŸ¥è¯¢ä¸‹ä¸€ä¸ªè·¯ç”±
                        List<Dt_Router> routers = _routerService.QueryNextRoutes(taskDTO.RoadWay, taskDTO.TargetAddress);
                        if (routers.Count > 0)
                        {
                            // è®¾ç½®ä»»åŠ¡çŠ¶æ€ä¸ºå‡ºåº“æ–°å»º
                            task.TaskState = (int)TaskOutStatusEnum.OutNew;
                            // è®¾ç½®å½“前地址为源地址
                            task.CurrentAddress = taskDTO.SourceAddress;
                            // è®¾ç½®ä¸‹ä¸€ä¸ªåœ°å€ä¸ºç¬¬ä¸€ä¸ªå­ä½ç½®
                            task.NextAddress = routers.FirstOrDefault().ChildPosi;
                        }
                        else
                        {
                            // æŸ¥è¯¢ä»Žæºåœ°å€åˆ°ç›®æ ‡åœ°å€çš„路由
                            routers = _routerService.QueryNextRoutes(taskDTO.SourceAddress, taskDTO.TargetAddress);
                            if (routers.Count > 0)
                            {
                                // è®¾ç½®ä»»åŠ¡çŠ¶æ€ä¸ºå‡ºåº“å®Œæˆ
                                task.TaskState = (int)TaskOutStatusEnum.SC_OutFinish;
                                // è®¾ç½®å½“前地址为源地址
                                task.CurrentAddress = taskDTO.SourceAddress;
                                // è®¾ç½®ä¸‹ä¸€ä¸ªåœ°å€ä¸ºç¬¬ä¸€ä¸ªå­ä½ç½®
                                task.NextAddress = routers.FirstOrDefault().ChildPosi;
                            }
                        }
                    }
                    else
                    {
                        var stationinfo = _stationManagerRepository.QueryFirst(x => x.stationLocation == taskDTO.TargetAddress && x.Roadway == taskDTO.RoadWay);
                        task.TaskState = (int)TaskOutStatusEnum.OutNew;
                        task.CurrentAddress = taskDTO.RoadWay;
                        task.NextAddress = stationinfo.stationChildCode;
                        task.SourceAddress = taskDTO.SourceAddress;
                        task.TargetAddress = taskDTO.TargetAddress;
                        //if (taskDTO.TaskType == (int)TaskOutboundTypeEnum.InToOut)
                        //{
                        //    task.TaskState = (int)TaskInStatusEnum.Line_InFinish;
                        //}
                    }
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                {
                    var stationinfo = _stationManagerRepository.QueryFirst(x => x.stationLocation == taskDTO.SourceAddress && x.Roadway == taskDTO.RoadWay);
                    task.TaskState = (int)TaskInStatusEnum.Line_InFinish;
                    task.SourceAddress = taskDTO.SourceAddress;
                    task.CurrentAddress = stationinfo.stationChildCode;
                    task.NextAddress = stationinfo.stationChildCode;
                    task.TargetAddress = taskDTO.TargetAddress;
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                {
                    task.TaskState = (int)TaskStatus.Created;
                    task.SourceAddress = taskDTO.SourceAddress;
                    task.CurrentAddress = taskDTO.SourceAddress;
                    task.NextAddress = taskDTO.TargetAddress;
                    task.TargetAddress = taskDTO.TargetAddress;
                }
                BaseDal.AddData(task);
                _taskExecuteDetailService.AddTaskExecuteDetail(task.WMSId, "接收WMS任务");
                content = WebResponseContent.Instance.OK("成功");
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error($"任务接收错误,错误信息:{ex.Message}");
            }
            return content;
        }
        /// <summary>
        /// æŽ¥æ”¶WMS任务信息
        /// </summary>
        /// <param name="taskDTOs">WMS任务对象集合</param>
        /// <returns>返回处理结果</returns>
        public WebResponseContent ReceiveByBZOtuTask([NotNull] WMSTaskDTO taskDTO)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                if (BaseDal.QueryFirst(x => x.TaskNum == taskDTO.TaskNum || x.PalletCode == taskDTO.PalletCode) != null)
                {
                    return content.OK();
                }
                Dt_Task task = _mapper.Map<Dt_Task>(taskDTO);
                task.Creater = "WMS";
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    var stationinfo = _stationManagerRepository.QueryFirst(x => x.stationLocation == taskDTO.TargetAddress && x.Roadway == taskDTO.RoadWay);
                    task.TaskState = (int)TaskOutStatusEnum.OutNew;
                    task.CurrentAddress = stationinfo.stationChildCode;
                    task.NextAddress = stationinfo.stationChildCode;
                    task.SourceAddress = taskDTO.SourceAddress;
                    task.TargetAddress = taskDTO.TargetAddress;
                }
                BaseDal.AddData(task);
                _taskExecuteDetailService.AddTaskExecuteDetail(task.WMSId, "接收WMS任务");
                content = WebResponseContent.Instance.OK("成功");
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error($"任务接收错误,错误信息:{ex.Message}");
            }
            return content;
        }
        /// <summary>
        /// é«˜æ¸©å‡ºåº“
        /// </summary>
        /// <param name="taskDTO"></param>
        /// <returns></returns>
        public WebResponseContent ReceiveByWMSGWTask([NotNull] WMSTaskDTO taskDTO)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                if (BaseDal.QueryFirst(x => x.TaskNum == taskDTO.TaskNum || x.PalletCode == taskDTO.PalletCode) != null)
                {
                    return content.OK();
                }
                Dt_Task task = _mapper.Map<Dt_Task>(taskDTO);
                task.Creater = "WMS";
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    task.TaskState = (int)TaskOutStatusEnum.OutNew;
                    task.CurrentAddress = taskDTO.RoadWay;
                    task.NextAddress = "002-000-002";
                    task.SourceAddress = taskDTO.SourceAddress;
                    task.TargetAddress = taskDTO.TargetAddress;
                }
                BaseDal.AddData(task);
                _taskExecuteDetailService.AddTaskExecuteDetail(task.WMSId, "接收WMS任务");
                content = WebResponseContent.Instance.OK("成功");
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error($"任务接收错误,错误信息:{ex.Message}");
            }
            return content;
        }
        /// <summary>
        /// æŽ¥æ”¶WMS任务信息
        /// </summary>
        /// <param name="taskDTOs">WMS任务对象集合</param>
        /// <returns>返回处理结果</returns>
        public async Task<WebResponseContent> RequestFlow(Dt_StationManager stationManager)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestFlow)?.ConfigValue;
                if (wmsBase == null || requestTask == null)
                {
                    throw new InvalidOperationException("WMS IP æœªé…ç½®");
                }
                var wmsIpAddrss = wmsBase + requestTask;
                var result = await HttpHelper.PostAsync(wmsIpAddrss, new { EquiCodeMOM = stationManager.stationEquipMOM, Roadways = stationManager.Roadway, area = stationManager.stationArea, Position = stationManager.stationChildCode }.ToJsonString());
                content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                if (!content.Status)
                {
                    return content;
                }
                Dt_StationManager dt_Station = content.Data as Dt_StationManager;
                //dt_Station.
            }
            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 QueryTaskByPalletCode(string palletCode, string Roadway)
        {
            return BaseDal.QueryFirst(x => x.PalletCode == palletCode && x.Roadway == Roadway, TaskOrderBy);
        }
        ///// <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>
        /// <param name="taskNum">任务编号</param>
        /// <returns>返回处理结果</returns>
        public WebResponseContent StackCraneTaskCompletedByStation(int taskNum)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                var task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                #region WMS同步任务完成
                var keys = new Dictionary<string, object>()
                {
                    {"taskNum", taskNum}
                };
                // èŽ·å–WMSip地址
                var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                var completeTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue;
                if (wmsBase == null || completeTask == null)
                {
                    throw new InvalidOperationException("WMS IP æœªé…ç½®");
                }
                var wmsIpAddress = wmsBase + completeTask;
                var result = HttpHelper.GetAsync(wmsIpAddress, keys).Result;
                content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                #endregion WMS同步任务完成
                if (content.Status)
                {
                    task.TaskState = 1;  //任务完成
                    var taskHty = task.Adapt<Dt_Task_Hty>();
                    _taskHtyRepository.AddData(taskHty);
                    BaseDal.DeleteData(task);
                }
                content.OK(data: task);
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error($"任务完成异常,任务号:【{taskNum}】");
            }
            return content;
        }
        //public override WebResponseContent DeleteData(Dt_Task entity)
        //{
        //    return base.DeleteData(entity);
        //}
    }
}
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,632 @@
using HslCommunication;
using HslCommunication.Profinet.OpenProtocol;
using Mapster;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
using Microsoft.CodeAnalysis;
using Microsoft.VisualBasic;
using MoYu.Logging;
using Newtonsoft.Json;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.MOM;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_DTO.WMS;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_Tasks.ConveyorLineJob;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
namespace WIDESEAWCS_Tasks
{
    public partial class CommonConveyorLineJob
    {
        /// <summary>
        /// å¤„理出库任务
        /// </summary>
        private void HandleTaskOut(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue, Dt_Task taskOut)
        {
            if (taskOut == null) return;
            //ConveyorLineTaskCommand? taskCommand = MapTaskCommand(taskOut, command);
            var next = taskOut.NextAddress;
            var taskCommand = MapTaskCommand(taskOut, command);
            taskOut.NextAddress = next;
            bool isOutTray = taskOut.TaskType == (int)TaskOutboundTypeEnum.OutTray;
            bool isOutboundAndOutFinish = taskOut.TaskType == (int)TaskOutboundTypeEnum.Outbound && taskOut.TaskState == (int)TaskOutStatusEnum.SC_OutFinish;
            bool isOutboundAndLineOutExecuting = taskOut.TaskType == (int)TaskOutboundTypeEnum.Outbound && taskOut.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting;
            if (isOutTray || isOutboundAndOutFinish || !isOutboundAndLineOutExecuting)
            {
                conveyorLine.SendCommand(taskCommand, childDeviceCode);
                var log = $"【{conveyorLine._deviceName}】任务号:【{command.TaskNum}】,托盘条码:【{command.Barcode}】已到达【{childDeviceCode}】请求扫码入库,下一目标地址【{taskCommand.TargetAddress}】";
                ConsoleHelper.WriteWarningLine(log);
                _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
                WriteInfo(conveyorLine.DeviceName, log);
                ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
                _taskService.UpdateTaskStatusToNext(taskOut);
            }
            else if (taskOut.TaskType == (int)TaskOutboundTypeEnum.OutTray && taskOut.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting)
            {
                CompleteWmsTask(taskOut, command, conveyorLine, childDeviceCode, ProtocalDetailValue);
            }
        }
        /// <summary>
        /// å¤„理新任务
        /// </summary>
        public async Task HandleNewTaskAsync(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue)
        {
            var stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == childDeviceCode && x.stationPLC == conveyorLine.DeviceCode);
            switch (stationManager.stationType)
            {
                case 5:
                case 1:
                    await RequestWmsTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue, stationManager);
                    break;
                case 2:
                case 3:
                case 4:
                case 6:
                    await CreateAndSendEmptyTrayTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue, stationManager);
                    break;
                case 7:
                    RequestOutNextAddress(conveyorLine, command, childDeviceCode, ProtocalDetailValue);
                    break;
                case 10:
                    ConveyorLineOutFinish(conveyorLine, command, childDeviceCode, ProtocalDetailValue);
                    break;
                case 20:
                    await JZRequestInBound(conveyorLine, command, childDeviceCode, ProtocalDetailValue, stationManager);
                    break;
                default:
                    break;
            }
        }
        /// <summary>
        /// æ˜ å°„任务命令
        /// </summary>
        private ConveyorLineTaskCommand MapTaskCommand(Dt_Task task, ConveyorLineTaskCommand command)
        {
            // ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼åŒ¹é…ç±»ä¼¼ -数字 çš„æ¨¡å¼ï¼Œå¹¶æ›¿æ¢ä¸ºç©ºå­—符串
            task.NextAddress = Regex.Replace(task.NextAddress, @"-(\d+)", "");
            if (Convert.ToInt32(task.NextAddress) > 1999)
            {
                task.NextAddress = (Convert.ToInt32(task.NextAddress) - 1000).ToString();
            }
            var comm = _mapper.Map<ConveyorLineTaskCommand>(task);
            comm.InteractiveSignal = command.InteractiveSignal;
            return comm;
        }
        /// <summary>
        /// å®ŒæˆWMS任务
        /// </summary>
        private void CompleteWmsTask(Dt_Task taskOut, ConveyorLineTaskCommand command, CommonConveyorLine conveyorLine, string childDeviceCode, int ProtocalDetailValue)
        {
            if (command.Barcode == "NoRead")
            {
                var NGAddress = _platFormRepository.QueryFirst(x => x.PlatCode == taskOut.TargetAddress).Capacity;
                taskOut.TargetAddress = NGAddress.ToString();
            }
            var keys = new Dictionary<string, object>()
            {
                {"taskNum", taskOut.TaskNum}
            };
            var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
            var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
            var completeTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue;
            if (wmsBase == null || completeTask == null)
            {
                throw new InvalidOperationException("WMS IP æœªé…ç½®");
            }
            var wmsIpAddress = wmsBase + completeTask;
            var result = HttpHelper.GetAsync(wmsIpAddress, keys).Result;
            WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
            if (content.Status)
            {
                ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
                _taskService.UpdateTaskStatusToNext(taskOut);
            }
        }
        /// <summary>
        /// åˆ›å»ºå¹¶å‘送空托盘任务
        /// </summary>
        public Task CreateAndSendEmptyTrayTask(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue, Dt_StationManager stationManager)
        {
            if (command.Barcode != "NoRead")
            {
                string isTrue = string.Empty;
                ResultTrayCellsStatus result = GetResultTrayCellsStatus(command, stationManager);
                List<string> strings = stationManager.Roadway.Split(",").ToList();
                foreach (string item in strings)
                {
                    isTrue = RequestInboundPlatform(item, result.ProductionLine, true);
                    if (isTrue != null)
                    {
                        break;
                    }
                }
                WMSTaskDTO taskDTO = null;
                if (isTrue != null && isTrue != string.Empty)
                {
                    taskDTO = new WMSTaskDTO
                    {
                        TaskNum = _taskRepository.GetTaskNo().Result,
                        Grade = 1,
                        PalletCode = command.Barcode,
                        RoadWay = childDeviceCode,
                        SourceAddress = childDeviceCode,
                        TargetAddress = isTrue,
                        TaskState = (int)TaskOutStatusEnum.SC_OutFinish,
                        Id = 2,
                        TaskType = (int)TaskOutboundTypeEnum.OutTray,
                        ProductionLine = result.ProductionLine,
                    };
                }
                else
                {
                    taskDTO = CreateEmptyTrayTaskDto(command.Barcode, childDeviceCode); ;
                }
                if (_taskRepository.QueryFirst(x => x.PalletCode == taskDTO.PalletCode) != null)
                {
                    WriteInfo(conveyorLine.DeviceName, "当前托盘存在任务");
                }
                CreateEmptyTryTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue, taskDTO);
            }
            return Task.CompletedTask;
        }
        public Task CreateEmptyTryTask(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue, WMSTaskDTO taskDTO)
        {
            var content = CreateAndSendTask(taskDTO);
            if (content.Status)
            {
                var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
                if (task != null)
                {
                    var next = task.NextAddress;
                    var taskCommand = MapTaskCommand(task, command);
                    task.NextAddress = next;
                    var log = $"【{conveyorLine._deviceName}】任务号:【{command.TaskNum}】,托盘条码:【{command.Barcode}】已到达【{childDeviceCode}】请求扫码入库(空托盘),下一目标地址【{taskCommand.TargetAddress}】";
                    ConsoleHelper.WriteWarningLine(log);
                    _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
                    WriteInfo(conveyorLine.DeviceName, log);
                    conveyorLine.SendCommand(taskCommand, childDeviceCode);
                    ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
                    _taskService.UpdateTaskStatusToNext(task);
                }
            }
            return Task.CompletedTask;
        }
        public ResultTrayCellsStatus GetResultTrayCellsStatus(ConveyorLineTaskCommand command, Dt_StationManager stationManager)
        {
            var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
            var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.MOMIP_BASE)?.ConfigValue;
            var ipAddress = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.TrayCellsStatus)?.ConfigValue;
            if (wmsBase == null || ipAddress == null)
            {
                throw new InvalidOperationException("MOM IP æœªé…ç½®");
            }
            TrayCellsStatusDto trayCells = new TrayCellsStatusDto()
            {
                Software = "WMS",
                TrayBarcode = command.Barcode,
                EquipmentCode = stationManager.stationEquipMOM,
                SessionId = Guid.NewGuid().ToString(),
                EmployeeNo = "MITest",
                SceneType = "4",
                RequestTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now).ToString("yyyy-MM-ddTHH:mm:ss.fffZ")
            };
            var MOMIpAddress = wmsBase + ipAddress;
            var result = HttpHelper.PostAsync(MOMIpAddress, trayCells.ToJsonString()).Result;
            WriteInfo("入站校验", $"【{stationManager.stationChildCode}】入站校验请求参数【{trayCells.ToJsonString()}】");
            WriteInfo("入站校验", "");
            WriteInfo("入站校验", $"【{stationManager.stationChildCode}】入站校验返回参数【{result}】");
            ResultTrayCellsStatus result1 = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(result);
            return result1;
        }
        /// <summary>
        /// åˆ›å»ºç©ºæ‰˜ç›˜ä»»åŠ¡DTO
        /// </summary>
        private WMSTaskDTO CreateEmptyTrayTaskDto(string barcode, string childDeviceCode)
        {
            var request = new RequestTaskDto()
            {
                Position = childDeviceCode,
                PalletCode = barcode,
            };
            var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
            var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
            var requestTrayInTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestTrayInTask)?.ConfigValue;
            if (wmsBase == null || requestTrayInTask == null)
            {
                throw new InvalidOperationException("WMS IP æœªé…ç½®");
            }
            var wmsIpAddrss = wmsBase + requestTrayInTask;
            var result = HttpHelper.PostAsync(wmsIpAddrss, request.ToJsonString()).Result;
            if (result == null)
                return new WMSTaskDTO();
            WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
            if (!content.Status)
                return new WMSTaskDTO();
            return JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
        }
        /// <summary>
        /// è¯·æ±‚WMS任务
        /// </summary>
        private async Task RequestWmsTask(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue, Dt_StationManager stationManager)
        {
            string isTrue = string.Empty;
            ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode);
            ResultTrayCellsStatus result = GetResultTrayCellsStatus(command, stationManager);
            if (result.SerialNos.Count == 0)
            {
                var Traycontent = await _taskService.RequestWMSTask(command.Barcode, childDeviceCode);
                if (Traycontent.Status)
                {
                    ConsoleHelper.WriteSuccessLine("二封空框请求回流");
                    ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode);
                }
            }
            List<string> strings = stationManager.Roadway.Split(",").ToList();
            foreach (string item in strings)
            {
                isTrue = RequestInboundPlatform(item, result.ProductionLine, false);
                if (isTrue != null)
                {
                    break;
                }
            }
            if (isTrue != null && isTrue != string.Empty)
            {
                WMSTaskDTO taskDTO = new WMSTaskDTO
                {
                    TaskNum = _taskRepository.GetTaskNo().Result,
                    Grade = 1,
                    PalletCode = command.Barcode,
                    RoadWay = childDeviceCode,
                    SourceAddress = childDeviceCode,
                    TargetAddress = isTrue,
                    TaskState = (int)TaskOutStatusEnum.SC_OutFinish,
                    Id = 2,
                    TaskType = (int)TaskOutboundTypeEnum.OutTray,
                    ProductionLine = result.ProductionLine,
                };
                var Taskcontent = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
                if (Taskcontent.Status)
                {
                    ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode);
                }
            }
            else
            {
                var Taskcontent = await _taskService.RequestWMSTask(command.Barcode, childDeviceCode);
                if (Taskcontent.Status)
                {
                    ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode);
                }
            }
        }
        /// <summary>
        /// æˆåŒ–入静置
        /// </summary>
        /// <param name="conveyorLine"></param>
        /// <param name="command"></param>
        /// <param name="childDeviceCode"></param>
        /// <param name="ProtocalDetailValue"></param>
        /// <param name="stationManager"></param>
        /// <returns></returns>
        /// <exception cref="InvalidOperationException"></exception>
        private async Task JZRequestInBound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue, Dt_StationManager stationManager)
        {
            try
            {
                StaticVariable.isLineRun = false;
                if (StaticVariable.isStackerRun)
                {
                    ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode);
                }
                ResultTrayCellsStatus resultTrayCellsStatus = GetResultTrayCellsStatus(command, stationManager);
                //todo判断是否为空框
                var serialNosError = resultTrayCellsStatus.SerialNos.Where(x => x.SerialNoStatus != 1 && x.SerialNoStatus != 4).ToList();
                if (serialNosError.Count > 0 || !resultTrayCellsStatus.Success)
                {
                    //NG流程
                    var platform = _platFormRepository.QueryFirst(x => x.ProductionLine == resultTrayCellsStatus.ProductionLine && x.DeviceCode == "1005");
                    ConveyorLineTaskCommand conveyorLineTaskCommand = new ConveyorLineTaskCommand()
                    {
                        TaskNum = 1,
                        TargetAddress = Convert.ToInt32(platform.Capacity),
                        Barcode = resultTrayCellsStatus.TrayBarcode,
                        InteractiveSignal = command.InteractiveSignal
                    };
                    conveyorLine.SendCommand(conveyorLineTaskCommand, childDeviceCode);
                    var logMessage = $"MOM数据异常,送至二封【{resultTrayCellsStatus.ProductionLine}】异常口【{Convert.ToInt32(platform.Capacity)}】";
                    LogAndSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, logMessage, conveyorLineTaskCommand.TargetAddress.ToString());
                    return;
                }
                if (resultTrayCellsStatus.SerialNos.Count == 0)
                {
                    var Traycontent = await _taskService.RequestWMSTask(command.Barcode, childDeviceCode);
                    if (Traycontent.Status)
                    {
                        ConsoleHelper.WriteSuccessLine("化成空框请求回流静置");
                        if (StaticVariable.isStackerRun)
                        {
                            ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode);
                        }
                        return;
                    }
                }
                else
                {
                    var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                    var wmsbase = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue;
                    var address = configz.Where(x => x.ConfigKey == SysConfigKeyConst.QueryStockInfoForRealTrayJZAsync).FirstOrDefault()?.ConfigValue;
                    if (wmsbase == null || address == null)
                    {
                        throw new InvalidOperationException("WMS IP æœªé…ç½®");
                    }
                    var wmsIpAddrss = wmsbase + address;
                    var result = await HttpHelper.PostAsync(wmsIpAddrss, new { ProductLine = resultTrayCellsStatus.ProductionLine, PalletCode = command.Barcode }.ToJsonString());
                    var StockInfocontent = JsonConvert.DeserializeObject<WebResponseContent>(result);
                    if (StockInfocontent.Status)
                    {
                        var Taskcontent = await _taskService.RequestWMSTask(command.Barcode, childDeviceCode);
                        ConsoleHelper.WriteErrorLine($"{JsonConvert.SerializeObject(Taskcontent)}");
                        if (Taskcontent.Status)
                        {
                            if (StaticVariable.isStackerRun)
                            {
                                ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode);
                            }
                            #region
                            //if (task != null && task.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting && task.CurrentAddress == "1537")
                            //{
                            //    ConveyorLineTaskCommand command1 = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(stationManager.stationLocation);
                            //    if (command1.InteractiveSignal != 2)
                            //    {
                            //        ConsoleHelper.WriteSuccessLine("化成实托请求入静置");
                            //        if (StaticVariable.isStackerRun == true)
                            //        {
                            //            ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode);
                            //        }
                            //        return;
                            //    }
                            //    else
                            //    {
                            //        ConsoleHelper.WriteWarningLine("出库任务未完成");
                            //        return;
                            //    }
                            //}
                            //else if (task != null && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
                            //{
                            //    ConsoleHelper.WriteWarningLine("已存在静置出库任务");
                            //    return;
                            //}
                            //else
                            //{
                            //    var Task = await _taskService.RequestWMSTask(command.Barcode, childDeviceCode);
                            //    if (Task.Status)
                            //    {
                            //        if (StaticVariable.isStackerRun == true)
                            //        {
                            //            ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode);
                            //        }
                            //    }
                            //    return;
                            //}
                            #endregion
                        }
                        else
                        {
                            WriteInfo(conveyorLine.DeviceName, Taskcontent.Message);
                            return;
                        }
                    }
                    else
                    {
                        string isTrue = string.Empty;
                        List<string> strings = stationManager.Roadway.Split(",").ToList();
                        foreach (string item in strings)
                        {
                            isTrue = RequestInboundPlatform(item, resultTrayCellsStatus.ProductionLine, false);
                            if (isTrue != null)
                            {
                                break;
                            }
                        }
                        if (isTrue != null && isTrue != string.Empty)
                        {
                            WMSTaskDTO taskDTO = new WMSTaskDTO
                            {
                                TaskNum = _taskRepository.GetTaskNo().Result,
                                Grade = 1,
                                PalletCode = command.Barcode,
                                RoadWay = isTrue,
                                SourceAddress = childDeviceCode,
                                TargetAddress = isTrue,
                                TaskState = (int)TaskOutStatusEnum.SC_OutFinish,
                                Id = 2,
                                TaskType = (int)TaskOutboundTypeEnum.InToOut,
                                ProductionLine = resultTrayCellsStatus.ProductionLine,
                            };
                            var Taskcontent = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
                            if (Taskcontent.Status)
                            {
                                if (StaticVariable.isStackerRun)
                                {
                                    ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode);
                                }
                                return;
                            }
                            else
                            {
                                WriteInfo(conveyorLine.DeviceName, Taskcontent.Message);
                                return;
                            }
                        }
                        else
                        {
                            var Task = await _taskService.RequestWMSTask(command.Barcode, childDeviceCode);
                            ConsoleHelper.WriteErrorLine($"{JsonConvert.SerializeObject(Task)}");
                            if (Task.Status)
                            {
                                if (StaticVariable.isStackerRun)
                                {
                                    ExecuteConveyorLineTask(conveyorLine, command, ProtocalDetailValue, childDeviceCode);
                                }
                            }
                            ConsoleHelper.WriteWarningLine("二封缓存位已满");
                            return;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ConsoleHelper.WriteWarningLine($"{ex.Message}");
            }
            finally
            {
                StaticVariable.isLineRun = true;
            }
        }
        /// <summary>
        /// æ‰§è¡Œè¾“送线任务
        /// </summary>
        /// <param name="conveyorLine">输送线对象</param>
        /// <param name="command">输送线任务命令</param>
        /// <param name="ProtocalDetailValue">协议明细值</param>
        /// <param name="childDeviceCode">子设备编号</param>
        public void ExecuteConveyorLineTask(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, int ProtocalDetailValue, string childDeviceCode)
        {
            // æŸ¥è¯¢ä»»åŠ¡ä¿¡æ¯
            var task = _taskService.QueryBarCodeConveyorLineTask(command.Barcode, childDeviceCode);
            if (task == null) return;
            // èŽ·å–é…ç½®å€¼å¹¶è½¬æ¢ä¸ºåˆ—è¡¨
            var value = _sys_ConfigService.GetByConfigKey(CateGoryConst.CONFIG_SYS_InStation, SysConfigKeyConst.JZNGInBoundStation).ConfigValue;
            var valueList = value.Split(',').ToList();
            // æ—¥å¿—模板
            var logMessage = $"【{conveyorLine._deviceName}】任务号:【{task.TaskNum}】,托盘条码:【{task.PalletCode}】已到达【{childDeviceCode}】请求扫码入库(实盘),下一目标地址【{{0}}】";
            // åˆ¤æ–­ä»»åŠ¡çš„èµ·å§‹åœ°å€æ˜¯å¦åœ¨é…ç½®åˆ—è¡¨ä¸­
            if (valueList.Contains(task.SourceAddress))
            {
                // è®¾ç½®ç›®æ ‡åœ°å€ä¸º "1000"
                conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTargetAddress, "1000", childDeviceCode);
                // è®°å½•日志并发送完成信号
                LogAndSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, logMessage, "1000");
            }
            else if (task.Roadway.Contains("JZ"))
            {
                // æŸ¥è¯¢æ˜¯å¦å­˜åœ¨é™ç½®å‡ºåº“任务
                var outJZTask = _taskRepository.QueryData(x => x.Roadway == task.Roadway &&
                    (x.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting ||
                     x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish || x.TaskState == (int)TaskOutStatusEnum.OutNew));
                if (!outJZTask.Any())
                {
                    // æ˜ å°„任务命令
                    var taskCommand = MapTaskCommand(task, command);
                    // å‘送任务命令
                    conveyorLine.SendCommand(taskCommand, childDeviceCode);
                    // è®°å½•日志并发送完成信号
                    LogAndSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, logMessage, taskCommand.TargetAddress.ToString());
                    // æ›´æ–°ä»»åŠ¡çŠ¶æ€
                    _taskService.UpdateTaskStatusToNext(task);
                }
                else
                {
                    ConsoleHelper.WriteWarningLine("已存在静置出库任务,静置入库任务无法下发至线体");
                }
            }
            else
            {
                // æ˜ å°„任务命令
                var taskCommand = MapTaskCommand(task, command);
                // å‘送任务命令
                conveyorLine.SendCommand(taskCommand, childDeviceCode);
                // è®°å½•日志并发送完成信号
                LogAndSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, logMessage, taskCommand.TargetAddress.ToString());
                // æ›´æ–°ä»»åŠ¡çŠ¶æ€
                _taskService.UpdateTaskStatusToNext(task);
            }
        }
        /// <summary>
        /// è®°å½•日志并发送完成信号
        /// </summary>
        /// <param name="conveyorLine">输送线对象</param>
        /// <param name="childDeviceCode">子设备编号</param>
        /// <param name="ProtocalDetailValue">协议明细值</param>
        /// <param name="logMessage">日志消息模板</param>
        /// <param name="targetAddress">目标地址</param>
        private void LogAndSendFinish(CommonConveyorLine conveyorLine, string childDeviceCode, int ProtocalDetailValue, string logMessage, string targetAddress)
        {
            // æ ¼å¼åŒ–日志消息
            var log = string.Format(logMessage, targetAddress);
            // è¾“出警告日志
            ConsoleHelper.WriteWarningLine(log);
            // è®°å½•日志
            _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log, time = DateTime.Now.ToString("G"), color = "red" });
            WriteInfo(conveyorLine.DeviceName, log);
            // å‘送完成信号
            ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
        }
    }
}
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_After/CommonConveyorLine_AfterJob.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,249 @@
#region MyRegion
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_Tasks.ConveyorLineJob
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using AutoMapper;
using HslCommunication;
using Newtonsoft.Json;
using Quartz;
using SqlSugar;
using System.Reflection;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_BasicInfoService;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.HttpContextUser;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DeviceBase;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_SignalR;
using WIDESEAWCS_Tasks.ConveyorLineJob;
using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class CommonConveyorLine_AfterJob : JobBase, IJob
    {
        private readonly ITaskService _taskService;
        private readonly ITaskRepository _taskRepository;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly IRouterService _routerService;
        private readonly IMapper _mapper;
        private readonly IDt_StationManagerService _stationManagerService;
        private readonly ISys_ConfigService _sys_ConfigService;
        private readonly ICacheService _cacheService;
        private readonly INoticeService _noticeService;
        private readonly IDt_needBarcodeRepository _needBarcodeRepository;
        private static List<string>? userTokenIds;
        private static List<int>? userIds;
        public CommonConveyorLine_AfterJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository, IDt_StationManagerService stationManagerService, ISys_ConfigService sys_ConfigService, ICacheService cacheService, INoticeService noticeService, IDt_needBarcodeRepository needBarcodeRepository)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _routerService = routerService;
            _mapper = mapper;
            _taskRepository = taskRepository;
            _stationManagerService = stationManagerService;
            _sys_ConfigService = sys_ConfigService;
            _cacheService = cacheService;
            _noticeService = noticeService;
            _needBarcodeRepository = needBarcodeRepository;
        }
        public async Task Execute(IJobExecutionContext context)
        {
            try
            {
                CommonConveyorLine_After conveyorLine = (CommonConveyorLine_After)context.JobDetail.JobDataMap.Get("JobParams");
                if (conveyorLine != null)
                {
                    List<Dt_StationManager> stationManagers = _stationManagerService.GetAllStationByDeviceCode(conveyorLine.DeviceCode);
                    foreach (var station in stationManagers)
                    {
                        ConveyorLineTaskCommand_After command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand_After>(station.stationChildCode);
                        DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand_After.InteractiveSignal) && x.ProtocalDetailValue == command.InteractiveSignal.ToString());
                        if (deviceProtocolDetails != null)
                        {
                            MethodInfo? method = GetType().GetMethod(deviceProtocolDetails.ProtocolDetailType);
                            if (method != null)
                            {
                                method.Invoke(this, new object[] { conveyorLine, command, station });
                            }
                        }
                        //if (station.stationType == 6 && station.stationArea == "3")
                        //{
                        //    await GetEmptyTrayAsync(station, conveyorLine, command);
                        //}
                        #region è°ƒç”¨äº‹ä»¶æ€»çº¿é€šçŸ¥å‰ç«¯
                        var tokenInfos = _cacheService.Get<List<UserInfo>>("Cache_UserToken");
                        if (tokenInfos == null || !tokenInfos.Any())
                        {
                            //throw new Exception(conveyorLine.DeviceName + "缓存中未找到Token缓存");
                            continue;
                        }
                        var userTokenIds = tokenInfos?.Select(x => x.Token_ID).ToList();
                        var userIds = tokenInfos?.Select(x => x.UserId).ToList();
                        object obj = new
                        {
                            childDeviceCode = station.stationChildCode,
                            commandAfter = command,
                        };
                        _noticeService.StackerData(userIds?.FirstOrDefault(), userTokenIds, new { conveyorLine.DeviceName, data = obj });
                        #endregion è°ƒç”¨äº‹ä»¶æ€»çº¿é€šçŸ¥å‰ç«¯
                    }
                }
            }
            catch (Exception ex)
            {
                Console.Out.WriteLine(nameof(CommonConveyorLine_AfterJob) + ":" + ex.ToString());
            }
            finally
            {
                //WriteDebug("CommonConveyorLineJob", "test");
                //Console.Out.WriteLine(DateTime.Now);
            }
            return;
        }
        /// <summary>
        /// è¾“送线请求入库
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        public void RequestInbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, Dt_StationManager stationInfo)
        {
            var log = $"【{conveyorLine.DeviceName}】,托盘号:【{command.ConveyorLineBarcode}】,站台:【{stationInfo.remark}】请求任务";
            ConsoleHelper.WriteSuccessLine(log);
            _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
            WriteInfo(conveyorLine.DeviceName, log);
            var taskNew = _taskService.QueryTaskByPalletCode(command.ConveyorLineBarcode, stationInfo.Roadway);
            if (taskNew == null)
            {
                if (_taskService.RequestTask(command.ConveyorLineBarcode, stationInfo).Result.Status)
                {
                    Dt_Task task = _taskService.QueryTaskByPalletCode(command.ConveyorLineBarcode, stationInfo.Roadway);
                    if (task != null)
                    {
                        conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, stationInfo.stationChildCode);
                    }
                }
                else   //如果任务请求失败
                {
                    //如果请求位置与NG位置一致 åˆ™å†™å½“前位置让线体退回
                    if (stationInfo.stationChildCode == stationInfo.stationNGChildCode)
                    {
                        conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 2, stationInfo.stationChildCode);
                    }
                }
            }
        }
        /// <summary>
        /// è¾“送线请求空框
        /// </summary>
        /// <param name="conveyorLine"></param>
        /// <param name="command"></param>
        /// <param name="stationInfo"></param>
        public void RequestEmptyOutbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, Dt_StationManager stationInfo)
        {
            if (stationInfo.stationType != 7) return;
            var taskNew = _taskRepository.QueryData(x => x.TaskType == (int)TaskOutboundTypeEnum.OutTray);
            //var need = _needBarcodeRepository.QueryFirst(x => x.toArea == stationInfo.stationChildCode && x.productLine == stationInfo.productLine);
            //var cache = command.Reserved5;
            //var proAddress = conveyorLine.DeviceProDTOs.Where(x => x.DeviceChildCode == stationInfo.stationChildCode).Where(x => x.DeviceProParamName == ConveyorLineDBName_After.Reserve5.ToString()).FirstOrDefault().DeviceProAddress;
            var cache = Convert.ToInt16(conveyorLine.ReadValue(ConveyorLineDBName_After.Reserve5, stationInfo.stationChildCode));
            ConsoleHelper.WriteColorLine($"已经有{taskNew.Count}个任务,可以放{cache}个空托盘", ConsoleColor.DarkCyan);
            if (taskNew.Count + 1 < cache)   //不存在空框出库任务 åˆ™è¯·æ±‚WMS出空库
            {
                //ConsoleHelper.WriteWarningLine("请求空托盘");
                if (_taskService.RequestTask(command.ConveyorLineBarcode, stationInfo).Result.Status)
                {
                    //need.inLineNum += 1;
                    //_needBarcodeRepository.UpdateData(need);
                }
            }
        }
        private async Task GetEmptyTrayAsync(Dt_StationManager stationManager, CommonConveyorLine_After commonConveyor, ConveyorLineTaskCommand_After conveyorLine)
        {
            ConveyorLineTaskCommand_After command = commonConveyor.ReadCustomer<ConveyorLineTaskCommand_After>((Convert.ToInt32(stationManager.stationChildCode) + 2).ToString());
            if (conveyorLine.HasPallet == 0 || command.HasPallet == 0)
            {
                var needBarcode = _needBarcodeRepository.QueryFirst(x => x.toArea == stationManager.stationChildCode);
                if (needBarcode.inLineNum < needBarcode.cacheNum)
                {
                    var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                    var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                    var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.GetFROutTrayToCW)?.ConfigValue;
                    if (wmsBase == null || requestTask == null)
                    {
                        throw new InvalidOperationException("WMS IP æœªé…ç½®");
                    }
                    var wmsIpAddrss = wmsBase + requestTask;
                    var result = await HttpHelper.PostAsync(wmsIpAddrss, new { palletCode = "", EquiCodeMOM = stationManager.stationEquipMOM, Roadways = stationManager.Roadway, area = stationManager.stationArea, Position = stationManager.stationChildCode, ProductionLine = stationManager.productLine }.ToJsonString());
                    WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                    if (!content.Status)
                    {
                        //ConsoleHelper.WriteErrorLine($"分容呼叫空托盘失败{content.Message}");
                        return;
                    }
                    WMSTaskDTO wMSTaskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
                    ConsoleHelper.WriteSuccessLine(content.Data.ToString());
                    List<WMSTaskDTO> wMSTaskDTOs = new List<WMSTaskDTO>() { wMSTaskDTO };
                    _taskService.ReceiveWMSTask(wMSTaskDTOs);
                    needBarcode.inLineNum += 1;
                    _needBarcodeRepository.UpdateData(needBarcode);
                }
                else
                {
                    ConsoleHelper.WriteErrorLine($"分容空托盘入口【{stationManager.stationChildCode}】在途数量>缓存数量");
                }
            }
            else
            {
                ConsoleHelper.WriteErrorLine($"分容空托盘入口【{stationManager.stationChildCode}】有盘");
            }
        }
    }
}
#endregion
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_GW/CommonConveyorLine_GWJob.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,533 @@
#region MyRegion
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_Tasks.ConveyorLineJob
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using Autofac.Core;
using AutoMapper;
using HslCommunication;
using Microsoft.CodeAnalysis;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
using Quartz;
using SqlSugar;
using System.Reflection;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.HttpContextUser;
using WIDESEAWCS_DTO.MOM;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_IProcessRepository;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DeviceBase;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_SignalR;
using WIDESEAWCS_Tasks.ConveyorLineJob;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
using Platform = WIDESEAWCS_Model.Models.Platform;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public partial class CommonConveyorLine_GWJob : JobBase, IJob
    {
        public readonly ITaskService _taskService;
        private readonly ITaskRepository _taskRepository;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly IRouterService _routerService;
        private readonly IPlatFormRepository _platFormRepository;
        private readonly ISys_ConfigService _sys_ConfigService;
        private readonly IMapper _mapper;
        private readonly IDt_StationManagerRepository _stationManagerRepository;
        private readonly ICacheService _cacheService;
        private readonly INoticeService _noticeService;
        private readonly IDt_needBarcodeRepository _needBarcodeRepository;
        private readonly IDeviceInfoRepository _deviceInfoRepository;
        private static List<string>? userTokenIds;
        private static List<int>? userIds;
        public CommonConveyorLine_GWJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository, IPlatFormRepository platFormRepository, ISys_ConfigService sys_ConfigService, IDt_StationManagerRepository stationManagerRepository, ICacheService cacheService, INoticeService noticeService, IDt_needBarcodeRepository needBarcodeRepository, IDeviceInfoRepository deviceInfoRepository)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _routerService = routerService;
            _mapper = mapper;
            _taskRepository = taskRepository;
            _platFormRepository = platFormRepository;
            _sys_ConfigService = sys_ConfigService;
            _stationManagerRepository = stationManagerRepository;
            _cacheService = cacheService;
            _noticeService = noticeService;
            _needBarcodeRepository = needBarcodeRepository;
            _deviceInfoRepository = deviceInfoRepository;
        }
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                CommonConveyorLine_GW conveyorLine = (CommonConveyorLine_GW)context.JobDetail.JobDataMap.Get("JobParams");
                if (conveyorLine != null)
                {
                    #region ç«™å°æ–¹å¼
                    //List<Dt_StationManager> stationManagers = _stationManagerService.GetAllStationByDeviceCode(conveyorLine.DeviceCode);
                    //foreach (var station in stationManagers)
                    //{
                    //    ConveyorLineTaskCommand_After command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand_After>(station.stationChildCode);
                    //    DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand_After.InteractiveSignal) && x.ProtocalDetailValue == command.InteractiveSignal.ToString());
                    //    if (deviceProtocolDetails != null)
                    //    {
                    //        MethodInfo? method = GetType().GetMethod(deviceProtocolDetails.ProtocolDetailType);
                    //        if (method != null)
                    //        {
                    //            method.Invoke(this, new object[] { conveyorLine, command, station });
                    //        }
                    //    }
                    //}
                    #endregion ç«™å°æ–¹å¼
                    #region è·¯ç”±æ–¹å¼
                    List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode);
                    foreach (string childDeviceCode in childDeviceCodes)
                    {
                        ConveyorLineTaskCommand_After command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand_After>(childDeviceCode);
                        if (command == null) continue;
                        if (command.ConveyorLineBarcode.Trim().Contains("\0")) command.ConveyorLineBarcode = "";
                        DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand_After.InteractiveSignal) && x.ProtocalDetailValue == command.InteractiveSignal.ToString());
                        if (deviceProtocolDetails != null)
                        {
                            MethodInfo? method = GetType().GetMethod(deviceProtocolDetails.ProtocolDetailType);
                            if (method != null)
                            {
                                method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode });
                            }
                        }
                        if (childDeviceCode == "3464" || childDeviceCode == "3460" || childDeviceCode == "3456" )
                        {
                            Platform platform = _platFormRepository.QueryFirst(x => x.DeviceCode == conveyorLine.DeviceCode && x.PlatCode == childDeviceCode && x.Status == "Active");
                            if (platform != null)
                            {
                                if (command.HasPallet != 1)
                                {
                                    MethodInfo? method = GetType().GetMethod(platform.ExecutionMethod);
                                    if (method != null)
                                    {
                                        //var strings = platform.Location.Split(',').ToList();
                                        int count = 1;
                                        method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, count, platform });
                                    }
                                }
                            }
                        }
                        #region è°ƒç”¨äº‹ä»¶æ€»çº¿é€šçŸ¥å‰ç«¯
                        var tokenInfos = _cacheService.Get<List<UserInfo>>("Cache_UserToken");
                        if (tokenInfos == null || !tokenInfos.Any())
                        {
                            //throw new Exception(conveyorLine.DeviceName + "缓存中未找到Token缓存");
                            continue;
                        }
                        var userTokenIds = tokenInfos?.Select(x => x.Token_ID).ToList();
                        var userIds = tokenInfos?.Select(x => x.UserId).ToList();
                        object obj = new
                        {
                            childDeviceCode,
                            commandAfter = command,
                        };
                        _noticeService.LineData(userIds?.FirstOrDefault(), userTokenIds, new { conveyorLine.DeviceName, data = obj });
                        #endregion è°ƒç”¨äº‹ä»¶æ€»çº¿é€šçŸ¥å‰ç«¯
                    }
                    #endregion è·¯ç”±æ–¹å¼
                }
            }
            catch (Exception ex)
            {
                Console.Out.WriteLine(nameof(CommonConveyorLine_GWJob) + ":" + ex.ToString());
            }
            finally
            {
                //WriteDebug("CommonConveyorLineJob", "test");
                //Console.Out.WriteLine(DateTime.Now);
            }
            return Task.CompletedTask;
        }
        /// <summary>
        /// è¾“送线请求入库
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        /// <param name="ProtocalDetailValue">线体当前bool读取偏移地址</param>
        public void RequestInbound(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
        {
            try
            {
                var task = _taskService.QueryBarCodeConveyorLineTask(command.ConveyorLineBarcode, childDeviceCode);
                //HandleTaskOut(conveyorLine, command, childDeviceCode, task);
                // && command.ConveyorLineBarcode != "NoRead" && !command.ConveyorLineBarcode.IsNotEmptyOrNull()
                var log = $"【{conveyorLine.DeviceName}】托盘号:【{command.ConveyorLineBarcode}】任务号:【{command.ConveyorLineTaskNum}】设备编码:【{childDeviceCode}】";
                ConsoleHelper.WriteSuccessLine(log);
                _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
                WriteInfo(conveyorLine.DeviceName, log);
                if (task == null)
                {
                    HandleNewTask(conveyorLine, command, childDeviceCode);
                }
                else
                {
                    ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
                    conveyorLine.SendCommand(taskCommand, childDeviceCode);
                    conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode);
                    _taskService.UpdateTaskStatusToNext(task);
                }
            }
            catch (Exception ex)
            {
                Console.Out.WriteLine(ex.ToString());
            }
        }
        /// <summary>
        /// è¾“送线请求入库下一地址
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        public void RequestInNextAddress(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
        {
            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode);
            if (task != null)
            {
                if (command.ConveyorLineBarcode != task.PalletCode)
                {
                    conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 2, childDeviceCode);
                    return;
                }
                Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
                if (newTask != null)
                {
                    //conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTaskNum, newTask.TaskNum, childDeviceCode);
                    //conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, newTask.NextAddress, childDeviceCode);
                    //conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, command.ConveyorLineBarcode, childDeviceCode);
                    ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(newTask);
                    //taskCommand.InteractiveSignal = command.InteractiveSignal;
                    conveyorLine.SendCommand(taskCommand, childDeviceCode);
                    conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode);
                }
            }
        }
        /// <summary>
        /// è¾“送线入库完成
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        /// <param name="ProtocalDetailValue">线体当前bool读取偏移地址</param>
        public void ConveyorLineInFinish(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
        {
            var task = _taskService.QueryExecutingTaskByBarcode(command.ConveyorLineBarcode, childDeviceCode);
            if (task != null && task.TaskState != (int)TaskInStatusEnum.Line_InFinish)
            {
                //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
                WebResponseContent content = _taskService.UpdateTaskStatusToNext(task);
                if (content.Status)
                {
                    conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode);
                }
                Console.Out.WriteLine(content.Serialize());
            }
        }
        /// <summary>
        /// è¾“送线请求出信息
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        /// <param name="ProtocalDetailValue">线体当前bool读取偏移地址</param>
        public void RequestOutbound(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
        {
            var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
            if (task != null)
            {
                ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
                conveyorLine.SendCommand(taskCommand, childDeviceCode);
                conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode);
                //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
                _taskService.UpdateTaskStatusToNext(task);
                //if (task.TaskType == (int)TaskOutboundTypeEnum.OutTray)
                //{
                //    _taskService.UpdateTaskStatusToNext(task);
                //}
            }
        }
        /// <summary>
        /// è¾“送线请求出库下一地址
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        public void RequestOutNextAddress(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
        {
            Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode);
            if (task != null)
            {
                var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.MOMIP_BASE)?.ConfigValue;
                var ipAddress = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.TrayCellsStatus)?.ConfigValue;
                if (wmsBase == null || ipAddress == null)
                {
                    throw new InvalidOperationException("MOM IP æœªé…ç½®");
                }
                Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationPLC == conveyorLine.DeviceCode && x.stationChildCode == childDeviceCode);
                TrayCellsStatusDto trayCells = new TrayCellsStatusDto()
                {
                    Software = "WMS",
                    TrayBarcode = command.ConveyorLineBarcode,
                    EquipmentCode = stationManager.stationEquipMOM,
                    SessionId = Guid.NewGuid().ToString(),
                    EmployeeNo = "MITest",
                    SceneType = "1",
                    RequestTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now).ToString("yyyy-MM-ddTHH:mm:ss.fffZ")
                };
                var MOMIpAddress = wmsBase + ipAddress;
                var result = HttpHelper.PostAsync(MOMIpAddress, trayCells.ToJsonString()).Result;
                WriteInfo("入站校验", $"【{childDeviceCode}】入站校验请求参数【{trayCells.ToJsonString()}】");
                WriteInfo("入站校验", "");
                WriteInfo("入站校验", $"【{childDeviceCode}】入站校验返回参数【{result}】");
                ResultTrayCellsStatus result1 = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(result);
                if (result1.Success || task.Remark != "NG")
                {
                    Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
                    if (newTask != null)
                    {
                        ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(newTask);
                        conveyorLine.SendCommand(taskCommand, childDeviceCode);
                        conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode);
                    }
                }
                else
                {
                    ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
                    taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(stationManager.stationNGChildCode);
                    conveyorLine.SendCommand(taskCommand, childDeviceCode);
                    conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode);
                    _taskService.UpdateTaskStatusToNext(task);
                }
            }
        }
        /// <summary>
        /// è¾“送线出库完成
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        public void ConveyorLineOutFinish(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
        {
            try
            {
                var task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode);
                if (task != null)
                {
                    WebResponseContent content = new WebResponseContent();
                    ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
                    taskCommand.InteractiveSignal = command.InteractiveSignal;
                    Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationPLC == conveyorLine.DeviceCode && x.stationChildCode == childDeviceCode);
                    if (task.PalletCode != command.ConveyorLineBarcode)
                    {
                        //var NGAddress = _platFormRepository.QueryFirst(x => x.PlatCode == task.TargetAddress).Capacity;
                        //taskCommand.ConveyorLineTargetAddress = (short)NGAddress;
                        taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(stationManager.stationNGChildCode);
                    }
                    else
                    {
                        //Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationPLC == conveyorLine.DeviceCode && x.stationChildCode == childDeviceCode);
                        taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(stationManager.stationLocation);
                    }
                    if (stationManager.stationPLC == "1007" && stationManager.stationArea == "Cache")  //更新在途数据
                    {
                        dt_needBarcode needBarcode = _needBarcodeRepository.QueryFirst(x => x.productLine == stationManager.productLine && x.toArea == stationManager.stationChildCode);
                        if (needBarcode != null)
                        {
                            if (needBarcode.inLineNum == 0 || needBarcode.inLineNum > 0)
                            {
                                needBarcode.inLineNum = 0;
                            }
                            else
                            {
                                needBarcode.inLineNum--;
                            }
                            _needBarcodeRepository.UpdateData(needBarcode);
                        }
                    }
                    content = _taskService.UpdateTaskStatusToNext(task);
                    var proAddress = conveyorLine.DeviceProDTOs
                                    .FirstOrDefault(x => x.DeviceChildCode == childDeviceCode && x.DeviceProParamName == ConveyorLineDBName_After.InteractiveSignal.ToString())
                                    ?.DeviceProAddress;
                    string address = proAddress.Contains(".0") ? proAddress : proAddress + ".0";
                    conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTaskNum, taskCommand.ConveyorLineTaskNum, childDeviceCode);
                    conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, taskCommand.ConveyorLineTargetAddress, childDeviceCode);
                    conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, taskCommand.ConveyorLineBarcode, childDeviceCode);
                    conveyorLine.Communicator.Write(address, 1);
                    //conveyorLine.SetValue(ConveyorLineDBName_After.InteractiveSignal, taskCommand.InteractiveSignal, childDeviceCode);
                    //conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode);
                }
            }
            catch (Exception ex)
            {
                WriteInfo($"{conveyorLine.DeviceName}输送线出库完成", $"异常信息【{JsonConvert.SerializeObject(ex.Message)}】,子节点【{childDeviceCode}】托盘号:【{command.ConveyorLineBarcode}】");
            }
        }
        /// <summary>
        /// è¾“送线交互完成
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="childDeviceCode">子设备编号</param>
        /// <param name="ProtocalDetailValue">线体当前bool读取偏移地址</param>
        /// <param name="value">值</param>
        //public void ConveyorLineSendFinish(CommonConveyorLine conveyorLine, string childDeviceCode, int ProtocalDeValue, bool value)
        //{
        //    DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == childDeviceCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
        //    string[] x = devicePro.DeviceProAddress.Split('.');
        //    x[x.Length - 1] = (ProtocalDetailValue + 1).ToString();
        //    string DeviceProAddress = string.Join(".", x);
        //    conveyorLine.Communicator.Write(DeviceProAddress, value);
        //}
        /// <summary>
        /// ç›‘测空托盘实盘出库
        /// </summary>
        /// <param name="conveyorLine">输送线实例对象</param>
        /// <param name="command">读取的请求信息</param>
        /// <param name="childDeviceCode">子设备编号</param>
        /// <param name="index">线体当前bool读取偏移地址</param>
        public async void EmptyTrayReturn(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, int index, Platform platform)
        {
            try
            {
                //WriteInfo("出库", $"【{JsonConvert.SerializeObject(platform)}】");
                TaskOutboundTypeEnum taskOutboundTypeEnum;
                if (platform.PlatformType.Contains("OutTray"))
                    taskOutboundTypeEnum = TaskOutboundTypeEnum.OutTray;
                else
                    taskOutboundTypeEnum = TaskOutboundTypeEnum.Outbound;
                await CheckAndCreateTask(taskOutboundTypeEnum, childDeviceCode, index, platform);
            }
            catch (Exception)
            {
            }
        }
        /// <summary>
        /// æ£€æŸ¥ä»»åŠ¡å¹¶åˆ›å»ºæ–°ä»»åŠ¡
        /// </summary>
        private async Task CheckAndCreateTask(TaskOutboundTypeEnum taskType, string childDeviceCode, int index, Platform platform)
        {
            var tasks = _taskRepository.QueryData(x => x.TaskType == (int)taskType && x.TargetAddress == childDeviceCode);
            if (tasks.Count < platform.Capacity)
            {
                #region è°ƒç”¨WMS获取出库任务
                WMSTaskDTO taskDTO = new WMSTaskDTO();
                // èŽ·å–WMSip地址
                var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
                var requestTrayOutTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestTrayOutTask)?.ConfigValue;
                if (wmsBase == null || requestTrayOutTask == null)
                {
                    throw new InvalidOperationException("WMS IP æœªé…ç½®");
                }
                var wmsIpAddress = wmsBase + requestTrayOutTask;
                var device = _deviceInfoRepository.QueryData(x => x.DeviceStatus == "1" && x.DeviceRemark == platform.Id.ToString());
                var deviceCode = device.Select(x => x.DeviceCode).ToList();
                List<string> strings = platform.Location.Split(',').ToList();
                var result = await HttpHelper.PostAsync(wmsIpAddress, new { Position = childDeviceCode, Tag = (int)taskType, AreaCdoe = platform.Stacker, AreaCdoes = strings, platform.ProductionLine }.ToJsonString());
                //var result = await HttpHelper.PostAsync("http://localhost:5000/api/Task/RequestTrayOutTaskAsync", dynamic.ToJsonString());
                WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                // æ£€æŸ¥çŠ¶æ€å¹¶è¿”å›ž
                if (!content.Status)
                    return;
                taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
                //WriteInfo("出库", $"【{JsonConvert.SerializeObject(taskDTO)}】");
                #endregion è°ƒç”¨WMS获取出库任务
                CreateAndSendTask(taskDTO);
            }
        }
        /// <summary>
        /// åˆ›å»ºä»»åŠ¡
        /// </summary>
        public WebResponseContent CreateAndSendTask(WMSTaskDTO taskDTO)
        {
            var content = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
            if (content.Status)
            {
                Console.WriteLine($"{taskDTO.TaskType}呼叫成功");
            }
            return content;
        }
    }
}
#endregion
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_GW/GWTask/RequestInbound.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,506 @@
using Masuit.Tools;
using Masuit.Tools.Systems;
using Newtonsoft.Json;
using System.Threading.Tasks;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.MOM;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_DTO.WMS;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DeviceBase;
using WIDESEAWCS_Tasks.ConveyorLineJob;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
namespace WIDESEAWCS_Tasks
{
    public partial class CommonConveyorLine_GWJob
    {
        /// <summary>
        /// å¤„理出库任务
        /// </summary>
        private void HandleTaskOut(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, int ProtocalDetailValue, Dt_Task taskOut)
        {
            if (taskOut == null) return;
            var taskCommand = MapTaskCommand(taskOut, command);
            bool isOutTray = taskOut.TaskType == (int)TaskOutboundTypeEnum.OutTray;
            bool isOutboundAndOutFinish = taskOut.TaskType == (int)TaskOutboundTypeEnum.Outbound && taskOut.TaskState == (int)TaskOutStatusEnum.SC_OutFinish;
            bool isOutboundAndLineOutExecuting = taskOut.TaskType == (int)TaskOutboundTypeEnum.Outbound && taskOut.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting;
            if (isOutTray || isOutboundAndOutFinish || !isOutboundAndLineOutExecuting)
            {
                conveyorLine.SendCommand(taskCommand, childDeviceCode);
                _taskService.UpdateTaskStatusToNext(taskOut);
            }
            else if (taskOut.TaskType == (int)TaskOutboundTypeEnum.OutTray && taskOut.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting)
            {
                CompleteWmsTask(taskOut, command, conveyorLine, childDeviceCode, ProtocalDetailValue);
            }
        }
        /// <summary>
        /// å¤„理新任务
        /// </summary>
        private void HandleNewTask(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
        {
            Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationPLC == conveyorLine.DeviceCode && x.stationChildCode == childDeviceCode);
            if (stationManager == null)
            {
                // Handle the case where stationManager is not found, if necessary
                Console.WriteLine($"未找到{childDeviceCode}站台");
                return;
            }
            // æ ¹æ®ç«™ç±»åž‹æ‰§è¡Œç›¸åº”的方法
            switch (stationManager.stationType)
            {
                case 8:
                case 9:
                case 11:
                case 12:
                    var task = _taskService.QueryExecutingTaskByBarcode(command.ConveyorLineBarcode, childDeviceCode);
                    if (task != null)
                    {
                        ExecuteStationAction(stationManager, conveyorLine, command, childDeviceCode);
                    }
                    break;
                case 1:
                case 6:
                case 10:
                    ExecuteStationAction(stationManager, conveyorLine, command, childDeviceCode);
                    break;
            }
            #region
            //Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationPLC == conveyorLine.DeviceCode && x.stationChildCode == childDeviceCode);
            //if (stationManager.stationType == 8)
            //{
            //    var task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode);
            //    if (task != null)
            //    {
            //        RequestInNextAddress(conveyorLine, command, childDeviceCode);
            //    }
            //}
            //else if (stationManager.stationType == 9)
            //{
            //    var task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode);
            //    if (task != null)
            //    {
            //        ConveyorLineInFinish(conveyorLine, command, childDeviceCode);
            //    }
            //}
            //else if (stationManager.stationType == 1)
            //{
            //    if (stationManager.stationArea.Contains("GW"))
            //    {
            //        var taskGW = _taskRepository.QueryFirst(x => x.TargetAddress == childDeviceCode && x.TaskState == (int)TaskOutStatusEnum.OutFinish);
            //        if (taskGW != null)
            //        {
            //            command.ConveyorLineBarcode = taskGW.PalletCode;
            //        }
            //    }
            //    RequestWmsTask(conveyorLine, command, childDeviceCode);
            //}
            //else if (stationManager.stationType == 10)
            //{
            //    var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
            //    if (task != null)
            //    {
            //        RequestOutbound(conveyorLine, command, childDeviceCode);
            //    }
            //}
            //else if (stationManager.stationType == 11)
            //{
            //    var task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode);
            //    if (task != null)
            //    {
            //        RequestOutNextAddress(conveyorLine, command, childDeviceCode);
            //    }
            //}
            //else if (stationManager.stationType == 12)
            //{
            //    var task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode);
            //    if (task != null)
            //    {
            //        ConveyorLineOutFinish(conveyorLine, command, childDeviceCode);
            //    }
            //}
            #endregion
        }
        private void ExecuteStationAction(Dt_StationManager stationManager, CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
        {
            switch (stationManager.stationType)
            {
                case 8:
                    RequestInNextAddress(conveyorLine, command, childDeviceCode);
                    break;
                case 9:
                    ConveyorLineInFinish(conveyorLine, command, childDeviceCode);
                    break;
                case 10:
                    RequestOutbound(conveyorLine, command, childDeviceCode);
                    break;
                case 11:
                    RequestOutNextAddress(conveyorLine, command, childDeviceCode);
                    break;
                case 12:
                    ConveyorLineOutFinish(conveyorLine, command, childDeviceCode);
                    break;
                case 6:
                    CreateAndSendEmptyTrayTask(conveyorLine, command, childDeviceCode);
                    break;
                case 16:
                    AbNormalStationBZTask(conveyorLine, command, childDeviceCode);
                    break;
                case 1:
                    RequestWmsTask(conveyorLine, command, childDeviceCode, stationManager);
                    break;
            }
        }
        /// <summary>
        /// æ˜ å°„任务命令
        /// </summary>
        private ConveyorLineTaskCommand_After MapTaskCommand(Dt_Task task, ConveyorLineTaskCommand_After command)
        {
            var comm = _mapper.Map<ConveyorLineTaskCommand_After>(task);
            comm.ResponState = 1;
            comm.InteractiveSignal = command.InteractiveSignal;
            return comm;
        }
        /// <summary>
        /// å®ŒæˆWMS任务
        /// </summary>
        private void CompleteWmsTask(Dt_Task taskOut, ConveyorLineTaskCommand_After command, CommonConveyorLine_GW conveyorLine, string childDeviceCode, int ProtocalDetailValue)
        {
            if (command.ConveyorLineBarcode == "NoRead")
            {
                var NGAddress = _platFormRepository.QueryFirst(x => x.PlatCode == taskOut.TargetAddress).Capacity;
                taskOut.TargetAddress = NGAddress.ToString();
            }
            var keys = new Dictionary<string, object>()
            {
                {"taskNum", taskOut.TaskNum}
            };
            var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
            var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
            var completeTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue;
            if (wmsBase == null || completeTask == null)
            {
                throw new InvalidOperationException("WMS IP æœªé…ç½®");
            }
            var wmsIpAddress = wmsBase + completeTask;
            var result = HttpHelper.GetAsync(wmsIpAddress, keys).Result;
            WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
            if (content.Status)
            {
                _taskService.UpdateTaskStatusToNext(taskOut);
            }
        }
        /// <summary>
        /// åˆ›å»ºå¹¶å‘送空托盘任务
        /// </summary>
        public void CreateAndSendEmptyTrayTask(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
        {
            if (command.ConveyorLineBarcode != "NoRead")
            {
                #region
                //var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                //var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.MOMIP_BASE)?.ConfigValue;
                //var ipAddress = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.TrayCellsStatus)?.ConfigValue;
                //if (wmsBase == null || ipAddress == null)
                //{
                //    throw new InvalidOperationException("MOM IP æœªé…ç½®");
                //}
                //var stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == childDeviceCode);
                //TrayCellsStatusDto trayCells = new TrayCellsStatusDto()
                //{
                //    Software = "WMS",
                //    TrayBarcode = command.ConveyorLineBarcode,
                //    EquipmentCode = stationManager.stationEquipMOM,
                //    SessionId = Guid.NewGuid().ToString(),
                //    EmployeeNo = "MITest",
                //    SceneType = "4",
                //    RequestTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now).ToString("yyyy-MM-ddTHH:mm:ss.fffZ")
                //};
                //var MOMIpAddress = wmsBase + ipAddress;
                //var result = HttpHelper.PostAsync(MOMIpAddress, trayCells.ToJsonString()).Result;
                //WriteInfo("入站校验", $"【{stationManager.stationChildCode}】入站校验请求参数【{trayCells.ToJsonString()}】");
                //WriteInfo("入站校验", "");
                //WriteInfo("入站校验", $"【{stationManager.stationChildCode}】入站校验返回参数【{result}】");
                //ResultTrayCellsStatus result1 = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(result);
                //if (result1.Success)
                //{
                //    var serialNosError = result1.SerialNos.Where(x => x.SerialNoStatus != 1 && x.SerialNoStatus != 4).ToList();
                //    if (serialNosError.Count > 0)
                //    {
                //        if (result1.ProcessCode == "AG01")
                //        {
                //            var strings = new List<string>() { "2234", "2226", "2218" };
                //            foreach (var item in strings)
                //            {
                //                var station = _stationManagerRepository.QueryFirst(x => x.productLine == result1.ProductionLine && x.stationChildCode == item);
                //                if (station != null)
                //                {
                //                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == station.stationPLC);
                //                    if (device != null)
                //                    {
                //                        CommonConveyorLine_After CommonConveyorLine_After = (CommonConveyorLine_After)device;
                //                        ConveyorLineTaskCommand_After taskCommand = new ConveyorLineTaskCommand_After()
                //                        {
                //                            ConveyorLineTaskNum = Convert.ToInt32(1),
                //                            ConveyorLineTargetAddress = Convert.ToInt16(2234),
                //                            ConveyorLineBarcode = command.ConveyorLineBarcode.ToString(),
                //                        };
                //                        CommonConveyorLine_After.SendCommand(taskCommand, station.stationChildCode);
                //                        CommonConveyorLine_After.SetValue(ConveyorLineDBName_After.ResponState, 1, station.stationChildCode);
                //                    }
                //                    //发送到分容
                //                    return;
                //                }
                //            }
                //        }
                //    }
                //    else
                //    {
                //        var strings = new List<string>() { "2142", "2094", "2046" };
                //        foreach (var item in strings)
                //        {
                //            var station = _stationManagerRepository.QueryFirst(x => x.productLine == result1.ProductionLine && x.stationChildCode == item);
                //            if (station != null)
                //            {
                //                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == station.stationPLC);
                //                if (device != null)
                //                {
                //                    CommonConveyorLine_After CommonConveyorLine_After = (CommonConveyorLine_After)device;
                //                    ConveyorLineTaskCommand_After conveyorLineAfter = CommonConveyorLine_After.ReadCustomer<ConveyorLineTaskCommand_After>(Convert.ToInt32(station.stationChildCode).ToString());
                //                    if (conveyorLineAfter.InteractiveSignal == 16)
                //                    {
                //                        var TaskNum = SnowFlake.LongId;
                //                        Dt_Task task = new Dt_Task()
                //                        {
                //                            TaskNum = _taskRepository.GetTaskNo().Result,
                //                            Grade = 1,
                //                            PalletCode = command.ConveyorLineBarcode,
                //                            Roadway = station.Roadway,
                //                            SourceAddress = childDeviceCode,
                //                            TargetAddress = station.stationChildCode,
                //                            CurrentAddress = childDeviceCode,
                //                            NextAddress = station.stationChildCode,
                //                            TaskState = (int)TaskInStatusEnum.InNew,
                //                            ExceptionMessage = "",
                //                            TaskId = 0,
                //                            TaskType = (int)TaskInboundTypeEnum.InTray,
                //                            ProductionLine = result1.ProductionLine,
                //                        };
                //                        _taskRepository.AddData(task);
                //                        ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
                //                        conveyorLine.SendCommand(taskCommand, childDeviceCode);
                //                        conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode);
                //                        _taskService.UpdateTaskStatusToNext(task);
                //                    }
                //                }
                //                //发送到分容
                //                return;
                //            }
                //        }
                //        var taskDTO = CreateEmptyTrayTaskDto(command.ConveyorLineBarcode, childDeviceCode);
                //        if (_taskRepository.QueryFirst(x => x.PalletCode == taskDTO.PalletCode) != null)
                //        {
                //            WriteInfo(conveyorLine.DeviceName, "当前托盘存在任务");
                //            return;
                //        }
                //        var content = CreateAndSendTask(taskDTO);
                //        if (content.Status)
                //        {
                //            var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
                //            if (task != null)
                //            {
                //                var taskCommand = MapTaskCommand(task, command);
                //                conveyorLine.SendCommand(taskCommand, childDeviceCode);
                //                _taskService.UpdateTaskStatusToNext(task);
                //            }
                //        }
                //    }
                //}
                //else
                //{
                //    ConsoleHelper.WriteErrorLine(result1.MOMMessage);
                //}
                #endregion
                if (_taskRepository.QueryFirst(x => x.PalletCode == command.ConveyorLineBarcode) != null)
                {
                    WriteInfo(conveyorLine.DeviceName, "当前托盘存在任务");
                    return;
                }
                var taskDTO = CreateEmptyTrayTaskDto(command.ConveyorLineBarcode, childDeviceCode);
                var content = CreateAndSendTask(taskDTO);
                if (content.Status)
                {
                    var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
                    if (task != null)
                    {
                        var taskCommand = MapTaskCommand(task, command);
                        conveyorLine.SendCommand(taskCommand, childDeviceCode);
                        conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode);
                        _taskService.UpdateTaskStatusToNext(task);
                    }
                }
            }
        }
        /// <summary>
        /// åˆ›å»ºç©ºæ‰˜ç›˜ä»»åŠ¡DTO
        /// </summary>
        private WMSTaskDTO CreateEmptyTrayTaskDto(string barcode, string childDeviceCode)
        {
            var request = new RequestTaskDto()
            {
                Position = childDeviceCode,
                PalletCode = barcode,
            };
            var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
            var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
            var requestTrayInTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestTask)?.ConfigValue;
            if (wmsBase == null || requestTrayInTask == null)
            {
                throw new InvalidOperationException("WMS IP æœªé…ç½®");
            }
            var wmsIpAddrss = wmsBase + requestTrayInTask;
            var result = HttpHelper.PostAsync(wmsIpAddrss, request.ToJsonString()).Result;
            if (result == null)
                return new WMSTaskDTO();
            WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result);
            if (!content.Status)
                return new WMSTaskDTO();
            return JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString());
        }
        /// <summary>
        /// è¯·æ±‚WMS任务
        /// </summary>
        private async void RequestWmsTask(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, Dt_StationManager stationManager)
        {
            if (command.ConveyorLineBarcode.IsNullOrEmpty()) return;
            var Hastask = _taskService.QueryBarCodeConveyorLineTask(command.ConveyorLineBarcode, childDeviceCode);
            if (Hastask != null)
            {
                ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(Hastask);
                conveyorLine.SendCommand(taskCommand, childDeviceCode);
                conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode);
                return;
            }
            var content = await _taskService.RequestWMSTask(command.ConveyorLineBarcode, childDeviceCode);
            if (content.Status)
            {
                var task = _taskService.QueryBarCodeConveyorLineTask(command.ConveyorLineBarcode, childDeviceCode);
                if (task != null)
                {
                    ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task);
                    conveyorLine.SendCommand(taskCommand, childDeviceCode);
                    conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode);
                    _taskService.UpdateTaskStatusToNext(task);
                }
            }
            else
            {
                WriteInfo(conveyorLine.DeviceName, content.Message);
                conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineTargetAddress, stationManager.stationNGChildCode, childDeviceCode);
                conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 1, childDeviceCode);
                ConsoleHelper.WriteErrorLine($"【{conveyorLine.DeviceName}】托盘号:【{command.ConveyorLineBarcode}】请求点位:【{childDeviceCode}】异常信息【{content.Message}】");
            }
        }
        /// <summary>
        /// é«˜æ¸©å‡ºåº“后任务完成 å¦‚果任务标识NG则将任务改为异常排出任务
        /// </summary>
        /// <param name="conveyorLine"></param>
        /// <param name="command"></param>
        /// <param name="childDeviceCode"></param>
        /// <param name="task"></param>
        /// <exception cref="Exception"></exception>
        private void CreateAbNormalOutbound(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, Dt_Task task)
        {
            Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == childDeviceCode);
            if (stationManager == null || string.IsNullOrWhiteSpace(stationManager.stationNGChildCode) || string.IsNullOrWhiteSpace(stationManager.stationNGLocation))
            {
                throw new Exception("未配置站台的对应NG口信息");
            }
            task.SourceAddress = task.TargetAddress;
            task.TargetAddress = stationManager.stationNGLocation;
            task.TaskState = (int)TaskOutStatusEnum.OutNew;
            task.TaskType = (int)TaskOutboundTypeEnum.InToOut;
            task.Grade = 10;    //此处 å‡ºåº“至异常排出口的任务应除火警外最优先执行
            _taskRepository.UpdateData(task);
            //Dt_Task task= _taskRepository.QueryFirst(x=>)
            //_taskRepository.QueryFirst()
        }
        /// <summary>
        /// åŒ…装异常排出口逻辑
        /// </summary>
        /// <param name="conveyorLine"></param>
        /// <param name="command"></param>
        /// <param name="childDeviceCode"></param>
        private void AbNormalStationBZTask(CommonConveyorLine_GW conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode)
        {
            Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == childDeviceCode && x.stationPLC == conveyorLine.DeviceCode);
            if (command.ConveyorLineBarcode.IsNullOrEmpty())
            {
                conveyorLine.SetValue(ConveyorLineDBName_After.ResponState, 2, childDeviceCode);
                return;
            }
            if (conveyorLine.ReadValue(ConveyorLineDBName_After.InteractiveSignal, childDeviceCode).ObjToInt() == 0) //托盘正反信号
            {
            };
            conveyorLine.ReadValue(ConveyorLineDBName_After.InteractiveSignal, childDeviceCode);  //托盘有无电芯信号
        }
    }
}
CodeManagement/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,595 @@
using Mapster;
using Masuit.Tools;
using Quartz;
using System.Diagnostics.CodeAnalysis;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core.Caches;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.HttpContextUser;
using WIDESEAWCS_IProcessRepository;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_ITaskInfo_HtyRepository;
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_SignalR;
using WIDESEAWCS_Tasks.ConveyorLineJob;
using WIDESEAWCS_Tasks.StackerCraneJob;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class CommonStackerCraneJob : JobBase, IJob
    {
        private readonly ITaskService _taskService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly ITaskRepository _taskRepository;
        private readonly IRouterService _routerService;
        private readonly IProcessRepository _processRepository;
        private readonly ICacheService _cacheService;
        private readonly INoticeService _noticeService;
        private readonly IDt_StationManagerRepository _stationManagerRepository;
        private readonly ITask_HtyRepository _htyRepository;
        private readonly ISys_ConfigService _sys_ConfigService;
        private static List<string>? userTokenIds;
        private static List<int>? userIds;
        public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IProcessRepository processRepository, ICacheService cacheService, INoticeService noticeService, IDt_StationManagerRepository stationManagerRepository, ITask_HtyRepository htyRepository, ISys_ConfigService sys_ConfigService)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _taskRepository = taskRepository;
            _routerService = routerService;
            _processRepository = processRepository;
            _cacheService = cacheService;
            _noticeService = noticeService;
            _stationManagerRepository = stationManagerRepository;
            _htyRepository = htyRepository;
            _sys_ConfigService = sys_ConfigService;
        }
        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 = null;
                            if (commonStackerCrane.DeviceName.Contains("静置"))
                            {
                                if (StaticVariable.isLineRun)
                                {
                                    StaticVariable.isStackerRun = false;
                                    task = GetTask(commonStackerCrane);
                                }
                            }
                            else
                            {
                                task = GetTask(commonStackerCrane);
                            }
                            if (task != null)
                            {
                                StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task);
                                if (stackerCraneTaskCommand != null)
                                {
                                    var taskNum = commonStackerCrane.GetValue<StackerCraneDBName, int>(StackerCraneDBName.TaskNum);
                                    //var taskBarCode = commonStackerCrane.GetValue<StackerCraneDBName, string>(StackerCraneDBName.Barcode);
                                    ConsoleHelper.WriteColorLine($"【{commonStackerCrane.DeviceName}】堆垛机任务号:【{taskNum}】任务任务号:【{task.TaskNum}】", ConsoleColor.DarkBlue);
                                    if (taskNum == 0)
                                    {
                                        ConsoleHelper.WriteColorLine($"【{commonStackerCrane.DeviceName}】任务号为【{0}】,任务号不一致可以下发任务", ConsoleColor.DarkBlue);
                                        Thread.Sleep(1000);
                                        bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand);
                                        if (sendFlag)
                                        {
                                            //StringBuilder builder = new StringBuilder();
                                            //builder.AppendLine();
                                            //builder.AppendLine($"【{commonStackerCrane.DeviceName}】堆垛机状态:【{commonStackerCrane.StackerCraneStatusDes}】,时间:【{DateTime.Now}】");
                                            //builder.AppendLine($"【{commonStackerCrane.DeviceName}】手自动状态:【{commonStackerCrane.StackerCraneAutoStatusDes}】,时间:【{DateTime.Now}】");
                                            //builder.AppendLine($"【{commonStackerCrane.DeviceName}】作业状态:【{commonStackerCrane.StackerCraneWorkStatusDes}】,时间:【{DateTime.Now}】");
                                            //builder.AppendLine($"【{commonStackerCrane.DeviceName}】下发任务成功,【{JsonConvert.SerializeObject(stackerCraneTaskCommand, Formatting.Indented)}】");
                                            //builder.AppendLine($"时间:【{DateTime.Now}】");
                                            //builder.AppendLine();
                                            //ConsoleHelper.WriteColorLine(builder, ConsoleColor.Blue);
                                            commonStackerCrane.LastTaskType = task.TaskType;
                                            _taskService.UpdateTaskStatusToNext(task.TaskNum);
                                        }
                                    }
                                    else
                                    {
                                        ConsoleHelper.WriteColorLine($"【{commonStackerCrane.DeviceName}】任务号不为【{0}】,不可以下发任务", ConsoleColor.DarkBlue);
                                    }
                                }
                            }
                        }
                    }
                    #region è°ƒç”¨äº‹ä»¶æ€»çº¿é€šçŸ¥å‰ç«¯
                    var tokenInfos = _cacheService.Get<List<UserInfo>>("Cache_UserToken");
                    if (tokenInfos != null && tokenInfos.Any())
                    {
                        var userTokenIds = tokenInfos?.Select(x => x.Token_ID).ToList();
                        var userIds = tokenInfos?.Select(x => x.UserId).ToList();
                        object obj = new
                        {
                            commonStackerCrane.StackerCraneStatusDes,
                            commonStackerCrane.StackerCraneAutoStatusDes,
                            commonStackerCrane.StackerCraneWorkStatusDes,
                            commonStackerCrane.DeviceCode,
                            commonStackerCrane.DeviceName,
                            commonStackerCrane.CurrentTaskNum,
                            commonStackerCrane.LastTaskNum,
                        };
                        _noticeService.StackerData(userIds?.FirstOrDefault(), userTokenIds, new { commonStackerCrane.DeviceName, data = obj });
                    }
                    #endregion è°ƒç”¨äº‹ä»¶æ€»çº¿é€šçŸ¥å‰ç«¯
                }
            }
            catch (Exception ex)
            {
                WriteError("CommonConveyorLineJob", "test", ex);
                ConsoleHelper.WriteErrorLine($"{ex.Message}");
                //Console.WriteLine(nameof(CommonStackerCraneJob) + ":" + ex.ToString());
            }
            finally
            {
                StaticVariable.isStackerRun = true;
            }
            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)
                {
                    ConsoleHelper.WriteColorLine($"【{commonStackerCrane.DeviceName}】堆垛机作业状态:【{(int)commonStackerCrane.StackerCraneWorkStatusValue}】时间【{DateTime.Now}】", ConsoleColor.Magenta);
                    string str = $"【{commonStackerCrane.DeviceName}】任务完成,任务号:【{e.TaskNum}】时间【{DateTime.Now}】";
                    WriteInfo(commonStackerCrane.DeviceName, str);
                    ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue);
                    var task = _taskRepository.QueryFirst(x => x.TaskNum == e.TaskNum);
                    if (task == null) commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                    if (commonStackerCrane.DeviceCode.Contains("GW") && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                    {
                        var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.TargetAddress);
                        IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == station.stationPLC);
                        if (device != null)
                        {
                            CommonConveyorLine_GW conveyorLine = (CommonConveyorLine_GW)device;
                            var isResult = conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, task.PalletCode, task.TargetAddress);
                            if (!isResult)
                            {
                                var result = conveyorLine.GetValue<ConveyorLineDBName_After, string>(ConveyorLineDBName_After.ConveyorLineBarcode, task.TargetAddress);
                                if (result != task.PalletCode)
                                {
                                    conveyorLine.SetValue(ConveyorLineDBName_After.ConveyorLineBarcode, task.PalletCode, task.TargetAddress);
                                }
                            }
                        }
                        else
                            return;
                    }
                    var content = _taskService.StackCraneTaskCompleted(e.TaskNum);
                    if ((commonStackerCrane.DeviceCode.Contains("CH") || commonStackerCrane.DeviceCode.Contains("JZ")) && task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                    {
                        task = _taskRepository.QueryFirst(x => x.TaskNum == e.TaskNum);
                        Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
                    }
                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && (task.TargetAddress == "002-071-001" || task.TargetAddress == "001-061-001"))
                    {
                        var TASKHTY = task.Adapt<Dt_Task_Hty>();
                        _taskRepository.DeleteData(task);
                        _htyRepository.AddData(TASKHTY);
                    }
                    var isWorkType = commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5);
                    str = $"{commonStackerCrane.DeviceName}】WMS|WCS任务完成:【{content.Status}】,堆垛机完成信号写入:【{isWorkType}】,任务号:【{e.TaskNum}】时间【{DateTime.Now}】";
                    WriteInfo(commonStackerCrane.DeviceName, str);
                    ConsoleHelper.WriteColorLine(str, ConsoleColor.Blue);
                }
            }
        }
        /// <summary>
        /// èŽ·å–ä»»åŠ¡
        /// </summary>
        /// <param name="commonStackerCrane">堆垛机对象</param>
        /// <returns></returns>
        private Dt_Task? GetTask(CommonStackerCrane commonStackerCrane)
        {
            Dt_Task task = null;
            if (commonStackerCrane.LastTaskType == null)
            {
                task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode);
            }
            else
            {
                var lastTaskTypeGroup = commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup();
                if (lastTaskTypeGroup == 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)
            {
                // æ£€æŸ¥å½“前出库任务站台是否允许放货
                var occupiedStation = OutTaskStationIsOccupied(task);
                if (occupiedStation == null)
                {
                    // å¦‚果当前出库任务站台不允许放货,排除当前任务,查找其他出库任务
                    var log = $"任务号:【{task.TaskNum}】出库地址:【{task.NextAddress}】不允许放货";
                    ConsoleHelper.WriteErrorLine(log);
                    _noticeService.Logs(userTokenIds, new { commonStackerCrane.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" });
                    WriteInfo(commonStackerCrane.DeviceName, log);
                    task = FindAnotherOutboundTask(commonStackerCrane.DeviceCode, task.TaskId);
                    if (task == null)
                    {
                        task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                    }
                }
                else
                {
                    return task;
                }
                #region é™ç½®å‡ºåº“判断是否能执行任务
                if (!task.IsNullOrEmpty() && task.Roadway.Contains("JZ") && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    // æŸ¥è¯¢æ˜¯å¦å­˜åœ¨é™ç½®å…¥åº“任务
                    var inJZTask = _taskRepository.QueryData(x => x.Roadway == task.Roadway &&
                        (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting ||
                         x.TaskState == (int)TaskInStatusEnum.SC_InExecuting ||
                         x.TaskState == (int)TaskInStatusEnum.Line_InFinish));
                    ConsoleHelper.WriteErrorLine($"当前静置线体存在入库任务{inJZTask.Count()}条,{(inJZTask.Count() > 0 ? "可入库" : "不可入库")}");
                    if (!inJZTask.IsNullOrEmpty())
                        return null;
                }
                #endregion é™ç½®å‡ºåº“判断是否能执行任务
            }
            else if (task == null)
            {
                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 (task.Roadway.Contains("GW") || task.Roadway.Contains("CW"))
            {
                if (router != null)
                {
                    IDevice? device = null;
                    if (task.Roadway.Contains("CW"))
                    {
                        device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == router.ChildPosiDeviceCode);
                        if (device != null)
                        {
                            CommonConveyorLine_GW conveyorLine = (CommonConveyorLine_GW)device;
                            if (conveyorLine.IsOccupied(task.NextAddress))//出库站台未被占用
                            {
                                return task;
                            }
                        }
                        else
                        {
                            _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"未找到出库站台【{task.NextAddress}】对应的通讯对象,无法判断出库站台是否被占用");
                        }
                    }
                }
                else
                {
                    IDevice? device = null;
                    if (task.Roadway.Contains("GW"))
                    {
                        device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "1004");
                        if (device != null)
                        {
                            CommonConveyorLine_GW conveyorLine = (CommonConveyorLine_GW)device;
                            if (conveyorLine.IsOccupied(task.TargetAddress))//出库站台未被占用
                            {
                                return task;
                            }
                        }
                        else
                        {
                            _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"未找到出库站台【{task.TargetAddress}】对应的通讯对象,无法判断出库站台是否被占用");
                        }
                    }
                    //_taskService.UpdateTaskExceptionMessage(task.TaskNum, $"未找到站台【{task.TargetAddress}】信息,无法校验站台");
                }
            }
            else
            {
                if ((task.NextAddress == ("002-071-001") || task.NextAddress == ("001-061-001")) && (task.Roadway.Contains("CH")|| task.Roadway.Contains("JZ")))
                {
                    return task;
                }
                else
                {
                    //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.IsOccupiedx(router.ChildPosi))//出库站台未被占用
                            {
                                return task;
                            }
                        }
                        else
                        {
                            _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"未找到出库站台【{router.ChildPosiDeviceCode}】对应的通讯对象,无法判断出库站台是否被占用");
                        }
                    }
                    else
                    {
                        _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"未找到站台【{task.NextAddress}】信息,无法校验站台");
                    }
                }
            }
            return null;
        }
        /// <summary>
        /// æŸ¥æ‰¾å…¶ä»–出库任务的辅助方法(排除指定任务ID的任务)
        /// </summary>
        /// <param name="deviceCode">设备代码</param>
        /// <param name="excludedTaskId">要排除的任务ID</param>
        /// <returns></returns>
        private Dt_Task? FindAnotherOutboundTask(string deviceCode, int excludedTaskId)
        {
            // å…ˆèŽ·å–æ‰€æœ‰ç¬¦åˆæ¡ä»¶ï¼ˆæŽ’é™¤æŒ‡å®šä»»åŠ¡ID)的出库任务列表
            var allOutboundTasks = _taskService.QueryAllOutboundTasks(deviceCode);
            var availableTasks = allOutboundTasks?.Where(t => excludedTaskId != t.TaskId && t.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup).ToList();
            if (availableTasks == null || availableTasks.Count == 0)
            {
                return null;
            }
            // éåŽ†å¯ç”¨ä»»åŠ¡åˆ—è¡¨ï¼Œæ£€æŸ¥ä»»åŠ¡ç«™å°æ˜¯å¦å…è®¸æ”¾è´§ï¼Œæ‰¾åˆ°ç¬¬ä¸€ä¸ªå…è®¸æ”¾è´§çš„ä»»åŠ¡å°±è¿”å›ž
            foreach (var candidateTask in availableTasks)
            {
                var occupiedStation = OutTaskStationIsOccupied(candidateTask);
                if (occupiedStation != null)
                {
                    return candidateTask;
                }
                var log = $"任务号:【{candidateTask.TaskNum}】出库地址:【{candidateTask.NextAddress}】不允许放货";
                ConsoleHelper.WriteErrorLine(log);
                _noticeService.Logs(userTokenIds, new { deviceCode, log = log, time = DateTime.Now.ToString("G"), color = "red" });
                WriteInfo(deviceCode, log);
            }
            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;
            stackerCraneTaskCommand.StartCommand = 1;
            if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//判断是否是入库任务
            {
                var value = _sys_ConfigService.GetByConfigKey(CateGoryConst.CONFIG_SYS_InStation, SysConfigKeyConst.JZNGInBoundStation).ConfigValue;
                var valueList = value.Split(',').ToList();
                if ((valueList.Contains(task.SourceAddress)) && (task.Roadway.Contains("CH") || task.Roadway.Contains("JZ")))
                {
                    string[] souredCodes = task.CurrentAddress.Split("-");
                    if (souredCodes.Length == 3)
                    {
                        stackerCraneTaskCommand.StartRow = Convert.ToInt16(souredCodes[0]);
                        stackerCraneTaskCommand.StartColumn = Convert.ToInt16(souredCodes[1]);
                        stackerCraneTaskCommand.StartLayer = Convert.ToInt16(souredCodes[2]);
                    }
                    else
                    {
                        //数据配置错误
                        _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"入库任务起点错误,起点:【{task.CurrentAddress}】");
                        return null;
                    }
                    string[] targetCodes = task.NextAddress.Split("-");
                    if (targetCodes.Length == 3)
                    {
                        stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]) % 2 != 0 ? (short)1 : (short)2;
                        stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
                        stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
                    }
                    else
                    {
                        //数据配置错误
                        _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"入库任务终点错误,起点:【{task.NextAddress}】");
                        return null;
                    }
                }
                else
                {
                    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]) % 2 != 0 ? (short)1 : (short)2;
                            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)
            {
                if (task.Roadway.Contains("GW"))
                {
                    string[] endCodes = task.NextAddress.Split("-");
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(endCodes[0]);
                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(endCodes[1]);
                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(endCodes[2]);
                    string[] sourceCodes = task.SourceAddress.Split("-");
                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]) % 2 != 0 ? (short)1 : (short)2;
                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
                }
                else
                {
                    if ((task.TargetAddress == "002-071-001" || task.TargetAddress == "001-061-001") && (task.Roadway.Contains("JZ") || task.Roadway.Contains("CH")))
                    {
                        string[] endCodes = task.NextAddress.Split("-");
                        stackerCraneTaskCommand.EndRow = Convert.ToInt16(endCodes[0]);
                        stackerCraneTaskCommand.EndColumn = Convert.ToInt16(endCodes[1]);
                        stackerCraneTaskCommand.EndLayer = Convert.ToInt16(endCodes[2]);
                        string[] sourceCodes = task.SourceAddress.Split("-");
                        stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]) % 2 != 0 ? (short)1 : (short)2;
                        stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
                        stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
                    }
                    else
                    {
                        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]) % 2 != 0 ? (short)1 : (short)2;
                                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]) % 2 != 0 ? (short)1 : (short)2;
                    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]) % 2 != 0 ? (short)1 : (short)2;
                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"移库任务起点错误,起点:【{task.CurrentAddress}】");
                    return null;
                }
            }
            return stackerCraneTaskCommand;
        }
    }
}
CodeManagement/WMS/WIDESEA_WMSClient/.prettierrc.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
{
  "$schema": "https://json.schemastore.org/prettierrc",
  "semi": false,
  "tabWidth": 2,
  "singleQuote": true,
  "printWidth": 100,
  "trailingComma": "none"
}
CodeManagement/WMS/WIDESEA_WMSClient/.vs/ProjectSettings.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
{
  "CurrentProjectSetting": null
}
CodeManagement/WMS/WIDESEA_WMSClient/.vs/VSWorkspaceState.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
{
  "ExpandedNodes": [
    "",
    "\\src",
    "\\src\\extension",
    "\\src\\extension\\widesea_wms",
    "\\src\\extension\\widesea_wms\\basicinfo"
  ],
  "PreviewInSolutionExplorer": false
}
CodeManagement/WMS/WIDESEA_WMSClient/.vs/WIDESEA_WMSClient/FileContentIndex/9fcfba1d-4549-4902-97a9-99389faa1364.vsidx
Binary files differ
CodeManagement/WMS/WIDESEA_WMSClient/env.d.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
/// <reference types="vite/client" />
CodeManagement/WMS/WIDESEA_WMSClient/package-lock.json
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
CodeManagement/WMS/WIDESEA_WMSClient/package.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
{
  "name": "vol-vue3vite",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "serve": "vite --host",
    "dev": "vite --host",
    "buildWithCheck": "run-p type-check build-only",
    "preview": "vite preview",
    "test:unit": "vitest",
    "build": "vite build",
    "type-check": "vue-tsc --noEmit -p tsconfig.vitest.json --composite false",
    "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
    "format": "prettier --write src/",
    "clean": "rimraf node_modules"
  },
  "dependencies": {
    "@amap/amap-jsapi-loader": "^1.0.1",
    "@microsoft/signalr": "^7.0.3",
    "ali-oss": "^6.17.1",
    "axios": "^1.3.4",
    "core-js": "^3.29.0",
    "echarts": "^5.4.1",
    "element-plus": "^2.2.32",
    "less": "^4.1.3",
    "pinia": "^2.0.32",
    "rollup-plugin-commonjs": "^10.1.0",
    "vite-plugin-commonjs": "^0.10.1",
    "vue": "^3.2.47",
    "vue-draggable-next": "^2.1.1",
    "vue-router": "^4.1.6",
    "vuex": "^4.1.0",
    "wangeditor": "^4.7.15"
  },
  "devDependencies": {
    "@babel/eslint-parser": "^7.21.3",
    "@rushstack/eslint-patch": "^1.2.0",
    "@types/jsdom": "^21.1.0",
    "@types/node": "^18.14.2",
    "@vitejs/plugin-vue": "^4.0.0",
    "@vitejs/plugin-vue-jsx": "^3.0.0",
    "@vue/eslint-config-prettier": "^7.1.0",
    "@vue/eslint-config-typescript": "^11.0.2",
    "@vue/test-utils": "^2.3.0",
    "@vue/tsconfig": "^0.1.3",
    "eslint": "^8.36.0",
    "eslint-plugin-vue": "^9.9.0",
    "jsdom": "^21.1.0",
    "npm-run-all": "^4.1.5",
    "prettier": "^2.8.4",
    "rimraf": "^4.1.2",
    "rollup-plugin-visualizer": "^5.9.0",
    "stylus": "^0.59.0",
    "typescript": "~4.8.4",
    "vite": "^4.5.10",
    "vite-plugin-require-transform": "^1.0.21",
    "vitest": "^0.29.1",
    "vue-tsc": "^1.2.0"
  },
  "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
}
CodeManagement/WMS/WIDESEA_WMSClient/tsconfig.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
{
  "extends": "@vue/tsconfig/tsconfig.web.json",
  "include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
  "compilerOptions": {
    "baseUrl": ".",
    "allowJs": true,//js文件忽略提示
    "paths": {
      "@/*": ["./src/*"]
    }
  },
  "references": [
    {
      "path": "./tsconfig.node.json"
    }
  ]
}
CodeManagement/WMS/WIDESEA_WMSClient/tsconfig.node.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
{
  "extends": "@vue/tsconfig/tsconfig.node.json",
  "include": ["vite.config.*", "vitest.config.*", "cypress.config.*", "playwright.config.*"],
  "compilerOptions": {
    "composite": true,
    "types": ["node"]
  }
}
CodeManagement/WMS/WIDESEA_WMSClient/vite.config.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
import { fileURLToPath } from 'node:url'
import commonjs from 'vite-plugin-commonjs'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import { visualizer } from 'rollup-plugin-visualizer'
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    commonjs(),
    // commonjs({
    //   // è¿™é‡Œå¯ä»¥é…ç½®æ’件的选项,例如指定需要转换的模块等
    //   include: 'node_modules/**', // åŒ…含node_modules下的所有模块
    // }),
    vue(),
    vueJsx(),
    visualizer({
      filename: 'report_form_rollup-plugin-visualizer.html'
    }),
    //引用后提示:
    // requireTransform({
    //   fileRegex: /.js$|.ts$/
    // })
  ],
  define: {
  },
  optimizeDeps: {
    exclude: ['vue']
  },
  build: {
    commonjsOptions: {
      transformMixedEsModules: true
    },
    rollupOptions: {
      output: {
        //每个node_modules模块分成一个js文件
        manualChunks(id) {
          if (id.includes('node_modules')) {
            return id.toString().split('node_modules/')[1].split('/')[0].toString()
          }
        },
        // ç”¨äºŽä»Žå…¥å£ç‚¹åˆ›å»ºçš„块的打包输出格式[name]表示文件名,[hash]表示该文件内容hash值
        // entryFileNames: 'assets/js/[name].[hash].js', // ç”¨äºŽå‘½åä»£ç æ‹†åˆ†æ—¶åˆ›å»ºçš„共享块的输出命名
        // chunkFileNames: 'assets/js/[name].[hash].js', // ç”¨äºŽè¾“出静态资源的命名,[ext]表示文件扩展名
        // assetFileNames: 'assets/[ext]/[name].[hash].[ext]'
        entryFileNames: 'assets/js/[hash].js', // ç”¨äºŽå‘½åä»£ç æ‹†åˆ†æ—¶åˆ›å»ºçš„共享块的输出命名
        chunkFileNames: 'assets/js/[hash].js', // ç”¨äºŽè¾“出静态资源的命名,[ext]表示文件扩展名
        assetFileNames: 'assets/[ext]/[hash].[ext]'
      }
    },
    // outDir: 'dist', // è¾“出目录,默认为 'dist'
    // rollupOptions: {
    //   input: {
    //     main: 'src/main.js', // ä½ çš„入口文件
    //   }
    // },
    sourcemap: false //生成源映射文件
  },
  publicDir: 'public', // è¿™é‡ŒæŒ‡å®šäº† public æ–‡ä»¶å¤¹çš„位置
  css: {
    //查看CSS属于哪个css文件
    devSourcemap: false
  },
  server: {
    port: 8081
    // proxy: {
    //   '/api': {
    //     target: 'http://xxxx.com',
    //     changeOrigin: true,
    //     rewrite: (path) => path.replace(/^\/api/, '')
    //   }
    // }
  },
  resolve: {
    extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue', '.mjs'],
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  }
})
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_Common/HttpClient/HttpsClient.cs
@@ -5,11 +5,24 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using Timer = System.Timers.Timer;
namespace WIDESEA_Common;
public class HttpsClient
{
    private static readonly Timer cleanupTimer;
    static HttpsClient()
    {
        // è®¾ç½®å®šæ—¶å™¨ï¼Œæ¯10分钟清理一次requestTracker的数据
        cleanupTimer = new Timer(10 * 60 * 1000);
        cleanupTimer.Elapsed += CleanupRequestTracker;
        cleanupTimer.AutoReset = true;
        cleanupTimer.Enabled = true;
    }
    private static readonly LogFactory LogFactory = new LogFactory();
    // å°è£…一个用HttpClient发送GET请求的方法有参数
@@ -44,14 +57,15 @@
    // ç”¨äºŽè¿½è¸ªæ¯ä¸ªè¯·æ±‚的调用次数和最后请求时间。
    private static readonly Dictionary<string, (int Count, DateTime LastRequestTime)> requestTracker = new();
    // å°è£…一个用HttpClient发送Post请求的方法有参数
    public static async Task<string> PostAsync(string url, Dictionary<string, object> parameters)
    {
        // åˆ›å»ºä¸€ä¸ªæ–°çš„字典,排除 RequestTime å’Œ SessionId
        var filteredParameters = parameters.Where(p => p.Key != "RequestTime"&& p.Key != "SessionId").ToDictionary(p => p.Key, p => p.Value);
        var filteredParameters = parameters.Where(p => p.Key != "RequestTime" && p.Key != "SessionId").ToDictionary(p => p.Key, p => p.Value);
        string requestKey = $"{url}:{JsonConvert.SerializeObject(filteredParameters)}";
        // æ£€æŸ¥è¯·æ±‚次数和时间限制
        // æ£€æŸ¥è¯·æ±‚次数和时间限制
        if (requestTracker.TryGetValue(requestKey, out var requestInfo))
        {
            if (requestInfo.Count >= 5 && DateTime.Now < requestInfo.LastRequestTime.AddMinutes(3))
@@ -60,7 +74,7 @@
                Console.WriteLine("请求次数已达到限制,请稍后再试。");
                Console.WriteLine($"接口地址:{url}");
                Console.WriteLine($"请求数据:{JsonConvert.SerializeObject(filteredParameters, Formatting.Indented)}");
                throw new Exception($"接口地址:{url}---请求次数已达到限制,请稍后再试。");
                throw new Exception($"接口地址:{url}---请求次数已达到限制,请稍后再试。");
            }
        }
@@ -137,4 +151,18 @@
        }
    }
    // æ¸…理requestTracker的方法
    private static void CleanupRequestTracker(object sender, ElapsedEventArgs e)
    {
        // èŽ·å–å½“å‰æ—¶é—´
        DateTime now = DateTime.Now;
        // éåŽ†å¹¶æ¸…ç†requestTracker中超过10分钟的记录
        var keysToRemove = requestTracker.Keys.Where(key => now > requestTracker[key].LastRequestTime.AddMinutes(10)).ToList();
        foreach (var key in keysToRemove)
        {
            requestTracker.Remove(key);
        }
    }
}
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/MCS/Partial/NotifyFinishTest.cs
@@ -57,7 +57,7 @@
                int taskNum = _taskRepository.GetTaskNo().Result;
                WIDESEA_Model.Models.Dt_Task task = new WIDESEA_Model.Models.Dt_Task
                Dt_Task task = new Dt_Task
                {
                    CreateDate = DateTime.Now,
                    Creater = "HK",
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2310 @@
using Mapster;
using Masuit.Tools;
using SixLabors.Fonts.Tables.AdvancedTypographic;
using SqlSugar;
using System.Text.RegularExpressions;
using WIDESEA_Cache;
using WIDESEA_Core;
using WIDESEA_Core.Const;
using WIDESEA_DTO.MOM;
using WIDESEA_DTO.WMS;
using WIDESEA_IServices;
using WIDESEA_IStoragIntegrationServices;
using WIDESEA_Model.Models;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_QuartzJob.Models;
namespace WIDESEA_StorageTaskServices;
public partial class Dt_TaskService : ServiceBase<Dt_Task, IDt_TaskRepository>, IDt_TaskService
{
    private readonly LogFactory LogFactory = new LogFactory();
    private readonly IUnitOfWorkManage _unitOfWorkManage;
    private readonly IStockInfoRepository _stockInfoRepository;
    private readonly IStockInfoDetailRepository _stockInfoDetailRepository;
    private readonly IDt_Task_HtyRepository _task_HtyRepository;
    private readonly IMapper _mapper;
    private readonly ILocationInfoRepository _locationRepository;
    private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository;
    private readonly ILocationStatusChangeRecordRepository _locationStatusChangeRecordRepository;
    private readonly IBoxingInfoRepository _boxingInfoRepository; //组盘
    private readonly ICellStateService _cellStateService; //电芯属性
    private readonly IProcessApplyService _processApplyService; //工艺路线
    private readonly IDt_AreaInfoRepository _areaInfoRepository; //区域
    private readonly IAgingInOrOutInputService _agingInOrOutInputService; //静置\陈化
    private readonly IDt_StationManagerRepository _stationManagerRepository;
    private readonly ISys_ConfigService _configService;
    private readonly ISimpleCacheService _simpleCacheService;
    public Dt_TaskService(IDt_TaskRepository BaseDal,
                                IUnitOfWorkManage unitOfWorkManage,
                                IDt_OutOrderRepository outOrderRepository,
                                IStockInfoRepository stockInfoRepository,
                                IDt_Task_HtyRepository task_HtyRepository,
                                IMapper mapper,
                                ILocationInfoRepository locationRepository,
                                ITaskExecuteDetailRepository taskExecuteDetailRepository,
                                ILocationStatusChangeRecordRepository locationStatusChangeRecordRepository,
                                IBoxingInfoRepository boxingInfoRepository,
                                ICellStateService cellStateService,
                                IProcessApplyService processApplyService,
                                IDt_AreaInfoRepository areaInfoRepository,
                                IAgingInOrOutInputService agingInOrOutInputService,
                                IStockInfoDetailRepository stockInfoDetailRepository,
                                IDt_StationManagerRepository stationManagerRepository,
                                ISys_ConfigService configService,
                                ISimpleCacheService simpleCacheService) : base(BaseDal)
    {
        _unitOfWorkManage = unitOfWorkManage;
        _stockInfoRepository = stockInfoRepository;
        _task_HtyRepository = task_HtyRepository;
        _mapper = mapper;
        _locationRepository = locationRepository;
        _taskExecuteDetailRepository = taskExecuteDetailRepository;
        _locationStatusChangeRecordRepository = locationStatusChangeRecordRepository;
        _boxingInfoRepository = boxingInfoRepository;
        _cellStateService = cellStateService;
        _processApplyService = processApplyService;
        _areaInfoRepository = areaInfoRepository;
        _agingInOrOutInputService = agingInOrOutInputService;
        _stockInfoDetailRepository = stockInfoDetailRepository;
        _stationManagerRepository = stationManagerRepository;
        _configService = configService;
        _simpleCacheService = simpleCacheService;
    }
    #region å¤–部接口方法
    #region å‡ºåº“任务完成
    public async Task<WebResponseContent> CompleteStackTaskAsync(Dt_Task task, DtStockInfo stock)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
            {
                if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                {
                    if (!task.Roadway.Contains("FR") && stock.ProcessCode != "OCVB")
                    {
                        var agingOutputDto = MapToAgingOutputDto(stock);
                        content = await _agingInOrOutInputService.GetOCVOutputAsync(agingOutputDto);
                        if (content.Status)
                        {
                            var result = JsonConvert.DeserializeObject<BasicResult>(content.Data.ToString());
                            if (!result.Success && result.MessageCode == "E10001")
                            {
                                await HandleOutBoundError(stock, task);
                            }
                        }
                        else
                        {
                            task.Remark = "NG";
                            ConsoleHelper.WriteErrorLine("MOM通报点芯NG");
                            return content.Error("MOM通报点芯NG");
                        }
                    }
                }
            }
            if (task.Remark == "NG")
            {
                ConsoleHelper.WriteErrorLine("MOM通报点芯NG");
                return content.Error("MOM通报点芯NG");
            }
            // æ›´æ–°åº“存状态和任务状态
            (var loc, var tas) = UpdateStockAndTaskStatus(stock, task);
            var taskHty = task.Adapt<Dt_Task_Hty>();
            taskHty.FinishTime = DateTime.Now;
            taskHty.OperateType = App.User.UserName != null ? (int)OperateTypeEnum.人工完成 : (int)OperateTypeEnum.自动完成;
            taskHty.Creater = App.User.UserName != null ? App.User.UserName : "System";
            DtStockInfo_Hty stockInfo_Hty = stock.Adapt<DtStockInfo_Hty>();
            stockInfo_Hty.ModifyDate = DateTime.Now;
            // äº‹åŠ¡å¤„ç†
            await _unitOfWorkManage.UseTranAsync(async () =>
            {
                if (task.TaskType != (int)TaskOutboundTypeEnum.OutQuality)
                {
                    await DeleteStockInfoAsync(stock.Id);
                    await DeleteStockInfoDetailsAsync(stock.StockInfoDetails);
                    await AddStockInfoHtyAsync(stockInfo_Hty);
                    await UpdateLocationAsync(loc); //质检任务需要持续锁定库位
                }
                await DeleteTaskAsync(task.TaskId);
                await AddTaskHtyAsync(taskHty);
            });
            return content.OK("任务完成成功", task.Remark);
        }
        catch (Exception err)
        {
            LogFactory.GetLog("任务完成").Error(true, $"系统异常,异常信息:{err.Message}");
            return content.Error(err.Message);
        }
    }
    private AgingOutputDto MapToAgingOutputDto(DtStockInfo stock, ResponseEqptRunDto? info = null)
    {
        // TODO Value值根据MOM下发的静置时间到当前时间的分钟数
        var area = _areaInfoRepository.QueryFirst(x => x.AreaCode == stock.AreaCode);
        if (area == null)
        {
            throw new Exception("未找到对应的库区信息");
        }
        var parameterInfo = JsonConvert.DeserializeObject<List<ParameterInfo>>(stock.ParameterInfos).FirstOrDefault(y => y.Description.Contains("时间"));
        if (parameterInfo == null) throw new Exception("");
        var outHours = (DateTime.Now - (stock.LinedProcessFeedbackTime == null ? stock.CreateDate : stock.LinedProcessFeedbackTime.ToDateTime())).TotalHours;
        //if (stock.LinedProcessFeedbackTime == null)
        //{
        //    outHours = (DateTime.Now - stock.CreateDate).TotalHours;
        //}
        //else
        //{
        //    outHours = (DateTime.Now - stock.LinedProcessFeedbackTime.ToDateTime()).TotalHours;
        //}
        var isNG = outHours > parameterInfo.LowerSpecificationsLimit.ToDouble() && outHours < parameterInfo.UpperSpecificationsLimit.ToDouble();
        var defectCode = string.Empty;
        if (!isNG) defectCode = "TQCK";
        return new AgingOutputDto
        {
            OpFlag = 1,
            Software = area.Spare3,
            EquipmentCode = area.Spare2,
            TrayBarcode = stock.PalletCode,
            SerialNos = stock.StockInfoDetails.Select(x => new SerialNoOutDto
            {
                SlotNo = x.OrderNo.ToInt32(),
                SerialNo = x.SerialNumber,
                SerialNoResult = true, //isNG,
                ParameterInfo = new List<ParameterInfoOutput> {
                    new ParameterInfoOutput() {
                        Value = outHours.ToString(),
                        ParameterCode =parameterInfo.ParameterCode,
                        ParameterDesc = parameterInfo.Description,
                        ParameterResult  = "OK", //isNG.ToString(),
                        TargetValue = parameterInfo.TargetValue,
                        LowerLimit = parameterInfo.LowerSpecificationsLimit,
                        UpperLimit = parameterInfo.UpperSpecificationsLimit,
                        DefectCode = defectCode,
                        UOMCode = parameterInfo.UOMCode,
                    }
                }
            }).ToList()
        };
    }
    private (DtLocationInfo, Dt_Task) UpdateStockAndTaskStatus(DtStockInfo stock, Dt_Task task)
    {
        var location = _locationRepository.QueryFirst(x => x.LocationCode == task.SourceAddress && x.RoadwayNo == task.Roadway);
        //var details = _stockInfoDetailRepository.QueryData(x => x.StockId == stock.Id);
        int lastStatus = location.LocationStatus;
        location.LocationStatus = (int)LocationEnum.Free;
        task.TaskState = (int)TaskOutStatusEnum.OutFinish;
        //task.CurrentAddress = task.NextAddress;
        //task.NextAddress = task.TargetAddress;
        _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(location, lastStatus, (int)StatusChangeTypeEnum.AutomaticDelivery, task.TaskNum);
        LogFactory.GetLog("任务完成").Info(true, "更新库存状态与任务状态");
        return (location, task);
    }
    private async Task DeleteStockInfoAsync(int stockId)
    {
        var isStockUpdated = await _stockInfoRepository.DeleteDataByIdAsync(stockId);
        if (!isStockUpdated)
        {
            throw new Exception("库存信息更新失败");
        }
    }
    private async Task AddStockInfoHtyAsync(DtStockInfo_Hty dtStock)
    {
        var isStockAdd = await SqlSugarHelper.DbWMS.InsertNav(dtStock).IncludesAllFirstLayer().ExecuteCommandAsync();
        if (!isStockAdd)
        {
            throw new Exception("库存历史信息添加失败");
        }
    }
    private async Task UpdateLocationAsync(DtLocationInfo info)
    {
        var isStockUpdated = await _locationRepository.UpdateDataAsync(info);
        if (!isStockUpdated)
        {
            throw new Exception("库存信息更新失败");
        }
    }
    private async Task DeleteStockInfoDetailsAsync(IEnumerable<DtStockInfoDetail> details)
    {
        var ids = details.Select(x => (object)x.Id).ToArray();
        var isStockDetailUpdated = await _stockInfoDetailRepository.DeleteDataByIdsAsync(ids);
        if (!isStockDetailUpdated)
        {
            throw new Exception("库存详情信息更新失败");
        }
    }
    private async Task DeleteTaskAsync(int taskId)
    {
        var isTaskUpdated = await BaseDal.DeleteDataByIdAsync(taskId);
        if (!isTaskUpdated)
        {
            throw new Exception("任务信息更新失败");
        }
    }
    private async Task AddTaskHtyAsync(Dt_Task_Hty taskHty)
    {
        var isTaskAdd = await _task_HtyRepository.AddDataAsync(taskHty) > 0;
        if (!isTaskAdd)
        {
            throw new Exception("历史任务信息添加失败");
        }
    }
    #endregion å‡ºåº“任务完成
    #region ç§»åº“任务完成
    /// <summary>
    /// ç§»åº“任务完成
    /// </summary>
    /// <param name="saveModel">任务数据合集</param>
    /// <returns>返回结果集</returns>
    public async Task<WebResponseContent> CompleteTransferTaskAsync(Dt_Task task, DtStockInfo stock)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            // æ›´æ–°è´§ä½å’Œåº“存信息
            (DtStockInfo updateStock, DtLocationInfo locationInForm, DtLocationInfo locationInfoTo) = UpdateStockLocation(stock, task);
            var taskHty = CreateHistoricalTask(task);
            LogFactory.GetLog("任务完成").InfoFormat(true, "移库任务完成", $"货位地址:{task.TargetAddress},修改后库存数据:{JsonConvert.SerializeObject(updateStock)},原先货位数据:{locationInForm}");
            // æ‰§è¡Œæ•°æ®åº“事务
            bool isResult = await ExecuteTransaction(updateStock, taskHty, locationInForm, locationInfoTo, task.TaskId);
            if (isResult)
                content.OK("移库任务完成成功");
            else
                content.Error("移库任务完成失败");
        }
        catch (Exception err)
        {
            Console.WriteLine(err.Message.ToString());
        }
        return content;
    }
    #endregion ç§»åº“任务完成
    #region å…¥åº“任务完成
    /// <summary>
    /// å®Œæˆå…¥åº“任务
    /// </summary>
    /// <param name="task">任务数据合集</param>
    /// <returns>返回结果集</returns>
    public async Task<WebResponseContent> CompleteInboundTaskAsync(Dt_Task task)
    {
        // åˆå§‹åŒ–响应内容
        WebResponseContent content = new WebResponseContent();
        try
        {
            if (task.TaskType == (int)TaskInboundTypeEnum.InNG || task.TaskType == (int)TaskInboundTypeEnum.InQuality)
            {
                task.TaskState = (int)TaskInStatusEnum.SC_InFinish;
                // åˆ›å»ºåŽ†å²ä»»åŠ¡å®žä¾‹æ¨¡åž‹
                var taskHtyNG = CreateHistoricalTask(task);
                // æ‰§è¡Œæ•°æ®åº“事务
                await _unitOfWorkManage.UseTranAsync(async () =>
                {
                    // æ·»åŠ åŽ†å²ä»»åŠ¡
                    var isTaskHtyAdd = await _task_HtyRepository.AddDataAsync(taskHtyNG) > 0;
                    // åˆ é™¤ä»»åŠ¡æ•°æ®
                    var isTaskDelete = await Delete(task.TaskId);
                    if (!isTaskHtyAdd || !isTaskDelete)
                        throw new Exception("添加失败");
                });
                return content.OK("入库任务完成成功");
            }
            // èŽ·å–è£…ç®±ä¿¡æ¯å’Œç›®æ ‡ä½ç½®ä¿¡æ¯
            var boxing = await _boxingInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode);
            var locationInf = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress && x.RoadwayNo == task.Roadway);
            int lastStatus = locationInf.LocationStatus;
            // æ›´æ–°ç›®æ ‡ä½ç½®çŠ¶æ€ä¸ºåº“å­˜ä¸­
            locationInf.LocationStatus = (int)LocationEnum.InStock;
            // åˆ›å»ºåŽ†å²ä»»åŠ¡å®žä¾‹æ¨¡åž‹
            var taskHty = CreateHistoricalTask(task);
            if (task.TaskType == (int)TaskInboundTypeEnum.InQuality)
            {
                await _locationRepository.UpdateDataAsync(locationInf);
                await _task_HtyRepository.AddDataAsync(taskHty);
                await BaseDal.DeleteDataAsync(task);
                //记录货位变动信息
                _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(locationInf, lastStatus, (int)StatusChangeTypeEnum.AutomaticStorage, task.TaskNum);
                return content.OK("入库任务完成成功");
            }
            // æ ¹æ®æ˜¯å¦æœ‰ç»„盘信息创建库存实例模型
            DtStockInfo stock = boxing == null ? CreateEmptyPalletStock(task, locationInf) : CreateFullPalletStock(task, locationInf, boxing);
            // æ‰§è¡Œæ•°æ®åº“事务
            bool isResult = await ExecuteTransaction(stock, taskHty, locationInf, task.TaskId, boxing);
            if (isResult)
            {
                _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(locationInf, lastStatus, (int)StatusChangeTypeEnum.AutomaticStorage, task.TaskNum);
                stock.StockInfoDetails = new List<DtStockInfoDetail>() { { stock.StockInfoDetails[0] } };
                stock.LocationInfo = locationInf;
                content.OK("入库任务完成成功");
            }
            else
            {
                content.Error("入库任务完成失败");
            }
        }
        catch (Exception err)
        {
            // è®°å½•异常信息到控制台和日志
            Console.WriteLine(err.Message.ToString());
            LogFactory.GetLog("任务完成").Error(true, err);
            content.Error(err.Message);
        }
        return content;
    }
    /// <summary>
    /// åˆ›å»ºç©ºæ‰˜ç›˜çš„库存实例模型
    /// </summary>
    private DtStockInfo CreateEmptyPalletStock(Dt_Task task, DtLocationInfo locationInf)
    {
        var loation = _locationRepository.QueryFirst(x => x.RoadwayNo == task.Roadway && x.LocationCode == task.TargetAddress);
        var area = _areaInfoRepository.QueryFirst(x => x.AreaID == loation.AreaId);
        return new DtStockInfo()
        {
            PalletCode = task.PalletCode,
            LocationCode = task.TargetAddress,
            CreateDate = DateTime.Now,
            Creater = "system",
            IsFull = false,
            AreaCode = area.AreaCode ?? "",
            LocationId = loation.Id,
            ProductionLine = task.ProductionLine,
            StockInfoDetails = new List<DtStockInfoDetail>()
            {
                new DtStockInfoDetail()
                {
                    MaterielCode = "空托盘",
                    Id = 0,
                    Status = (int)StockStateEmun.已入库
                }
            }
        };
    }
    /// <summary>
    /// åˆ›å»ºåˆ†å®¹çš„实托盘的库存实例模型
    /// </summary>
    private DtStockInfo CreateFullPalletStockByFR(Dt_Task task, DtLocationInfo locationInf)
    {
        var loation = _locationRepository.QueryFirst(x => x.RoadwayNo == task.Roadway && x.LocationCode == task.TargetAddress);
        var area = _areaInfoRepository.QueryFirst(x => x.AreaID == loation.AreaId);
        return new DtStockInfo()
        {
            PalletCode = task.PalletCode,
            LocationCode = task.TargetAddress,
            CreateDate = DateTime.Now,
            Creater = "system",
            IsFull = false,
            AreaCode = area.AreaCode ?? "",
            LocationId = loation.Id,
            StockInfoDetails = new List<DtStockInfoDetail>()
            {
                new DtStockInfoDetail()
                {
                    MaterielCode = "实托盘",
                    Id = 0,
                    Status = (int)StockStateEmun.已入库
                }
            }
        };
    }
    /// <summary>
    /// åˆ›å»ºå®žç›˜çš„库存实例模型并调用MOM入库
    /// </summary>
    private DtStockInfo CreateFullPalletStock(Dt_Task task, DtLocationInfo locationInf, DtBoxingInfo boxing)
    {
        var loation = _locationRepository.QueryFirst(x => x.RoadwayNo == task.Roadway && x.LocationCode == task.TargetAddress);
        if (loation == null)
            throw new Exception("未找到对应位置信息");
        var area = new Dt_AreaInfo();
        if (task.Roadway.Contains("FR"))
        {
            area = _areaInfoRepository.QueryFirst(x => x.AreaID == loation.AreaId);
        }
        else
        {
            //var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.SourceAddress);
            //if (station.stationPLC == "1017")
            //    area = _areaInfoRepository.QueryFirst(x => x.AreaID == Convert.ToInt32(station.stationNGLocation));
            //else
            //    area = _areaInfoRepository.QueryFirst(x => x.AreaID == loation.AreaId);
            //if (area == null)
            //    throw new Exception("未找到对应区域信息");
            if (boxing.ProcessCode == "OCV1")
                area = _areaInfoRepository.QueryFirst(x => x.AreaID == 6);
            else if (boxing.ProcessCode == "OCVB")
                area = _areaInfoRepository.QueryFirst(x => x.AreaID == 7);
            else
                area = _areaInfoRepository.QueryFirst(x => x.AreaID == loation.AreaId);
            if (area == null)
                throw new Exception("未找到对应区域信息");
        }
        var boxDetail = boxing.BoxingInfoDetails.Adapt<List<DtStockInfoDetail>>();
        boxDetail.ForEach(x => { x.Status = (int)StockStateEmun.已入库; });
        var stock = new DtStockInfo()
        {
            PalletCode = task.PalletCode,
            LocationCode = task.TargetAddress,
            CreateDate = DateTime.Now,
            Creater = "system",
            IsFull = boxing.IsFull,
            AreaCode = area.AreaCode,
            LocationId = loation.Id,
            StockInfoDetails = boxDetail,
            ProcessCode = boxing.ProcessCode,
            NextProcessCode = boxing.NextProcessCode,
            Remark = boxing.BoxingInfoDetails.Count().ToString(),
        };
        if (boxing.ProcessCode != "OCVB" && !task.Roadway.Contains("FR"))
        {
            // å¤„理请求参数
            AgingInputDto agingInputDto = new AgingInputDto()
            {
                SerialNos = boxing.BoxingInfoDetails
                    .Select(item => new SerialNoInDto { SerialNo = item.SerialNumber, PositionNo = item.OrderNo })
                    .ToList(),
                TrayBarcode = task.PalletCode,
                OpFlag = 1,
                EquipmentCode = area.Spare2,
                Software = area.Spare3
            };
            var result = _agingInOrOutInputService.GetOCVInputAsync(agingInputDto).Result;
            var respone = JsonConvert.DeserializeObject<ResponeAgingInputDto>(result.Data.ToString());
            bool isFull = false;
            if (!task.Roadway.Contains("FR"))
            {
                isFull = respone.SpecialParameterDuration.IsNullOrEmpty();
            }
            if (respone.ProductionLine == null || respone.ParameterInfos == null || respone.ParameterInfos.IsNullOrEmpty())
            {
                throw new Exception($"MOM数据返回错误,产线{respone.ProductionLine},ParameterInfos{respone.ParameterInfos}");
            }
            stock.LinedProcessFeedbackTime = respone.LinedProcessFeedbackTime;
            stock.SpecialParameterDuration = respone.SpecialParameterDuration;
            //2024å¹´11月16日:新增字段计算应出库时间
            stock.OutboundTime = Convert.ToDateTime(respone.LinedProcessFeedbackTime == null ? DateTime.Now : respone.LinedProcessFeedbackTime).AddHours(Convert.ToDouble(respone.SpecialParameterDuration));
            stock.ProductionLine = respone.ProductionLine;
            stock.ParameterInfos = respone.ParameterInfos.ToJsonString();
            stock.StockStatus = 1;
        }
        else
        {
            stock.OutboundTime = DateTime.Now;
            stock.StockStatus = 1;
            stock.ProductionLine = boxing.ProductionLine;
        }
        // è®°å½•日志
        LogFactory.GetLog("任务完成").InfoFormat(true, "入库任务完成", $"货位地址:{task.TargetAddress},修改后货位数据:{locationInf}");
        return stock;
    }
    #endregion å…¥åº“任务完成
    #region ä»»åŠ¡å®Œæˆ
    /// <summary>
    /// å®Œæˆä»»åŠ¡
    /// </summary>
    /// <param name="taskNum">任务编号</param>
    /// <returns>返回结果集</returns>
    public async Task<WebResponseContent> CompleteAsync(int taskNum)
    {
        // åˆå§‹åŒ–响应内容
        WebResponseContent content = new WebResponseContent();
        // æå–任务数据
        LogFactory.GetLog("任务完成").InfoFormat(true, "提取任务数据", $"任务号:{taskNum}");
        // éªŒè¯ä»»åŠ¡æ˜¯å¦å­˜åœ¨
        var task = await GetByTaskNum(taskNum);
        if (task == null)
        {
            return content.Error("任务不存在");
        }
        LogFactory.GetLog("任务完成").InfoFormat(true, "验证任务是否存在", JsonConvert.SerializeObject(task));
        if (task.TaskType == (int)TaskOutboundTypeEnum.InToOut)
        {
            return await CompleteInToOutTaskAsync(task);
        }
        // éªŒè¯åº“存是否存在
        var stock = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == task.PalletCode);
        // æ ¹æ®ä»»åŠ¡ç±»åž‹è°ƒç”¨ç›¸åº”çš„å®Œæˆä»»åŠ¡æ–¹æ³•
        switch (task.TaskType)
        {
            case (int)TaskInboundTypeEnum.Inbound:
            case (int)TaskInboundTypeEnum.InTray:
            case (int)TaskInboundTypeEnum.InNG:
            case (int)TaskInboundTypeEnum.InQuality:
                LogFactory.GetLog("任务完成").InfoFormat(true, "入库任务", "");
                return await CompleteInboundTaskAsync(task);
            case (int)TaskOutboundTypeEnum.OutTray:
            case (int)TaskOutboundTypeEnum.Outbound:
            case (int)TaskOutboundTypeEnum.OutNG:
                LogFactory.GetLog("任务完成").InfoFormat(true, "出库任务", "");
                return await CompleteStackTaskAsync(task, stock);
            case (int)TaskRelocationTypeEnum.Relocation:
                return await CompleteTransferTaskAsync(task, stock);
            default:
                return content.Error("任务类型不存在");
        }
    }
    #endregion ä»»åŠ¡å®Œæˆ
    #region è¯·æ±‚任务入库
    public async Task<WebResponseContent> RequestTaskAsync(RequestTaskDto input)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            // æŸ¥è¯¢ä»»åŠ¡
            var task = await QueryTaskByPalletCode(input.PalletCode);
            if (task != null)
            {
                return CreateAndReturnWMSTaskDTO(task);
            }
            // æŸ¥è¯¢åº“存信息(这里后续要完善质检回库逻辑)
            var stock = await QueryStockInfo(input.PalletCode);
            if (stock != null)
            {
                Dt_Task taskNew = new Dt_Task
                {
                    Grade = 1,
                    Roadway = stock.LocationInfo.RoadwayNo,
                    TargetAddress = stock.LocationInfo.RoadwayNo,
                    Dispatchertime = DateTime.Now,
                    MaterialNo = "",
                    NextAddress = stock.LocationInfo.RoadwayNo,
                    OrderNo = null,
                    PalletCode = stock.PalletCode,
                    SourceAddress = input.Position,
                    CurrentAddress = input.Position,
                    TaskState = stock.LocationInfo.RoadwayNo.Contains("CH") ? (int)TaskInStatusEnum.InNew : (int)TaskInStatusEnum.Line_InFinish,
                    TaskType = (int)TaskInboundTypeEnum.InQuality,
                    TaskNum = BaseDal.GetTaskNo().Result,
                    Creater = "System", // ä¿®æ­£æ‹¼å†™é”™è¯¯
                    CreateDate = DateTime.Now,
                    TaskId = 0,
                    ProductionLine = stock.ProductionLine,
                    ProcessCode = stock.ProcessCode,
                };
                var taskDTO = CreateTaskDTO(taskNew);
                BaseDal.AddData(taskNew);
                return content.OK(data: taskDTO);
                // TODO质检回库
            }
            // æ ¹æ®ä½ç½®æŸ¥è¯¢åŒºåŸŸä¿¡æ¯
            var areaCode = Regex.Replace(input.Position, @"-(\d+)", "");
            var area = await QueryAreaInfoByPosition(areaCode);
            if (area == null)
            {
                return content.Error("该点位不在区域列表中存在");
            }
            // åˆ›å»ºå¹¶èŽ·å–æ•´ç›˜ç”µèŠ¯çŠ¶æ€
            TrayCellsStatusDto trayCells = CreateTrayCellsStatusDto(area, input.PalletCode);
            content = await GetTrayCellStatusAsync(trayCells);
            if (!content.Status)
            {
                ConsoleHelper.WriteErrorLine($"获取电芯状态失败:{content.Message}");
                return content;
            }
            var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString());
            if (!result.Success)
            {
                ConsoleHelper.WriteErrorLine($"获取电芯状态失败:{result.MOMMessage}");
                if (result.SerialNos.Count <= 0)
                {
                    // ç©ºæ‰˜ç›˜å…¥åº“逻辑
                    var staion = _stationManagerRepository.QueryFirst(x => x.stationChildCode == input.Position && x.stationType == 1 && x.remark == "IN");
                    if (staion != null)
                    {
                        return await HandleErrorCells(input, area);
                    }
                    else
                    {
                        return await RequestTrayInTaskAsync(input);
                    }
                }
                else
                    return content.Error(result.MOMMessage);
            }
            if (result.SerialNos.Count <= 0)
            {
                var config = _configService.GetByConfigKey(CateGoryConst.CONFIG_SYS_InStacker, SysConfigConst.InboundIsEmpty);
                var strings = config.ConfigValue.Split(',').ToList();
                if (strings.Contains(input.Position))
                {
                    // todo送至NG口
                    ConsoleHelper.WriteErrorLine($"当前位置不能入空托盘");
                    return content.Error("当前位置不能入空托盘");
                }
                else
                    return await RequestTrayInTaskAsync(input);
            }
            else
            {
                // å¤„理异常电芯情况
                var serialNosError = result.SerialNos.Where(x => x.SerialNoStatus != 1 && x.SerialNoStatus != 4).ToList();
                if (serialNosError.Count > 0)
                {
                    return await HandleErrorCells(input, area, serialNosError);
                }
                var boxing = CreateBoxingInfo(result, input.PalletCode);
                if (boxing == null) return content.Error("组盘失败");
                input.ProductionLine = result.ProductionLine;
                return await ProcessBasedOnProcessCode(boxing, area, input, result);
            }
        }
        catch (Exception err)
        {
            // æ›´è¯¦ç»†çš„异常处理,可以根据异常类型记录不同的错误日志等
            content.Error(err.Message);
            Console.WriteLine(err.Message);
        }
        return content;
    }
    /// <summary>
    /// æ›´æ–°ä»»åŠ¡è´§ä½
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public async Task<WebResponseContent> UpdateExistingTask(RequestTaskDto input)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == input.PalletCode);
            if (task == null)
                return content.Error($"暂未找到【{input.PalletCode}】的任务");
            return content = await UpdateExistingTask(input, task);
        }
        catch (Exception err)
        {
            return content.Error(err.Message);
        }
    }
    /// <summary>
    /// ç©ºæ‰˜ç›˜å…¥åº“申请
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public async Task<WebResponseContent> RequestTrayInTaskAsync(RequestTaskDto input)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            // è°ƒç”¨BaseDal.QueryFirstAsync方法,查询任务
            var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == input.PalletCode);
            if (task != null && task.TaskState == (int)TaskInStatusEnum.InNew)
            {
                // åˆ›å»ºWMS任务
                WMSTaskDTO taskDTO = CreateTaskDTO(task);
                return content.OK(data: task);
            }
            // æ ¹æ®ä½ç½®æŸ¥è¯¢åŒºåŸŸä¿¡æ¯
            var areaCode = Regex.Replace(input.Position, @"-(\d+)", "");
            var area = await QueryAreaInfoByPosition(areaCode);
            if (area == null)
            {
                return content.Error("该点位不在区域列表中存在");
            }
            // èŽ·å–æ•´ç›˜ç”µèŠ¯å±žæ€§çŠ¶æ€
            TrayCellsStatusDto trayCells = CreateTrayCellsStatusDto(area, input.PalletCode);
            content = await GetTrayCellStatusAsync(trayCells);
            if (!content.Status)
            {
                ConsoleHelper.WriteErrorLine($"获取电芯状态失败:{content.Message}");
                return content;
            }
            var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString());
            if (result.ProductionLine.IsNullOrEmpty())
            {
                ConsoleHelper.WriteErrorLine($"当前托盘无产线,联系MOM添加产线");
                return content.Error("当前托盘无产线,联系MOM添加产线");
            }
            var stationManagers = _stationManagerRepository.QueryData(x => x.stationType == 6 && x.stationChildCode == input.Position).FirstOrDefault();
            if (stationManagers == null)
            {
                stationManagers = _stationManagerRepository.QueryData(x => x.stationType == 1 && x.stationChildCode == input.Position).FirstOrDefault();
                if (stationManagers == null)
                    throw new Exception("未找到空托盘入库站台和入库站台配置");
            }
            List<string> strings = stationManagers.Roadway.Split(',').ToList();
            return await CreateNewTask(input, result.ProductionLine, result.ProcessCode, strings, 1);
        }
        catch (Exception)
        {
            throw;
        }
    }
    // èŽ·å–æ‰˜ç›˜å•å…ƒæ ¼çŠ¶æ€
    private async Task<WebResponseContent> GetTrayCellStatusAsync(TrayCellsStatusDto trayCells)
    {
        // è°ƒç”¨_cellStateService.GetTrayCellStatusAsync方法,获取托盘单元格状态
        return await _cellStateService.GetTrayCellStatusAsync(trayCells);
    }
    // èŽ·å–ç»„ç›˜ä¿¡æ¯
    private DtBoxingInfo CreateBoxingInfo(ResultTrayCellsStatus result, string palletCode)
    {
        return new DtBoxingInfo
        {
            PalletCode = palletCode,
            IsFull = true,
            ProcessCode = result.ProcessCode,
            ProductionLine = result.ProductionLine,
            BoxingInfoDetails = result.SerialNos.Select(serialNoObj => new DtBoxingInfoDetail
            {
                SerialNumber = serialNoObj.SerialNo,
                OrderNo = serialNoObj.PositionNo.ToString(),
                Status = serialNoObj.SerialNoStatus,
                MaterielCode = result.BindCode,
                Remark = result.TrayBarcodePropertys.ToJsonString(),
            }).ToList()
        };
    }
    // èŽ·å–å·¥è‰ºç”³è¯·
    private async Task<ProcessApplyDto> GetProcessApplyAsync(ResultTrayCellsStatus content)
    {
        // åˆ›å»ºä¸€ä¸ªProcessApplyDto对象,并赋值
        return new ProcessApplyDto()
        {
            //WipOrderNo = result.BindCode,
            SerialNos = content.SerialNos.Select(item => new SerialNos
            {
                SerialNo = item.SerialNo
            }).ToList()
        };
    }
    #endregion è¯·æ±‚任务入库
    #region è¯·æ±‚出库(实盘&空盘)
    /// <summary>
    /// è¯·æ±‚托盘任务
    /// </summary>
    /// <param name="position">目标位置</param>
    /// <param name="tag">托盘类型(1:实盘,2:空盘)</param>
    /// <param name="areaCode">区域编码</param>
    /// <param name="roadways">巷道编码集合</param>
    /// <returns>返回结果集</returns>
    public async Task<WebResponseContent> RequestTrayOutTaskAsync(string position, int tag, string areaCode, List<string> areaCodes, string productionLine)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            // è®°å½•异常信息并抛出
            LogFactory.GetLog($"{position}请求{productionLine}任务").Info(true, $"{position}-{tag}-{areaCode}-{JsonConvert.SerializeObject(areaCodes)}-{productionLine}");
            // æ ¹æ®æ‰˜ç›˜ç±»åž‹æŸ¥è¯¢åº“存信息
            DtStockInfo stockInfo = tag == (int)TaskOutboundTypeEnum.Outbound
                ? areaCode != "CWSC1" ? await QueryStockInfoForRealTrayAsync(areaCode, areaCodes, productionLine) : await QueryStockInfoForRealTrayCWAsync(areaCodes, productionLine)
                : await QueryStockInfoForEmptyTrayAsync(areaCode, position);
            if (stockInfo == null)
            {
                return content.Error("库存信息不存在");
            }
            //ConsoleHelper.WriteColorLine(JsonConvert.SerializeObject(stockInfo), ConsoleColor.DarkMagenta);
            // æ–°å¢žé‡å¤ä»»åŠ¡æ ¡éªŒ
            var hasTask = BaseDal.QueryFirst(x => x.PalletCode == stockInfo.PalletCode);
            if (hasTask != null)
            {
                WMSTaskDTO taskDTO1 = CreateTaskDTO(hasTask);
                return content.OK("已存在出库任务", data: taskDTO1);
            }
            // åˆ›å»ºæ–°ä»»åŠ¡å®žä¾‹
            var task = CreateTask(stockInfo, position, tag);
            var taskId = await BaseDal.AddDataAsync(task);
            bool isResult = taskId > 0;
            if (!isResult)
            {
                return content.Error("任务创建失败");
            }
            // åˆ›å»ºä»»åŠ¡DTO
            WMSTaskDTO taskDTO = CreateTaskDTO(task);
            //if (tag == 1)
            {
                // æ›´æ–°åº“存位置状态为不可用
                stockInfo.LocationInfo.LocationStatus = (int)LocationEnum.InStockDisable;
                await _locationRepository.UpdateDataAsync(stockInfo.LocationInfo);
            }
            // è¿”回成功响应
            return content.OK(data: taskDTO);
        }
        catch (Exception ex)
        {
            // è®°å½•异常信息并抛出
            LogFactory.GetLog("请求托盘任务").Error(true, ex);
            ConsoleHelper.WriteErrorLine("请求空/实托盘任务" + ex.Message + "\r\n" + ex.StackTrace);
            return content.Error(ex.Message);
        }
    }
    /// <summary>
    /// æŸ¥è¯¢å®žç›˜åº“存信息
    /// </summary>
    private async Task<DtStockInfo> QueryStockInfoForRealTrayAsync(string areaCode, List<string> devices, string productionLine)
    {
        try
        {
            var area = await _areaInfoRepository.QueryFirstAsync(x => x.AreaCode == areaCode);
            if (area == null)
            {
                ConsoleHelper.WriteErrorLine($"查询实盘库存信息时,未找到区域代码为{areaCode}的数据");
                return null;
            }
            var outBoundMateriel = AppSettings.app<OutBoundMateriel>("OutBoundMateriel");
            List<string>? materielCodes = outBoundMateriel.Count != 0
                ? outBoundMateriel.Where(x => x.ProductionLine == productionLine && x.ProcessCode == area.AreaCode)
                                  .Select(x => x.MaterielCode)
                                  .ToList()
                : null;
            var result = new DtStockInfo();
            result = await _stockInfoRepository.Db.Queryable<DtStockInfo>()
                            .Includes(x => x.LocationInfo)
                            .Includes(x => x.StockInfoDetails)
                            .Where(x => x.AreaCode == areaCode && x.OutboundTime < DateTime.Now && x.IsFull)
                            .WhereIF(!productionLine.IsNullOrEmpty(), x => x.ProductionLine == productionLine)
                            .WhereIF(!devices.IsNullOrEmpty(), x => devices.Contains(x.LocationInfo.RoadwayNo))
                            .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable)
                            .WhereIF(!materielCodes.IsNullOrEmpty(), x => x.StockInfoDetails.Any(y => materielCodes.Contains(y.MaterielCode)))
                            .OrderBy(x => x.OutboundTime)
                            .FirstAsync();
            if (result.IsNullOrEmpty())
                ConsoleHelper.WriteErrorLine($"{area.AreaName}-{productionLine}查询实盘库存信息失败:未找到符合条件的数据");
            return result;
        }
        catch (Exception ex)
        {
            ConsoleHelper.WriteErrorLine("查询实盘库存信息失败:" + ex.Message + "\r\n" + ex.StackTrace);
            return null;
        }
    }
    /// <summary>
    /// æŸ¥è¯¢å¸¸æ¸©å®žç›˜åº“存信息
    /// </summary>
    private async Task<DtStockInfo> QueryStockInfoForRealTrayCWAsync(List<string> areaCodes, string productionLine)
    {
        try
        {
            var areaId = (await _areaInfoRepository.QueryDataAsync(x => areaCodes.Contains(x.AreaCode))).Select(x => x.AreaID).ToList();
            if (areaId.Count == 0)
            {
                ConsoleHelper.WriteErrorLine($"查询常温实盘库存信息时,未找到区域代码为{JsonConvert.SerializeObject(areaCodes)}的数据");
                return null;
            }
            //var outBoundMateriel = AppSettings.app<OutBoundMateriel>("OutBoundMateriel");
            //List<string> materielCodes = null;
            //if (outBoundMateriel.Count != 0)
            //{
            //    materielCodes = outBoundMateriel.Where(x => x.ProductionLine == productionLine && x.ProcessCode == areaCodes[0]).Select(x => x.MaterielCode).ToList();
            //}
            var outBoundMateriel = AppSettings.app<OutBoundMateriel>("OutBoundMateriel");
            List<string>? materielCodes = outBoundMateriel.Count != 0
                ? outBoundMateriel.Where(x => x.ProductionLine == productionLine && x.ProcessCode == areaCodes[0])
                                  .Select(x => x.MaterielCode)
                                  .ToList()
                : null;
            var deviceCode = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>()
                .Where(x => x.DeviceStatus == "1")
                .Where(x => x.DeviceCode.Contains("CWSC"))
                .ToList().Select(x => x.DeviceCode).ToList();
            var result = await _stockInfoRepository.Db.Queryable<DtStockInfo>()
                .Where(x => areaCodes.Contains(x.AreaCode) && x.OutboundTime < DateTime.Now && x.IsFull == true) // è¿‡æ»¤æ¡ä»¶
                .WhereIF(!productionLine.IsNullOrEmpty(), x => x.ProductionLine == productionLine)
                .Includes(x=>x.LocationInfo)
                .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo))
                .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && areaId.Contains(x.LocationInfo.AreaId) && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) // è¿‡æ»¤æ¡ä»¶
                .Includes(x=>x.StockInfoDetails)
                .WhereIF(!materielCodes.IsNullOrEmpty(), x => x.StockInfoDetails.Any(y => materielCodes.Contains(y.MaterielCode)))
                .OrderBy(x => x.OutboundTime) // æŽ’序
                .FirstAsync(); // èŽ·å–ç¬¬ä¸€ä¸ªå…ƒç´ 
            if (result.IsNullOrEmpty())
                ConsoleHelper.WriteErrorLine($"{JsonConvert.SerializeObject(areaCodes)}-{productionLine}查询常温实盘库存信息失败:未找到符合条件的数据");
            return result;
        }
        catch (Exception ex)
        {
            ConsoleHelper.WriteErrorLine("QueryStockInfoForRealTrayCWAsync查询实盘库存信息失败:" + ex.Message + "\r\n" + ex.StackTrace);
            return null;
        }
    }
    /// <summary>
    /// æŸ¥è¯¢ç©ºç›˜åº“存信息
    /// </summary>
    private async Task<DtStockInfo> QueryStockInfoForEmptyTrayAsync(string areaCode, string position)
    {
        try
        {
            var area = await _areaInfoRepository.QueryFirstAsync(x => x.AreaCode == areaCode);
            ConsoleHelper.WriteColorLine(position + "..." + areaCode, ConsoleColor.Magenta);
            var station = await _stationManagerRepository.QueryFirstAsync(x => x.stationChildCode == position && x.stationType == 17);
            ConsoleHelper.WriteColorLine(station.Roadway, ConsoleColor.Magenta);
            var stackers = station.Roadway.Split(',').ToList();
            var deviceCode = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>()
                .Where(x => x.DeviceStatus == "1")
                .Where(x => stackers.Contains(x.DeviceCode))
                .ToList().Select(x => x.DeviceCode).ToList();
            var result = await _stockInfoRepository.Db.Queryable<DtStockInfo>()
                .Where(x => x.ProductionLine == station.productLine)
                .Where(x => x.AreaCode == areaCode && x.IsFull == false)
                .Includes(x=>x.StockInfoDetails)
                .Where(x => x.StockInfoDetails.Any(y => y.MaterielCode == "空托盘"))
                .Includes(x=>x.LocationInfo)
                .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo))
                .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) // è¿‡æ»¤æ¡ä»¶
                .OrderBy(x => x.CreateDate) // æŽ’序
                .FirstAsync(); // è½¬æ¢ä¸ºåˆ—表
            if (result.IsNullOrEmpty())
                ConsoleHelper.WriteErrorLine($"{area}-{station.productLine}查询空盘库存信息失败:未找到符合条件的数据");
            return result;
        }
        catch (Exception ex)
        {
            ConsoleHelper.WriteErrorLine($"QueryStockInfoForEmptyTrayAsync查询实盘库存信息失败:" + ex.Message + "\r\n" + ex.StackTrace);
            return null;
        }
    }
    /// <summary>
    /// åˆ›å»ºä»»åŠ¡å®žä¾‹
    /// </summary>
    private Dt_Task CreateTask(DtStockInfo stockInfo, string position, int tag)
    {
        return new Dt_Task
        {
            Grade = tag == 104 ? (stockInfo.LocationInfo.RoadwayNo.Contains("CWSC") ? 1 : 2) : (stockInfo.LocationInfo.RoadwayNo.Contains("CWSC") ? 2 : 1),
            Roadway = stockInfo.LocationInfo.RoadwayNo,
            TargetAddress = position,
            Dispatchertime = DateTime.Now,
            MaterialNo = "",
            NextAddress = position,
            OrderNo = null,
            PalletCode = stockInfo.PalletCode,
            SourceAddress = stockInfo.LocationCode,
            CurrentAddress = stockInfo.LocationCode,
            TaskState = (int)TaskOutStatusEnum.OutNew,
            TaskType = tag,
            TaskNum = BaseDal.GetTaskNo().Result,
            Creater = "System", // ä¿®æ­£æ‹¼å†™é”™è¯¯
            CreateDate = DateTime.Now,
            TaskId = 0,
            ProductionLine = stockInfo.ProductionLine,
            ProcessCode = stockInfo.ProcessCode,
        };
    }
    /// <summary>
    /// åˆ›å»ºä»»åŠ¡DTO
    /// </summary>
    private WMSTaskDTO CreateTaskDTO(Dt_Task task)
    {
        return new WMSTaskDTO
        {
            TaskNum = task.TaskNum.Value,
            Grade = task.Grade.Value,
            PalletCode = task.PalletCode,
            RoadWay = task.Roadway,
            SourceAddress = task.SourceAddress,
            TargetAddress = task.TargetAddress,
            TaskState = task.TaskState.Value,
            Id = 0,
            TaskType = task.TaskType,
            ProductionLine = task.ProductionLine,
        };
    }
    #endregion è¯·æ±‚出库(实盘&空盘)
    #region ä»»åŠ¡çŠ¶æ€æ›´æ”¹
    /// <summary>
    /// æ›´æ–°ä»»åŠ¡çŠ¶æ€&出库解盘
    /// </summary>
    /// <param name="taskNum"></param>
    /// <param name="taskState"></param>
    /// <returns></returns>
    public async Task<WebResponseContent> UpdateTaskStatus(int taskNum, int taskState)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            var task = await BaseDal.QueryFirstAsync(x => x.TaskNum == taskNum);
            if (task == null)
                return content.Error("未找到任务");
            if (taskState == (int)TaskOutStatusEnum.Line_OutFinish || taskState == (int)TaskInStatusEnum.SC_InFinish)
            {
                var taskHty = CreateHistoricalTask(task);
                await _unitOfWorkManage.UseTranAsync(async () =>
                {
                    var asb = await BaseDal.DeleteDataByIdAsync(task.TaskId);
                    var asbHty = await _task_HtyRepository.AddDataAsync(taskHty) > 0;
                    if (asb && asbHty)
                        content.OK();
                    else
                        throw new Exception();
                });
                content.OK();
            }
            else
            {
                task.TaskState = taskState;
                var asb = await BaseDal.UpdateDataAsync(task);
                if (asb)
                    content.OK();
                else
                    content.Error();
            }
        }
        catch (Exception ex)
        {
            content.Error(ex.Message);
        }
        return content;
    }
    #endregion ä»»åŠ¡çŠ¶æ€æ›´æ”¹
    #region æŒ‡å®šä»»åŠ¡å‡ºåº“
    public async Task<WebResponseContent> CreateAndSendOutboundTask(string locationCode, string palletCode)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            // æŸ¥è¯¢åº“存信息
            var stockInfo = await _stockInfoRepository.QueryFirstNavAsync(x => x.LocationCode == locationCode && x.PalletCode == palletCode);
            if (stockInfo == null)
            {
                return content.Error("未查询到对应的库存信息");
            }
            if (stockInfo.LocationInfo.LocationStatus != (int)LocationEnum.InStock)
            {
                return content.Error("该货位状态不等于【有货】请查看是否已经有任务!");
            }
            var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == palletCode);
            if (task != null)
            {
                return content.Error($"【{palletCode}】已存在任务");
            }
            int taskType = 0;
            if (stockInfo.IsFull)
                taskType = (int)TaskOutboundTypeEnum.OutQuality;
            else
                taskType = (int)TaskOutboundTypeEnum.OutTray;
            if (stockInfo.AreaCode.Contains("CH"))
            {
                // åˆ›å»ºå¹¶æ·»åŠ ä»»åŠ¡åˆ°æ•°æ®åº“
                task = CreateTask(stockInfo, "002-071-001", taskType);
            }
            else
            {
                if (stockInfo.LocationInfo.RoadwayNo.Contains("JZSC"))
                {
                    var targetAddress = "001-061-001";
                    //if (stockInfo.LocationInfo.RoadwayNo == "JZSC4")
                    //    targetAddress = "001-021-001";
                    task = CreateTask(stockInfo, targetAddress, taskType);
                }
            }
            //var taskId = await BaseDal.AddDataAsync(task);
            //if (taskId <= 0)
            //{
            //    return content.Error("任务创建失败");
            //}
            // åˆ›å»ºä»»åŠ¡ä¼ è¾“ç”¨çš„DTO对象
            var taskDTO = CreateTaskDTO(task);
            // èŽ·å–WMS IP地址用于发送任务请求
            var wmsIpAddress = GetWCSIpReceiveTask();
            if (wmsIpAddress == null)
            {
                throw new InvalidOperationException("WMS IP æœªé…ç½®");
            }
            var tasks = new List<WMSTaskDTO>() { taskDTO };
            // å‘送任务请求到WMS
            var result = await HttpHelper.PostAsync(wmsIpAddress, tasks.ToJsonString());
            content = JsonConvert.DeserializeObject<WebResponseContent>(result);
            if (content.Status)
            {
                // æ·»åŠ ä»»åŠ¡åˆ°æ•°æ®åº“
                await BaseDal.AddDataAsync(task);
                // æ›´æ–°åº“存位置状态为不可用
                stockInfo.LocationInfo.LocationStatus = (int)LocationEnum.InStockDisable;
                await _locationRepository.UpdateDataAsync(stockInfo.LocationInfo);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"发生异常: {ex.Message}");
            content.Error(ex.Message);
        }
        return content;
    }
    private string GetWCSIpReceiveTask()
    {
        var configs = _configService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
        var wmsBase = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.WCSIPAddress)?.ConfigValue;
        var ipAddress = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.ReceiveTask)?.ConfigValue;
        if (wmsBase == null || ipAddress == null)
        {
            return null;
        }
        return wmsBase + ipAddress;
    }
    #endregion æŒ‡å®šä»»åŠ¡å‡ºåº“
    #region é™ç½®å¼‚常口入库
    public async Task<WebResponseContent> CreateAndSendInboundTask(string palletCode, string position)
    {
        #region
        //WebResponseContent content = new WebResponseContent();
        //try
        //{
        //    // æŸ¥è¯¢åº“存信息
        //    var stockInfo = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == palletCode);
        //    if (stockInfo == null)
        //    {
        //        var taskOld = BaseDal.QueryFirst(x => x.PalletCode == palletCode);
        //        if (!taskOld.IsNullOrEmpty())
        //        {// åˆ›å»ºWMS任务
        //            WMSTaskDTO taskDTO = new WMSTaskDTO()
        //            {
        //                TaskNum = taskOld.TaskNum.Value,
        //                Grade = 1,
        //                PalletCode = taskOld.PalletCode,
        //                RoadWay = taskOld.Roadway,
        //                SourceAddress = taskOld.CurrentAddress,
        //                TargetAddress = taskOld.TargetAddress,
        //                TaskState = taskOld.TaskState.Value,
        //                Id = 0,
        //                TaskType = taskOld.TaskType,
        //            };
        //            return content.OK(data: taskDTO);
        //        }
        //        var area = _areaInfoRepository.QueryFirst(x => x.AreaID == 2);
        //        var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == position);
        //        TrayCellsStatusDto trayCells = CreateTrayCellsStatusDto(area, palletCode);
        //        content = await GetTrayCellStatusAsync(trayCells);
        //        if (!content.Status) return content;
        //        ConsoleHelper.WriteErrorLine(content.ToJsonString());
        //        var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString());
        //        if (!result.Success) return content.Error(result.MOMMessage);
        //        if (result.SerialNos.Count > 0)
        //        {
        //            var boxing = CreateBoxingInfo(result, palletCode);
        //            if (boxing == null) return content.Error("组盘失败");
        //            // èŽ·å–å·¥è‰ºè·¯çº¿
        //            ProcessApplyDto process = await GetProcessApplyAsync(result);
        //            // èµ‹å€¼ä¸Šä½è½¯ä»¶åç§°å’Œè®¾å¤‡ç¼–码
        //            process.Software = area.Spare3;
        //            process.EquipmentCode = area.Spare2;
        //            content = await _processApplyService.GetProcessApplyAsync(process);
        //            if (!content.Status) return content.Error("工艺申请失败");
        //            var resultProcessApply = JsonConvert.DeserializeObject<ResultProcessApply>(content.Data.ToString());
        //            if (!resultProcessApply.Success) return content.Error("工艺申请失败");
        //            var number = resultProcessApply.ProcessInfo.Where(x => x.ProcessCode.Contains(boxing.ProcessCode)).FirstOrDefault().Number.ToInt32();
        //            foreach (var item in resultProcessApply.ProcessInfo)
        //            {
        //                if (item.Number.ToInt32() == number + 1)
        //                {
        //                    boxing.NextProcessCode = item.ProcessCode;
        //                }
        //            }
        //            var location = await GetLocationDistributeAsync(station.Roadway);
        //            ConsoleHelper.WriteErrorLine(location.ToJsonString());
        //            // åˆ›å»ºæ–°ä»»åŠ¡å®žä¾‹
        //            var task = new Dt_Task
        //            {
        //                CurrentAddress = station.stationLocation,
        //                Grade = 1,
        //                Roadway = station.Roadway,
        //                TargetAddress = location.LocationCode,
        //                Dispatchertime = DateTime.Now,
        //                MaterialNo = "",
        //                NextAddress = location.LocationCode,
        //                OrderNo = null,
        //                PalletCode = palletCode,
        //                SourceAddress = position,
        //                TaskState = (int)TaskInStatusEnum.Line_InFinish,
        //                TaskType = (int)TaskInboundTypeEnum.Inbound,
        //                TaskNum = await BaseDal.GetTaskNo(),
        //                Creater = "Systeam"
        //            };
        //            // åˆ›å»ºWMS任务
        //            WMSTaskDTO taskDTO = new WMSTaskDTO()
        //            {
        //                TaskNum = task.TaskNum.Value,
        //                Grade = 1,
        //                PalletCode = task.PalletCode,
        //                RoadWay = task.Roadway,
        //                SourceAddress = task.SourceAddress,
        //                TargetAddress = task.TargetAddress,
        //                TaskState = task.TaskState.Value,
        //                Id = 0,
        //                TaskType = task.TaskType,
        //            };
        //            await _unitOfWorkManage.UseTranAsync(async () =>
        //            {
        //                // æ·»åŠ ä»»åŠ¡åˆ°æ•°æ®åº“
        //                await BaseDal.AddDataAsync(task);
        //                // æ›´æ–°åº“存位置状态为不可用
        //                location.LocationStatus = (int)LocationEnum.InStockDisable;
        //                await _locationRepository.UpdateDataAsync(location);
        //                await _boxingInfoRepository.AddDataNavAsync(boxing);
        //            });
        //            content.OK(data: taskDTO);
        //        }
        //        else
        //            content.Error(result.MOMMessage);
        //    }
        //    else
        //    {
        //        // TODO质检回库
        //        var area = _areaInfoRepository.QueryFirst(x => x.AreaID == 2);
        //    }
        //}
        //catch (Exception ex)
        //{
        //    content.Error(ex.Message);
        //}
        //return content;
        #endregion é™ç½®å¼‚常口入库
        WebResponseContent content = new WebResponseContent();
        try
        {
            // æŸ¥è¯¢åº“存信息
            var stockInfo = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == palletCode);
            if (stockInfo == null)
            {
                var taskOld = BaseDal.QueryFirst(x => x.PalletCode == palletCode);
                if (taskOld != null)
                {
                    // åˆ›å»ºWMS任务
                    WMSTaskDTO taskDTO = CreateWMSTaskDTO(taskOld);
                    return content.OK(data: taskDTO);
                }
                var area = _areaInfoRepository.QueryFirst(x => x.AreaID == 2);
                var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == position);
                TrayCellsStatusDto trayCells = CreateTrayCellsStatusDto(area, palletCode);
                content = await GetTrayCellStatusAsync(trayCells);
                if (!content.Status) return content;
                ConsoleHelper.WriteErrorLine(content.ToJsonString());
                var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString());
                if (result == null) return content.Error(result?.MOMMessage ?? "Deserialization error");
                if (result.SerialNos.Count > 0)
                {
                    var boxing = CreateBoxingInfo(result, palletCode);
                    if (boxing == null) return content.Error("组盘失败");
                    // èŽ·å–å·¥è‰ºè·¯çº¿
                    ProcessApplyDto process = await GetProcessApplyAsync(result);
                    // èµ‹å€¼ä¸Šä½è½¯ä»¶åç§°å’Œè®¾å¤‡ç¼–码
                    process.Software = area.Spare3;
                    process.EquipmentCode = area.Spare2;
                    content = await _processApplyService.GetProcessApplyAsync(process);
                    if (!content.Status) return content.Error("工艺申请失败");
                    var resultProcessApply = JsonConvert.DeserializeObject<ResultProcessApply>(content.Data.ToString()) as ResultProcessApply;
                    if (resultProcessApply == null || !resultProcessApply.Success) return content.Error("工艺申请失败");
                    var number = resultProcessApply.ProcessInfo.Where(x => x.ProcessCode.Contains(boxing.ProcessCode)).FirstOrDefault()?.Number.ToInt32() ?? 0;
                    foreach (var item in resultProcessApply.ProcessInfo)
                    {
                        if (item.Number.ToInt32() == number + 1)
                        {
                            boxing.NextProcessCode = item.ProcessCode;
                        }
                    }
                    var location = await GetLocationDistributeAsync(station.Roadway);
                    ConsoleHelper.WriteErrorLine(location.ToJsonString());
                    // åˆ›å»ºæ–°ä»»åŠ¡å®žä¾‹
                    var task = new Dt_Task
                    {
                        CurrentAddress = station.stationLocation,
                        Grade = 1,
                        Roadway = station.Roadway,
                        TargetAddress = location.LocationCode,
                        Dispatchertime = DateTime.Now,
                        MaterialNo = "",
                        NextAddress = location.LocationCode,
                        OrderNo = null,
                        PalletCode = palletCode,
                        SourceAddress = position,
                        TaskState = (int)TaskInStatusEnum.Line_InFinish,
                        TaskType = (int)TaskInboundTypeEnum.Inbound,
                        TaskNum = await BaseDal.GetTaskNo(),
                        Creater = "System",
                        ProductionLine = result.ProductionLine,
                        ProcessCode = result.ProcessCode,
                    };
                    // åˆ›å»ºWMS任务
                    WMSTaskDTO taskDTO = CreateWMSTaskDTO(task);
                    await _unitOfWorkManage.UseTranAsync(async () =>
                    {
                        // æ·»åŠ ä»»åŠ¡åˆ°æ•°æ®åº“
                        await BaseDal.AddDataAsync(task);
                        // æ›´æ–°åº“存位置状态为不可用
                        location.LocationStatus = (int)LocationEnum.Lock;
                        await _locationRepository.UpdateDataAsync(location);
                        await _boxingInfoRepository.AddDataNavAsync(boxing);
                    });
                    content.OK(data: taskDTO);
                }
                else
                {
                    var location = await GetLocationDistributeAsync(station.Roadway);
                    var task = new Dt_Task
                    {
                        CurrentAddress = station.stationLocation,
                        Grade = 1,
                        Roadway = station.Roadway,
                        TargetAddress = location.LocationCode,
                        Dispatchertime = DateTime.Now,
                        MaterialNo = "",
                        NextAddress = location.LocationCode,
                        OrderNo = null,
                        PalletCode = palletCode,
                        SourceAddress = position,
                        TaskState = (int)TaskInStatusEnum.Line_InFinish,
                        TaskType = (int)TaskInboundTypeEnum.InTray,
                        TaskNum = await BaseDal.GetTaskNo(),
                        Creater = "System",
                        ProductionLine = result.ProductionLine,
                        ProcessCode = result.ProcessCode,
                    };
                    // åˆ›å»ºWMS任务
                    WMSTaskDTO taskDTO = CreateWMSTaskDTO(task);
                    await _unitOfWorkManage.UseTranAsync(async () =>
                    {
                        // æ·»åŠ ä»»åŠ¡åˆ°æ•°æ®åº“
                        await BaseDal.AddDataAsync(task);
                        // æ›´æ–°åº“存位置状态为不可用
                        location.LocationStatus = (int)LocationEnum.Lock;
                        await _locationRepository.UpdateDataAsync(location);
                    });
                    content.OK(data: taskDTO);
                }
            }
            else
            {
                // TODO质检回库
                var area = _areaInfoRepository.QueryFirst(x => x.AreaID == 2);
            }
        }
        catch (Exception ex)
        {
            // æ›´è¯¦ç»†çš„æ—¥å¿—记录,可使用日志框架替换 Console.WriteLine
            Console.WriteLine($"Error in CreateAndSendInboundTask: {ex.Message}");
            content.Error(ex.Message);
        }
        return content;
    }
    private WMSTaskDTO CreateWMSTaskDTO(object source)
    {
        if (source is Dt_Task taskOld)
        {
            return new WMSTaskDTO()
            {
                TaskNum = taskOld.TaskNum.Value,
                Grade = 1,
                PalletCode = taskOld.PalletCode,
                RoadWay = taskOld.Roadway,
                SourceAddress = taskOld.SourceAddress,
                TargetAddress = taskOld.TargetAddress,
                TaskState = taskOld.TaskState.Value,
                Id = 0,
                TaskType = taskOld.TaskType,
                ProductionLine = taskOld.ProductionLine
            };
        }
        else if (source is Dt_Task task)
        {
            return new WMSTaskDTO()
            {
                TaskNum = task.TaskNum.Value,
                Grade = 1,
                PalletCode = task.PalletCode,
                RoadWay = task.Roadway,
                SourceAddress = task.SourceAddress,
                TargetAddress = task.TargetAddress,
                TaskState = task.TaskState.Value,
                Id = 0,
                TaskType = task.TaskType,
                ProductionLine = task.ProductionLine
            };
        }
        else
        {
            throw new ArgumentException("Invalid source object type for WMSTaskDTO creation.");
        }
    }
    #endregion å¤–部接口方法
    #region  é™ç½®æŸ¥è¯¢å®žæ‰˜
    public async Task<WebResponseContent> QueryStockInfoForRealTrayJZAsync(string ProductLine, string PalletCode)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            var deviceCode = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>()
                .Where(x => x.DeviceStatus == "1")
                .Where(x => x.DeviceCode.Contains("JZSC"))
                .ToList().Select(x => x.DeviceCode).ToList();
            var result = await _stockInfoRepository.Db.Queryable<DtStockInfo>()
                .Where(x=> x.IsFull == true) // è¿‡æ»¤æ¡ä»¶
                .WhereIF(!ProductLine.IsNullOrEmpty(), x => x.ProductionLine == ProductLine)
                .Includes(x => x.LocationInfo)
                .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo))
                .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId==2 && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) // è¿‡æ»¤æ¡ä»¶
                .Includes(x => x.StockInfoDetails)
                .OrderBy(x => x.OutboundTime) // æŽ’序
                .FirstAsync();
            if (result.IsNullOrEmpty())
                content.Error();
            else
                content.OK();
            LogFactory.GetLog($"静置查询实盘库存{ProductLine}").Info(true, $"托盘号:{JsonConvert.SerializeObject(result.PalletCode)}-----产线{JsonConvert.SerializeObject(result.ProductionLine)}");
        }
        catch (Exception ex)
        {
            return content.Error(ex.Message);
        }
        return content;
    }
    #endregion
    #endregion å¤–部接口方法
    #region å†…部调用方法
    /// <summary>
    /// åˆ›å»ºä¸€ä¸ªæ–°çš„任务
    /// </summary>
    /// <param name="model">任务模型</param>
    /// <returns>创建的任务</returns>
    public async Task<Dt_Task> Create(Dt_Task model)
    {
        return await BaseDal.Create(model);
    }
    /// <summary>
    /// æ‰¹é‡åˆ›å»ºä»»åŠ¡
    /// </summary>
    /// <param name="models">任务模型列表</param>
    /// <returns>是否创建成功</returns>
    public async Task<bool> Create(List<Dt_Task> models)
    {
        return await BaseDal.Create(models);
    }
    /// <summary>
    /// åˆ é™¤ä¸€ä¸ªä»»åŠ¡
    /// </summary>
    /// <param name="id">任务ID</param>
    /// <returns>是否删除成功</returns>
    public async Task<bool> Delete(int id)
    {
        return await BaseDal.Delete(id);
    }
    /// <summary>
    /// æ‰¹é‡åˆ é™¤ä»»åŠ¡
    /// </summary>
    /// <param name="ids">任务ID列表</param>
    /// <returns>是否删除成功</returns>
    public async Task<bool> Delete(List<int> ids)
    {
        return await BaseDal.Delete(ids);
    }
    public override WebResponseContent DeleteData(object[] key)
    {
        WebResponseContent content = new WebResponseContent();
        // åˆ›å»ºåŽ†å²ä»»åŠ¡å®žä¾‹æ¨¡åž‹
        try
        {
            Dt_Task task = BaseDal.QueryFirst(x => x.TaskId == Convert.ToInt32(key[0]));
            if (task == null)
            {
                return content.Error("未找到任务信息!");
            }
            var taskHtyNG = CreateHistoricalTask(task, true);
            // æ‰§è¡Œæ•°æ®åº“事务
            // æ·»åŠ åŽ†å²ä»»åŠ¡
            var isTaskHtyAdd = _task_HtyRepository.AddData(taskHtyNG) > 0;
            // åˆ é™¤ä»»åŠ¡æ•°æ®
            var isTaskDelete = BaseDal.Delete(task.TaskId);
            return content.OK("删除成功!");
        }
        catch (Exception ex)
        {
            return content.Error("删除任务异常:" + ex.Message);
        }
    }
    /// <summary>
    /// é€šè¿‡ID获取任务
    /// </summary>
    /// <param name="id">任务ID</param>
    /// <returns>任务模型</returns>
    public async Task<Dt_Task> GetById(int id)
    {
        return await BaseDal.GetById(id);
    }
    /// <summary>
    /// èŽ·å–æ‰€æœ‰ä»»åŠ¡åˆ—è¡¨
    /// </summary>
    /// <returns>任务模型列表</returns>
    public async Task<List<Dt_Task>> GetList()
    {
        return await BaseDal.GetList();
    }
    /// <summary>
    /// æ ¹æ®å‡ºåº“订单ID获取任务列表
    /// </summary>
    /// <param name="outOrderId">出库订单ID</param>
    /// <returns>任务模型列表</returns>
    public async Task<List<Dt_Task>> GetListByOutOrder(int outOrderId)
    {
        return await BaseDal.GetListByOutOrder(outOrderId);
    }
    /// <summary>
    /// æ ¹æ®å‡ºåº“订单ID和状态获取任务列表
    /// </summary>
    /// <param name="outOrderId">出库订单ID</param>
    /// <param name="status">任务状态</param>
    /// <returns>任务模型列表</returns>
    public async Task<List<Dt_Task>> GetListByOutOrderAndStatus(int outOrderId, int status)
    {
        return await BaseDal.GetListByOutOrderAndStatus(outOrderId, status);
    }
    /// <summary>
    /// æ ¹æ®çŠ¶æ€èŽ·å–ä»»åŠ¡åˆ—è¡¨
    /// </summary>
    /// <param name="status">任务状态</param>
    /// <returns>任务模型列表</returns>
    public async Task<List<Dt_Task>> GetListByStatus(int status)
    {
        return await BaseDal.GetListByStatus(status);
    }
    /// <summary>
    /// æ›´æ–°ä¸€ä¸ªä»»åŠ¡
    /// </summary>
    /// <param name="model">任务模型</param>
    /// <returns>是否更新成功</returns>
    public async Task<bool> Update(Dt_Task model)
    {
        return await BaseDal.UpdateDataAsync(model);
    }
    /// <summary>
    /// æ‰¹é‡æ›´æ–°ä»»åŠ¡
    /// </summary>
    /// <param name="models">任务模型列表</param>
    /// <returns>是否更新成功</returns>
    public async Task<bool> Update(List<Dt_Task> models)
    {
        return await BaseDal.UpdateDataAsync(models);
    }
    /// <summary>
    /// æ£€æŸ¥ä»»åŠ¡æ˜¯å¦å­˜åœ¨
    /// </summary>
    /// <param name="palletCode">托盘编码</param>
    /// <returns>任务是否存在</returns>
    public bool IsExist(string palletCode)
    {
        return Db.Queryable<Dt_Task>().Any(x => x.PalletCode == palletCode);
    }
    /// <summary>
    /// æ ¹æ®è´§ä½ID获取任务
    /// </summary>
    /// <param name="locationID"></param>
    /// <returns></returns>
    public async Task<Dt_Task> GetByLocation(string locationID)
    {
        return await BaseDal.QueryFirstAsync(x => x.SourceAddress == locationID);
    }
    /// <summary>
    /// æ ¹æ®ä»»åŠ¡å·èŽ·å–ä»»åŠ¡
    /// </summary>
    /// <param name="taskNum"></param>
    /// <returns></returns>
    public async Task<Dt_Task> GetByTaskNum(int taskNum)
    {
        return await BaseDal.QueryFirstAsync(x => x.TaskNum == taskNum);
    }
    #endregion å†…部调用方法
    #region private å†…部方法
    /// <summary>
    /// åˆ›å»ºåŽ†å²ä»»åŠ¡è®°å½•
    /// </summary>
    /// <param name="task"></param>
    /// <returns></returns>
    private Dt_Task_Hty CreateHistoricalTask(Dt_Task task, bool isHand = false)
    {
        // æ›´æ–°ä»»åŠ¡çŠ¶æ€
        task.TaskState = task.TaskType > 199 ? (int)TaskInStatusEnum.InFinish : (int)TaskOutStatusEnum.OutFinish;
        task.CurrentAddress = task.NextAddress;
        // åˆ›å»ºåŽ†å²ä»»åŠ¡
        var taskHty = _mapper.Map<Dt_Task_Hty>(task);
        taskHty.FinishTime = DateTime.Now;
        taskHty.TaskId = 0;
        taskHty.OperateType = isHand ? (int)OperateTypeEnum.人工删除 : App.User.UserName != null ? (int)OperateTypeEnum.人工完成 : (int)OperateTypeEnum.自动完成;
        taskHty.SourceId = task.TaskId;
        if (isHand)
        {
            taskHty.Creater = App.User.UserName != null ? App.User.UserName : "System";
        }
        taskHty.TaskState = task.TaskType > 199 ? (int)TaskInStatusEnum.InFinish : (int)TaskOutStatusEnum.OutFinish;
        return taskHty;
    }
    /// <summary>
    /// æ›´æ–°åº“存位置
    /// </summary>
    /// <param name="stock">库存对象</param>
    /// <param name="toLocation">目标位置</param>
    // æ›´æ–°åº“存和位置信息
    private (DtStockInfo, DtLocationInfo, DtLocationInfo) UpdateStockLocation(DtStockInfo stock, Dt_Task task)
    {
        //修改来源库位和 ç›®æ ‡åº“位状态
        var fromLocation = _locationRepository.QueryFirst(x => x.LocationCode == task.SourceAddress && x.RoadwayNo == task.Roadway);
        fromLocation.LocationStatus = LocationEnum.Free.ObjToInt();
        var toLocation = _locationRepository.QueryFirst(x => x.LocationCode == task.SourceAddress && x.RoadwayNo == task.Roadway);
        toLocation.LocationStatus = LocationEnum.InStock.ObjToInt();
        // å°†åº“存位置设置为目标位置
        stock.LocationCode = task.TargetAddress;
        // è¿”回更新后的库存和位置信息
        return (stock, fromLocation, toLocation);
    }
    /// <summary>
    /// æ‰§è¡Œæ•°æ®åº“事务
    /// </summary>
    /// <param name="stock">库存对象</param>
    /// <param name="taskHty">历史任务对象</param>
    /// <param name="taskId">任务ID</param>
    /// <returns></returns>
    private async Task<bool> ExecuteTransaction(DtStockInfo stock, Dt_Task_Hty taskHty, DtLocationInfo locationInfo, int taskId, DtBoxingInfo boxingInfo = null)
    {
        _unitOfWorkManage.BeginTran();
        try
        {
            var isUpdateStock = true;
            var isDeleteBoxing = true;
            if (taskHty.TaskType == (int)TaskTypeEnum.Outbound)
            {
                // æ›´æ–°åº“å­˜
                isUpdateStock = await _stockInfoRepository.UpdateDataAsync(stock);
            }
            else
            {
                // æ·»åŠ åº“å­˜
                isUpdateStock = await _stockInfoRepository.AddDataNavAsync(stock);
                if (boxingInfo != null)
                {
                    isDeleteBoxing = await _boxingInfoRepository.Db.DeleteNav<DtBoxingInfo>(x => x.Id == boxingInfo.Id)
                                            .Include(x => x.BoxingInfoDetails)
                                            .ExecuteCommandAsync();
                }
            }
            #region æ›´æ–°åº“存信息(暂时不需要)
            //if (stock.IsFull)
            //{
            //    // æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„库存信息
            //    var stocks = _stockInfoRepository.QueryData(x => x.AreaCode == stock.AreaCode && x.ProductionLine == stock.ProductionLine && x.SpecialParameterDuration != stock.SpecialParameterDuration);
            //    // æŸ¥è¯¢ä»»åŠ¡ä¿¡æ¯
            //    var tasks = BaseDal.QueryData(x => x.PalletCode != stock.PalletCode && x.ProductionLine == stock.ProductionLine).Select(x => x.PalletCode).ToList();
            //    if (stocks != null && stocks.Count > 0)
            //    {
            //        // è¿‡æ»¤å‡ºéœ€è¦æ›´æ–°çš„库存信息
            //        var stocksToUpdate = stocks.Where(item => !tasks.Contains(item.PalletCode)).ToList();
            //        foreach (var item in stocksToUpdate)
            //        {
            //            // æ›´æ–°åº“存信息的特定参数
            //            item.SpecialParameterDuration = stock.SpecialParameterDuration;
            //            item.ParameterInfos = stock.ParameterInfos;
            //            item.OutboundTime = Convert.ToDateTime(item.LinedProcessFeedbackTime == null ? item.CreateDate : item.LinedProcessFeedbackTime).AddHours(Convert.ToDouble(stock.SpecialParameterDuration));
            //        }
            //        if (stocksToUpdate.Count > 0)
            //        {
            //            // å¼‚步更新库存信息
            //            var isUpdates = await _stockInfoRepository.UpdateDataAsync(stocksToUpdate);
            //        }
            //    }
            //}
            #endregion
            // æ·»åŠ åŽ†å²ä»»åŠ¡
            var isTaskHtyAdd = await _task_HtyRepository.AddDataAsync(taskHty) > 0;
            // ä¿®æ”¹ç§»åº“前货位状态
            var isUpdateLoc = _locationRepository.UpdateData(locationInfo);
            // åˆ é™¤ä»»åŠ¡æ•°æ®
            var isTaskDelete = await Delete(taskId);
            // æäº¤æˆ–回滚事务
            if (isUpdateStock && isTaskHtyAdd && isTaskDelete && isUpdateLoc && isDeleteBoxing)
            {
                LogFactory.GetLog("任务完成").InfoFormat(true, "任务完成", $"事务处理完成,提交事务。添加历史任务:{isTaskHtyAdd},删除任务数据:{isTaskDelete},更新或添加库存:{isUpdateStock},修改移库前货位状态:{isUpdateLoc}");
                _unitOfWorkManage.CommitTran();
                return true;
            }
            else
            {
                LogFactory.GetLog("任务完成").InfoFormat(true, "任务完成", $"数据处理失败,请检查数据是否正确,数据回滚。添加历史任务:{isTaskHtyAdd},删除任务数据:{isTaskDelete},更新库存:{isUpdateStock},修改移库前货位状态:{isUpdateLoc}");
                _unitOfWorkManage.RollbackTran();
                return false;
            }
        }
        catch (Exception err)
        {
            LogFactory.GetLog("任务完成").InfoFormat(true, $"任务完成,系统异常,异常信息:{err.Message}", "无参数");
            _unitOfWorkManage.RollbackTran();
            throw; // æŠ›å‡ºå¼‚常以便外部捕获
        }
    }
    #region ä»»åŠ¡è¯·æ±‚æ–¹æ³•
    private static readonly SemaphoreSlim _semaphoreUpdate = new SemaphoreSlim(1, 1);
    // æ›´æ–°ä»»åŠ¡è´§ä½
    private async Task<WebResponseContent> UpdateExistingTask(RequestTaskDto input, Dt_Task task)
    {
        await _semaphoreUpdate.WaitAsync();
        try
        {
            if (task == null)
            {
                return new WebResponseContent().Error("任务对象为空");
            }
            try
            {
                // åˆ›å»ºWebResponseContent对象
                var content = new WebResponseContent();
                // èŽ·å–ç›®æ ‡åœ°å€å’Œæ›´æ–°ä»»åŠ¡çŠ¶æ€
                input.Position = Regex.Replace(input.Position, @"-(\d+)", "");
                if (Convert.ToInt32(input.Position) > 1999)
                {
                    input.Position = (Convert.ToInt32(input.Position) - 1000).ToString();
                }
                if (task.TaskType == (int)TaskInboundTypeEnum.InNG)
                {
                    // TODO æ ¹æ®å··é“查找对应NG口,现在默认去静置堆垛机的异常口货位号
                    task.CurrentAddress = input.Position;
                    task.TargetAddress = "002-021-000";
                    task.NextAddress = "002-021-000";
                    task.TaskState = (int)TaskInStatusEnum.Line_InFinish;
                    bool isResult = await BaseDal.UpdateDataAsync(task);
                    return content.OK(data: task);
                }
                else if (task.TaskType == (int)TaskInboundTypeEnum.InQuality)
                {
                    var stockInfo = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == input.PalletCode);
                    task.CurrentAddress = input.Position;
                    task.TargetAddress = stockInfo.LocationInfo.LocationCode;
                    task.NextAddress = stockInfo.LocationInfo.LocationCode;
                    task.TaskState = (int)TaskInStatusEnum.Line_InFinish;
                    bool isResult = await BaseDal.UpdateDataAsync(task);
                    return content.OK(data: task);
                }
                else
                {
                    var location = await GetLocationDistributeAsync(task.Roadway);
                    if (location == null)
                    {
                        return content.Error("无法获取货位信息");
                    }
                    string toAddress = location.LocationCode;
                    int taskState = (int)TaskInStatusEnum.Line_InFinish;
                    int beforeStatus = location.LocationStatus;
                    // æ›´æ–°è´§ä½ä¿¡æ¯
                    location.LocationStatus = (int)LocationEnum.Lock;
                    // æ›´æ–°ä»»åŠ¡ä¿¡æ¯
                    MapTaskProperties(task, input, toAddress, taskState);
                    // å¼€å§‹äº‹åŠ¡
                    var isResult = await UpdateTaskAsync(task, location, beforeStatus);
                    if (!isResult)
                    {
                        _unitOfWorkManage.RollbackTran();
                        return content.Error("更新任务失败");
                    }
                    // æäº¤äº‹åŠ¡
                    _unitOfWorkManage.CommitTran();
                    return content.OK(data: task);
                }
            }
            catch (Exception ex)
            {
                // å›žæ»šäº‹åŠ¡
                _unitOfWorkManage.RollbackTran();
                // è¿™é‡Œå¯ä»¥æ·»åŠ æ—¥å¿—è®°å½•
                return new WebResponseContent().Error($"更新任务时发生错误: {ex.Message}");
            }
        }
        catch (Exception)
        {
            throw;
        }
        finally { _semaphoreUpdate.Release(); }
    }
    private void MapTaskProperties(Dt_Task task, RequestTaskDto input, string toAddress, int taskState)
    {
        task.CurrentAddress = input.Position;
        task.TargetAddress = toAddress;
        task.NextAddress = toAddress;
        task.TaskState = taskState;
    }
    // ä¿®æ”¹ä»»åŠ¡
    private async Task<bool> UpdateTaskAsync(Dt_Task task, DtLocationInfo location, int beforeStatus)
    {
        bool isResult = await BaseDal.UpdateDataAsync(task);
        bool isTaskDetail = await _taskExecuteDetailRepository.AddDetailAsync(task, false, TaskDescription.GetTaskUpdateDescription(task.PalletCode, task.CurrentAddress, task.TargetAddress, TaskInStatusEnum.Line_InFinish.GetIntegralRuleTypeEnumDesc()));
        LocationChangeRecordDto changeRecordDto = new LocationChangeRecordDto()
        {
            AfterStatus = location.LocationStatus,
            BeforeStatus = beforeStatus,
            TaskNum = task.TaskNum.Value,
            LocationId = location.Id,
            LocationCode = location.LocationCode,
            ChangeType = (int)StatusChangeTypeEnum.AutomaticStorage,
        };
        bool isUpdateChange = _locationStatusChangeRecordRepository.AddStatusChangeRecord(changeRecordDto);
        bool isUpdateLo = await _locationRepository.UpdateDataAsync(location);
        return isResult && isUpdateLo && isTaskDetail;
    }
    /// <summary>
    /// åˆ›å»ºæ–°ä»»åŠ¡
    /// </summary>
    /// <param name="input">请求模型</param>
    /// <param name="process">巷道</param>
    /// <param name="flag">标识(0-入库,1-空托盘入库,2-NG入库,3-出库)</param>
    /// <returns></returns>
    private async Task<WebResponseContent> CreateNewTask(RequestTaskDto input, string productionLine, string processCode, List<string> process = null, int flag = 0)
    {
        WebResponseContent content = new WebResponseContent();
        // èŽ·å–ç›®æ ‡åœ°å€
        //string ToAddress = await GetRoadWayAsync(process);
        string ToAddress = string.Empty;
        if (flag < 2)
            ToAddress = await GetRoadWayAsync(process);
        else
            ToAddress = process[0];
        // åˆ›å»ºæ–°ä»»åŠ¡å®žä¾‹
        var task = new Dt_Task
        {
            CurrentAddress = input.Position,
            Grade = 1,
            Roadway = ToAddress,
            TargetAddress = ToAddress,
            Dispatchertime = DateTime.Now,
            MaterialNo = "",
            NextAddress = ToAddress,
            OrderNo = null,
            PalletCode = input.PalletCode,
            SourceAddress = input.Position,
            TaskState = flag == 3 ? (int)TaskOutStatusEnum.OutNew : (int)TaskInStatusEnum.InNew,
            TaskType = flag == 0 ? (int)TaskInboundTypeEnum.Inbound : flag == 1 ? (int)TaskInboundTypeEnum.InTray : flag == 2 ? (int)TaskInboundTypeEnum.InNG : (int)TaskOutboundTypeEnum.Outbound,
            TaskNum = await BaseDal.GetTaskNo(),
            Creater = "System",
            ProductionLine = productionLine,
            ProcessCode = processCode
        };
        // å°è¯•添加新任务
        var taskId = await BaseDal.AddDataAsync(task);
        bool isResult = taskId > 0;
        if (isResult)
        {
            task.TaskId = taskId;
            isResult = await _taskExecuteDetailRepository.AddDetailAsync(task, false, TaskDescription.GetTaskUpdateDescription(input.PalletCode, input.Position, ToAddress, TaskInStatusEnum.InNew.GetIntegralRuleTypeEnumDesc()));
            //var location = _locationRepository.QueryFirst(x => x.RoadwayNo == task.Roadway && x.LocationCode == task.TargetAddress);
            //location.LocationStatus = (int)LocationEnum.Lock;
            //var isLocation = _locationRepository.UpdateData(location);
            if (isResult)
            {
                // åˆ›å»ºWMS任务
                WMSTaskDTO taskDTO = new WMSTaskDTO()
                {
                    TaskNum = task.TaskNum.Value,
                    Grade = 1,
                    PalletCode = task.PalletCode,
                    RoadWay = task.Roadway,
                    SourceAddress = task.SourceAddress,
                    TargetAddress = task.TargetAddress,
                    TaskState = task.TaskState.Value,
                    Id = 0,
                    TaskType = task.TaskType,
                    ProductionLine = task.ProductionLine
                };
                content.OK(data: taskDTO);
            }
            else
                content.Error("添加任务失败");
        }
        else
            content.Error("添加任务失败");
        return content;
    }
    private static readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1);
    /// <summary>
    /// æŸ¥æ‰¾è´§ä½
    /// </summary>
    /// <param name="IsFull">区域主键</param>
    /// <param name="roadWay">巷道</param>
    /// <returns></returns>
    public async Task<DtLocationInfo> GetLocationDistributeAsync(string roadWay, bool IsFull = true)
    {
        #region èŽ·å–è´§ä½
        await _semaphore.WaitAsync();
        try
        {
            List<DtLocationInfo> locations;
            if (IsFull)
            {
                locations = await _locationRepository.QueryDataAsync(x => x.LocationStatus == (int)LocationEnum.Free && x.RoadwayNo == roadWay && x.EnalbeStatus == (int)EnableEnum.Enable);
            }
            else
            {
                locations = await _locationRepository.QueryDataAsync(x => x.LocationStatus == (int)LocationEnum.Free && x.RoadwayNo == roadWay && x.EnalbeStatus == (int)EnableEnum.Enable);
            }
            if (locations == null)
            {
                return null;
            }
            return locations.OrderBy(x => x.Layer).ThenBy(x => x.Column).ThenBy(x => x.Row).FirstOrDefault();
        }
        catch (Exception err)
        {
            Console.WriteLine(err.Message.ToString());
            return null;
        }
        finally
        {
            _semaphore.Release();
        }
        #endregion èŽ·å–è´§ä½
    }
    /// <summary>
    /// æ ¹æ®å··é“获取巷道或站台
    /// </summary>
    /// <returns></returns>
    public async Task<string> GetRoadWayAsync(List<string> process)
    {
        var deviceCode = await SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>()
             .Where(x => x.DeviceStatus == 1.ToString() && process.Contains(x.DeviceCode))
             .Select(x => x.DeviceCode).ToListAsync();
        var minGroup = _locationRepository.QueryData(x => deviceCode.Contains(x.RoadwayNo) && x.LocationStatus == (int)LocationEnum.Free)
             .GroupBy(x => x.RoadwayNo)
             .OrderByDescending(g => g.Count()) // æ ¹æ®æ¯ä¸ªç»„的元素数量排序
             .ToList(); // å–出数量最多的组
        Dictionary<string, int> result = new Dictionary<string, int>();
        foreach (var item in minGroup)
        {
            var number = BaseDal.QueryData(x => x.TargetAddress == item.Key).Count();
            result.Add(item.Key, item.Count() - number);
        }
        string minRoadwayNo = result.OrderByDescending(x => x.Value).FirstOrDefault().Key; // æ•°é‡æœ€å¤šçš„组的Key
        return minRoadwayNo;
    }
    /// <summary>
    /// æ ¹æ®åŒºåŸŸèŽ·å–å··é“æˆ–ç«™å°
    /// </summary>
    /// <returns></returns>
    public async Task<string> GetRoadWayAsync(int areaCode)
    {
        var minGroup = _locationRepository.QueryData(x => x.AreaId == areaCode && x.LocationStatus == (int)LocationEnum.Free)
            .GroupBy(x => x.RoadwayNo)
             .OrderBy(g => g.Count()) // æ ¹æ®æ¯ä¸ªç»„的元素数量排序
             .ToList(); // å–出数量最少的组
        Dictionary<string, int> result = new Dictionary<string, int>();
        foreach (var item in minGroup)
        {
            var number = BaseDal.QueryData(x => x.TargetAddress == item.Key).Count();
            result.Add(item.Key, item.Count() - number);
        }
        string minRoadwayNo = result.OrderByDescending(x => x.Value).FirstOrDefault().Key; // æ•°é‡æœ€å¤šçš„组的Key
        return minRoadwayNo;
    }
    // æ–°çš„出库错误处理逻辑
    private async Task HandleOutBoundError(DtStockInfo stock, Dt_Task task)
    {
        WebResponseContent content = new WebResponseContent();
        var area = _areaInfoRepository.QueryFirst(x => x.AreaCode == stock.AreaCode);
        if (area == null)
        {
            throw new Exception("未找到对应的库区信息");
        }
        var trayCells = new TrayCellsStatusDto
        {
            Software = area.Spare3,
            TrayBarcode = task.PalletCode,
            EquipmentCode = area.Spare2,
            SceneType = area.Spare4
        };
        content = await _cellStateService.GetTrayCellStatusAsync(trayCells);
        if (!content.Status) return;
        var ResultTray = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString());
        if (ResultTray.SerialNos.Count > 0)
        {
            var parameterInfo = GetParameterInfo(stock);
            var outHours = CalculateOutHours(stock);
            var isNG = outHours > parameterInfo.LowerSpecificationsLimit.ToDouble()
                        && outHours < parameterInfo.UpperSpecificationsLimit.ToDouble();
            var defectCode = !isNG ? "TQCK" : string.Empty;
            var outputDto = CreateAgingOutputDto(area, stock, ResultTray, parameterInfo, outHours, defectCode);
            content = await _agingInOrOutInputService.GetOCVOutputAsync(outputDto);
            var result = JsonConvert.DeserializeObject<BasicResult>(content.Data.ToString());
            if (!result.Success)
                task.Remark = "NG";
        }
    }
    // è®¡ç®—出库小时的方法
    private double CalculateOutHours(DtStockInfo stock) =>
        (DateTime.Now - Convert.ToDateTime(stock.LinedProcessFeedbackTime ?? stock.CreateDate.ToString())).TotalHours;
    // ç”Ÿæˆ AgingOutputDto çš„封装方法
    private AgingOutputDto CreateAgingOutputDto(Dt_AreaInfo area, DtStockInfo stock, ResultTrayCellsStatus resultTray,
        ParameterInfo parameterInfo, double outHours, string defectCode)
    {
        return new AgingOutputDto
        {
            OpFlag = 1,
            Software = area.Spare3,
            EquipmentCode = area.Spare2,
            TrayBarcode = stock.PalletCode,
            SerialNos = resultTray.SerialNos.Select(x => new SerialNoOutDto
            {
                SlotNo = x.PositionNo,
                SerialNo = x.SerialNo,
                SerialNoResult = true,
                ParameterInfo = new List<ParameterInfoOutput>
                {
                    new ParameterInfoOutput
                    {
                        Value = outHours.ToString(),
                        ParameterCode = parameterInfo.ParameterCode,
                        ParameterDesc = parameterInfo.Description,
                        ParameterResult  = "OK",
                        TargetValue = parameterInfo.TargetValue,
                        LowerLimit = parameterInfo.LowerSpecificationsLimit,
                        UpperLimit = parameterInfo.UpperSpecificationsLimit,
                        DefectCode = defectCode,
                    }
                }
            }).ToList()
        };
    }
    // èŽ·å–å‚æ•°ä¿¡æ¯çš„è¾…åŠ©æ–¹æ³•
    private ParameterInfo GetParameterInfo(DtStockInfo stock) =>
        JsonConvert.DeserializeObject<List<ParameterInfo>>(stock.ParameterInfos)
            .FirstOrDefault(y => y.Description.Contains("时间"));
    #endregion ä»»åŠ¡è¯·æ±‚æ–¹æ³•
    #endregion private å†…部方法
}
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1290 @@
using Masuit.Tools;
using SqlSugar;
using WIDESEA_Common.CustomModels;
using WIDESEA_Core.Const;
using WIDESEA_DTO.MOM;
using WIDESEA_DTO.WMS;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.Models;
namespace WIDESEA_StorageTaskServices;
public partial class Dt_TaskService : ServiceBase<Dt_Task, IDt_TaskRepository>, IDt_TaskService
{
    #region è¯·æ±‚任务入库
    /// <summary>
    /// è¯·æ±‚入库
    /// </summary>
    /// <param name="input">请求模型</param>
    /// <returns>包含任务信息的响应内容</returns>
    public async Task<WebResponseContent> RequestInTask(RequestTaskDto input)
    {
        Console.WriteLine($"{JsonConvert.SerializeObject(input)}");
        // åˆ›å»ºä¸€ä¸ªWebResponseContent对象
        WebResponseContent content = new WebResponseContent();
        try
        {
            // è°ƒç”¨BaseDal.QueryFirstAsync方法,查询任务
            var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == input.PalletCode);
            if (task != null)
            {
                //if (task.TaskState == (int)TaskInStatusEnum.InNew)
                {
                    // åˆ›å»ºWMS任务
                    //WMSTaskDTO taskDTO = new WMSTaskDTO()
                    //{
                    //    TaskNum = task.TaskNum.Value,
                    //    Grade = 1,
                    //    PalletCode = task.PalletCode,
                    //    RoadWay = task.Roadway,
                    //    SourceAddress = task.SourceAddress,
                    //    TargetAddress = task.TargetAddress,
                    //    TaskState = task.TaskState.Value,
                    //    Id = 0,
                    //    TaskType = task.TaskType,
                    //    ProductionLine = task.ProductionLine,
                    //};
                    WMSTaskDTO taskDTO = CreateTaskDTO(task);
                    return content.OK(data: taskDTO);
                }
            }
            // è°ƒç”¨CreateNewTask方法,创建新任务
            content = await CreateNewTask(input);
        }
        catch (Exception err)
        {
            // å¦‚果发生异常,则调用content.Error方法,记录错误信息,并输出错误信息
            content.Error(err.Message);
            Console.WriteLine(err.Message);
        }
        // è¿”回content
        return content;
    }
    /// <summary>
    ///
    /// </summary>
    /// <param name="input">请求参数</param>
    /// <param name="flag">实框空框标识</param>
    /// <returns></returns>
    private async Task<WebResponseContent> CreateNewTask(RequestTaskDto input)
    {
        try
        {
            WebResponseContent content = new WebResponseContent();
            var stationinfo = _stationManagerRepository.QueryFirst(x => x.stationChildCode == input.Position);
            if (stationinfo == null) throw new Exception("未知站台");
            if (stationinfo.stationType != 7)
            {
                if (input.PalletCode == null || input.PalletCode.Trim() == "")
                    return content.Error($"【{stationinfo.remark}】托盘条码为空");
            }
            var task = await CreateNewTaskByStation(input, stationinfo);
            // å°è¯•添加新任务
            if (task == null) return content.Error();
            var taskId = await BaseDal.AddDataAsync(task);
            bool isResult = taskId > 0;
            if (isResult)
            {
                // åˆ›å»ºWMS任务
                WMSTaskDTO taskDTO = new WMSTaskDTO()
                {
                    TaskNum = task.TaskNum.Value,
                    Grade = task.Grade.Value,
                    PalletCode = task.PalletCode,
                    RoadWay = task.Roadway,
                    SourceAddress = task.SourceAddress,
                    TargetAddress = task.TargetAddress,
                    TaskState = task.TaskState.Value,
                    Id = 0,
                    TaskType = task.TaskType,
                    ProductionLine = task.ProductionLine
                };
                content.OK(data: taskDTO);
            }
            else
                content.Error("添加任务失败");
            return content;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
    /// <summary>
    /// æ ¹æ®è¯·æ±‚参数和站台 åšä¸åŒä»»åŠ¡å¤„ç†
    /// </summary>
    /// <param name="input"></param>
    /// <param name="stationManager"></param>
    /// <returns></returns>
    /// <exception cref="Exception"></exception>
    private async Task<Dt_Task> CreateNewTaskByStation(RequestTaskDto input, Dt_StationManager stationManager)
    {
        try
        {
            Dt_Task task = null;
            switch (stationManager.stationType)
            {
                case 6:
                case 1:
                    task = await CreateInTaskAsync(input, stationManager); break;
                //case 2:
                case 3:  //异常排出给WCS处理
                         //case 4:
                case 5:
                    task = await CreateInToOutTaskAsync(input, stationManager); break;
                case 7:
                    task = await CreateEmptyOutTaskAsync(input, stationManager); break;
                case 15:
                    task = await CheckAbnormalTaskAsync(input, stationManager); break;
                default:
                    throw new Exception("未知站台类型");
            }
            return task;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
    #region ç›´æŽ¥å‡ºåº“任务
    private async Task<Dt_Task> CreateInToOutTaskAsync(RequestTaskDto input, Dt_StationManager stationManager)
    {
        try
        {
            //if (stationManager.stationType != 5) throw new Exception("错误的调取");
            input.EquiCodeMOM = "24MEJQ11-1006-1";
            // åˆ›å»ºä¸€ä¸ªTrayCellsStatusDto对象,并赋值
            TrayCellsStatusDto trayCells = new TrayCellsStatusDto()
            {
                Software = "WMS",
                TrayBarcode = input.PalletCode,
                //EquipmentCode = "EQ_CWJZ01"
                EquipmentCode = input.EquiCodeMOM
            };
            // è°ƒç”¨GetTrayCellStatusAsync方法,获取整盘电芯
            WebResponseContent content = await GetTrayCellStatusAsync(trayCells);
            // å¦‚果状态为false,则返回content
            if (!content.Status) throw new Exception(content.Message);
            // ç»„盘信息
            // å°†content.Data转换为ResultTrayCellsStatus对象
            var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString());
            if (!result.Success)
            {
                var taskNG = new Dt_Task
                {
                    CurrentAddress = input.Position,
                    Grade = 1,
                    Roadway = input.Roadways,
                    TargetAddress = stationManager.stationNGLocation,
                    Dispatchertime = DateTime.Now,
                    MaterialNo = "",
                    NextAddress = stationManager.stationNGChildCode,
                    OrderNo = null,
                    PalletCode = input.PalletCode,
                    SourceAddress = stationManager.stationLocation,
                    TaskState = (int)TaskInStatusEnum.Line_InFinish,
                    TaskType = (int)TaskOutboundTypeEnum.InToOut,
                    TaskNum = await BaseDal.GetTaskNo(),
                    Creater = "System",
                    ProductionLine = result.ProductionLine,
                    ProcessCode = result.ProcessCode,
                };
                return taskNG;
            }
            if (result.SerialNos.Count <= 0)
            {
                ConsoleHelper.WriteErrorLine(result.MOMMessage);
                if (stationManager.stationType != 3)
                {
                    var taskNG = new Dt_Task
                    {
                        CurrentAddress = input.Position,
                        Grade = 3,
                        Roadway = input.Roadways,
                        TargetAddress = stationManager.stationNGLocation,
                        Dispatchertime = DateTime.Now,
                        MaterialNo = "",
                        NextAddress = stationManager.stationNGChildCode,
                        OrderNo = null,
                        PalletCode = input.PalletCode,
                        SourceAddress = stationManager.stationLocation,
                        TaskState = (int)TaskInStatusEnum.Line_InFinish,
                        TaskType = (int)TaskOutboundTypeEnum.InToOut,
                        TaskNum = await BaseDal.GetTaskNo(),
                        Creater = "System"
                    };
                    return taskNG;
                }
                else
                {
                    //无电芯 â†’ å½“空框? è¿˜æ˜¯è¿”回异常?
                    return null;
                }
            }
            // å¤„理异常电芯情况
            var serialNosError = result.SerialNos.Where(x => x.SerialNoStatus != 1 && x.SerialNoStatus != 4).ToList();
            if (serialNosError.Count > 0)
            {
                if (stationManager.stationType != 3)
                {
                    var taskNG = new Dt_Task
                    {
                        CurrentAddress = input.Position,
                        Grade = 1,
                        Roadway = input.Roadways,
                        TargetAddress = stationManager.stationNGLocation,
                        Dispatchertime = DateTime.Now,
                        MaterialNo = "",
                        NextAddress = stationManager.stationNGChildCode,
                        OrderNo = null,
                        PalletCode = input.PalletCode,
                        SourceAddress = stationManager.stationLocation,
                        TaskState = (int)TaskInStatusEnum.Line_InFinish,
                        TaskType = (int)TaskOutboundTypeEnum.InToOut,
                        TaskNum = await BaseDal.GetTaskNo(),
                        Creater = "System",
                        ProductionLine = result.ProductionLine,
                        ProcessCode = result.ProcessCode,
                    };
                    return taskNG;
                }
                else
                {
                    Console.WriteLine($"站台{stationManager.stationChildCode}MOM返回电芯异常:{result.MOMMessage}");
                    return null;
                }
            }
            //else
            //{
            //    throw new Exception($"站台{stationManager.stationChildCode}MOM返回电芯异常:{result.MOMMessage}");
            //}
            var targetStation = _stationManagerRepository.QueryFirst(x => x.stationPLC == stationManager.stationPLC && x.Roadway == stationManager.Roadway && x.stationType == 2);
            var task = new Dt_Task
            {
                CurrentAddress = input.Position,
                Grade = 3,
                Roadway = input.Roadways,
                TargetAddress = targetStation.stationLocation,
                Dispatchertime = DateTime.Now,
                MaterialNo = "",
                NextAddress = input.Roadways,
                OrderNo = null,
                PalletCode = input.PalletCode,
                SourceAddress = stationManager.stationLocation,
                TaskState = (int)TaskInStatusEnum.Line_InFinish,
                TaskType = (int)TaskOutboundTypeEnum.InToOut,
                TaskNum = await BaseDal.GetTaskNo(),
                Creater = "System",
                ProductionLine = result.ProductionLine,
                ProcessCode = result.ProcessCode,
            };
            return task;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
    #endregion ç›´æŽ¥å‡ºåº“任务
    #region å…¥åº“任务
    private async Task<Dt_Task> CreateInTaskAsync(RequestTaskDto input, Dt_StationManager stationManager)
    {
        if (stationManager.stationType != 1 && stationManager.stationType != 6) throw new Exception("错误的调取");
        DtLocationInfo locationInfo = null;
        if (stationManager.stationType == 1 && stationManager.Roadway.Contains("FR"))
        {
            locationInfo = await RequestLocation(input, true);
        }
        else
        {
            locationInfo = await RequestLocation(input);
        }
        //DtLocationInfo locationInfo = await RequestLocation(input);
        if (locationInfo == null) throw new Exception("库位已满");
        // åˆ›å»ºä¸€ä¸ªTrayCellsStatusDto对象,并赋值
        TrayCellsStatusDto trayCells = new TrayCellsStatusDto()
        {
            Software = "WMS",
            TrayBarcode = input.PalletCode,
            //EquipmentCode = "EQ_CWJZ01"
            EquipmentCode = input.EquiCodeMOM
        };
        // è°ƒç”¨GetTrayCellStatusAsync方法,获取整盘电芯
        WebResponseContent content = await GetTrayCellStatusAsync(trayCells);
        // å¦‚果状态为false,则返回content
        if (!content.Status) throw new Exception(content.Message);
        // å°†content.Data转换为ResultTrayCellsStatus对象
        var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString());
        if (stationManager.stationType == 6 && result.ProductionLine.IsNullOrEmpty())
        {
            ConsoleHelper.WriteErrorLine($"当前托盘无产线,联系MOM添加产线");
            throw new Exception("当前托盘无产线,联系MOM添加产线");
        }
        if (stationManager.stationType == 1)
        {
            #region
            if (result.SerialNos.Count <= 0)
            {
                ConsoleHelper.WriteErrorLine(result.MOMMessage);
                var taskNG = new Dt_Task
                {
                    CurrentAddress = input.Position,
                    Grade = 1,
                    Roadway = input.Roadways,
                    TargetAddress = stationManager.stationNGLocation,
                    Dispatchertime = DateTime.Now,
                    MaterialNo = "",
                    NextAddress = stationManager.stationNGChildCode,
                    OrderNo = null,
                    PalletCode = input.PalletCode,
                    SourceAddress = stationManager.stationLocation,
                    TaskState = (int)TaskInStatusEnum.Line_InFinish,
                    TaskType = (int)TaskOutboundTypeEnum.InToOut,
                    TaskNum = await BaseDal.GetTaskNo(),
                    Creater = "System",
                    ProductionLine = result.ProductionLine,
                    ProcessCode = result.ProcessCode,
                };
                return taskNG;
            }
            //Console.WriteLine(result);
            //// TODO èŽ·å–æœ¬åœ°æ–™æ¡†å±žæ€§ä¸Žæ•´ç›˜ç”µèŠ¯å±žæ€§èŽ·å–çš„å€¼è¿›è¡Œå¯¹æ¯”ï¼Œå¦‚æžœä¸€è‡´åˆ™ç»§ç»­ï¼Œå¦åˆ™è¿”å›žé”™è¯¯ä¿¡æ¯
            ////var productions = await _productionRepository.QueryDataAsync(x => result.TrayBarcodePropertys.Select(x => x.TrayBarcodeProperty).ToList().Contains(x.TrayBarcodeProperty));
            ////if (productions.Count <= 0)
            ////    return content.Error("料框属性不存在");
            //// è°ƒç”¨CreateBoxingInfo方法,创建组盘信息
            var boxing = CreateBoxingInfo(result, input.PalletCode);
            if (boxing == null) throw new Exception("组盘失败");
            //// è°ƒç”¨GetProcessApplyAsync方法,获取工艺路线
            //ProcessApplyDto process = await GetProcessApplyAsync(input, result);
            //// å¦‚æžœprocess为null,则返回content
            //if (process == null) return content;
            //// è°ƒç”¨_processApplyService.GetProcessApplyAsync方法,获取工艺申请
            //content = await _processApplyService.GetProcessApplyAsync(process);
            //// å¦‚果状态为false,则返回null
            //if (!content.Status) return content.Error("工艺申请失败");
            ////// è°ƒç”¨GetProcessResponseAsync方法,获取工艺响应
            ////var processResponse = await GetProcessResponseAsync(process, input.Position);
            var isBox = await _boxingInfoRepository.AddDataNavAsync(boxing);
            #endregion å…¥åº“任务
        }
        var task = new Dt_Task
        {
            CurrentAddress = input.Position,
            Grade = 1,
            Roadway = input.Roadways,
            TargetAddress = locationInfo.LocationCode,
            Dispatchertime = DateTime.Now,
            MaterialNo = "",
            NextAddress = input.Roadways,
            OrderNo = null,
            PalletCode = input.PalletCode,
            SourceAddress = stationManager.stationLocation,
            TaskState = (int)TaskInStatusEnum.Line_InFinish,
            TaskType = stationManager.stationType == 1 ? (int)TaskInboundTypeEnum.Inbound : (int)TaskInboundTypeEnum.InTray,
            TaskNum = await BaseDal.GetTaskNo(),
            Creater = "System",
            ProductionLine = result.ProductionLine,
            ProcessCode = result.ProcessCode,
        };
        int lastStatus = locationInfo.LocationStatus;
        ConsoleHelper.WriteSuccessLine($"修改前:" + lastStatus.ToString());
        locationInfo.LocationStatus = (int)LocationEnum.FreeDisable;
        ConsoleHelper.WriteSuccessLine($"修改后:" + locationInfo.LocationStatus.ToString());
        await UpdateLocationAsync(locationInfo);
        _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(locationInfo, lastStatus, (int)StatusChangeTypeEnum.AutomaticStorage, task.TaskNum);
        return task;
    }
    #endregion è¯·æ±‚任务入库
    #region åº“位分配
    #region èŽ·å–è´§ä½
    /// <summary>
    ///
    /// </summary>
    /// <param name="requestTask">请求参数</param>
    /// <param name="isCheckRequest">是否未检测库位类型</param>
    /// <returns></returns>
    private async Task<DtLocationInfo> RequestLocation(RequestTaskDto requestTask, bool isCheckRequest = false)
    {
        try
        {
            List<DtLocationInfo> locations;
            if (isCheckRequest)
            {
                locations = await _locationRepository.QueryDataAsync(x => x.LocationStatus == (int)LocationEnum.Free && x.RoadwayNo == requestTask.Roadways && x.EnalbeStatus == 1 && x.LocationType == 2 && x.Remark == "1");
            }
            else
            {
                locations = await _locationRepository.QueryDataAsync(x => x.LocationStatus == (int)LocationEnum.Distribute && x.RoadwayNo == requestTask.Roadways && x.EnalbeStatus == 1 && x.LocationType == 1);
                if (locations.IsNullOrEmpty())
                {
                    locations = await _locationRepository.QueryDataAsync(x => x.LocationStatus == (int)LocationEnum.Free && x.RoadwayNo == requestTask.Roadways && x.EnalbeStatus == 1 && x.LocationType == 1);
                }
            }
            if (locations == null)
            {
                return null;
            }
            return locations.OrderBy(x => x.Layer).ThenBy(x => x.Column).ThenBy(x => x.Row).FirstOrDefault();
        }
        catch (Exception err)
        {
            Console.WriteLine(err.Message.ToString());
            return null;
        }
    }
    #endregion èŽ·å–è´§ä½
    #region å¼‚常口入库获取库位
    private async Task<DtLocationInfo> RequestLocationByAbnormal(RequestTaskDto requestTask, bool isCheckRequest = false)
    {
        try
        {
            List<DtLocationInfo> locations;
            if (isCheckRequest)
            {
                locations = await _locationRepository.QueryDataAsync(x => x.LocationStatus == (int)LocationEnum.Free && x.RoadwayNo == requestTask.Roadways && x.EnalbeStatus == 1 && x.LocationType == 2 && x.Remark == "1");
            }
            else
            {
                locations = await _locationRepository.QueryDataAsync(x => x.LocationStatus == (int)LocationEnum.Free && x.RoadwayNo == requestTask.Roadways && x.EnalbeStatus == 1 && x.LocationType == 1);
            }
            if (locations == null)
            {
                return null;
            }
            return locations.OrderBy(x => x.Layer).ThenBy(x => x.Column).ThenBy(x => x.Row).FirstOrDefault();
        }
        catch (Exception err)
        {
            Console.WriteLine(err.Message.ToString());
            return null;
        }
    }
    #endregion å¼‚常口入库获取库位
    #endregion åº“位分配
    // èŽ·å–å·¥è‰ºç”³è¯·
    private Task<ProcessApplyDto> GetProcessApplyAsync(RequestTaskDto input, ResultTrayCellsStatus content)
    {
        // åˆ›å»ºä¸€ä¸ªProcessApplyDto对象,并赋值
        return Task.FromResult(new ProcessApplyDto()
        {
            EquipmentCode = input.EquiCodeMOM,
            Software = "WMS",
            //WipOrderNo = result.BindCode,"
            SerialNos = content.SerialNos.Select(item => new SerialNos
            {
                SerialNo = item.SerialNo
            }).ToList()
        });
    }
    #endregion è¯·æ±‚任务入库
    #region åˆ›å»ºç©ºæ¡†å‡ºåº“任务
    public async Task<Dt_Task> CreateEmptyOutTaskAsync(RequestTaskDto input, Dt_StationManager stationManager)
    {
        try
        {
            if (stationManager.stationType != 7) throw new Exception("错误的调取");
            var stockInfo = await QueryStockInfoForEmptyTrayFRAsync("CWSC1", "10086", input.ProductionLine);
            if (stockInfo == null) return null;
            var task = new Dt_Task
            {
                CurrentAddress = input.Position,
                Grade = 2,
                Roadway = stockInfo.LocationInfo.RoadwayNo,
                TargetAddress = stationManager.stationLocation,
                Dispatchertime = DateTime.Now,
                MaterialNo = "",
                NextAddress = input.Position,
                OrderNo = null,
                PalletCode = stockInfo.PalletCode,
                SourceAddress = stockInfo.LocationCode,
                TaskState = (int)TaskOutStatusEnum.OutNew,
                TaskType = (int)TaskOutboundTypeEnum.OutTray,
                TaskNum = await BaseDal.GetTaskNo(),
                Creater = "System",
                ProductionLine = stockInfo.ProductionLine,
            };
            var location = _locationRepository.QueryFirst(x => x.Id == stockInfo.LocationId);
            if (location == null) return null;
            location.LocationStatus = (int)LocationEnum.InStockDisable;
            _locationRepository.UpdateData(location);
            return task;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
    #endregion
    #region ç›´æŽ¥å‡ºåº“任务完成
    public async Task<WebResponseContent> CompleteInToOutTaskAsync(Dt_Task task)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            //添加历史
            var taskHty = CreateHistoricalTask(task);
            // æ·»åŠ åŽ†å²ä»»åŠ¡
            var isTaskHtyAdd = await _task_HtyRepository.AddDataAsync(taskHty) > 0;
            //删除任务
            BaseDal.DeleteData(task);
            return content.OK();
        }
        catch (Exception ex)
        {
            return content.Error(ex.Message);
        }
    }
    #endregion
    #region å¼‚常口任务检测
    /// <summary>
    /// å¼‚常排出口入库校验  æ‰€æœ‰å¼‚常交给WCS做原地址NG处理
    /// </summary>
    /// <param name="input"></param>
    /// <param name="stationManager"></param>
    /// <returns></returns>
    /// <exception cref="Exception"></exception>
    public async Task<Dt_Task> CheckAbnormalTaskAsync(RequestTaskDto input, Dt_StationManager stationManager)
    {
        try
        {
            if (stationManager.stationType != 15) throw new Exception("");
            // åˆ›å»ºä¸€ä¸ªTrayCellsStatusDto对象,并赋值
            TrayCellsStatusDto trayCells = new TrayCellsStatusDto()
            {
                Software = "WMS",
                TrayBarcode = input.PalletCode,
                //EquipmentCode = "EQ_CWJZ01"
                EquipmentCode = input.EquiCodeMOM
            };
            // è°ƒç”¨GetTrayCellStatusAsync方法,获取整盘电芯
            WebResponseContent content = await GetTrayCellStatusAsync(trayCells);
            // å¦‚果状态为false,则返回content
            if (!content.Status)  //获取整盘电芯数据, å¦‚异常 ä½¿ç”¨ç©ºæ¡†ç±»åž‹å…¥åº“
            {
                ConsoleHelper.WriteErrorLine(content.Message);
                throw new Exception("MOM整盘电芯属性获取异常");
            }
            // æ·»åŠ ç»„ç›˜ä¿¡æ¯
            // å°†content.Data转换为ResultTrayCellsStatus对象
            var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString());
            if (result.SerialNos.Count <= 0)  //如调用成功 ä½†ç”µèŠ¯ä¸º0则定为空盘
            {
                DtLocationInfo EmptylocationInfo = await RequestLocationByAbnormal(input);
                if (EmptylocationInfo == null) throw new Exception("库位已满");
                var Epmtytask = new Dt_Task
                {
                    CurrentAddress = input.Position,
                    Grade = 4,  //优先处理异常排出口的任务 é˜²æ­¢æ­£å¸¸éœ€æŽ’出异常口的任务堵线
                    Roadway = input.Roadways,
                    TargetAddress = EmptylocationInfo.LocationCode,
                    Dispatchertime = DateTime.Now,
                    MaterialNo = "",
                    NextAddress = input.Roadways,
                    OrderNo = null,
                    PalletCode = input.PalletCode,
                    SourceAddress = stationManager.stationLocation,
                    TaskState = (int)TaskInStatusEnum.Line_InFinish,
                    TaskType = (int)TaskInboundTypeEnum.InTray,
                    TaskNum = await BaseDal.GetTaskNo(),
                    Creater = "System",
                    ProductionLine = result.ProductionLine,
                    ProcessCode = result.ProcessCode,
                };
                return Epmtytask;
            }
            //Console.WriteLine(result);
            //// TODO èŽ·å–æœ¬åœ°æ–™æ¡†å±žæ€§ä¸Žæ•´ç›˜ç”µèŠ¯å±žæ€§èŽ·å–çš„å€¼è¿›è¡Œå¯¹æ¯”ï¼Œå¦‚æžœä¸€è‡´åˆ™ç»§ç»­ï¼Œå¦åˆ™è¿”å›žé”™è¯¯ä¿¡æ¯
            ////var productions = await _productionRepository.QueryDataAsync(x => result.TrayBarcodePropertys.Select(x => x.TrayBarcodeProperty).ToList().Contains(x.TrayBarcodeProperty));
            ////if (productions.Count <= 0)
            ////    return content.Error("料框属性不存在");
            //// è°ƒç”¨CreateBoxingInfo方法,创建组盘信息
            var boxing = CreateBoxingInfo(result, input.PalletCode);
            if (boxing == null) throw new Exception("组盘失败");
            if (!stationManager.Roadway.Contains("FR"))  //非分容库区 å…¥åº“验证工艺路线
            {
                // è°ƒç”¨GetProcessApplyAsync方法,获取工艺路线
                ProcessApplyDto process = await GetProcessApplyAsync(input, result);
                // å¦‚æžœprocess为null,则返回content
                if (process == null) throw new Exception("工艺请求参数异常");
                // è°ƒç”¨_processApplyService.GetProcessApplyAsync方法,获取工艺申请
                content = await _processApplyService.GetProcessApplyAsync(process);
                // å¦‚果状态为false,则返回null
                if (!content.Status) throw new Exception("工艺申请失败");
            }
            ////// è°ƒç”¨GetProcessResponseAsync方法,获取工艺响应
            ////var processResponse = await GetProcessResponseAsync(process, input.Position);
            DtLocationInfo locationInfo = null;
            if (stationManager.Roadway.Contains("FR"))
            {
                locationInfo = await RequestLocation(input, true);
            }
            else
            {
                locationInfo = await RequestLocationByAbnormal(input);
            }
            //DtLocationInfo locationInfo = await RequestLocation(input);
            if (locationInfo == null) throw new Exception("库位已满");
            var task = new Dt_Task
            {
                CurrentAddress = input.Position,
                Grade = 3,  //优先处理异常排出口的任务 é˜²æ­¢æ­£å¸¸éœ€æŽ’出异常口的任务堵线
                Roadway = input.Roadways,
                TargetAddress = locationInfo.LocationCode,
                Dispatchertime = DateTime.Now,
                MaterialNo = "",
                NextAddress = input.Roadways,
                OrderNo = null,
                PalletCode = input.PalletCode,
                SourceAddress = stationManager.stationLocation,
                TaskState = (int)TaskInStatusEnum.Line_InFinish,
                TaskType = (int)TaskInboundTypeEnum.Inbound,
                TaskNum = await BaseDal.GetTaskNo(),
                Creater = "System",
                ProductionLine = result.ProductionLine,
                ProcessCode = result.ProcessCode,
            };
            var isBox = await _boxingInfoRepository.AddDataNavAsync(boxing);
            int lastStatus = locationInfo.LocationStatus;
            ConsoleHelper.WriteSuccessLine($"修改前:" + lastStatus.ToString());
            locationInfo.LocationStatus = (int)LocationEnum.FreeDisable;
            ConsoleHelper.WriteSuccessLine($"修改后:" + locationInfo.LocationStatus.ToString());
            await UpdateLocationAsync(locationInfo);
            _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(locationInfo, lastStatus, (int)StatusChangeTypeEnum.AutomaticStorage, task.TaskNum);
            return task;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
    #endregion
    #region ç§»åº“任务事务
    private async Task<bool> ExecuteTransaction(DtStockInfo stock, Dt_Task_Hty taskHty, DtLocationInfo fromLocation, DtLocationInfo toLocation, int taskId)
    {
        _unitOfWorkManage.BeginTran();
        try
        {
            var isUpdateStock = _stockInfoRepository.UpdateData(stock);
            // æ·»åŠ åŽ†å²ä»»åŠ¡
            var isTaskHtyAdd = await _task_HtyRepository.AddDataAsync(taskHty) > 0;
            // ä¿®æ”¹ç§»åº“前货位状态
            var isUpdateLocF = _locationRepository.UpdateData(fromLocation);
            var isUpdateLocT = _locationRepository.UpdateData(toLocation);
            // åˆ é™¤ä»»åŠ¡æ•°æ®
            var isTaskDelete = await Delete(taskId);
            // æäº¤æˆ–回滚事务
            if (isUpdateStock && isTaskHtyAdd && isTaskDelete && isUpdateLocF && isUpdateLocT)
            {
                LogFactory.GetLog("任务完成").InfoFormat(true, "任务完成", $"事务处理完成,提交事务。添加历史任务:{isTaskHtyAdd},删除任务数据:{isTaskDelete},更新或添加库存:{isUpdateStock},修改移库前货位状态:{isUpdateLocF}");
                _unitOfWorkManage.CommitTran();
                return true;
            }
            else
            {
                LogFactory.GetLog("任务完成").InfoFormat(true, "任务完成", $"数据处理失败,请检查数据是否正确,数据回滚。添加历史任务:{isTaskHtyAdd},删除任务数据:{isTaskDelete},更新库存:{isUpdateStock},修改移库前货位状态:{isUpdateLocF}");
                _unitOfWorkManage.RollbackTran();
                return false;
            }
        }
        catch (Exception err)
        {
            LogFactory.GetLog("任务完成").InfoFormat(true, $"任务完成,系统异常,异常信息:{err.Message}", "无参数");
            _unitOfWorkManage.RollbackTran();
            throw new Exception(err.Message); // æŠ›å‡ºå¼‚常以便外部捕获
        }
    }
    #endregion MyRegion
    #region æ£€æµ‹é«˜æ¸©åº“是否有可出库库存
    public WebResponseContent StockCheckingAsync()
    {
        WebResponseContent webResponseContent = new WebResponseContent();
        try
        {
            Task.Run(async () =>
            {
                while (true)
                {
                    try
                    {
                        Thread.Sleep(TimeSpan.FromMinutes(10));
                        var area = await _areaInfoRepository.QueryFirstAsync(x => x.AreaCode == "GWSC1");
                        var devices = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>()
                            .Where(x => x.DeviceStatus == "1")
                            .Where(x => x.DeviceCode.Contains("GWSC"))
                            .ToList();
                        var deviceCode = devices.Select(x => x.DeviceCode).ToList();
                        var stockInfo = await _stockInfoRepository.Db.Queryable<DtStockInfo>()
                             .Includes(x => x.LocationInfo) // é¢„加载LocationInfo
                             .Includes(x => x.StockInfoDetails) // é¢„加载StockInfoDetails
                             .Where(x => x.AreaCode == area.AreaCode && x.OutboundTime < DateTime.Now && x.IsFull == true) // è¿‡æ»¤æ¡ä»¶
                             .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID) // è¿‡æ»¤æ¡ä»¶
                             .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo))
                             .OrderBy(x => x.OutboundTime) // æŽ’序
                             .ToListAsync(); // èŽ·å–ç¬¬ä¸€ä¸ªå…ƒç´ 
                        if (stockInfo.Count <= 0) continue;
                        foreach (var item in stockInfo)
                        {
                            var hasTask = BaseDal.QueryFirst(x => x.PalletCode == item.PalletCode);
                            if (hasTask != null)
                            {
                                Console.WriteLine("已存在出库任务");
                                continue;
                            }
                            string position = string.Empty;
                            if (item.LocationInfo.RoadwayNo == "GWSC1")
                                position = "1059";
                            else
                                position = "1065";
                            var task = CreateTask(item, position, (int)TaskOutboundTypeEnum.Outbound);
                            task.NextAddress = "002-000-002";
                            // åˆ›å»ºä»»åŠ¡DTO
                            WMSTaskDTO taskDTO = CreateTaskDTO(task);
                            var configs = _configService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                            var wmsBase = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.WCSIPAddress)?.ConfigValue;
                            var ipAddress = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.ReceiveTask)?.ConfigValue;
                            if (wmsBase == null || ipAddress == null)
                            {
                                throw new InvalidOperationException("WMS IP æœªé…ç½®");
                            }
                            var wmsIpAddress = wmsBase + ipAddress;
                            var result = HttpHelper.PostAsync(wmsIpAddress, taskDTO.ToJsonString()).Result;
                            var content = JsonConvert.DeserializeObject<WebResponseContent>(result);
                            if (content.Status)
                            {
                                int lastStatus = item.LocationInfo.LocationStatus;
                                await BaseDal.AddDataAsync(task);
                                // æ›´æ–°åº“存位置状态为不可用
                                item.LocationInfo.LocationStatus = (int)LocationEnum.InStockDisable;
                                await _locationRepository.UpdateDataAsync(item.LocationInfo);
                                _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(item.LocationInfo, lastStatus, (int)StatusChangeTypeEnum.AutomaticDelivery, task.TaskNum);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            });
            return webResponseContent.OK();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message.ToString());
            return webResponseContent.Error(ex.Message);
        }
    }
    #endregion æ£€æµ‹é«˜æ¸©åº“是否有可出库库存
    #region å¸¸æ¸©è¡¥ç©ºæ‰˜ç›˜è‡³åˆ†å®¹
    private static readonly Dictionary<string, (int Count, DateTime LastRequestTime)> requestTrackerToCW = new();
    public async Task<WebResponseContent> GetFROutTrayToCW(RequestTaskDto taskDTO)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            //string requestKey = JsonConvert.SerializeObject(taskDTO);
            //// æ£€æŸ¥è¯·æ±‚次数和时间限制
            //if (requestTrackerToCW.TryGetValue(requestKey, out var requestInfo))
            //{
            //    if (requestInfo.Count > 5 && DateTime.Now < requestInfo.LastRequestTime.AddMinutes(2))
            //    {
            //        // å¦‚果请求次数超过限制且未超过10分钟,抛出异常
            //        throw new InvalidOperationException("请求次数已达到限制,请稍后再试。");
            //    }
            //}
            //// æ›´æ–°è¯·æ±‚跟踪信息
            //if (requestTrackerToCW.ContainsKey(requestKey))
            //{
            //    requestTrackerToCW[requestKey] = (requestInfo.Count + 1, DateTime.Now);
            //}
            //else
            //{
            //    requestTrackerToCW[requestKey] = (1, DateTime.Now);
            //}
            var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == taskDTO.Position && x.stationStatus == "1");
            var locations = _locationRepository.QueryData(x => x.RoadwayNo == station.Roadway && x.LocationStatus == (int)LocationEnum.Free && x.LocationType == 1);
            if (locations.Count > 10)
            {
                ConsoleHelper.WriteColorLine(locations.Count.ToString(), ConsoleColor.Blue);
                var location = locations.OrderBy(x => x.Layer).ThenBy(x => x.Column).ThenBy(x => x.Row).FirstOrDefault();
                var stockInfo = await QueryStockInfoForEmptyTrayFRAsync("CWSC1", "10086", taskDTO.ProductionLine);
                if (stockInfo != null)
                {
                    var task = CreateTask(stockInfo, taskDTO.Position, (int)TaskOutboundTypeEnum.OutTray);
                    // åˆ›å»ºä»»åŠ¡DTO
                    WMSTaskDTO wmsTask = CreateTaskDTO(task);
                    // æ›´æ–°åº“存位置状态为不可用
                    int lastStatus = location.LocationStatus;
                    stockInfo.LocationInfo.LocationStatus = (int)LocationEnum.InStockDisable;
                    location.LocationStatus = (int)LocationEnum.Distribute;
                    await _unitOfWorkManage.UseTranAsync(async () =>
                    {
                        await BaseDal.AddDataAsync(task);
                        await _locationRepository.UpdateDataAsync(stockInfo.LocationInfo);
                        await _locationRepository.UpdateDataAsync(location);
                    });
                    _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(location, lastStatus, (int)StatusChangeTypeEnum.AutomaticDelivery, task.TaskNum);
                    // è¿”回成功响应
                    //requestTrackerToCW.Remove(requestKey);
                    return content.OK(data: wmsTask);
                }
                else
                    content.Error("常温空托盘数量不足");
            }
        }
        catch (Exception ex)
        {
            content.Error(ex.Message);
        }
        return content;
    }
    /// <summary>
    /// æŸ¥è¯¢ç©ºç›˜åº“存信息
    /// </summary>
    private async Task<DtStockInfo> QueryStockInfoForEmptyTrayFRAsync(string areaCode, string position, string productLine)
    {
        var area = await _areaInfoRepository.QueryFirstAsync(x => x.AreaCode == areaCode);
        ConsoleHelper.WriteColorLine(position + "..." + areaCode, ConsoleColor.Magenta);
        var station = await _stationManagerRepository.QueryFirstAsync(x => x.stationChildCode == position && x.stationType == 17);
        ConsoleHelper.WriteColorLine(station.Roadway, ConsoleColor.Magenta);
        var stackers = station.Roadway.Split(',').ToList();
        var deviceCode = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>()
            .Where(x => x.DeviceStatus == "1")
            .Where(x => stackers.Contains(x.DeviceCode))
            .ToList().Select(x => x.DeviceCode).ToList();
        var result = await _stockInfoRepository.Db.Queryable<DtStockInfo>()
                                .Includes(x => x.LocationInfo)
                                .Includes(x => x.StockInfoDetails)
                                .Where(x => x.AreaCode == areaCode && x.IsFull == false && x.ProductionLine == productLine)
                                .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo))
                                .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) // è¿‡æ»¤æ¡ä»¶
                                .Where(x => x.StockInfoDetails.Any(y => y.MaterielCode == "空托盘"))
                                .OrderBy(x => x.CreateDate) // æŽ’序
                                .FirstAsync();
        if (result.IsNullOrEmpty())
            ConsoleHelper.WriteColorLine($"常温{productLine}空托盘库存不足", ConsoleColor.Red);
        return result;
    }
    #endregion
    #region  å¸¸æ¸©3出库至包装
    // ç”¨äºŽè¿½è¸ªæ¯ä¸ªè¯·æ±‚的调用次数和最后请求时间。
    private static readonly Dictionary<string, (int Count, DateTime LastRequestTime)> requestTracker = new();
    /// <summary>
    /// å¸¸æ¸©3出库至包装
    /// </summary>
    /// <param name="json"></param>
    /// <returns></returns>
    public async Task<WebResponseContent> RequestOutTaskToBZAsync(RequestTaskDto json)
    {
        WebResponseContent content = new WebResponseContent();
        try
        {
            Dt_StationManager station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == json.Position && x.stationType == 12 && x.stationArea == "Call");
            if (station == null) { throw new Exception($"未找到包装站台信息,请检查传入参数{json.Position}"); }
            var deviceCode = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>()
                .Where(x => x.DeviceStatus == "1")
                .Where(x => x.DeviceCode.Contains("CWSC")) // è¿‡æ»¤æ¡ä»¶
                .ToList().Select(x => x.DeviceCode).ToList();
            // ä¿®æ”¹åŽçš„æŸ¥è¯¢ä»£ç 
            var stockInfo = await _stockInfoRepository.Db.Queryable<DtStockInfo>()
                                .Includes(x => x.LocationInfo)
                                .Includes(x => x.StockInfoDetails)
                                .Where(x => x.ProductionLine == station.productLine)
                                .Where(x => x.AreaCode == "CWSC3" && x.IsFull == true)
                                // å¢žåР坹 LocationInfo çš„空值检查
                                .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock)
                                // å¢žåР坹 LocationInfo çš„空值检查
                                .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo))
                                .OrderBy(x => x.OutboundTime)
                                .FirstAsync();
            if (stockInfo.IsNullOrEmpty()) throw new Exception($"CWSC3库内{station.productLine}无满足条件的库存可出库");
            DtLocationInfo locationInfo = _locationRepository.QueryFirst(x => x.AreaId == 5 && x.LocationCode == stockInfo.LocationCode);
            Dt_StationManager OutStation = _stationManagerRepository.QueryFirst(x => x.stationPLC == "1005" && x.stationType == 10 && x.Roadway == locationInfo.RoadwayNo && x.stationStatus == "1");
            // åˆ›å»ºæ–°ä»»åŠ¡å®žä¾‹
            var task = new Dt_Task
            {
                CurrentAddress = stockInfo.LocationCode,
                Grade = 1,
                Roadway = locationInfo.RoadwayNo,
                TargetAddress = json.Position,
                Dispatchertime = DateTime.Now,
                MaterialNo = "",
                NextAddress = OutStation.stationChildCode,
                OrderNo = null,
                PalletCode = stockInfo.PalletCode,
                SourceAddress = stockInfo.LocationCode,
                TaskState = (int)TaskOutStatusEnum.OutNew,
                TaskType = (int)TaskOutboundTypeEnum.Outbound,
                TaskNum = await BaseDal.GetTaskNo(),
                Creater = "System",
                ProductionLine = stockInfo.ProductionLine,
                ProcessCode = stockInfo.ProcessCode,
            };
            WMSTaskDTO taskDTO = CreateTaskDTO(task);
            int lastStatus = locationInfo.LocationStatus;
            BaseDal.AddData(task);
            stockInfo.LocationInfo.LocationStatus = (int)LocationEnum.InStockDisable;
            _locationRepository.UpdateData(stockInfo.LocationInfo);
            _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(stockInfo.LocationInfo, lastStatus, (int)StatusChangeTypeEnum.AutomaticDelivery, task.TaskNum);
            return content.OK(data: taskDTO);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"CW3至包装出库异常:{ex.ToString()}");
            return content.Error($"失败:{ex.Message}");
        }
    }
    #endregion
    #region ç«è­¦å‡ºåº“
    public WebResponseContent EmergencyTask(object obj)
    {
        WebResponseContent content = new WebResponseContent();
        var emergencyTask = new DTSEmergencyTask();
        try
        {
            emergencyTask = JsonConvert.DeserializeObject<DTSEmergencyTask>(obj.ToString());
            if (emergencyTask == null) throw new Exception("火警参数为空");
            DtLocationInfo locationInfo = _locationRepository.QueryFirst(x => x.Row == emergencyTask.row && x.Column == emergencyTask.column && x.Layer == emergencyTask.layer && x.AreaId == emergencyTask.zone);
            if (locationInfo == null)
            {
                throw new Exception("未知库位");
            }
            //查找消防站台
            var station = _stationManagerRepository.QueryFirst(t => t.Roadway == locationInfo.RoadwayNo
                 && t.stationType == (int)StationManager.FireStation
                 /*&& t. == "Enable"*/);
            if (station == null)
            {
                throw new Exception("消防站台未配置!");
            }
            //查找库存信息
            var stockInfo = _stockInfoRepository.QueryFirst(x => x.LocationCode == locationInfo.LocationCode && x.LocationInfo.RoadwayNo == locationInfo.RoadwayNo);
            //托盘码
            string barcode = string.Empty;
            if (stockInfo != null)
            {
                barcode = stockInfo.PalletCode;
            }
            else
            {
                //无库存信息,生成随机托盘码
                barcode = "M" + DateTime.Now.ToString("MMddHHmmss") + "-" + new Random().Next(100, 1000);
            }
            Dt_Task fireTask = BaseDal.QueryFirst(x => x.TaskType == 500 && x.SourceAddress == locationInfo.LocationCode && x.Roadway == station.Roadway);
            if (fireTask != null)
            {
                throw new Exception("已添加火警出库任务");
            }
            int taskNum = BaseDal.GetTaskNo().Result;
            Dt_Task task = new Dt_Task
            {
                CreateDate = DateTime.Now,
                Creater = "DTS",
                CurrentAddress = locationInfo.LocationCode,
                Grade = 1,
                Dispatchertime = DateTime.Now,
                PalletCode = barcode,
                Roadway = station.Roadway,
                SourceAddress = locationInfo.LocationCode,
                TaskState = (int)TaskOutStatusEnum.OutNew,
                TaskType = 500,
                TargetAddress = station.stationLocation,
                NextAddress = station.stationChildCode,
                TaskNum = taskNum, //_taskRepository.GetTaskNo().Result,
                TaskId = 0,
            };
            // å°è¯•添加新任务
            WMSTaskDTO taskDTO = new WMSTaskDTO()
            {
                TaskNum = task.TaskNum.Value,
                Grade = 1,
                PalletCode = task.PalletCode,
                RoadWay = task.Roadway,
                SourceAddress = task.SourceAddress,
                TargetAddress = task.TargetAddress,
                TaskState = task.TaskState.Value,
                Id = 0,
                TaskType = 500,
            };
            var configs = _configService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
            var ipAddress = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.WCSIPAddress)?.ConfigValue;
            var ReceiveByWMSTask = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.ReceiveByWMSTask)?.ConfigValue;
            if (ReceiveByWMSTask == null || ipAddress == null)
            {
                throw new Exception("WMS IP æœªé…ç½®");
            }
            var wmsIpAddrss = ipAddress + ReceiveByWMSTask;
            var respon = HttpHelper.Post(wmsIpAddrss, JsonConvert.SerializeObject(taskDTO));
            if (respon != null)
            {
                WebResponseContent respone = JsonConvert.DeserializeObject<WebResponseContent>(respon.ToString());
                if (respone.Status)
                {
                    var taskId = BaseDal.AddData(task);
                }
                else
                {
                    throw new Exception("WCS处理失败:" + respone.Message);
                }
            }
            else
            {
                throw new Exception("请求处理失败");
            }
            LogFactory.GetLog("DTS火警出库").Info(true, $"\r\r--------------------------------------");
            LogFactory.GetLog("DTS火警出库").Info(true, obj.ToJsonString());
            return content.OK();
        }
        catch (Exception ex)
        {
            LogFactory.GetLog("DTS火警出库").Info(true, $"\r\r--------------------------------------");
            LogFactory.GetLog("DTS火警出库").Info(true, ex.Message);
            return content.Error(ex.Message);
        }
    }
    #endregion
    #region åˆ†å®¹ç©ºæ¡†å…¥åº“改为直接出库
    public async Task<WebResponseContent> SetEmptyOutbyInToOutAsync(RequestTaskDto request)
    {
        WebResponseContent content = new WebResponseContent();
        var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == request.PalletCode);
        if (!task.IsNullOrEmpty())
        {
            var fromStation = await _stationManagerRepository.QueryFirstAsync(x => x.stationChildCode == request.Position);
            var toStation = await _stationManagerRepository.QueryFirstAsync(x => x.stationType == 7 && x.productLine == fromStation.productLine && x.stationArea == fromStation.stationArea);
            if (!toStation.IsNullOrEmpty())
            {
                var location = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress && x.AreaId == int.Parse(fromStation.stationArea));
                task.TargetAddress = toStation.stationLocation;
                task.NextAddress = toStation.stationChildCode;
                task.Grade = 3;
                task.TaskType = (int)TaskOutboundTypeEnum.InToOut;
                task.TaskState = (int)TaskOutStatusEnum.OutNew;
                location.LocationStatus = (int)LocationEnum.Free;
                await _locationRepository.UpdateDataAsync(location);
                await BaseDal.UpdateDataAsync(task);
                return content.OK("成功");
            }
            else
            {
                ConsoleHelper.WriteErrorLine("分容空框入库改为直接出库:未找到对应站台");
                content.Error("未找到对应站台");
            }
        }
        else
        {
            ConsoleHelper.WriteErrorLine("分容空框入库改为直接出库:未找到任务");
            content.Error("未找到任务");
        }
        return content;
    }
    #endregion
    #region åˆ†å®¹ç©ºæ¡†å‡ºåº“改为直接出库
    /// <summary>
    /// åˆ†å®¹ç©ºæ¡†å‡ºåº“改为直接出库
    /// </summary>
    /// <param name="request"></param>
    /// <returns></returns>
    public async Task<WebResponseContent> SetEmptyOutbyInToOutOneAsync(RequestTaskDto request)
    {
        WebResponseContent content = new WebResponseContent();
        var task = await BaseDal.QueryFirstAsync(x => x.PalletCode == request.PalletCode);
        if (!task.IsNullOrEmpty())
        {
            var toStation = await _stationManagerRepository.QueryFirstAsync(x => x.stationChildCode == request.Position);
            var fromStation = await _stationManagerRepository.QueryFirstAsync(x => x.stationType == 6 && x.productLine == toStation.productLine && x.stationArea == toStation.stationArea);
            if (!fromStation.IsNullOrEmpty())
            {
                //var location = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress && x.AreaId == int.Parse(fromStation.stationArea));
                task.SourceAddress = toStation.stationLocation;
                task.CurrentAddress = toStation.stationChildCode;
                task.Grade = 3;
                task.TaskType = (int)TaskOutboundTypeEnum.InToOut;
                task.TaskState = (int)TaskOutStatusEnum.OutNew;
                //location.LocationStatus = (int)LocationEnum.Free;
                //await _locationRepository.UpdateDataAsync(location);
                await BaseDal.UpdateDataAsync(task);
                return content.OK("成功");
            }
            else
            {
                ConsoleHelper.WriteErrorLine("分容空框出库改为直接出库:未找到对应站台");
                content.Error("未找到对应站台");
            }
        }
        else
        {
            ConsoleHelper.WriteErrorLine("分容空框出库改为直接出库:未找到任务");
            content.Error("未找到任务");
        }
        return content;
    }
    #endregion
}
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/.config/dotnet-tools.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
{
  "version": 1,
  "isRoot": true,
  "tools": {
    "dotnet-ef": {
      "version": "8.0.6",
      "commands": [
        "dotnet-ef"
      ]
    }
  }
}
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -5,7 +5,7 @@
<Project>
  <PropertyGroup>
    <_PublishTargetUrl>E:\GET\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_WMSServer\bin\Debug\net6.0\publish\</_PublishTargetUrl>
    <History>True|2025-04-13T13:53:54.3630456Z||;True|2025-04-13T21:05:27.0963334+08:00||;True|2025-04-08T09:51:00.1295089+08:00||;True|2025-04-07T15:36:44.3718008+08:00||;True|2025-04-07T15:35:13.2684610+08:00||;True|2025-04-03T10:00:56.1299893+08:00||;True|2025-04-02T10:38:17.2340017+08:00||;True|2025-04-01T14:48:34.1671067+08:00||;True|2025-04-01T14:47:22.2881035+08:00||;True|2025-04-01T14:43:27.2800408+08:00||;True|2025-04-01T14:42:28.1987109+08:00||;True|2025-04-01T14:32:44.3686544+08:00||;True|2025-04-01T14:27:19.1197684+08:00||;True|2025-04-01T13:26:56.3796039+08:00||;True|2025-04-01T10:20:50.9479668+08:00||;True|2025-03-30T08:22:47.9431153+08:00||;True|2025-03-29T12:21:52.2204727+08:00||;True|2025-03-29T11:42:56.4404766+08:00||;True|2025-03-29T11:15:06.3696223+08:00||;True|2025-03-25T14:55:09.5690375+08:00||;True|2025-03-25T12:26:15.5805042+08:00||;True|2025-03-24T15:27:15.6778099+08:00||;True|2025-03-23T18:45:49.3752329+08:00||;True|2025-03-23T18:11:49.6069594+08:00||;True|2025-03-22T16:16:20.5712808+08:00||;True|2025-03-22T15:56:49.6683132+08:00||;True|2025-03-22T15:52:31.0442028+08:00||;True|2025-03-22T14:58:24.6661971+08:00||;True|2025-03-22T14:31:25.6401220+08:00||;True|2025-03-17T22:20:55.9814492+08:00||;True|2025-03-17T20:18:58.8930513+08:00||;True|2025-03-15T14:49:54.7776092+08:00||;True|2025-03-04T14:56:36.8156516+08:00||;True|2025-03-04T14:03:01.4762153+08:00||;True|2025-03-01T13:25:40.8549456+08:00||;True|2025-03-01T12:40:52.0649831+08:00||;True|2025-03-01T11:33:13.7154636+08:00||;True|2025-02-28T16:49:28.9187049+08:00||;True|2025-02-28T16:43:17.5832178+08:00||;True|2025-02-28T16:09:20.8077956+08:00||;True|2025-02-27T13:41:44.5879735+08:00||;True|2025-02-21T10:33:09.7726538+08:00||;True|2025-02-20T23:51:32.1400389+08:00||;True|2025-02-20T23:43:38.4536482+08:00||;True|2025-02-18T15:09:13.0567844+08:00||;True|2025-02-18T10:30:45.6690625+08:00||;True|2025-02-17T00:17:57.1953767+08:00||;True|2025-02-17T00:08:49.8489825+08:00||;True|2025-02-17T00:00:57.5511029+08:00||;True|2025-02-15T14:45:50.0466371+08:00||;True|2025-02-15T14:26:18.9252196+08:00||;True|2025-02-15T14:22:56.6840183+08:00||;True|2025-02-15T13:37:28.7588867+08:00||;True|2025-02-15T13:11:23.1821094+08:00||;True|2025-02-14T14:03:21.8968201+08:00||;True|2025-02-10T16:52:59.9322253+08:00||;</History>
    <History>True|2025-04-08T01:51:00.1295089Z||;True|2025-04-07T15:36:44.3718008+08:00||;True|2025-04-07T15:35:13.2684610+08:00||;True|2025-04-03T10:00:56.1299893+08:00||;True|2025-04-02T10:38:17.2340017+08:00||;True|2025-04-01T14:48:34.1671067+08:00||;True|2025-04-01T14:47:22.2881035+08:00||;True|2025-04-01T14:43:27.2800408+08:00||;True|2025-04-01T14:42:28.1987109+08:00||;True|2025-04-01T14:32:44.3686544+08:00||;True|2025-04-01T14:27:19.1197684+08:00||;True|2025-04-01T13:26:56.3796039+08:00||;True|2025-04-01T10:20:50.9479668+08:00||;True|2025-03-30T08:22:47.9431153+08:00||;True|2025-03-29T12:21:52.2204727+08:00||;True|2025-03-29T11:42:56.4404766+08:00||;True|2025-03-29T11:15:06.3696223+08:00||;True|2025-03-25T14:55:09.5690375+08:00||;True|2025-03-25T12:26:15.5805042+08:00||;True|2025-03-24T15:27:15.6778099+08:00||;True|2025-03-23T18:45:49.3752329+08:00||;True|2025-03-23T18:11:49.6069594+08:00||;True|2025-03-22T16:16:20.5712808+08:00||;True|2025-03-22T15:56:49.6683132+08:00||;True|2025-03-22T15:52:31.0442028+08:00||;True|2025-03-22T14:58:24.6661971+08:00||;True|2025-03-22T14:31:25.6401220+08:00||;True|2025-03-17T22:20:55.9814492+08:00||;True|2025-03-17T20:18:58.8930513+08:00||;True|2025-03-15T14:49:54.7776092+08:00||;True|2025-03-04T14:56:36.8156516+08:00||;True|2025-03-04T14:03:01.4762153+08:00||;True|2025-03-01T13:25:40.8549456+08:00||;True|2025-03-01T12:40:52.0649831+08:00||;True|2025-03-01T11:33:13.7154636+08:00||;True|2025-02-28T16:49:28.9187049+08:00||;True|2025-02-28T16:43:17.5832178+08:00||;True|2025-02-28T16:09:20.8077956+08:00||;True|2025-02-27T13:41:44.5879735+08:00||;True|2025-02-21T10:33:09.7726538+08:00||;True|2025-02-20T23:51:32.1400389+08:00||;True|2025-02-20T23:43:38.4536482+08:00||;True|2025-02-18T15:09:13.0567844+08:00||;True|2025-02-18T10:30:45.6690625+08:00||;True|2025-02-17T00:17:57.1953767+08:00||;True|2025-02-17T00:08:49.8489825+08:00||;True|2025-02-17T00:00:57.5511029+08:00||;True|2025-02-15T14:45:50.0466371+08:00||;True|2025-02-15T14:26:18.9252196+08:00||;True|2025-02-15T14:22:56.6840183+08:00||;True|2025-02-15T13:37:28.7588867+08:00||;True|2025-02-15T13:11:23.1821094+08:00||;True|2025-02-14T14:03:21.8968201+08:00||;True|2025-02-10T16:52:59.9322253+08:00||;</History>
    <LastFailureDetails />
  </PropertyGroup>
</Project>
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile3.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>
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile3.pubxml.user
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
  <PropertyGroup>
    <_PublishTargetUrl>E:\GIT\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_WMSServer\bin\Release\net6.0\publish\</_PublishTargetUrl>
    <History>True|2025-03-21T09:34:20.4988193Z;True|2025-03-21T17:20:47.4546962+08:00;True|2025-03-21T15:16:14.5782768+08:00;True|2025-03-21T12:03:22.7993576+08:00;True|2025-03-21T02:10:38.6772689+08:00;</History>
    <LastFailureDetails />
  </PropertyGroup>
</Project>
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/launchSettings.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
{
  "$schema": "https://json.schemastore.org/launchsettings.json",
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:39740",
      "sslPort": 0
    }
  },
  "profiles": {
    "WIDESEA_WMSServer": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      //"launchUrl": "swagger",
      "applicationUrl": "http://localhost:5230",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      //"launchUrl": "swagger",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj.user
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <NameOfLastUsedPublishProfile>E:\GET\BaiBuSanlou\CodeManagement\WMS\WIDESEA_WMSServer\WIDESEA_WMSServer\Properties\PublishProfiles\FolderProfile.pubxml</NameOfLastUsedPublishProfile>
    <Controller_SelectedScaffolderID>MvcControllerEmptyScaffolder</Controller_SelectedScaffolderID>
    <Controller_SelectedScaffolderCategoryPath>root/Common/MVC/Controller</Controller_SelectedScaffolderCategoryPath>
  </PropertyGroup>
</Project>
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.Development.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  }
}
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "urls": "http://*:5000",
  "MainDB": "DB_WIDESEA", //当前项目的主库,所对应的连接字符串的Enabled必须为true
  //连接字符串
  "ConnectionString": "Data Source=.;Initial Catalog=WIDESEA_WMSDB3F;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "ConnectionStringWCS": "Data Source=.;Initial Catalog=WIDESEA_WCSDB3F;User ID=sa;Password=P@ssw0rd;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,http://127.0.0.1:8081,http://localhost:8081"
  },
  //缓存设置
  "CacheSettings": {
    "UseRedis": false, //启用redis
    "RedisSettings": {
      "Address": "127.0.0.1:6379", //地址
      "Password": "123456", //Redis服务密码
      "Db": 9, //默认库
      "ClearRedis": true //是否每次启动都清除Redis缓存
    }
  },
  "ApiName": "WIDESEA",
  "ExpMinutes": 120,
  // éœ€è¦ç§»åº“的行
  "TransfertRows": "1,4,5,8",
  // å…è®¸å‡ºåº“的编码
  "OutBoundMateriel": [
    //{
    //  "MaterielCode": "CC01050001348",
    //  "ProductionLine": "ZJ-8",
    //  "ProcessCode": "CH001"
    //}
  ]
}
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_Menu.tsv
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,146 @@
[
  {
    "MenuName": "用户管理",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"}]",
    "Icon": "el-icon-user",
    "Description": null,
    "Enable": 1,
    "TableName": "/",
    "ParentId": 0,
    "Url": null,
    "OrderNo": 4000,
    "MenuType": 99,
    "Creater": "admin",
    "CreateDate": null,
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "MenuName": "用户管理",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": null,
    "Description": null,
    "Enable": 1,
    "TableName": "Sys_User",
    "ParentId": 1,
    "Url": "/Sys_User",
    "OrderNo": 2000,
    "MenuType": 99,
    "Creater": "admin",
    "CreateDate": null,
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "MenuName": "权限管理",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"编辑\",\"value\":\"Update\"}]",
    "Icon": "ivu-icon ivu-icon-ios-boat",
    "Description": null,
    "Enable": 1,
    "TableName": "/",
    "ParentId": 1,
    "Url": "/permission",
    "OrderNo": 1000,
    "MenuType": 99,
    "Creater": "admin",
    "CreateDate": null,
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "MenuName": "角色管理",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"新建\",\"value\":\"Add\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"编辑\",\"value\":\"Update\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": null,
    "Description": null,
    "Enable": 1,
    "TableName": "Sys_Role",
    "ParentId": 1,
    "Url": "/Sys_Role",
    "OrderNo": 900,
    "MenuType": 99,
    "Creater": "admin",
    "CreateDate": null,
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "MenuName": "系统设置",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"}]",
    "Icon": "el-icon-setting",
    "Description": null,
    "Enable": 1,
    "TableName": "/",
    "ParentId": 0,
    "Url": "/",
    "OrderNo": 0,
    "MenuType": 99,
    "Creater": "admin",
    "CreateDate": null,
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "MenuName": "菜单设置",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": null,
    "Description": null,
    "Enable": 1,
    "TableName": "Sys_Menu",
    "ParentId": 5,
    "Url": "/sysmenu",
    "OrderNo": 10,
    "MenuType": 99,
    "Creater": "admin",
    "CreateDate": null,
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "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,
    "Creater": "admin",
    "CreateDate": null,
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "MenuName": "日志管理",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"}]",
    "Icon": "el-icon-date",
    "Description": null,
    "Enable": 1,
    "TableName": "/",
    "ParentId": 0,
    "Url": "/",
    "OrderNo": 500,
    "MenuType": 99,
    "Creater": "admin",
    "CreateDate": null,
    "Modifier": null,
    "ModifyDate": null
  },
  {
    "MenuName": "接口日志",
    "Auth": "[{\"text\":\"查询\",\"value\":\"Search\"},{\"text\":\"删除\",\"value\":\"Delete\"},{\"text\":\"导出\",\"value\":\"Export\"}]",
    "Icon": null,
    "Description": null,
    "Enable": 1,
    "TableName": "Sys_Log",
    "ParentId": 8,
    "Url": "/Sys_Log/Manager",
    "OrderNo": 0,
    "MenuType": 99,
    "Creater": "admin",
    "CreateDate": null,
    "Modifier": null,
    "ModifyDate": null
  }
]
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_Tenant.tsv
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
[
]
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/wwwroot/WIDESEA_DB.DBSeed.Json/Sys_User.tsv
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
[
    {
        "UserName": "admin",
        "Role_Id": "1",
        "RoleName": "超级管理员",
        "PhoneNo": "",
        "Remark": "",
        "UserPwd": "j79rYYvCz4vdhcboB1Ausg==",
        "UserTrueName": "超级管理员",
        "DeptName": "",
        "Dept_Id": "0",
        "Email": "",
        "Enable": "1",
        "Gender": "1",
        "HeadImageUrl": "",
        "LastModifyPwdDate": "2024-04-16 19:58:55",
        "Address": "系统服务器",
        "AuditDate": "2024-04-16 00:54:06",
        "AuditStatus": "1",
        "Auditor": "超级管理员",
        "Token": "",
        "SystemType": "1",
        "Creater": "系统",
        "TenantId": 0
    }
]